From eb952819c21f5cd6725caad94f186788249f1a75 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 10 Jul 2014 17:39:47 -0400 Subject: [PATCH] monitor: Don't use wl_output_transform in our APIs Invent our own API so we can build without Wayland headers. --- src/backends/meta-monitor-config.c | 36 ++++----- src/backends/meta-monitor-manager-dummy.c | 6 +- src/backends/meta-monitor-manager.c | 6 +- src/backends/meta-monitor-manager.h | 18 ++++- .../native/meta-monitor-manager-kms.c | 6 +- .../x11/meta-monitor-manager-xrandr.c | 74 +++++++++---------- src/wayland/meta-wayland-outputs.c | 14 +++- 7 files changed, 88 insertions(+), 72 deletions(-) diff --git a/src/backends/meta-monitor-config.c b/src/backends/meta-monitor-config.c index a829daa43..9ccea34a4 100644 --- a/src/backends/meta-monitor-config.c +++ b/src/backends/meta-monitor-config.c @@ -60,7 +60,7 @@ typedef struct { gboolean enabled; MetaRectangle rect; float refresh_rate; - enum wl_output_transform transform; + MetaMonitorTransform transform; gboolean is_primary; gboolean is_presentation; @@ -656,20 +656,20 @@ handle_text (GMarkupParseContext *context, else if (strcmp (parser->output_field, "rotation") == 0) { if (strncmp (text, "normal", text_len) == 0) - parser->output.transform = WL_OUTPUT_TRANSFORM_NORMAL; + parser->output.transform = META_MONITOR_TRANSFORM_NORMAL; else if (strncmp (text, "left", text_len) == 0) - parser->output.transform = WL_OUTPUT_TRANSFORM_90; + parser->output.transform = META_MONITOR_TRANSFORM_90; else if (strncmp (text, "upside_down", text_len) == 0) - parser->output.transform = WL_OUTPUT_TRANSFORM_180; + parser->output.transform = META_MONITOR_TRANSFORM_180; else if (strncmp (text, "right", text_len) == 0) - parser->output.transform = WL_OUTPUT_TRANSFORM_270; + parser->output.transform = META_MONITOR_TRANSFORM_270; else g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, "Invalid rotation type %.*s", (int)text_len, text); } else if (strcmp (parser->output_field, "reflect_x") == 0) parser->output.transform += read_bool (text, text_len, error) ? - WL_OUTPUT_TRANSFORM_FLIPPED : 0; + META_MONITOR_TRANSFORM_FLIPPED : 0; else if (strcmp (parser->output_field, "reflect_y") == 0) { /* FIXME (look at the rotation map in monitor.c) */ @@ -1115,7 +1115,7 @@ make_default_config (MetaMonitorConfig *self, ret->outputs[0].rect.width = outputs[0].preferred_mode->width; ret->outputs[0].rect.height = outputs[0].preferred_mode->height; ret->outputs[0].refresh_rate = outputs[0].preferred_mode->refresh_rate; - ret->outputs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL; + ret->outputs[0].transform = META_MONITOR_TRANSFORM_NORMAL; ret->outputs[0].is_primary = TRUE; return ret; @@ -1167,7 +1167,7 @@ make_default_config (MetaMonitorConfig *self, ret->outputs[j].rect.width = outputs[0].preferred_mode->width; ret->outputs[j].rect.height = outputs[0].preferred_mode->height; ret->outputs[j].refresh_rate = outputs[0].preferred_mode->refresh_rate; - ret->outputs[j].transform = WL_OUTPUT_TRANSFORM_NORMAL; + ret->outputs[j].transform = META_MONITOR_TRANSFORM_NORMAL; ret->outputs[j].is_primary = FALSE; ret->outputs[j].is_presentation = FALSE; } @@ -1202,7 +1202,7 @@ make_default_config (MetaMonitorConfig *self, ret->outputs[i].rect.width = output->preferred_mode->width; ret->outputs[i].rect.height = output->preferred_mode->height; ret->outputs[i].refresh_rate = output->preferred_mode->refresh_rate; - ret->outputs[i].transform = WL_OUTPUT_TRANSFORM_NORMAL; + ret->outputs[i].transform = META_MONITOR_TRANSFORM_NORMAL; ret->outputs[i].is_primary = (output == primary); /* Disable outputs that would go beyond framebuffer limits */ @@ -1250,7 +1250,7 @@ ensure_at_least_one_output (MetaMonitorConfig *self, ret->outputs[i].rect.width = output->preferred_mode->width; ret->outputs[i].rect.height = output->preferred_mode->height; ret->outputs[i].refresh_rate = output->preferred_mode->refresh_rate; - ret->outputs[i].transform = WL_OUTPUT_TRANSFORM_NORMAL; + ret->outputs[i].transform = META_MONITOR_TRANSFORM_NORMAL; ret->outputs[i].is_primary = TRUE; } else @@ -1512,7 +1512,7 @@ meta_monitor_config_save (MetaMonitorConfig *self) output->rect.x, output->rect.y, rotation_map[output->transform & 0x3], - output->transform >= WL_OUTPUT_TRANSFORM_FLIPPED ? "yes" : "no", + output->transform >= META_MONITOR_TRANSFORM_FLIPPED ? "yes" : "no", output->is_primary ? "yes" : "no", output->is_presentation ? "yes" : "no"); } @@ -1621,13 +1621,13 @@ output_supports_mode (MetaOutput *output, } static gboolean -crtc_assignment_assign (CrtcAssignment *assign, - MetaCRTC *crtc, - MetaMonitorMode *mode, - int x, - int y, - enum wl_output_transform transform, - MetaOutput *output) +crtc_assignment_assign (CrtcAssignment *assign, + MetaCRTC *crtc, + MetaMonitorMode *mode, + int x, + int y, + MetaMonitorTransform transform, + MetaOutput *output) { MetaCRTCInfo *info = g_hash_table_lookup (assign->info, crtc); diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c index a9c9928f9..b8684b881 100644 --- a/src/backends/meta-monitor-manager-dummy.c +++ b/src/backends/meta-monitor-manager-dummy.c @@ -27,7 +27,7 @@ #include "meta-monitor-manager-dummy.h" -#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1) +#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1) struct _MetaMonitorManagerDummy { @@ -66,8 +66,8 @@ meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager) manager->crtcs[0].rect.width = manager->modes[0].width; manager->crtcs[0].rect.height = manager->modes[0].height; manager->crtcs[0].current_mode = &manager->modes[0]; - manager->crtcs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL; - manager->crtcs[0].all_transforms = ALL_WL_TRANSFORMS; + manager->crtcs[0].transform = META_MONITOR_TRANSFORM_NORMAL; + manager->crtcs[0].all_transforms = ALL_TRANSFORMS; manager->crtcs[0].is_dirty = FALSE; manager->crtcs[0].logical_monitor = NULL; diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c index 16c9666f6..81d47c6ab 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -477,7 +477,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton, GVariantBuilder transforms; g_variant_builder_init (&transforms, G_VARIANT_TYPE ("au")); - for (j = 0; j <= WL_OUTPUT_TRANSFORM_FLIPPED_270; j++) + for (j = 0; j <= META_MONITOR_TRANSFORM_FLIPPED_270; j++) if (crtc->all_transforms & (1 << j)) g_variant_builder_add (&transforms, "u", j); @@ -755,8 +755,8 @@ meta_monitor_manager_handle_apply_configuration (MetaDBusDisplayConfig *skeleto crtc_info->y = 0; } - if (transform < WL_OUTPUT_TRANSFORM_NORMAL || - transform > WL_OUTPUT_TRANSFORM_FLIPPED_270 || + if (transform < META_MONITOR_TRANSFORM_NORMAL || + transform > META_MONITOR_TRANSFORM_FLIPPED_270 || ((crtc->all_transforms & (1 << transform)) == 0)) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, diff --git a/src/backends/meta-monitor-manager.h b/src/backends/meta-monitor-manager.h index fc50224f6..531c445be 100644 --- a/src/backends/meta-monitor-manager.h +++ b/src/backends/meta-monitor-manager.h @@ -42,7 +42,6 @@ #include #include "stack-tracker.h" #include "ui.h" -#include #include "meta-display-config-shared.h" #include "meta-dbus-display-config.h" @@ -60,6 +59,17 @@ typedef struct _MetaMonitorInfo MetaMonitorInfo; typedef struct _MetaCRTCInfo MetaCRTCInfo; typedef struct _MetaOutputInfo MetaOutputInfo; +typedef enum { + META_MONITOR_TRANSFORM_NORMAL, + META_MONITOR_TRANSFORM_90, + META_MONITOR_TRANSFORM_180, + META_MONITOR_TRANSFORM_270, + META_MONITOR_TRANSFORM_FLIPPED, + META_MONITOR_TRANSFORM_FLIPPED_90, + META_MONITOR_TRANSFORM_FLIPPED_180, + META_MONITOR_TRANSFORM_FLIPPED_270, +} MetaMonitorTransform; + struct _MetaOutput { /* The CRTC driving this output, NULL if the output is not enabled */ @@ -114,7 +124,7 @@ struct _MetaCRTC glong crtc_id; MetaRectangle rect; MetaMonitorMode *current_mode; - enum wl_output_transform transform; + MetaMonitorTransform transform; unsigned int all_transforms; /* Only used to build the logical configuration @@ -185,7 +195,7 @@ struct _MetaCRTCInfo { MetaMonitorMode *mode; int x; int y; - enum wl_output_transform transform; + MetaMonitorTransform transform; GPtrArray *outputs; }; @@ -339,7 +349,7 @@ gboolean meta_monitor_manager_has_hotplug_mode_update (MetaMonitorMana /* Returns true if transform causes width and height to be inverted This is true for the odd transforms in the enum */ static inline gboolean -meta_monitor_transform_is_rotated (enum wl_output_transform transform) +meta_monitor_transform_is_rotated (MetaMonitorTransform transform) { return (transform % 2); } diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c index 10604e5c6..ad37df6a0 100644 --- a/src/backends/native/meta-monitor-manager-kms.c +++ b/src/backends/native/meta-monitor-manager-kms.c @@ -40,8 +40,6 @@ #include #include "edid.h" -#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1) - typedef struct { drmModeConnector *connector; @@ -363,9 +361,9 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager) meta_crtc->rect.width = crtc->width; meta_crtc->rect.height = crtc->height; meta_crtc->is_dirty = FALSE; - meta_crtc->transform = WL_OUTPUT_TRANSFORM_NORMAL; + meta_crtc->transform = META_MONITOR_TRANSFORM_NORMAL; /* FIXME: implement! */ - meta_crtc->all_transforms = 1 << WL_OUTPUT_TRANSFORM_NORMAL; + meta_crtc->all_transforms = 1 << META_MONITOR_TRANSFORM_NORMAL; if (crtc->mode_valid) { diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c index e85e26242..eadf3bd8b 100644 --- a/src/backends/x11/meta-monitor-manager-xrandr.c +++ b/src/backends/x11/meta-monitor-manager-xrandr.c @@ -42,7 +42,7 @@ #include "edid.h" #include "meta-monitor-config.h" -#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1) +#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1) /* Look for DPI_FALLBACK in: * http://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/xsettings/gsd-xsettings-manager.c @@ -67,31 +67,31 @@ struct _MetaMonitorManagerXrandrClass G_DEFINE_TYPE (MetaMonitorManagerXrandr, meta_monitor_manager_xrandr, META_TYPE_MONITOR_MANAGER); -static enum wl_output_transform -wl_transform_from_xrandr (Rotation rotation) +static MetaMonitorTransform +meta_monitor_transform_from_xrandr (Rotation rotation) { - static const enum wl_output_transform y_reflected_map[4] = { - WL_OUTPUT_TRANSFORM_FLIPPED_180, - WL_OUTPUT_TRANSFORM_FLIPPED_90, - WL_OUTPUT_TRANSFORM_FLIPPED, - WL_OUTPUT_TRANSFORM_FLIPPED_270 + static const MetaMonitorTransform y_reflected_map[4] = { + META_MONITOR_TRANSFORM_FLIPPED_180, + META_MONITOR_TRANSFORM_FLIPPED_90, + META_MONITOR_TRANSFORM_FLIPPED, + META_MONITOR_TRANSFORM_FLIPPED_270 }; - enum wl_output_transform ret; + MetaMonitorTransform ret; switch (rotation & 0x7F) { default: case RR_Rotate_0: - ret = WL_OUTPUT_TRANSFORM_NORMAL; + ret = META_MONITOR_TRANSFORM_NORMAL; break; case RR_Rotate_90: - ret = WL_OUTPUT_TRANSFORM_90; + ret = META_MONITOR_TRANSFORM_90; break; case RR_Rotate_180: - ret = WL_OUTPUT_TRANSFORM_180; + ret = META_MONITOR_TRANSFORM_180; break; case RR_Rotate_270: - ret = WL_OUTPUT_TRANSFORM_270; + ret = META_MONITOR_TRANSFORM_270; break; } @@ -105,35 +105,35 @@ wl_transform_from_xrandr (Rotation rotation) #define ALL_ROTATIONS (RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270) -static unsigned int -wl_transform_from_xrandr_all (Rotation rotation) +static MetaMonitorTransform +meta_monitor_transform_from_xrandr_all (Rotation rotation) { unsigned ret; /* Handle the common cases first (none or all) */ if (rotation == 0 || rotation == RR_Rotate_0) - return (1 << WL_OUTPUT_TRANSFORM_NORMAL); + return (1 << META_MONITOR_TRANSFORM_NORMAL); /* All rotations and one reflection -> all of them by composition */ if ((rotation & ALL_ROTATIONS) && ((rotation & RR_Reflect_X) || (rotation & RR_Reflect_Y))) - return ALL_WL_TRANSFORMS; + return ALL_TRANSFORMS; - ret = 1 << WL_OUTPUT_TRANSFORM_NORMAL; + ret = 1 << META_MONITOR_TRANSFORM_NORMAL; if (rotation & RR_Rotate_90) - ret |= 1 << WL_OUTPUT_TRANSFORM_90; + ret |= 1 << META_MONITOR_TRANSFORM_90; if (rotation & RR_Rotate_180) - ret |= 1 << WL_OUTPUT_TRANSFORM_180; + ret |= 1 << META_MONITOR_TRANSFORM_180; if (rotation & RR_Rotate_270) - ret |= 1 << WL_OUTPUT_TRANSFORM_270; + ret |= 1 << META_MONITOR_TRANSFORM_270; if (rotation & (RR_Rotate_0 | RR_Reflect_X)) - ret |= 1 << WL_OUTPUT_TRANSFORM_FLIPPED; + ret |= 1 << META_MONITOR_TRANSFORM_FLIPPED; if (rotation & (RR_Rotate_90 | RR_Reflect_X)) - ret |= 1 << WL_OUTPUT_TRANSFORM_FLIPPED_90; + ret |= 1 << META_MONITOR_TRANSFORM_FLIPPED_90; if (rotation & (RR_Rotate_180 | RR_Reflect_X)) - ret |= 1 << WL_OUTPUT_TRANSFORM_FLIPPED_180; + ret |= 1 << META_MONITOR_TRANSFORM_FLIPPED_180; if (rotation & (RR_Rotate_270 | RR_Reflect_X)) - ret |= 1 << WL_OUTPUT_TRANSFORM_FLIPPED_270; + ret |= 1 << META_MONITOR_TRANSFORM_FLIPPED_270; return ret; } @@ -434,8 +434,8 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) meta_crtc->rect.width = crtc->width; meta_crtc->rect.height = crtc->height; meta_crtc->is_dirty = FALSE; - meta_crtc->transform = wl_transform_from_xrandr (crtc->rotation); - meta_crtc->all_transforms = wl_transform_from_xrandr_all (crtc->rotations); + meta_crtc->transform = meta_monitor_transform_from_xrandr (crtc->rotation); + meta_crtc->all_transforms = meta_monitor_transform_from_xrandr_all (crtc->rotations); for (j = 0; j < (unsigned)resources->nmode; j++) { @@ -637,25 +637,25 @@ meta_monitor_manager_xrandr_set_power_save_mode (MetaMonitorManager *manager, } static Rotation -wl_transform_to_xrandr (enum wl_output_transform transform) +meta_monitor_transform_to_xrandr (MetaMonitorTransform transform) { switch (transform) { - case WL_OUTPUT_TRANSFORM_NORMAL: + case META_MONITOR_TRANSFORM_NORMAL: return RR_Rotate_0; - case WL_OUTPUT_TRANSFORM_90: + case META_MONITOR_TRANSFORM_90: return RR_Rotate_90; - case WL_OUTPUT_TRANSFORM_180: + case META_MONITOR_TRANSFORM_180: return RR_Rotate_180; - case WL_OUTPUT_TRANSFORM_270: + case META_MONITOR_TRANSFORM_270: return RR_Rotate_270; - case WL_OUTPUT_TRANSFORM_FLIPPED: + case META_MONITOR_TRANSFORM_FLIPPED: return RR_Reflect_X | RR_Rotate_0; - case WL_OUTPUT_TRANSFORM_FLIPPED_90: + case META_MONITOR_TRANSFORM_FLIPPED_90: return RR_Reflect_X | RR_Rotate_90; - case WL_OUTPUT_TRANSFORM_FLIPPED_180: + case META_MONITOR_TRANSFORM_FLIPPED_180: return RR_Reflect_X | RR_Rotate_180; - case WL_OUTPUT_TRANSFORM_FLIPPED_270: + case META_MONITOR_TRANSFORM_FLIPPED_270: return RR_Reflect_X | RR_Rotate_270; } @@ -847,7 +847,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, manager_xrandr->time, crtc_info->x, crtc_info->y, (XID)mode->mode_id, - wl_transform_to_xrandr (crtc_info->transform), + meta_monitor_transform_to_xrandr (crtc_info->transform), outputs, n_outputs); if (ok != Success) diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c index e17e9df68..dd2c76c07 100644 --- a/src/wayland/meta-wayland-outputs.c +++ b/src/wayland/meta-wayland-outputs.c @@ -168,12 +168,20 @@ wayland_output_destroy_notify (gpointer data) g_slice_free (MetaWaylandOutput, wayland_output); } +static inline enum wl_output_transform +wl_output_transform_from_meta_monitor_transform (MetaMonitorTransform transform) +{ + /* The enums are the same. */ + return (enum wl_output_transform) transform; +} + static void wayland_output_update_for_output (MetaWaylandOutput *wayland_output, MetaOutput *output) { GList *iter; guint mode_flags; + enum wl_output_transform wl_transform = wl_output_transform_from_meta_monitor_transform (output->crtc->transform); g_assert (output->crtc->current_mode != NULL); @@ -187,7 +195,7 @@ wayland_output_update_for_output (MetaWaylandOutput *wayland_output, if (wayland_output->x != output->crtc->rect.x || wayland_output->y != output->crtc->rect.y || - wayland_output->transform != output->crtc->transform) + wayland_output->transform != wl_transform) { wl_resource_post_event (resource, WL_OUTPUT_GEOMETRY, @@ -198,7 +206,7 @@ wayland_output_update_for_output (MetaWaylandOutput *wayland_output, output->subpixel_order, output->vendor, output->product, - output->crtc->transform); + wl_transform); } wl_resource_post_event (resource, @@ -214,7 +222,7 @@ wayland_output_update_for_output (MetaWaylandOutput *wayland_output, wayland_output->output = output; wayland_output->x = output->crtc->rect.x; wayland_output->y = output->crtc->rect.y; - wayland_output->transform = output->crtc->transform; + wayland_output->transform = wl_transform; } static GHashTable *