mirror of
https://github.com/labwc/labwc.git
synced 2025-11-05 13:29:58 -05:00
Chase wlroots: every scene_node parent is now a tree
Chases wlroots ccd0f85c2a36308e35b153c7f9653abac7659af3 wlr_scene: Only allow parenting on a wlr_scene_tree
This commit is contained in:
parent
b7c9d0e055
commit
2ed7a10779
20 changed files with 97 additions and 93 deletions
|
|
@ -62,31 +62,31 @@ ssd_get_part_type(struct view *view, struct wlr_scene_node *node)
|
|||
}
|
||||
|
||||
struct wl_list *part_list = NULL;
|
||||
struct wlr_scene_node *grandparent =
|
||||
node->parent ? node->parent->parent : NULL;
|
||||
struct wlr_scene_tree *grandparent =
|
||||
node->parent ? node->parent->node.parent : NULL;
|
||||
|
||||
/* active titlebar */
|
||||
if (node->parent == &view->ssd.titlebar.active.tree->node) {
|
||||
if (node->parent == view->ssd.titlebar.active.tree) {
|
||||
part_list = &view->ssd.titlebar.active.parts;
|
||||
} else if (grandparent == &view->ssd.titlebar.active.tree->node) {
|
||||
} else if (grandparent == view->ssd.titlebar.active.tree) {
|
||||
part_list = &view->ssd.titlebar.active.parts;
|
||||
|
||||
/* extents */
|
||||
} else if (node->parent == &view->ssd.extents.tree->node) {
|
||||
} else if (node->parent == view->ssd.extents.tree) {
|
||||
part_list = &view->ssd.extents.parts;
|
||||
|
||||
/* active border */
|
||||
} else if (node->parent == &view->ssd.border.active.tree->node) {
|
||||
} else if (node->parent == view->ssd.border.active.tree) {
|
||||
part_list = &view->ssd.border.active.parts;
|
||||
|
||||
/* inactive titlebar */
|
||||
} else if (node->parent == &view->ssd.titlebar.inactive.tree->node) {
|
||||
} else if (node->parent == view->ssd.titlebar.inactive.tree) {
|
||||
part_list = &view->ssd.titlebar.inactive.parts;
|
||||
} else if (grandparent == &view->ssd.titlebar.inactive.tree->node) {
|
||||
} else if (grandparent == view->ssd.titlebar.inactive.tree) {
|
||||
part_list = &view->ssd.titlebar.inactive.parts;
|
||||
|
||||
/* inactive border */
|
||||
} else if (node->parent == &view->ssd.border.inactive.tree->node) {
|
||||
} else if (node->parent == view->ssd.border.inactive.tree) {
|
||||
part_list = &view->ssd.border.inactive.parts;
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ ssd_create(struct view *view)
|
|||
return;
|
||||
}
|
||||
|
||||
view->ssd.tree = wlr_scene_tree_create(&view->scene_tree->node);
|
||||
view->ssd.tree = wlr_scene_tree_create(view->scene_tree);
|
||||
wlr_scene_node_lower_to_bottom(&view->ssd.tree->node);
|
||||
ssd_extents_create(view);
|
||||
ssd_border_create(view);
|
||||
|
|
|
|||
|
|
@ -18,18 +18,18 @@ ssd_border_create(struct view *view)
|
|||
int full_width = width + 2 * theme->border_width;
|
||||
|
||||
float *color;
|
||||
struct wlr_scene_node *parent;
|
||||
struct wlr_scene_tree *parent;
|
||||
struct ssd_sub_tree *subtree;
|
||||
|
||||
FOR_EACH_STATE(view, subtree) {
|
||||
subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
parent = &subtree->tree->node;
|
||||
wlr_scene_node_set_position(parent, -theme->border_width, 0);
|
||||
subtree->tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
parent = subtree->tree;
|
||||
wlr_scene_node_set_position(&parent->node, -theme->border_width, 0);
|
||||
if (subtree == &view->ssd.border.active) {
|
||||
color = theme->window_active_border_color;
|
||||
} else {
|
||||
color = theme->window_inactive_border_color;
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&subtree->parts);
|
||||
add_scene_rect(&subtree->parts, LAB_SSD_PART_LEFT, parent,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
static struct ssd_part *
|
||||
add_extent(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent)
|
||||
struct wlr_scene_tree *parent)
|
||||
{
|
||||
float invisible[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
struct ssd_part *part = add_scene_part(part_list, type);
|
||||
|
|
@ -40,13 +40,14 @@ ssd_extents_create(struct view *view)
|
|||
int extended_area = EXTENDED_AREA;
|
||||
int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
|
||||
|
||||
view->ssd.extents.tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
struct wlr_scene_node *parent = &view->ssd.extents.tree->node;
|
||||
view->ssd.extents.tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
struct wlr_scene_tree *parent = view->ssd.extents.tree;
|
||||
if (view->maximized || view->fullscreen) {
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&view->ssd.extents.parts);
|
||||
wlr_scene_node_set_position(parent, -(theme->border_width + extended_area),
|
||||
wlr_scene_node_set_position(&parent->node,
|
||||
-(theme->border_width + extended_area),
|
||||
-(theme->title_height + theme->border_width + extended_area));
|
||||
|
||||
/* Initialize parts and set constant values for targeted geometry */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ add_scene_part(struct wl_list *part_list, enum ssd_part_type type)
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_rect(struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, int width, int height,
|
||||
struct wlr_scene_tree *parent, int width, int height,
|
||||
int x, int y, float color[4])
|
||||
{
|
||||
/*
|
||||
|
|
@ -36,7 +36,7 @@ add_scene_rect(struct wl_list *list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *buffer,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *buffer,
|
||||
int x, int y)
|
||||
{
|
||||
struct ssd_part *part = add_scene_part(list, type);
|
||||
|
|
@ -47,7 +47,7 @@ add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
|
|||
|
||||
static void
|
||||
finish_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *icon_buffer)
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *icon_buffer)
|
||||
{
|
||||
float hover_bg[4] = {0.15f, 0.15f, 0.15f, 0.3f};
|
||||
|
||||
|
|
@ -65,12 +65,12 @@ finish_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_buffer *icon_buffer, int x)
|
||||
{
|
||||
struct ssd_part *button_root = add_scene_part(part_list, type);
|
||||
parent = &wlr_scene_tree_create(parent)->node;
|
||||
button_root->node = parent;
|
||||
parent = wlr_scene_tree_create(parent);
|
||||
button_root->node = &parent->node;
|
||||
wlr_scene_node_set_position(button_root->node, x, 0);
|
||||
|
||||
int offset_x;
|
||||
|
|
@ -95,12 +95,12 @@ add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, float *bg_color,
|
||||
struct wlr_scene_tree *parent, float *bg_color,
|
||||
struct wlr_buffer *icon_buffer, int x)
|
||||
{
|
||||
struct ssd_part *button_root = add_scene_part(part_list, type);
|
||||
parent = &wlr_scene_tree_create(parent)->node;
|
||||
button_root->node = parent;
|
||||
parent = wlr_scene_tree_create(parent);
|
||||
button_root->node = &parent->node;
|
||||
wlr_scene_node_set_position(button_root->node, x, 0);
|
||||
|
||||
struct ssd_part *part;
|
||||
|
|
|
|||
|
|
@ -20,15 +20,15 @@ ssd_titlebar_create(struct view *view)
|
|||
int width = view->w;
|
||||
|
||||
float *color;
|
||||
struct wlr_scene_node *parent;
|
||||
struct wlr_scene_tree *parent;
|
||||
struct wlr_buffer *corner_top_left;
|
||||
struct wlr_buffer *corner_top_right;
|
||||
|
||||
struct ssd_sub_tree *subtree;
|
||||
FOR_EACH_STATE(view, subtree) {
|
||||
subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
parent = &subtree->tree->node;
|
||||
wlr_scene_node_set_position(parent, 0, -theme->title_height);
|
||||
subtree->tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
parent = subtree->tree;
|
||||
wlr_scene_node_set_position(&parent->node, 0, -theme->title_height);
|
||||
if (subtree == &view->ssd.titlebar.active) {
|
||||
color = theme->window_active_title_bg_color;
|
||||
corner_top_left = &theme->corner_top_left_active_normal->base;
|
||||
|
|
@ -37,7 +37,7 @@ ssd_titlebar_create(struct view *view)
|
|||
color = theme->window_inactive_title_bg_color;
|
||||
corner_top_left = &theme->corner_top_left_inactive_normal->base;
|
||||
corner_top_right = &theme->corner_top_right_inactive_normal->base;
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&subtree->parts);
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ ssd_titlebar_create(struct view *view)
|
|||
static bool
|
||||
is_direct_child(struct wlr_scene_node *node, struct ssd_sub_tree *subtree)
|
||||
{
|
||||
return node->parent == &subtree->tree->node;
|
||||
return node->parent == subtree->tree;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -241,7 +241,7 @@ ssd_update_title(struct view *view)
|
|||
if (!part) {
|
||||
/* Initialize part and wlr_scene_buffer without attaching a buffer */
|
||||
part = add_scene_part(&subtree->parts, LAB_SSD_PART_TITLE);
|
||||
part->node = &wlr_scene_buffer_create(&subtree->tree->node, NULL)->node;
|
||||
part->node = &wlr_scene_buffer_create(subtree->tree, NULL)->node;
|
||||
}
|
||||
|
||||
/* Generate and update the lab_data_buffer, drops the old buffer */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue