wayland: add wayl_surface_scale(), and wayl_win_scale()

These functions scale a surface+buffer.

For now, only using the legacy scaling
method (wl_surface_set_buffer_scale()).
This commit is contained in:
Daniel Eklöf 2023-06-26 15:51:04 +02:00
parent 4bd62b1005
commit 0a5073f570
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 52 additions and 46 deletions

View file

@ -1850,6 +1850,40 @@ wayl_roundtrip(struct wayland *wayl)
wayl_flush(wayl);
}
bool
wayl_fractional_scaling(const struct wayland *wayl)
{
#if defined(HAVE_FRACTIONAL_SCALE)
return wayl->fractional_scale_manager != NULL;
#else
return false;
#endif
}
void
wayl_surface_scale(const struct wayland *wayl, struct wl_surface *surf,
float scale)
{
LOG_WARN("scaling by a factor of %.2f (legacy)", scale);
if (wayl_fractional_scaling(wayl)) {
BUG("not yet implemented");
} else {
wl_surface_set_buffer_scale(surf, (int)scale);
}
}
void
wayl_win_scale(struct wl_window *win)
{
const struct terminal *term = win->term;
const struct wayland *wayl = term->wl;
const float scale = term->scale;
wayl_surface_scale(wayl, win->surface, scale);
}
void
wayl_win_alpha_changed(struct wl_window *win)
{
@ -2048,13 +2082,3 @@ wayl_get_activation_token(
return true;
}
#endif
bool
wayl_fractional_scaling(const struct wayland *wayl)
{
#if defined(HAVE_FRACTIONAL_SCALE)
return wayl->fractional_scale_manager != NULL;
#else
return false;
#endif
}