Alexander Orzechowski
d8585d661c
wlr_scene: Fix buffer damage for output state
...
We would transform the damage based on output state which might be
out of date.
1 year ago
Simon Ser
fe06e5f49a
Use wl_container_of() instead of casts
...
This slightly improves type safety.
The culprits were found with:
git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
1 year ago
Rose Hudson
214df8eda0
scene_output: optionally record and report timings
1 year ago
Kirill Primak
f4eaab12a0
input-method-v2: don't remove inert role resource
1 year ago
Kirill Primak
dc7686c114
session-lock: don't remove inert role resource
1 year ago
Kirill Primak
7f2ed1e62c
layer-shell: don't remove inert role resource
1 year ago
Kirill Primak
7d176b6237
subcompositor: don't remove inert role resource
...
Now that role objects are stored as resources, we can distinguish
the inert object case from it being destroyed by the client:
- When the resource is destroyed by the client, role_resource == NULL
- When the resource is made inert, role_resource != NULL but its
user_data is NULL
1 year ago
Simon Ser
7a9f8d8d6b
Use struct initializers instead of memset()
...
This is a bit more type-safe.
1 year ago
Kirill Primak
4966857f21
viewporter: check for an existing viewport
1 year ago
Simon Ser
6f8287128b
output: drop wlr_output_cursor_set_image()
...
This function takes a pointer to memory with a hardcoded format
and many parameters to describe the pixel buffer.
wlr_output_cursor_set_buffer() can be used instead.
1 year ago
Simon Ser
f8d70fbece
cursor: remove usage of wlr_output_cursor_set_image()
...
Stop using wlr_output_cursor_set_image() because it's getting
dropped. Instead, use wlr_output_cursor_set_buffer().
This mirrors what wlr_output_cursor_set_image() is doing
under-the-hood.
1 year ago
Simon Ser
0fc532f8de
cursor: remove wlr_cursor_set_image()
...
Superseded by wlr_cursor_set_buffer().
1 year ago
Simon Ser
18bafbfc57
xcursor-manager: drop wlr_xcursor_manager_set_cursor_image()
1 year ago
Simon Ser
71c87ff4b8
cursor: add wlr_cursor_set_buffer()
...
A saner replacement for wlr_cursor_set_image():
- Takes a wlr_buffer instead of numerous parameters and a hardcoded
format.
- The scale is not used to filter outputs.
- A ref to the buffer is kept to apply it to new outputs.
1 year ago
Simon Ser
bb91787b5f
cursor: stop using set_image() in wlr_cursor_unset_image()
...
set_image() will go away.
1 year ago
Manuel Stoeckl
bbd53b3b46
screencopy-v1: fix logical->physical region transform
...
This now matches the transformations used for e.g. cursor scissor
regions and damage.
1 year ago
Alexander Orzechowski
57a0313779
wlr_scene: Don't recompute node location during rendering
...
We already compute it during the render list creation, we should cache
it and re-use the value.
1 year ago
Alexander Orzechowski
48f2a7a3a1
wlr_scene: Simplify direct scanout handling
...
By adding a sent_feedback bool into the list entry that we can mutate
we no longer need to maintain this `sent_direct_scanout_feedback` variable.
sent_feedback will also be useful for output layers.
1 year ago
Alexander Orzechowski
9613b3bc8a
wlr_scene: Wrap render_list nodes in struct
...
We will be able to add more state here
1 year ago
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
1 year ago
Simon Ser
d5581e42d4
cursor: add cursor_update_outputs()
...
Sets the cursor image for each output depending on the wlr_cursor
state.
1 year ago
Simon Ser
d1d6cd9008
cursor: keep track of XCursor manager and name
...
Will be useful to apply the current cursor to new outputs.
1 year ago
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.
1 year ago
Simon Ser
c46fabe45c
cursor: use wlr_cursor_unset_image() in wlr_cursor_set_surface()
1 year ago
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.
1 year ago
Alexander Orzechowski
8243399385
output: Set output mode during main commit
...
Removes duplication across all the backends to finally apply the mode
to the output.
1 year ago
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
1 year ago
Kirill Primak
71b57b8d27
fullscreen-shell: set surface role
1 year ago
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.
1 year ago
Simon Ser
8a5b5e6f28
compositor: listen to role_resource destroy signal
...
Call wlr_surface_destroy_role_object() when the role_resource is
destroyed.
1 year ago
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.
1 year ago
Simon Ser
00f1870d35
input-method-v2: add popup_surface_from_resource()
...
This checks the resource type before casting its user data pointer.
1 year ago
Kirill Primak
fc9b58e84d
compositor: don't call role unmap hook without an object
1 year ago
Kirill Primak
0f67580aab
compositor: introduce wlr_surface_set_role_object()
1 year ago
Kirill Primak
0040c78c0b
compositor: fix wlr_surface_set_role() error messages
1 year ago
Simon Ser
d59749aa44
cursor: add support for animated XCursor
1 year ago
Simon Ser
6dd8b092e9
output/swapchain: fix error return value types
...
This function returns a bool, not a pointer.
1 year ago
Alexander Orzechowski
b5eaa47049
scene: Use wlr_output_state_copy for direct scanout path
1 year ago
Alexander Orzechowski
4b7c526578
output: Introduce wlr_output_state_copy()
1 year ago
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
1 year ago
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.
1 year ago
Simon Ser
b625a13156
output: attach buffer to state in output_ensure_buffer()
1 year ago
Alexander Orzechowski
2ac31fc630
wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
1 year ago
Alexander Orzechowski
64c0272f81
output_state: Gamma lut should be freed only if committed
...
We consider state that is not committed to be uninitialized.
1 year ago
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.
1 year ago
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
1 year ago
Alexander Orzechowski
58a2f8bd5c
wlr_scene: Clear damage ring on transform change
1 year ago
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
1 year ago
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
1 year ago
Alexander Orzechowski
4391845910
wlr_damage_ring_set_bounds: Ignore duplicate size requests
1 year ago