src/ssd: refactor button hover and maximize toggle

This commit is contained in:
Consolatis 2023-12-06 22:07:06 +01:00 committed by Johan Malm
parent 02aa000b0d
commit 1149b31c7f
4 changed files with 63 additions and 44 deletions

View file

@ -154,10 +154,11 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
SSD_BUTTON_WIDTH, rc.theme->title_height, 0, 0, bg_color);
/* Icon */
struct wlr_scene_tree *icon_tree = wlr_scene_tree_create(parent);
struct wlr_box icon_geo = get_scale_box(icon_buffer,
SSD_BUTTON_WIDTH, rc.theme->title_height);
struct ssd_part *icon_part = add_scene_buffer(part_list, type,
parent, icon_buffer, icon_geo.x, icon_geo.y);
icon_tree, icon_buffer, icon_geo.x, icon_geo.y);
/* Make sure big icons are scaled down if necessary */
wlr_scene_buffer_set_dest_size(
@ -165,18 +166,18 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
icon_geo.width, icon_geo.height);
/* Hover icon */
struct wlr_scene_tree *hover_tree = wlr_scene_tree_create(parent);
wlr_scene_node_set_enabled(&hover_tree->node, false);
struct wlr_box hover_geo = get_scale_box(hover_buffer,
SSD_BUTTON_WIDTH, rc.theme->title_height);
struct ssd_part *hover_part = add_scene_buffer(part_list, type,
parent, hover_buffer, hover_geo.x, hover_geo.y);
hover_tree, hover_buffer, hover_geo.x, hover_geo.y);
/* Make sure big icons are scaled down if necessary */
wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(hover_part->node),
hover_geo.width, hover_geo.height);
wlr_scene_node_set_enabled(hover_part->node, false);
struct ssd_button *button = ssd_button_descriptor_create(button_root->node);
button->type = type;
button->view = view;
@ -185,6 +186,8 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
button->background = bg_rect->node;
button->toggled = NULL;
button->toggled_hover = NULL;
button->icon_tree = icon_tree;
button->hover_tree = hover_tree;
return button_root;
}
@ -194,14 +197,13 @@ add_toggled_icon(struct wl_list *part_list, enum ssd_part_type type,
{
struct ssd_part *part = ssd_get_part(part_list, type);
struct ssd_button *button = node_ssd_button_from_node(part->node);
struct wlr_scene_tree *parent = wlr_scene_tree_from_node(part->node);
/* Alternate icon */
struct wlr_box icon_geo = get_scale_box(icon_buffer,
SSD_BUTTON_WIDTH, rc.theme->title_height);
struct ssd_part *alticon_part = add_scene_buffer(part_list, type,
parent, icon_buffer, icon_geo.x, icon_geo.y);
button->icon_tree, icon_buffer, icon_geo.x, icon_geo.y);
wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(alticon_part->node),
@ -212,7 +214,7 @@ add_toggled_icon(struct wl_list *part_list, enum ssd_part_type type,
struct wlr_box hover_geo = get_scale_box(hover_buffer,
SSD_BUTTON_WIDTH, rc.theme->title_height);
struct ssd_part *althover_part = add_scene_buffer(part_list, type,
parent, hover_buffer, hover_geo.x, hover_geo.y);
button->hover_tree, hover_buffer, hover_geo.x, hover_geo.y);
wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(althover_part->node),