From c16b2a26ed2c2f718cb8a2084fa93636fabed95f Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Fri, 17 Sep 2021 17:32:29 +0200 Subject: [PATCH] Avoid unecessary font metric calculations Prior to 62d90a8e, titlebar's font height (and other related values) would change any time any titlebar's content changed, so these values were recalculated each time any titlebar's content changed (or a new titlebar was created). However, since the above was merge, these values no longer change so often and we only need to recalculate them when the configured font changes (and stop calling `config_update_font_height` each time titlebars are rendered). This commit removes all the unecessary calls to this function and avoids all those unecessary calculations. Whenever the font strays from the default value, the `font` command is called, and it calls `config_update_font_height`, which is enough to keep the value always up to date. I've also added a default value to the `font_baseline` config, since otherwise that's zero for setups that don't explicitly specify a font. --- common/pango.c | 4 +--- sway/commands/reload.c | 1 - sway/commands/title_format.c | 1 - sway/config.c | 1 + sway/tree/view.c | 1 - 5 files changed, 2 insertions(+), 6 deletions(-) diff --git a/common/pango.c b/common/pango.c index 89b1ac41d..abc18281f 100644 --- a/common/pango.c +++ b/common/pango.c @@ -113,10 +113,8 @@ void get_text_metrics(const char *font, int *height, int *baseline) { cairo_t *cairo = cairo_create(NULL); PangoContext *pango = pango_cairo_create_context(cairo); PangoFontDescription *description = pango_font_description_from_string(font); - PangoFontMetrics *metrics; - // When passing NULL as a language, pango uses the current locale. - metrics = pango_context_get_metrics(pango, description, NULL); + PangoFontMetrics *metrics = pango_context_get_metrics(pango, description, NULL); *baseline = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE; *height = *baseline + pango_font_metrics_get_descent(metrics) / PANGO_SCALE; diff --git a/sway/commands/reload.c b/sway/commands/reload.c index 09ccd9d47..76f14bba3 100644 --- a/sway/commands/reload.c +++ b/sway/commands/reload.c @@ -48,7 +48,6 @@ static void do_reload(void *data) { } list_free_items_and_destroy(bar_ids); - config_update_font_height(); root_for_each_container(rebuild_textures_iterator, NULL); arrange_root(); diff --git a/sway/commands/title_format.c b/sway/commands/title_format.c index 8d907e762..a2446b7e4 100644 --- a/sway/commands/title_format.c +++ b/sway/commands/title_format.c @@ -23,6 +23,5 @@ struct cmd_results *cmd_title_format(int argc, char **argv) { } view->title_format = format; view_update_title(view, true); - config_update_font_height(); return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/config.c b/sway/config.c index 1ddedc7e6..6d0f465a2 100644 --- a/sway/config.c +++ b/sway/config.c @@ -237,6 +237,7 @@ static void config_defaults(struct sway_config *config) { config->default_orientation = L_NONE; if (!(config->font = strdup("monospace 10"))) goto cleanup; config->font_height = 17; // height of monospace 10 + config->font_baseline = 11; // baselint of monospace 10 config->urgent_timeout = 500; config->focus_on_window_activation = FOWA_URGENT; config->popup_during_fullscreen = POPUP_SMART; diff --git a/sway/tree/view.c b/sway/tree/view.c index ccb030880..b2f70d705 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -1280,7 +1280,6 @@ void view_update_title(struct sway_view *view, bool force) { view->container->title = NULL; view->container->formatted_title = NULL; } - config_update_font_height(); // Update title after the global font height is updated container_update_title_textures(view->container);