diff options
author | Alexander Orzechowski <[email protected]> | 2022-05-19 14:24:05 -0400 |
---|---|---|
committer | Alexander Orzechowski <[email protected]> | 2022-05-19 14:24:05 -0400 |
commit | d713e72338101cd36cdddb94b685771a24fcdde5 (patch) | |
tree | e544e601a3054ac1ab5dff2b35919568e3745543 /wlr_scene.c | |
parent | 6fe1bda02bf6525e9ee4d5ca828fb68fbd39c32c (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.c | 14 |
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) { |