summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2020-01-31 15:18:24 -0800
committerAaron Plattner <aaronp24@gmail.com>2020-03-20 18:15:22 +0000
commitba73c28b668e1e40b3ba940485c77f49fd5b28f8 (patch)
tree97e85add9e12525fe294222c49014b8327473028
parent0b408285b5cc806081df386c9d3fe65e4b4e4ac1 (diff)
downloadgnome-desktop-ba73c28b668e1e40b3ba940485c77f49fd5b28f8.tar.gz
rr: Add color transform functions
-rw-r--r--docs/reference/gnome-desktop3/gnome-desktop3-sections.txt2
-rw-r--r--libgnome-desktop/gnome-rr.c31
-rw-r--r--libgnome-desktop/gnome-rr.h13
-rw-r--r--libgnome-desktop/xrandr.xml19
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>