From 1ead1627b71bffc26f899cf0bd2c1cd2325afd43 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 7 Jun 2024 08:49:59 -0400 Subject: [PATCH] dmabuf texture: color state support --- gdk/gdkdmabuftexture.c | 1 + gdk/gdkdmabuftexturebuilder.c | 65 +++++++++++++++++++++++++++++++++++ gdk/gdkdmabuftexturebuilder.h | 6 ++++ 3 files changed, 72 insertions(+) diff --git a/gdk/gdkdmabuftexture.c b/gdk/gdkdmabuftexture.c index d61cdc9fd1..5fcc8080e3 100644 --- a/gdk/gdkdmabuftexture.c +++ b/gdk/gdkdmabuftexture.c @@ -200,6 +200,7 @@ gdk_dmabuf_texture_new_from_builder (GdkDmabufTextureBuilder *builder, self = g_object_new (GDK_TYPE_DMABUF_TEXTURE, "width", width, "height", height, + "color-state", gdk_dmabuf_texture_builder_get_color_state (builder), NULL); g_set_object (&self->display, display); diff --git a/gdk/gdkdmabuftexturebuilder.c b/gdk/gdkdmabuftexturebuilder.c index 6508d9c2cf..8c0b724d4c 100644 --- a/gdk/gdkdmabuftexturebuilder.c +++ b/gdk/gdkdmabuftexturebuilder.c @@ -24,6 +24,7 @@ #include "gdkdebugprivate.h" #include "gdkdisplay.h" #include "gdkenumtypes.h" +#include "gdkcolorstate.h" #include "gdkdmabuftextureprivate.h" #include "gdkdmabuftexturebuilderprivate.h" @@ -41,6 +42,8 @@ struct _GdkDmabufTextureBuilder GdkDmabuf dmabuf; + GdkColorState *color_state; + GdkTexture *update_texture; cairo_region_t *update_region; }; @@ -124,6 +127,7 @@ enum PROP_MODIFIER, PROP_PREMULTIPLIED, PROP_N_PLANES, + PROP_COLOR_STATE, PROP_UPDATE_REGION, PROP_UPDATE_TEXTURE, @@ -141,6 +145,7 @@ gdk_dmabuf_texture_builder_dispose (GObject *object) g_clear_object (&self->update_texture); g_clear_pointer (&self->update_region, cairo_region_destroy); + g_clear_object (&self->color_state); G_OBJECT_CLASS (gdk_dmabuf_texture_builder_parent_class)->dispose (object); } @@ -183,6 +188,10 @@ gdk_dmabuf_texture_builder_get_property (GObject *object, g_value_set_uint (value, self->dmabuf.n_planes); break; + case PROP_COLOR_STATE: + g_value_set_object (value, self->color_state); + break; + case PROP_UPDATE_REGION: g_value_set_boxed (value, self->update_region); break; @@ -235,6 +244,10 @@ gdk_dmabuf_texture_builder_set_property (GObject *object, gdk_dmabuf_texture_builder_set_n_planes (self, g_value_get_uint (value)); break; + case PROP_COLOR_STATE: + gdk_dmabuf_texture_builder_set_color_state (self, g_value_get_object (value)); + break; + case PROP_UPDATE_REGION: gdk_dmabuf_texture_builder_set_update_region (self, g_value_get_boxed (value)); break; @@ -347,6 +360,18 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass) 1, GDK_DMABUF_MAX_PLANES, 1, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GdkDmabufTextureBuilder:color-state: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_color_state org.gtk.Property.set=gdk_dmabuf_texture_builder_set_color_state) + * + * The color state of the texture. + * + * Since: 4.16 + */ + properties[PROP_COLOR_STATE] = + g_param_spec_object ("color-state", NULL, NULL, + GDK_TYPE_COLOR_STATE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GdkDmabufTextureBuilder:update-region: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_update_region org.gtk.Property.set=gdk_dmabuf_texture_builder_set_update_region) * @@ -383,6 +408,8 @@ gdk_dmabuf_texture_builder_init (GdkDmabufTextureBuilder *self) for (int i = 0; i < GDK_DMABUF_MAX_PLANES; i++) self->dmabuf.planes[i].fd = -1; + + self->color_state = g_object_ref (gdk_color_state_get_srgb ()); } /** @@ -843,6 +870,44 @@ gdk_dmabuf_texture_builder_set_offset (GdkDmabufTextureBuilder *self, self->dmabuf.planes[plane].offset = offset; } +/** + * gdk_dmabuf_texture_builder_get_color_state: (attributes org.gtk.Method.get_property=color-state) + * @self: a `GdkDmabufTextureBuilder` + * + * Gets the color state previously set via gdk_dmabuf_texture_builder_set_color_state(). + * + * Returns: the color state + * + * Since: 4.16 + */ +GdkColorState * +gdk_dmabuf_texture_builder_get_color_state (GdkDmabufTextureBuilder *self) +{ + g_return_val_if_fail (GDK_IS_DMABUF_TEXTURE_BUILDER (self), NULL); + + return self->color_state; +} + +/** + * gdk_dmabuf_texture_builder_set_color_state: (attributes org.gtk.Method.set_property=color-state) + * @self: a `GdkDmabufTextureBuilder` + * @color_state: a `GdkColorState` + * + * Sets the color state for the texture. + * + * Since: 4.16 + */ +void +gdk_dmabuf_texture_builder_set_color_state (GdkDmabufTextureBuilder *self, + GdkColorState *color_state) +{ + g_return_if_fail (GDK_IS_DMABUF_TEXTURE_BUILDER (self)); + g_return_if_fail (GDK_IS_COLOR_STATE (color_state)); + + if (g_set_object (&self->color_state, color_state)) + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COLOR_STATE]); +} + /** * gdk_dmabuf_texture_builder_get_update_texture: (attributes org.gtk.Method.get_property=update-texture) * @self: a `GdkDmabufTextureBuilder` diff --git a/gdk/gdkdmabuftexturebuilder.h b/gdk/gdkdmabuftexturebuilder.h index 88ecfea5cf..28a0f45d6e 100644 --- a/gdk/gdkdmabuftexturebuilder.h +++ b/gdk/gdkdmabuftexturebuilder.h @@ -100,6 +100,12 @@ void gdk_dmabuf_texture_builder_set_offset (GdkDmabufT unsigned int plane, unsigned int offset); +GDK_AVAILABLE_IN_4_16 +GdkColorState * gdk_dmabuf_texture_builder_get_color_state (GdkDmabufTextureBuilder *self); +GDK_AVAILABLE_IN_4_16 +void gdk_dmabuf_texture_builder_set_color_state (GdkDmabufTextureBuilder *self, + GdkColorState *color_state); + GDK_AVAILABLE_IN_4_14 GdkTexture * gdk_dmabuf_texture_builder_get_update_texture (GdkDmabufTextureBuilder *self) G_GNUC_PURE; GDK_AVAILABLE_IN_4_14