Fix dynamic output based scaling for menu and SSD

wlr_scene_buffers need an additional wlr_scene_buffer_set_source_box()
to be scaled correctly by wlroots based on the output scale.

With this commit the buffers are now scaled correctly but, especially
on higher scale factors, may be a bit blurry.

In the future we likely want a dynamic font label generator based
on the maximal scale of all the outputs the specific buffer is currently on.

Some inspiration for that could be
https://github.com/Nefsen402/sway/blob/scene-graph/sway/sway_text_buffer.c

Fixes #348
This commit is contained in:
Consolatis 2022-05-29 18:34:25 +02:00
parent 78dc2ea7fe
commit e87aa19066
3 changed files with 31 additions and 7 deletions

View file

@ -75,6 +75,17 @@ menu_get_by_id(const char *id)
return NULL;
}
static struct wlr_scene_node *
create_scaling_buffer(struct wlr_scene_node *parent, struct wlr_buffer *buffer)
{
struct wlr_scene_buffer *scene_buffer =
wlr_scene_buffer_create(parent, buffer);
/* Make sure output scaling works correctly */
struct wlr_fbox source_box = { 0, 0, buffer->width, buffer->height };
wlr_scene_buffer_set_source_box(scene_buffer, &source_box);
return &scene_buffer->node;
}
static struct menuitem *
item_create(struct menu *menu, const char *text)
{
@ -126,10 +137,10 @@ item_create(struct menu *menu, const char *text)
theme->menu_items_active_bg_color)->node;
/* Font nodes */
menuitem->normal.text = &wlr_scene_buffer_create(
menuitem->normal.background, &menuitem->normal.buffer->base)->node;
menuitem->selected.text = &wlr_scene_buffer_create(
menuitem->selected.background, &menuitem->selected.buffer->base)->node;
menuitem->normal.text = create_scaling_buffer(
menuitem->normal.background, &menuitem->normal.buffer->base);
menuitem->selected.text = create_scaling_buffer(
menuitem->selected.background, &menuitem->selected.buffer->base);
/* Node descriptors for top scene nodes of menuitem */
node_descriptor_create(menuitem->normal.background,