mirror of
https://github.com/labwc/labwc.git
synced 2025-11-03 09:01:51 -05:00
src/osd.c: Add preview outlines
This commit is contained in:
parent
fb36463c34
commit
b39020213a
2 changed files with 34 additions and 0 deletions
|
|
@ -202,6 +202,8 @@ struct server {
|
|||
/* Tree for built in menu */
|
||||
struct wlr_scene_tree *menu_tree;
|
||||
|
||||
struct multi_rect *osd_preview_outline;
|
||||
|
||||
/* Workspaces */
|
||||
struct wl_list workspaces; /* struct workspace.link */
|
||||
struct workspace *workspace_current;
|
||||
|
|
|
|||
32
src/osd.c
32
src/osd.c
|
|
@ -83,6 +83,32 @@ destroy_osd_nodes(struct output *output)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
osd_update_preview_outlines(struct view *view)
|
||||
{
|
||||
/* Create / Update preview outline tree */
|
||||
struct server *server = view->server;
|
||||
struct multi_rect *rect = view->server->osd_preview_outline;
|
||||
if (!rect) {
|
||||
int line_width = server->theme->osd_border_width;
|
||||
float *colors[] = {
|
||||
server->theme->osd_bg_color,
|
||||
server->theme->osd_label_text_color,
|
||||
server->theme->osd_bg_color
|
||||
};
|
||||
rect = multi_rect_create(&server->scene->tree, colors, line_width);
|
||||
wlr_scene_node_place_above(&rect->tree->node, &server->menu_tree->node);
|
||||
server->osd_preview_outline = rect;
|
||||
}
|
||||
/* A multi_rect consists of 3 layered rects */
|
||||
int line_width = rect->line_width * 3;
|
||||
struct wlr_box geo = ssd_max_extents(view);
|
||||
multi_rect_set_size(rect,
|
||||
geo.width + line_width * 2, geo.height + line_width * 2);
|
||||
wlr_scene_node_set_position(&rect->tree->node,
|
||||
geo.x - line_width, geo.y - line_width);
|
||||
}
|
||||
|
||||
void
|
||||
osd_finish(struct server *server)
|
||||
{
|
||||
|
|
@ -91,6 +117,11 @@ osd_finish(struct server *server)
|
|||
destroy_osd_nodes(output);
|
||||
wlr_scene_node_set_enabled(&output->osd_tree->node, false);
|
||||
}
|
||||
if (server->osd_preview_outline) {
|
||||
/* Destroy the whole multi_rect so we can easily react to new themes */
|
||||
wlr_scene_node_destroy(&server->osd_preview_outline->tree->node);
|
||||
server->osd_preview_outline = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -158,6 +189,7 @@ osd_update(struct server *server)
|
|||
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
||||
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
||||
cairo_stroke(cairo);
|
||||
osd_update_preview_outlines(view);
|
||||
break;
|
||||
}
|
||||
y += OSD_ITEM_HEIGHT;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue