parse pango markup in workspace names (and bugfix)
This change allows using numeric character references in workspace names - for example æ which stands for sharp s. A fix was necessary in get_pango_layout, since markup and parsed markup had different width.
This commit is contained in:
parent
fa119661e9
commit
6f2c39610e
|
@ -205,7 +205,7 @@ void workspace_button_size(struct window *window, const char *workspace_name, in
|
||||||
const char *stripped_name = strip_workspace_name(swaybar.config->strip_workspace_numbers, workspace_name);
|
const char *stripped_name = strip_workspace_name(swaybar.config->strip_workspace_numbers, workspace_name);
|
||||||
|
|
||||||
get_text_size(window->cairo, window->font, width, height,
|
get_text_size(window->cairo, window->font, width, height,
|
||||||
window->scale, false, "%s", stripped_name);
|
window->scale, true, "%s", stripped_name);
|
||||||
*width += 2 * ws_horizontal_padding;
|
*width += 2 * ws_horizontal_padding;
|
||||||
*height += 2 * ws_vertical_padding;
|
*height += 2 * ws_vertical_padding;
|
||||||
}
|
}
|
||||||
|
@ -241,7 +241,7 @@ static void render_workspace_button(struct window *window, struct config *config
|
||||||
cairo_set_source_u32(window->cairo, box_colors.text);
|
cairo_set_source_u32(window->cairo, box_colors.text);
|
||||||
cairo_move_to(window->cairo, (int)*x + ws_horizontal_padding, margin);
|
cairo_move_to(window->cairo, (int)*x + ws_horizontal_padding, margin);
|
||||||
pango_printf(window->cairo, window->font, window->scale,
|
pango_printf(window->cairo, window->font, window->scale,
|
||||||
false, "%s", stripped_name);
|
true, "%s", stripped_name);
|
||||||
|
|
||||||
*x += width + ws_spacing;
|
*x += width + ws_spacing;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,10 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font, const char *text
|
||||||
int32_t scale, bool markup) {
|
int32_t scale, bool markup) {
|
||||||
PangoLayout *layout = pango_cairo_create_layout(cairo);
|
PangoLayout *layout = pango_cairo_create_layout(cairo);
|
||||||
PangoAttrList *attrs = pango_attr_list_new();
|
PangoAttrList *attrs = pango_attr_list_new();
|
||||||
|
char *buf = malloc(2048);
|
||||||
if (markup) {
|
if (markup) {
|
||||||
pango_parse_markup(text, -1, 0, &attrs, NULL, NULL, NULL);
|
pango_parse_markup(text, -1, 0, &attrs, &buf, NULL, NULL);
|
||||||
pango_layout_set_markup(layout, text, -1);
|
pango_layout_set_markup(layout, buf, -1);
|
||||||
} else {
|
} else {
|
||||||
pango_layout_set_text(layout, text, -1);
|
pango_layout_set_text(layout, text, -1);
|
||||||
}
|
}
|
||||||
|
@ -24,6 +25,7 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font, const char *text
|
||||||
pango_layout_set_attributes(layout, attrs);
|
pango_layout_set_attributes(layout, attrs);
|
||||||
pango_attr_list_unref(attrs);
|
pango_attr_list_unref(attrs);
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
|
free(buf);
|
||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue