Simon Ser
53b07b5b72
cursor: set image for new outputs
...
When an output is added to wlr_cursor, update its cursor image.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/2119
2023-06-30 17:24:44 +00:00
Simon Ser
d5581e42d4
cursor: add cursor_update_outputs()
...
Sets the cursor image for each output depending on the wlr_cursor
state.
2023-06-30 17:24:44 +00:00
Simon Ser
d1d6cd9008
cursor: keep track of XCursor manager and name
...
Will be useful to apply the current cursor to new outputs.
2023-06-30 17:24:44 +00:00
Simon Ser
69c44de22f
cursor: track surface globally, instead of per-output
...
Most of the surface-related state does not need to be per-output.
Move it to wlr_cursor_state.
2023-06-30 17:24:44 +00:00
Simon Ser
c46fabe45c
cursor: use wlr_cursor_unset_image() in wlr_cursor_set_surface()
2023-06-30 17:24:44 +00:00
Simon Ser
f0b8a68654
cursor: store wlr_cursor inline in wlr_cursor_state
...
Removes one allocation, makes this a bit more consistent with the
rest of wlroots.
2023-06-30 17:24:44 +00:00
Alexander Orzechowski
8243399385
output: Set output mode during main commit
...
Removes duplication across all the backends to finally apply the mode
to the output.
2023-06-27 11:47:58 -04:00
Alexander Orzechowski
ea3c6fde3a
wlr_scene: Add opaque region blend mode optimization
...
If we are only rendering within a region of the surface that is
advertised as opaque, we can choose no blending
2023-06-27 14:02:25 +00:00
Kirill Primak
71b57b8d27
fullscreen-shell: set surface role
2023-06-23 22:09:54 +03:00
Simon Ser
be05097968
output: add wlr_output_state_init()
...
This changes the semantics of wlr_output_state. Instead of having
fields with uninitialized memory when missing from the committed
bitflag, all fields are always initialized (and maybe NULL/empty),
just like we do in wlr_surface_state. This reduces the chances of
footguns when reading a field, and removes the need to check for
the committed bitfield everywhere.
A new wlr_output_state_init() function takes care of initializing
the Pixman region.
2023-06-23 18:07:26 +00:00
Simon Ser
8a5b5e6f28
compositor: listen to role_resource destroy signal
...
Call wlr_surface_destroy_role_object() when the role_resource is
destroyed.
2023-06-23 14:33:26 +02:00
Simon Ser
89cb484220
compositor: replace role_data with role_resource
...
This increases type safety, makes it more obvious that role_data
must represent the role object, and will allow for automatic
cleanup when the resource is destroyed.
2023-06-23 14:23:27 +02:00
Simon Ser
00f1870d35
input-method-v2: add popup_surface_from_resource()
...
This checks the resource type before casting its user data pointer.
2023-06-23 14:14:36 +02:00
Kirill Primak
fc9b58e84d
compositor: don't call role unmap hook without an object
2023-06-23 11:54:05 +00:00
Kirill Primak
0f67580aab
compositor: introduce wlr_surface_set_role_object()
2023-06-23 11:54:05 +00:00
Kirill Primak
0040c78c0b
compositor: fix wlr_surface_set_role() error messages
2023-06-23 11:54:05 +00:00
Simon Ser
d59749aa44
cursor: add support for animated XCursor
2023-06-22 14:55:32 +02:00
Simon Ser
6dd8b092e9
output/swapchain: fix error return value types
...
This function returns a bool, not a pointer.
2023-06-22 13:55:45 +02:00
Alexander Orzechowski
b5eaa47049
scene: Use wlr_output_state_copy for direct scanout path
2023-06-22 11:56:30 +02:00
Alexander Orzechowski
4b7c526578
output: Introduce wlr_output_state_copy()
2023-06-22 11:56:20 +02:00
Simon Ser
1e68e1f661
seat: fix keyboard/pointer/touch resource destroy
...
We need to always unlink the resource, even if it's already inert.
seat_client_destroy_*() may be called multiple times on the same
resource.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3638
2023-06-20 20:14:49 +00:00
Simon Ser
c4d4409deb
output: stop using wlr_output.back_buffer in output_ensure_buffer()
...
This allows us to use the new render pass API, and drops some
implicit state usage.
2023-06-20 16:33:41 +00:00
Simon Ser
b625a13156
output: attach buffer to state in output_ensure_buffer()
2023-06-20 16:33:41 +00:00
Alexander Orzechowski
2ac31fc630
wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
2023-06-20 09:04:35 +00:00
Alexander Orzechowski
64c0272f81
output_state: Gamma lut should be freed only if committed
...
We consider state that is not committed to be uninitialized.
2023-06-19 00:19:50 -04:00
Simon Ser
220402b717
cursor: add wlr_cursor_unset_image()
...
It's pretty awkward to call wlr_cursor_set_image() with 6 zeroes.
Hide that awkwardness in wlroots.
2023-06-15 18:40:33 +02:00
Simon Ser
da04b066ea
cursor: add wlr_cursor_set_xcursor()
...
This keeps track of the last set XCursor. If it hasn't changed,
skip the texture upload.
In the future, support for animated XCursors can be added.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3436
2023-06-15 18:28:43 +02:00
Alexander Orzechowski
58a2f8bd5c
wlr_scene: Clear damage ring on transform change
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
61667404ce
wlr_scene: Clear damage ring on scale change
...
If we were trying to change the scale in wlr_scene_output_build_state,
we would be using incorrect damage
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
96b95bf775
wlr_scene: Reset damage ring bounds every frame
...
This fixes damage issues when a output state attempts to change
the transformed size in some way
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
4391845910
wlr_damage_ring_set_bounds: Ignore duplicate size requests
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
3896b6b107
wlr_scene: Fix transforms with non 1 scale
...
wlr_region_transform / wlr_box_transform want unscaled coordinates here
2023-06-15 14:57:51 +00:00
Kirill Primak
753f3cc4fa
compositor: add wlr_surface_role.no_object
...
This commit allows to make a role as not represented by an object,
which fixes calling role commit handlers for roles like cursor
surfaces.
Fixes: 099b9de752
2023-06-14 14:06:28 +00:00
Simon Ser
670915eeea
output: add wlr_output_state_set_layers()
2023-06-13 12:02:49 +00:00
Alexander Orzechowski
0925a500d1
wlr_scene: Don't use direct scanout if trying to commit a new render_format
...
Found by inspection.
2023-06-12 20:30:09 -04:00
Alexander Orzechowski
a09bb1314d
wlr_output_state: Consider gamma_lut uninitialized if not committed
2023-06-12 18:24:00 +00:00
Alexander Orzechowski
b80e67d6e6
wlr_output_state: Consider buffer uninitialized if not committed
2023-06-12 18:24:00 +00:00
Simon Ser
6e8fb5509f
cursor: only reset the cursor when the surface changes
...
If the set_cursor request is used with the same surface, don't call
cursor_output_cursor_reset_image(). That function sends
wl_surface.leave and can cause an infinite feedback loop with some
clients (submitting a LoDPI cursor when the surface leaves an HiDPI
output).
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3669
2023-06-12 12:42:31 +00:00
Alexander Orzechowski
05dd08afe5
scene: introduce wlr_scene_output_build_state()
2023-06-12 14:13:09 +02:00
Alexander Orzechowski
7e67b8152b
scene: Don't rely on output current state during rendering
...
In the next commit, state such as scale, transform, width/height that
we gather from the output might be outdated and incorrect.
2023-06-12 14:13:02 +02:00
Alexander Orzechowski
ae7bad86dd
output: introduce wlr_output_state_set_damage()
2023-06-12 14:12:47 +02:00
Simon Ser
36376e2ddf
gamma-control-v1: stop applying gamma LUTs implicitly
...
Make the compositor responsible for doing that, so that they can
properly integrate with their output commit sequence.
2023-06-08 18:47:46 +00:00
Simon Ser
ec9b79ef19
gamma-control-v1: add wlr_gamma_control_v1_send_failed_and_destroy()
2023-06-08 18:47:46 +00:00
Simon Ser
026fc6eda0
gamma-control-v1: add wlr_gamma_control_v1_apply()
2023-06-08 18:47:46 +00:00
Simon Ser
5d5cf34486
output: add wlr_output_state_set_gamma_lut()
2023-06-08 18:47:46 +00:00
Simon Ser
6e635d2fd3
gamma-control-v1: add wlr_gamma_control_manager_v1_get_control()
2023-06-08 18:47:46 +00:00
Simon Ser
70c1a57248
gamma-control-v1: introduce set_gamma event
2023-06-08 18:47:46 +00:00
Kirill Primak
63f3802e0f
subcompositor: set role_data with wlr_surface_set_role()
2023-06-08 20:03:18 +02:00
Kirill Primak
24a479a501
drag: don't set icon's role_data
...
Currently, an icon surface's role_data is set manually to a struct
wlr_drag_icon, which is hacky, incorrect (as role_data is supposed
to be the surface's role object, and drag icons don't have them), and
will be disallowed by future changes.
2023-06-08 20:03:18 +02:00
Kirill Primak
31d958f70a
cursor: fix applying hotspot offset
...
"On surface.attach requests to the pointer surface, hotspot_x and
hotspot_y are _decremented_ by the x and y parameters passed to the
request."
2023-06-07 10:35:49 +03:00