wayland: fractional-scale-v1 is now always available

Since we're requiring wayland-protocols >= 1.32
This commit is contained in:
Daniel Eklöf 2023-07-31 16:32:53 +02:00
parent d59a4e7a77
commit 7eee415b75
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
7 changed files with 17 additions and 78 deletions

View file

@ -67,12 +67,11 @@ version_and_features(void)
{ {
static char buf[256]; static char buf[256];
snprintf(buf, sizeof(buf), snprintf(buf, sizeof(buf),
"version: %s %cpgo %cime %cgraphemes %cfractional-scaling %ccursor-shape %cassertions", "version: %s %cpgo %cime %cgraphemes %ccursor-shape %cassertions",
FOOT_VERSION, FOOT_VERSION,
feature_pgo() ? '+' : '-', feature_pgo() ? '+' : '-',
feature_ime() ? '+' : '-', feature_ime() ? '+' : '-',
feature_graphemes() ? '+' : '-', feature_graphemes() ? '+' : '-',
feature_fractional_scaling() ? '+' : ':',
feature_cursor_shape() ? '+' : '-', feature_cursor_shape() ? '+' : '-',
feature_assertions() ? '+' : '-'); feature_assertions() ? '+' : '-');
return buf; return buf;

View file

@ -38,15 +38,6 @@ static inline bool feature_graphemes(void)
#endif #endif
} }
static inline bool feature_fractional_scaling(void)
{
#if defined(HAVE_FRACTIONAL_SCALE)
return true;
#else
return false;
#endif
}
static inline bool feature_cursor_shape(void) static inline bool feature_cursor_shape(void)
{ {
#if defined(HAVE_CURSOR_SHAPE) #if defined(HAVE_CURSOR_SHAPE)

3
main.c
View file

@ -53,12 +53,11 @@ version_and_features(void)
{ {
static char buf[256]; static char buf[256];
snprintf(buf, sizeof(buf), snprintf(buf, sizeof(buf),
"version: %s %cpgo %cime %cgraphemes %cfractional-scaling %ccursor-shape %cassertions", "version: %s %cpgo %cime %cgraphemes %ccursor-shape %cassertions",
FOOT_VERSION, FOOT_VERSION,
feature_pgo() ? '+' : '-', feature_pgo() ? '+' : '-',
feature_ime() ? '+' : '-', feature_ime() ? '+' : '-',
feature_graphemes() ? '+' : '-', feature_graphemes() ? '+' : '-',
feature_fractional_scaling() ? '+' : '-',
feature_cursor_shape() ? '+' : '-', feature_cursor_shape() ? '+' : '-',
feature_assertions() ? '+' : '-'); feature_assertions() ? '+' : '-');
return buf; return buf;

View file

@ -153,16 +153,10 @@ wl_proto_xml = [
wayland_protocols_datadir + '/stable/presentation-time/presentation-time.xml', wayland_protocols_datadir + '/stable/presentation-time/presentation-time.xml',
wayland_protocols_datadir + '/unstable/text-input/text-input-unstable-v3.xml', wayland_protocols_datadir + '/unstable/text-input/text-input-unstable-v3.xml',
wayland_protocols_datadir + '/staging/xdg-activation/xdg-activation-v1.xml', wayland_protocols_datadir + '/staging/xdg-activation/xdg-activation-v1.xml',
wayland_protocols_datadir + '/stable/viewporter/viewporter.xml',
wayland_protocols_datadir + '/staging/fractional-scale/fractional-scale-v1.xml',
] ]
if wayland_protocols.version().version_compare('>=1.31')
add_project_arguments('-DHAVE_FRACTIONAL_SCALE', language: 'c')
wl_proto_xml += [wayland_protocols_datadir + '/stable/viewporter/viewporter.xml']
wl_proto_xml += [wayland_protocols_datadir + '/staging/fractional-scale/fractional-scale-v1.xml']
fractional_scale = true
else
fractional_scale = false
endif
if wayland_protocols.version().version_compare('>=1.32') if wayland_protocols.version().version_compare('>=1.32')
wl_proto_xml += [ wl_proto_xml += [
wayland_protocols_datadir + '/unstable/tablet/tablet-unstable-v2.xml', # required by cursor-shape-v1 wayland_protocols_datadir + '/unstable/tablet/tablet-unstable-v2.xml', # required by cursor-shape-v1
@ -388,7 +382,6 @@ summary(
'Themes': get_option('themes'), 'Themes': get_option('themes'),
'IME': get_option('ime'), 'IME': get_option('ime'),
'Grapheme clustering': utf8proc.found(), 'Grapheme clustering': utf8proc.found(),
'Wayland: fractional-scale-v1': fractional_scale,
'Wayland: cursor-shape-v1': cursor_shape, 'Wayland: cursor-shape-v1': cursor_shape,
'utmp backend': utmp_backend, 'utmp backend': utmp_backend,
'utmp helper default path': utmp_default_helper_path, 'utmp helper default path': utmp_default_helper_path,

View file

@ -2080,11 +2080,7 @@ term_font_size_reset(struct terminal *term)
bool bool
term_fractional_scaling(const struct terminal *term) term_fractional_scaling(const struct terminal *term)
{ {
#if defined(HAVE_FRACTIONAL_SCALE)
return term->wl->fractional_scale_manager != NULL && term->window->scale > 0.; return term->wl->fractional_scale_manager != NULL && term->window->scale > 0.;
#else
return false;
#endif
} }
bool bool

View file

@ -193,10 +193,8 @@ seat_destroy(struct seat *seat)
wl_cursor_theme_destroy(seat->pointer.theme); wl_cursor_theme_destroy(seat->pointer.theme);
if (seat->pointer.surface.surf != NULL) if (seat->pointer.surface.surf != NULL)
wl_surface_destroy(seat->pointer.surface.surf); wl_surface_destroy(seat->pointer.surface.surf);
#if defined(HAVE_FRACTIONAL_SCALE)
if (seat->pointer.surface.viewport != NULL) if (seat->pointer.surface.viewport != NULL)
wp_viewport_destroy(seat->pointer.surface.viewport); wp_viewport_destroy(seat->pointer.surface.viewport);
#endif
if (seat->pointer.xcursor_callback != NULL) if (seat->pointer.xcursor_callback != NULL)
wl_callback_destroy(seat->pointer.xcursor_callback); wl_callback_destroy(seat->pointer.xcursor_callback);
@ -314,7 +312,6 @@ seat_handle_capabilities(void *data, struct wl_seat *wl_seat,
return; return;
} }
#if defined(HAVE_FRACTIONAL_SCALE)
if (seat->wayl->viewporter != NULL) { if (seat->wayl->viewporter != NULL) {
xassert(seat->pointer.surface.viewport == NULL); xassert(seat->pointer.surface.viewport == NULL);
seat->pointer.surface.viewport = wp_viewporter_get_viewport( seat->pointer.surface.viewport = wp_viewporter_get_viewport(
@ -327,7 +324,6 @@ seat_handle_capabilities(void *data, struct wl_seat *wl_seat,
return; return;
} }
} }
#endif
seat->wl_pointer = wl_seat_get_pointer(wl_seat); seat->wl_pointer = wl_seat_get_pointer(wl_seat);
wl_pointer_add_listener(seat->wl_pointer, &pointer_listener, seat); wl_pointer_add_listener(seat->wl_pointer, &pointer_listener, seat);
@ -352,12 +348,10 @@ seat_handle_capabilities(void *data, struct wl_seat *wl_seat,
wl_pointer_release(seat->wl_pointer); wl_pointer_release(seat->wl_pointer);
wl_surface_destroy(seat->pointer.surface.surf); wl_surface_destroy(seat->pointer.surface.surf);
#if defined(HAVE_FRACTIONAL_SCALE)
if (seat->pointer.surface.viewport != NULL) { if (seat->pointer.surface.viewport != NULL) {
wp_viewport_destroy(seat->pointer.surface.viewport); wp_viewport_destroy(seat->pointer.surface.viewport);
seat->pointer.surface.viewport = NULL; seat->pointer.surface.viewport = NULL;
} }
#endif
if (seat->pointer.theme != NULL) if (seat->pointer.theme != NULL)
wl_cursor_theme_destroy(seat->pointer.theme); wl_cursor_theme_destroy(seat->pointer.theme);
@ -1226,7 +1220,6 @@ handle_global(void *data, struct wl_registry *registry,
wayl->registry, name, &xdg_activation_v1_interface, required); wayl->registry, name, &xdg_activation_v1_interface, required);
} }
#if defined(HAVE_FRACTIONAL_SCALE)
else if (strcmp(interface, wp_viewporter_interface.name) == 0) { else if (strcmp(interface, wp_viewporter_interface.name) == 0) {
const uint32_t required = 1; const uint32_t required = 1;
if (!verify_iface_version(interface, version, required)) if (!verify_iface_version(interface, version, required))
@ -1245,7 +1238,6 @@ handle_global(void *data, struct wl_registry *registry,
wayl->registry, name, wayl->registry, name,
&wp_fractional_scale_manager_v1_interface, required); &wp_fractional_scale_manager_v1_interface, required);
} }
#endif
#if defined(HAVE_CURSOR_SHAPE) #if defined(HAVE_CURSOR_SHAPE)
else if (strcmp(interface, wp_cursor_shape_manager_v1_interface.name) == 0) { else if (strcmp(interface, wp_cursor_shape_manager_v1_interface.name) == 0) {
@ -1485,13 +1477,8 @@ wayl_init(struct fdm *fdm, struct key_binding_manager *key_binding_manager,
"bell.urgent will fall back to coloring the window margins red"); "bell.urgent will fall back to coloring the window margins red");
} }
#if defined(HAVE_FRACTIONAL_SCALE) if (wayl->fractional_scale_manager == NULL || wayl->viewporter == NULL)
if (wayl->fractional_scale_manager == NULL || wayl->viewporter == NULL) {
#else
if (true) {
#endif
LOG_WARN("fractional scaling not available"); LOG_WARN("fractional scaling not available");
}
#if defined(HAVE_CURSOR_SHAPE) #if defined(HAVE_CURSOR_SHAPE)
if (wayl->cursor_shape_manager == NULL) { if (wayl->cursor_shape_manager == NULL) {
@ -1588,12 +1575,11 @@ wayl_destroy(struct wayland *wayl)
zwp_text_input_manager_v3_destroy(wayl->text_input_manager); zwp_text_input_manager_v3_destroy(wayl->text_input_manager);
#endif #endif
#if defined(HAVE_FRACTIONAL_SCALE)
if (wayl->fractional_scale_manager != NULL) if (wayl->fractional_scale_manager != NULL)
wp_fractional_scale_manager_v1_destroy(wayl->fractional_scale_manager); wp_fractional_scale_manager_v1_destroy(wayl->fractional_scale_manager);
if (wayl->viewporter != NULL) if (wayl->viewporter != NULL)
wp_viewporter_destroy(wayl->viewporter); wp_viewporter_destroy(wayl->viewporter);
#endif
#if defined(HAVE_CURSOR_SHAPE) #if defined(HAVE_CURSOR_SHAPE)
if (wayl->cursor_shape_manager != NULL) if (wayl->cursor_shape_manager != NULL)
wp_cursor_shape_manager_v1_destroy(wayl->cursor_shape_manager); wp_cursor_shape_manager_v1_destroy(wayl->cursor_shape_manager);
@ -1630,8 +1616,8 @@ wayl_destroy(struct wayland *wayl)
free(wayl); free(wayl);
} }
#if defined(HAVE_FRACTIONAL_SCALE) static void
static void fractional_scale_preferred_scale( fractional_scale_preferred_scale(
void *data, struct wp_fractional_scale_v1 *wp_fractional_scale_v1, void *data, struct wp_fractional_scale_v1 *wp_fractional_scale_v1,
uint32_t scale) uint32_t scale)
{ {
@ -1651,7 +1637,6 @@ static void fractional_scale_preferred_scale(
static const struct wp_fractional_scale_v1_listener fractional_scale_listener = { static const struct wp_fractional_scale_v1_listener fractional_scale_listener = {
.preferred_scale = &fractional_scale_preferred_scale, .preferred_scale = &fractional_scale_preferred_scale,
}; };
#endif
struct wl_window * struct wl_window *
wayl_win_init(struct terminal *term, const char *token) wayl_win_init(struct terminal *term, const char *token)
@ -1684,7 +1669,6 @@ wayl_win_init(struct terminal *term, const char *token)
wl_surface_add_listener(win->surface.surf, &surface_listener, win); wl_surface_add_listener(win->surface.surf, &surface_listener, win);
#if defined(HAVE_FRACTIONAL_SCALE)
if (wayl->fractional_scale_manager != NULL && wayl->viewporter != NULL) { if (wayl->fractional_scale_manager != NULL && wayl->viewporter != NULL) {
win->surface.viewport = wp_viewporter_get_viewport(wayl->viewporter, win->surface.surf); win->surface.viewport = wp_viewporter_get_viewport(wayl->viewporter, win->surface.surf);
@ -1694,7 +1678,6 @@ wayl_win_init(struct terminal *term, const char *token)
wp_fractional_scale_v1_add_listener( wp_fractional_scale_v1_add_listener(
win->fractional_scale, &fractional_scale_listener, win); win->fractional_scale, &fractional_scale_listener, win);
} }
#endif
win->xdg_surface = xdg_wm_base_get_xdg_surface(wayl->shell, win->surface.surf); win->xdg_surface = xdg_wm_base_get_xdg_surface(wayl->shell, win->surface.surf);
xdg_surface_add_listener(win->xdg_surface, &xdg_surface_listener, win); xdg_surface_add_listener(win->xdg_surface, &xdg_surface_listener, win);
@ -1847,12 +1830,10 @@ wayl_win_destroy(struct wl_window *win)
tll_remove(win->xdg_tokens, it); tll_remove(win->xdg_tokens, it);
} }
#if defined(HAVE_FRACTIONAL_SCALE)
if (win->fractional_scale != NULL) if (win->fractional_scale != NULL)
wp_fractional_scale_v1_destroy(win->fractional_scale); wp_fractional_scale_v1_destroy(win->fractional_scale);
if (win->surface.viewport != NULL) if (win->surface.viewport != NULL)
wp_viewport_destroy(win->surface.viewport); wp_viewport_destroy(win->surface.viewport);
#endif
if (win->frame_callback != NULL) if (win->frame_callback != NULL)
wl_callback_destroy(win->frame_callback); wl_callback_destroy(win->frame_callback);
if (win->xdg_toplevel_decoration != NULL) if (win->xdg_toplevel_decoration != NULL)
@ -1995,7 +1976,6 @@ surface_scale_explicit_width_height(
int width, int height, float scale, bool verify) int width, int height, float scale, bool verify)
{ {
if (term_fractional_scaling(win->term)) { if (term_fractional_scaling(win->term)) {
#if defined(HAVE_FRACTIONAL_SCALE)
LOG_DBG("scaling by a factor of %.2f using fractional scaling " LOG_DBG("scaling by a factor of %.2f using fractional scaling "
"(width=%d, height=%d) ", scale, width, height); "(width=%d, height=%d) ", scale, width, height);
@ -2018,10 +1998,6 @@ surface_scale_explicit_width_height(
wl_surface_set_buffer_scale(surf->surf, 1); wl_surface_set_buffer_scale(surf->surf, 1);
wp_viewport_set_destination( wp_viewport_set_destination(
surf->viewport, roundf(width / scale), roundf(height / scale)); surf->viewport, roundf(width / scale), roundf(height / scale));
#else
BUG("wayl_fraction_scaling() returned true, "
"but fractional scaling was not available at compile time");
#endif
} else { } else {
LOG_DBG("scaling by a factor of %.2f using legacy mode " LOG_DBG("scaling by a factor of %.2f using legacy mode "
"(width=%d, height=%d)", scale, width, height); "(width=%d, height=%d)", scale, width, height);
@ -2152,7 +2128,6 @@ wayl_win_subsurface_new_with_custom_parent(
return false; return false;
} }
#if defined(HAVE_FRACTIONAL_SCALE)
struct wp_viewport *viewport = NULL; struct wp_viewport *viewport = NULL;
if (wayl->fractional_scale_manager != NULL && wayl->viewporter != NULL) { if (wayl->fractional_scale_manager != NULL && wayl->viewporter != NULL) {
viewport = wp_viewporter_get_viewport(wayl->viewporter, main_surface); viewport = wp_viewporter_get_viewport(wayl->viewporter, main_surface);
@ -2163,7 +2138,6 @@ wayl_win_subsurface_new_with_custom_parent(
return false; return false;
} }
} }
#endif
wl_surface_set_user_data(main_surface, win); wl_surface_set_user_data(main_surface, win);
wl_subsurface_set_sync(sub); wl_subsurface_set_sync(sub);
@ -2178,9 +2152,7 @@ wayl_win_subsurface_new_with_custom_parent(
surf->surface.surf = main_surface; surf->surface.surf = main_surface;
surf->sub = sub; surf->sub = sub;
#if defined(HAVE_FRACTIONAL_SCALE)
surf->surface.viewport = viewport; surf->surface.viewport = viewport;
#endif
return true; return true;
} }
@ -2198,12 +2170,11 @@ wayl_win_subsurface_destroy(struct wayl_sub_surface *surf)
if (surf == NULL) if (surf == NULL)
return; return;
#if defined(HAVE_FRACTIONAL_SCALE)
if (surf->surface.viewport != NULL) { if (surf->surface.viewport != NULL) {
wp_viewport_destroy(surf->surface.viewport); wp_viewport_destroy(surf->surface.viewport);
surf->surface.viewport = NULL; surf->surface.viewport = NULL;
} }
#endif
if (surf->sub != NULL) { if (surf->sub != NULL) {
wl_subsurface_destroy(surf->sub); wl_subsurface_destroy(surf->sub);
surf->sub = NULL; surf->sub = NULL;

View file

@ -9,18 +9,15 @@
#include <xkbcommon/xkbcommon.h> #include <xkbcommon/xkbcommon.h>
/* Wayland protocols */ /* Wayland protocols */
#include <fractional-scale-v1.h>
#include <presentation-time.h> #include <presentation-time.h>
#include <primary-selection-unstable-v1.h> #include <primary-selection-unstable-v1.h>
#include <text-input-unstable-v3.h> #include <text-input-unstable-v3.h>
#include <viewporter.h>
#include <xdg-activation-v1.h>
#include <xdg-decoration-unstable-v1.h> #include <xdg-decoration-unstable-v1.h>
#include <xdg-output-unstable-v1.h> #include <xdg-output-unstable-v1.h>
#include <xdg-shell.h> #include <xdg-shell.h>
#include <xdg-activation-v1.h>
#if defined(HAVE_FRACTIONAL_SCALE)
#include <viewporter.h>
#include <fractional-scale-v1.h>
#endif
#include <fcft/fcft.h> #include <fcft/fcft.h>
#include <tllist.h> #include <tllist.h>
@ -54,9 +51,7 @@ enum touch_state {
struct wayl_surface { struct wayl_surface {
struct wl_surface *surf; struct wl_surface *surf;
#if defined(HAVE_FRACTIONAL_SCALE)
struct wp_viewport *viewport; struct wp_viewport *viewport;
#endif
}; };
struct wayl_sub_surface { struct wayl_sub_surface {
@ -362,15 +357,12 @@ struct wl_window {
struct wayl_surface surface; struct wayl_surface surface;
struct xdg_surface *xdg_surface; struct xdg_surface *xdg_surface;
struct xdg_toplevel *xdg_toplevel; struct xdg_toplevel *xdg_toplevel;
struct wp_fractional_scale_v1 *fractional_scale;
tll(struct xdg_activation_token_context *) xdg_tokens; tll(struct xdg_activation_token_context *) xdg_tokens;
bool urgency_token_is_pending; bool urgency_token_is_pending;
#if defined(HAVE_FRACTIONAL_SCALE)
struct wp_fractional_scale_v1 *fractional_scale;
#endif
bool unmapped; bool unmapped;
float scale; float scale;
struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration; struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration;
@ -448,6 +440,9 @@ struct wayland {
struct xdg_activation_v1 *xdg_activation; struct xdg_activation_v1 *xdg_activation;
struct wp_viewporter *viewporter;
struct wp_fractional_scale_manager_v1 *fractional_scale_manager;
#if defined(HAVE_CURSOR_SHAPE) #if defined(HAVE_CURSOR_SHAPE)
struct wp_cursor_shape_manager_v1 *cursor_shape_manager; struct wp_cursor_shape_manager_v1 *cursor_shape_manager;
#endif #endif
@ -455,16 +450,11 @@ struct wayland {
bool presentation_timings; bool presentation_timings;
struct wp_presentation *presentation; struct wp_presentation *presentation;
uint32_t presentation_clock_id; uint32_t presentation_clock_id;
#if defined(FOOT_IME_ENABLED) && FOOT_IME_ENABLED #if defined(FOOT_IME_ENABLED) && FOOT_IME_ENABLED
struct zwp_text_input_manager_v3 *text_input_manager; struct zwp_text_input_manager_v3 *text_input_manager;
#endif #endif
#if defined(HAVE_FRACTIONAL_SCALE)
struct wp_viewporter *viewporter;
struct wp_fractional_scale_manager_v1 *fractional_scale_manager;
#endif
bool have_argb8888; bool have_argb8888;
tll(struct monitor) monitors; /* All available outputs */ tll(struct monitor) monitors; /* All available outputs */
tll(struct seat) seats; tll(struct seat) seats;