mirror of
https://github.com/labwc/labwc.git
synced 2026-04-12 08:21:13 -04:00
Use separate function to add restore icons
This commit is contained in:
parent
1abe0fb0b9
commit
2aa4b55de2
3 changed files with 53 additions and 33 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,39 +178,53 @@ 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);
|
||||||
|
|
||||||
/* Alternate icon */
|
|
||||||
struct ssd_part *alticon_part, *althover_part;
|
|
||||||
if (alticon_buffer)
|
|
||||||
{
|
|
||||||
alticon_part = add_scene_buffer(part_list, type,
|
|
||||||
parent, alticon_buffer, icon_geo.x, icon_geo.y);
|
|
||||||
|
|
||||||
wlr_scene_buffer_set_dest_size(
|
|
||||||
wlr_scene_buffer_from_node(alticon_part->node),
|
|
||||||
icon_geo.width, icon_geo.height);
|
|
||||||
|
|
||||||
wlr_scene_node_set_enabled(alticon_part->node, false);
|
|
||||||
|
|
||||||
althover_part = add_scene_buffer(part_list, type,
|
|
||||||
parent, althover_buffer, hover_geo.x, hover_geo.y);
|
|
||||||
|
|
||||||
wlr_scene_buffer_set_dest_size(
|
|
||||||
wlr_scene_buffer_from_node(althover_part->node),
|
|
||||||
hover_geo.width, hover_geo.height);
|
|
||||||
|
|
||||||
wlr_scene_node_set_enabled(althover_part->node, false);
|
|
||||||
}
|
|
||||||
struct ssd_button *button = ssd_button_descriptor_create(button_root->node);
|
struct ssd_button *button = ssd_button_descriptor_create(button_root->node);
|
||||||
button->type = type;
|
button->type = type;
|
||||||
button->view = view;
|
button->view = view;
|
||||||
button->icon = icon_part->node;
|
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->hover = hover_part->node;
|
||||||
button->background = bg_rect->node;
|
button->background = bg_rect->node;
|
||||||
|
button->alticon = NULL;
|
||||||
|
button->althover = NULL;
|
||||||
return button_root;
|
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 */
|
||||||
|
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);
|
||||||
|
|
||||||
|
wlr_scene_buffer_set_dest_size(
|
||||||
|
wlr_scene_buffer_from_node(alticon_part->node),
|
||||||
|
icon_geo.width, icon_geo.height);
|
||||||
|
|
||||||
|
wlr_scene_node_set_enabled(alticon_part->node, false);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
wlr_scene_buffer_set_dest_size(
|
||||||
|
wlr_scene_buffer_from_node(althover_part->node),
|
||||||
|
hover_geo.width, hover_geo.height);
|
||||||
|
|
||||||
|
wlr_scene_node_set_enabled(althover_part->node, false);
|
||||||
|
|
||||||
|
button->alticon = alticon_part->node;
|
||||||
|
button->althover = althover_part->node;
|
||||||
|
}
|
||||||
|
|
||||||
struct ssd_part *
|
struct ssd_part *
|
||||||
ssd_get_part(struct wl_list *part_list, enum ssd_part_type type)
|
ssd_get_part(struct wl_list *part_list, enum ssd_part_type type)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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,10 +185,13 @@ 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);
|
||||||
wlr_scene_node_set_enabled (button->icon, !maximized);
|
if (button->alticon)
|
||||||
wlr_scene_node_set_enabled (button->alticon, maximized);
|
{
|
||||||
wlr_scene_node_set_enabled (button->hover, false);
|
wlr_scene_node_set_enabled (button->icon, !maximized);
|
||||||
wlr_scene_node_set_enabled (button->althover, false);
|
wlr_scene_node_set_enabled (button->alticon, maximized);
|
||||||
|
wlr_scene_node_set_enabled (button->hover, 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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue