mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
term: remove get_font_scale()
get_font_scale() was used to get the new scaling factor when loading fonts. This was then compared to the last seen font scaling factor. If there was no difference, the fonts were not reloaded. The problem was, the initial term->scale was set differently. This sometimes led to term->scale=2, while get_font_scale() return 1. That meant, fonts were initially scaled by 2 (when dpi-aware=no). Later, when mapped on an output (and thus term->scale being set to 1), the fonts weren’t reloaded with the correct scaling factor since the cached term->font_scale value was already 1. Since term->scale always reflects the *new* scaling factor when term_font_dpi_changed() is called, use that directly, and remove get_font_scale(). Also rename the following functions: * font_should_size_by_dpi() -> font_size_by_dpi_for_scale() * font_size_by_dpi() -> font_sized_by_dpi() * font_size_by_scale() -> font_sized_by_scale()
This commit is contained in:
parent
3405a9c81c
commit
0935428695
2 changed files with 14 additions and 39 deletions
51
terminal.c
51
terminal.c
|
|
@ -724,31 +724,6 @@ get_font_dpi(const struct terminal *term)
|
|||
return dpi;
|
||||
}
|
||||
|
||||
static int
|
||||
get_font_scale(const struct terminal *term)
|
||||
{
|
||||
/* Same as get_font_dpi(), but returns output scale factor instead */
|
||||
int scale = 0;
|
||||
|
||||
xassert(term->window != NULL);
|
||||
tll_foreach(term->window->on_outputs, it) {
|
||||
if (it->item->scale > scale)
|
||||
scale = it->item->scale;
|
||||
}
|
||||
|
||||
if (scale == 0) {
|
||||
tll_foreach(term->wl->monitors, it) {
|
||||
scale = it->item.scale;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (scale == 0)
|
||||
scale = 1;
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
static enum fcft_subpixel
|
||||
get_font_subpixel(const struct terminal *term)
|
||||
{
|
||||
|
|
@ -794,22 +769,22 @@ get_font_subpixel(const struct terminal *term)
|
|||
}
|
||||
|
||||
static bool
|
||||
font_should_size_by_dpi(const struct terminal *term, int new_scale)
|
||||
font_size_by_dpi_for_scale(const struct terminal *term, int new_scale)
|
||||
{
|
||||
return term->conf->dpi_aware == DPI_AWARE_YES ||
|
||||
(term->conf->dpi_aware == DPI_AWARE_AUTO && new_scale <= 1);
|
||||
}
|
||||
|
||||
static bool
|
||||
font_size_by_dpi(const struct terminal *term)
|
||||
font_sized_by_dpi(const struct terminal *term)
|
||||
{
|
||||
return font_should_size_by_dpi(term, term->font_scale);
|
||||
return font_size_by_dpi_for_scale(term, term->font_scale);
|
||||
}
|
||||
|
||||
static bool
|
||||
font_size_by_scale(const struct terminal *term)
|
||||
font_sized_by_scale(const struct terminal *term)
|
||||
{
|
||||
return !font_size_by_dpi(term);
|
||||
return !font_sized_by_dpi(term);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -849,7 +824,7 @@ reload_fonts(struct terminal *term)
|
|||
bool use_px_size = term->font_sizes[i][j].px_size > 0;
|
||||
char size[64];
|
||||
|
||||
const int scale = font_size_by_scale(term) ? term->scale : 1;
|
||||
const int scale = font_sized_by_scale(term) ? term->scale : 1;
|
||||
|
||||
if (use_px_size)
|
||||
snprintf(size, sizeof(size), ":pixelsize=%d",
|
||||
|
|
@ -885,7 +860,7 @@ reload_fonts(struct terminal *term)
|
|||
const size_t count_bold_italic = custom_bold_italic ? counts[3] : counts[0];
|
||||
const char **names_bold_italic = (const char **)(custom_bold_italic ? names[3] : names[0]);
|
||||
|
||||
const bool use_dpi = font_size_by_dpi(term);
|
||||
const bool use_dpi = font_sized_by_dpi(term);
|
||||
|
||||
char *attrs[4] = {NULL};
|
||||
int attr_len[4] = {-1, -1, -1, -1}; /* -1, so that +1 (below) results in 0 */
|
||||
|
|
@ -1798,16 +1773,16 @@ bool
|
|||
term_font_dpi_changed(struct terminal *term)
|
||||
{
|
||||
float dpi = get_font_dpi(term);
|
||||
int scale = get_font_scale(term);
|
||||
xassert(term->scale > 0);
|
||||
|
||||
bool was_scaled_using_dpi = font_size_by_dpi(term);
|
||||
bool will_scale_using_dpi = font_should_size_by_dpi(term, scale);
|
||||
bool was_scaled_using_dpi = font_sized_by_dpi(term);
|
||||
bool will_scale_using_dpi = font_size_by_dpi_for_scale(term, term->scale);
|
||||
|
||||
bool need_font_reload =
|
||||
was_scaled_using_dpi != will_scale_using_dpi ||
|
||||
(will_scale_using_dpi
|
||||
? term->font_dpi != dpi
|
||||
: term->font_scale != scale);
|
||||
: term->font_scale != term->scale);
|
||||
|
||||
if (need_font_reload) {
|
||||
LOG_DBG("DPI/scale change: DPI-awareness=%s, "
|
||||
|
|
@ -1815,12 +1790,12 @@ term_font_dpi_changed(struct terminal *term)
|
|||
"sizing font based on monitor's %s",
|
||||
term->conf->dpi_aware == DPI_AWARE_AUTO ? "auto" :
|
||||
term->conf->dpi_aware == DPI_AWARE_YES ? "yes" : "no",
|
||||
term->font_dpi, dpi, term->font_scale, scale,
|
||||
term->font_dpi, dpi, term->font_scale, term->scale,
|
||||
will_scale_using_dpi ? "DPI" : "scaling factor");
|
||||
}
|
||||
|
||||
term->font_dpi = dpi;
|
||||
term->font_scale = scale;
|
||||
term->font_scale = term->scale;
|
||||
|
||||
if (!need_font_reload)
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@ struct terminal {
|
|||
struct config_font *font_sizes[4];
|
||||
struct pt_or_px font_line_height;
|
||||
float font_dpi;
|
||||
int font_scale;
|
||||
int font_scale; /* scaling factor last time we loaded fonts */
|
||||
int16_t font_x_ofs;
|
||||
int16_t font_y_ofs;
|
||||
enum fcft_subpixel font_subpixel;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue