summaryrefslogtreecommitdiff
path: root/wlr_scene.c
diff options
context:
space:
mode:
authorAlexander Orzechowski <[email protected]>2022-05-19 14:24:05 -0400
committerAlexander Orzechowski <[email protected]>2022-05-19 14:24:05 -0400
commitd713e72338101cd36cdddb94b685771a24fcdde5 (patch)
treee544e601a3054ac1ab5dff2b35919568e3745543 /wlr_scene.c
parent6fe1bda02bf6525e9ee4d5ca828fb68fbd39c32c (diff)
wlr_scene: Add a way to choose when input interactions happen on a buffer
Diffstat (limited to 'wlr_scene.c')
-rw-r--r--wlr_scene.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/wlr_scene.c b/wlr_scene.c
index 87f571d..5c110c3 100644
--- a/wlr_scene.c
+++ b/wlr_scene.c
@@ -771,12 +771,22 @@ struct wlr_scene_node *wlr_scene_node_at(struct wlr_scene_node *node,
struct wlr_scene_surface *scene_surface = wlr_scene_surface_from_node(node);
intersects = wlr_surface_point_accepts_input(scene_surface->surface, lx, ly);
break;
- case WLR_SCENE_NODE_RECT:
- case WLR_SCENE_NODE_BUFFER:;
+ case WLR_SCENE_NODE_RECT:;
int width, height;
scene_node_get_size(node, &width, &height);
intersects = lx >= 0 && lx < width && ly >= 0 && ly < height;
break;
+ case WLR_SCENE_NODE_BUFFER:;
+ struct wlr_scene_buffer *scene_buffer = scene_buffer_from_node(node);
+
+ if (scene_buffer->point_accepts_input) {
+ intersects = scene_buffer->point_accepts_input(scene_buffer, lx, ly);
+ } else {
+ int width, height;
+ scene_node_get_size(node, &width, &height);
+ intersects = lx >= 0 && lx < width && ly >= 0 && ly < height;
+ }
+ break;
}
if (intersects) {