resize on border
This commit is contained in:
+20
-11
@@ -7,22 +7,31 @@
|
|||||||
struct absinthe_toplevel *absinthe_toplevel_at(struct absinthe_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy)
|
struct absinthe_toplevel *absinthe_toplevel_at(struct absinthe_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy)
|
||||||
{
|
{
|
||||||
struct wlr_scene_node *node = wlr_scene_node_at(&server->scene->tree.node, lx, ly, sx, sy);
|
struct wlr_scene_node *node = wlr_scene_node_at(&server->scene->tree.node, lx, ly, sx, sy);
|
||||||
if (!node || node->type != WLR_SCENE_NODE_BUFFER) {
|
if (!node) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_from_node(node);
|
switch (node->type) {
|
||||||
struct wlr_scene_surface *scene_surface = wlr_scene_surface_try_from_buffer(scene_buffer);
|
case WLR_SCENE_NODE_BUFFER:
|
||||||
if (!scene_surface) {
|
struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_from_node(node);
|
||||||
|
struct wlr_scene_surface *scene_surface = wlr_scene_surface_try_from_buffer(scene_buffer);
|
||||||
|
if (!scene_surface) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*surface = scene_surface->surface;
|
||||||
|
struct wlr_scene_tree *tree = node->parent;
|
||||||
|
while (tree != NULL && tree->node.data == NULL) {
|
||||||
|
tree = tree->node.parent;
|
||||||
|
}
|
||||||
|
return tree->node.data;
|
||||||
|
break;
|
||||||
|
case WLR_SCENE_NODE_RECT:
|
||||||
|
return node->data;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*surface = scene_surface->surface;
|
|
||||||
struct wlr_scene_tree *tree = node->parent;
|
|
||||||
while (tree != NULL && tree->node.data == NULL) {
|
|
||||||
tree = tree->node.parent;
|
|
||||||
}
|
|
||||||
return tree->node.data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void absinthe_toplevel_set_position(struct absinthe_toplevel *toplevel, int32_t x, int32_t y)
|
void absinthe_toplevel_set_position(struct absinthe_toplevel *toplevel, int32_t x, int32_t y)
|
||||||
|
|||||||
Reference in New Issue
Block a user