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 */
|
/* Tree for built in menu */
|
||||||
struct wlr_scene_tree *menu_tree;
|
struct wlr_scene_tree *menu_tree;
|
||||||
|
|
||||||
|
struct multi_rect *osd_preview_outline;
|
||||||
|
|
||||||
/* Workspaces */
|
/* Workspaces */
|
||||||
struct wl_list workspaces; /* struct workspace.link */
|
struct wl_list workspaces; /* struct workspace.link */
|
||||||
struct workspace *workspace_current;
|
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
|
void
|
||||||
osd_finish(struct server *server)
|
osd_finish(struct server *server)
|
||||||
{
|
{
|
||||||
|
|
@ -91,6 +117,11 @@ osd_finish(struct server *server)
|
||||||
destroy_osd_nodes(output);
|
destroy_osd_nodes(output);
|
||||||
wlr_scene_node_set_enabled(&output->osd_tree->node, false);
|
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
|
void
|
||||||
|
|
@ -158,6 +189,7 @@ osd_update(struct server *server)
|
||||||
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
||||||
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
||||||
cairo_stroke(cairo);
|
cairo_stroke(cairo);
|
||||||
|
osd_update_preview_outlines(view);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
y += OSD_ITEM_HEIGHT;
|
y += OSD_ITEM_HEIGHT;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue