Use separate function to add restore icons

This commit is contained in:
Simon Long 2023-12-03 13:55:08 +00:00
parent 1abe0fb0b9
commit 2aa4b55de2
3 changed files with 53 additions and 33 deletions

View file

@ -122,8 +122,10 @@ struct ssd_part *add_scene_button(
struct wl_list *part_list, enum ssd_part_type type, struct wl_list *part_list, enum ssd_part_type type,
struct wlr_scene_tree *parent, float *bg_color, struct wlr_scene_tree *parent, float *bg_color,
struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer, struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer,
struct wlr_buffer *alticon_buffer, struct wlr_buffer *althover_buffer,
int x, struct view *view); int x, struct view *view);
void
add_alt_button(struct wl_list *part_list, enum ssd_part_type type,
struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer);
struct ssd_part *add_scene_button_corner( struct ssd_part *add_scene_button_corner(
struct wl_list *part_list, enum ssd_part_type type, struct wl_list *part_list, enum ssd_part_type type,
enum ssd_part_type corner_type, struct wlr_scene_tree *parent, enum ssd_part_type corner_type, struct wlr_scene_tree *parent,

View file

@ -6,6 +6,7 @@
#include "labwc.h" #include "labwc.h"
#include "node.h" #include "node.h"
#include "ssd-internal.h" #include "ssd-internal.h"
#include "common/scene-helpers.h"
/* Internal helpers */ /* Internal helpers */
static void static void
@ -108,7 +109,7 @@ add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
-offset_x, -rc.theme->border_width); -offset_x, -rc.theme->border_width);
/* Finally just put a usual theme button on top, using an invisible hitbox */ /* Finally just put a usual theme button on top, using an invisible hitbox */
add_scene_button(part_list, type, parent, invisible, icon_buffer, hover_buffer, NULL, NULL, 0, view); add_scene_button(part_list, type, parent, invisible, icon_buffer, hover_buffer, 0, view);
return button_root; return button_root;
} }
@ -142,7 +143,6 @@ struct ssd_part *
add_scene_button(struct wl_list *part_list, enum ssd_part_type type, add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
struct wlr_scene_tree *parent, float *bg_color, struct wlr_scene_tree *parent, float *bg_color,
struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer, struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer,
struct wlr_buffer *alticon_buffer, struct wlr_buffer *althover_buffer,
int x, struct view *view) int x, struct view *view)
{ {
struct ssd_part *button_root = add_scene_part(part_list, type); struct ssd_part *button_root = add_scene_part(part_list, type);
@ -178,12 +178,31 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
wlr_scene_node_set_enabled(hover_part->node, false); 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;
button->icon = icon_part->node;
button->hover = hover_part->node;
button->background = bg_rect->node;
button->alticon = NULL;
button->althover = NULL;
return button_root;
}
void
add_alt_button(struct wl_list *part_list, enum ssd_part_type type,
struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer)
{
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 = lab_scene_tree_from_node (part->node);
/* Alternate icon */ /* Alternate icon */
struct ssd_part *alticon_part, *althover_part; struct wlr_box icon_geo = get_scale_box(icon_buffer,
if (alticon_buffer) SSD_BUTTON_WIDTH, rc.theme->title_height);
{
alticon_part = add_scene_buffer(part_list, type, struct ssd_part *alticon_part = add_scene_buffer(part_list, type,
parent, alticon_buffer, icon_geo.x, icon_geo.y); parent, icon_buffer, icon_geo.x, icon_geo.y);
wlr_scene_buffer_set_dest_size( wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(alticon_part->node), wlr_scene_buffer_from_node(alticon_part->node),
@ -191,24 +210,19 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
wlr_scene_node_set_enabled(alticon_part->node, false); wlr_scene_node_set_enabled(alticon_part->node, false);
althover_part = add_scene_buffer(part_list, type, struct wlr_box hover_geo = get_scale_box(hover_buffer,
parent, althover_buffer, hover_geo.x, hover_geo.y); 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);
wlr_scene_buffer_set_dest_size( wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(althover_part->node), wlr_scene_buffer_from_node(althover_part->node),
hover_geo.width, hover_geo.height); hover_geo.width, hover_geo.height);
wlr_scene_node_set_enabled(althover_part->node, false); wlr_scene_node_set_enabled(althover_part->node, false);
}
struct ssd_button *button = ssd_button_descriptor_create(button_root->node); button->alticon = alticon_part->node;
button->type = type; button->althover = althover_part->node;
button->view = view;
button->icon = icon_part->node;
button->alticon = alticon_buffer ? alticon_part->node : NULL;
button->althover = alticon_buffer ? althover_part->node : NULL;
button->hover = hover_part->node;
button->background = bg_rect->node;
return button_root;
} }
struct ssd_part * struct ssd_part *

View file

@ -92,12 +92,13 @@ ssd_titlebar_create(struct ssd *ssd)
LAB_SSD_BUTTON_WINDOW_MENU, LAB_SSD_PART_CORNER_TOP_LEFT, parent, LAB_SSD_BUTTON_WINDOW_MENU, LAB_SSD_PART_CORNER_TOP_LEFT, parent,
corner_top_left, menu_button_unpressed, menu_button_hover, 0, view); corner_top_left, menu_button_unpressed, menu_button_hover, 0, view);
add_scene_button(&subtree->parts, LAB_SSD_BUTTON_ICONIFY, parent, add_scene_button(&subtree->parts, LAB_SSD_BUTTON_ICONIFY, parent,
color, iconify_button_unpressed, iconify_button_hover, NULL, NULL, color, iconify_button_unpressed, iconify_button_hover,
width - SSD_BUTTON_WIDTH * 3, view); width - SSD_BUTTON_WIDTH * 3, view);
add_scene_button(&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE, parent, add_scene_button(&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE, parent,
color, maximize_button_unpressed, maximize_button_hover, color, maximize_button_unpressed, maximize_button_hover,
restore_button_unpressed, restore_button_hover,
width - SSD_BUTTON_WIDTH * 2, view); width - SSD_BUTTON_WIDTH * 2, view);
add_alt_button(&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE,
restore_button_unpressed, restore_button_hover);
add_scene_button_corner(&subtree->parts, add_scene_button_corner(&subtree->parts,
LAB_SSD_BUTTON_CLOSE, LAB_SSD_PART_CORNER_TOP_RIGHT, parent, LAB_SSD_BUTTON_CLOSE, LAB_SSD_PART_CORNER_TOP_RIGHT, parent,
corner_top_right, close_button_unpressed, close_button_hover, corner_top_right, close_button_unpressed, close_button_hover,
@ -184,11 +185,14 @@ ssd_titlebar_update(struct ssd *ssd)
wlr_scene_node_set_position(part->node, wlr_scene_node_set_position(part->node,
width - SSD_BUTTON_WIDTH * 2, 0); width - SSD_BUTTON_WIDTH * 2, 0);
struct ssd_button *button = node_ssd_button_from_node(part->node); struct ssd_button *button = node_ssd_button_from_node(part->node);
if (button->alticon)
{
wlr_scene_node_set_enabled (button->icon, !maximized); wlr_scene_node_set_enabled (button->icon, !maximized);
wlr_scene_node_set_enabled (button->alticon, maximized); wlr_scene_node_set_enabled (button->alticon, maximized);
wlr_scene_node_set_enabled (button->hover, false); wlr_scene_node_set_enabled (button->hover, false);
wlr_scene_node_set_enabled (button->althover, false); wlr_scene_node_set_enabled (button->althover, false);
} }
}
continue; continue;
case LAB_SSD_PART_CORNER_TOP_RIGHT: case LAB_SSD_PART_CORNER_TOP_RIGHT:
if (is_direct_child(part->node, subtree)) { if (is_direct_child(part->node, subtree)) {