diff options
-rw-r--r-- | docs/reference/gnome-desktop3/gnome-desktop3-sections.txt | 2 | ||||
-rw-r--r-- | libgnome-desktop/gnome-rr.c | 31 | ||||
-rw-r--r-- | libgnome-desktop/gnome-rr.h | 13 | ||||
-rw-r--r-- | libgnome-desktop/xrandr.xml | 19 |
4 files changed, 65 insertions, 0 deletions
diff --git a/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt b/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt index 39e46f20..4f189fcd 100644 --- a/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt +++ b/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt @@ -297,10 +297,12 @@ gnome_rr_output_list_modes gnome_rr_output_get_preferred_mode gnome_rr_output_supports_mode gnome_rr_output_supports_underscanning +gnome_rr_output_supports_color_transform gnome_rr_output_get_is_primary gnome_rr_output_get_is_underscanning gnome_rr_output_get_backlight gnome_rr_output_set_backlight +gnome_rr_output_set_color_transform gnome_rr_output_get_display_name gnome_rr_output_get_ids_from_edid gnome_rr_output_get_min_backlight_step diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c index 11187aac..692dafaa 100644 --- a/libgnome-desktop/gnome-rr.c +++ b/libgnome-desktop/gnome-rr.c @@ -85,6 +85,7 @@ struct GnomeRROutput gboolean is_presentation; gboolean is_underscanning; gboolean supports_underscanning; + gboolean supports_color_transform; GnomeRRTile tile_info; }; @@ -1409,6 +1410,7 @@ output_initialize (GnomeRROutput *output, GVariant *info) g_variant_lookup (properties, "presentation", "b", &output->is_presentation); g_variant_lookup (properties, "underscanning", "b", &output->is_underscanning); g_variant_lookup (properties, "supports-underscanning", "b", &output->supports_underscanning); + g_variant_lookup (properties, "supports-color-transform", "b", &output->supports_color_transform); if ((edid = g_variant_lookup_value (properties, "edid", G_VARIANT_TYPE ("ay")))) { @@ -1629,6 +1631,28 @@ gnome_rr_output_set_backlight (GnomeRROutput *output, gint value, GError **error NULL, error); } +gboolean +gnome_rr_output_set_color_transform (GnomeRROutput *output, GnomeRRCTM ctm, + GError **error) +{ + GVariant *ctm_var; + GVariant *values[9]; + int i; + + g_return_val_if_fail (output != NULL, FALSE); + + for (i = 0; i < 9; i++) + values[i] = g_variant_new_uint64 (ctm.matrix[i]); + + ctm_var = g_variant_new_tuple (values, 9); + + return meta_dbus_display_config_call_set_output_ctm_sync (output->info->screen->priv->proxy, + output->info->serial, + output->id, + ctm_var, + NULL, error); +} + /** * gnome_rr_screen_get_output_by_name: * @@ -2244,6 +2268,13 @@ gnome_rr_output_supports_underscanning (GnomeRROutput *output) return output->supports_underscanning; } +gboolean +gnome_rr_output_supports_color_transform (const GnomeRROutput *output) +{ + g_assert (output != NULL); + return output->supports_color_transform; +} + const char * _gnome_rr_output_get_connector_type (GnomeRROutput *output) { diff --git a/libgnome-desktop/gnome-rr.h b/libgnome-desktop/gnome-rr.h index 4c7cf80c..111bab3f 100644 --- a/libgnome-desktop/gnome-rr.h +++ b/libgnome-desktop/gnome-rr.h @@ -69,6 +69,15 @@ typedef enum { GNOME_RR_DPMS_UNKNOWN } GnomeRRDpmsMode; +/* Identical to drm_color_ctm from <drm_mode.h> */ +typedef struct { + /* + * Conversion matrix in S31.32 sign-magnitude (not two's complement!) + * format. + */ + uint64_t matrix[9]; +} GnomeRRCTM; + /* Error codes */ #define GNOME_RR_ERROR (gnome_rr_error_quark ()) @@ -159,6 +168,9 @@ gint gnome_rr_output_get_min_backlight_step(GnomeRROutput *outpu gboolean gnome_rr_output_set_backlight (GnomeRROutput *output, gint value, GError **error); +gboolean gnome_rr_output_set_color_transform(GnomeRROutput *output, + GnomeRRCTM value, + GError **error); GnomeRRCrtc ** gnome_rr_output_get_possible_crtcs (GnomeRROutput *output); GnomeRRMode * gnome_rr_output_get_current_mode (GnomeRROutput *output); @@ -176,6 +188,7 @@ gboolean gnome_rr_output_supports_mode (GnomeRROutput *outpu gboolean gnome_rr_output_get_is_primary (GnomeRROutput *output); gboolean gnome_rr_output_get_is_underscanning (GnomeRROutput *output); gboolean gnome_rr_output_supports_underscanning (GnomeRROutput *output); +gboolean gnome_rr_output_supports_color_transform (const GnomeRROutput *output); /* GnomeRRMode */ guint32 gnome_rr_mode_get_id (GnomeRRMode *mode); diff --git a/libgnome-desktop/xrandr.xml b/libgnome-desktop/xrandr.xml index 16ef01ec..940ac179 100644 --- a/libgnome-desktop/xrandr.xml +++ b/libgnome-desktop/xrandr.xml @@ -101,6 +101,11 @@ or not - "presentation" (b): whether this output is for presentation only + - "supports-color-transform" (b): (readonly) whether + this output + supports the CTM + (color transform + matrix) property Note: properties might be ignored if not consistenly applied to all outputs in the same clone group. In general, it's expected that presentation or primary @@ -290,5 +295,19 @@ The client should then call GetResources() to read the new layout. --> <signal name="MonitorsChanged" /> + + <!-- + SetOutputCTM: + @serial: configuration serial + @output: API id of the output + @ctm: 3x3 matrix in fixed-point sign-magnitude S31.32 + + Changes the color transform matrix of @output + --> + <method name="SetOutputCTM"> + <arg name="serial" direction="in" type="u" /> + <arg name="output" direction="in" type="u" /> + <arg name="ctm" direction="in" type="(ttttttttt)" /> + </method> </interface> </node> |