diff --git a/gdk/gdkgltexture.c b/gdk/gdkgltexture.c index c30f2b2b81..1dd3727bc5 100644 --- a/gdk/gdkgltexture.c +++ b/gdk/gdkgltexture.c @@ -488,6 +488,7 @@ gdk_gl_texture_new_from_builder (GdkGLTextureBuilder *builder, self = g_object_new (GDK_TYPE_GL_TEXTURE, "width", gdk_gl_texture_builder_get_width (builder), "height", gdk_gl_texture_builder_get_height (builder), + "color-state", gdk_gl_texture_builder_get_color_state (builder), NULL); self->context = g_object_ref (gdk_gl_texture_builder_get_context (builder)); diff --git a/gdk/gdkgltexturebuilder.c b/gdk/gdkgltexturebuilder.c index e74c41012d..60d2a4461c 100644 --- a/gdk/gdkgltexturebuilder.c +++ b/gdk/gdkgltexturebuilder.c @@ -23,6 +23,7 @@ #include "gdkenumtypes.h" #include "gdkglcontext.h" +#include "gdkcolorstate.h" #include "gdkgltextureprivate.h" #include @@ -38,6 +39,7 @@ struct _GdkGLTextureBuilder GdkMemoryFormat format; gboolean has_mipmap; gpointer sync; + GdkColorState *color_state; GdkTexture *update_texture; cairo_region_t *update_region; @@ -75,6 +77,7 @@ enum PROP_HEIGHT, PROP_ID, PROP_SYNC, + PROP_COLOR_STATE, PROP_UPDATE_REGION, PROP_UPDATE_TEXTURE, PROP_WIDTH, @@ -95,6 +98,7 @@ gdk_gl_texture_builder_dispose (GObject *object) g_clear_object (&self->update_texture); g_clear_pointer (&self->update_region, cairo_region_destroy); + g_clear_pointer (&self->color_state, gdk_color_state_unref); G_OBJECT_CLASS (gdk_gl_texture_builder_parent_class)->dispose (object); } @@ -133,6 +137,10 @@ gdk_gl_texture_builder_get_property (GObject *object, g_value_set_pointer (value, self->sync); 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; @@ -185,6 +193,10 @@ gdk_gl_texture_builder_set_property (GObject *object, gdk_gl_texture_builder_set_sync (self, g_value_get_pointer (value)); break; + case PROP_COLOR_STATE: + gdk_gl_texture_builder_set_color_state (self, g_value_get_object (value)); + break; + case PROP_UPDATE_REGION: gdk_gl_texture_builder_set_update_region (self, g_value_get_boxed (value)); break; @@ -286,6 +298,18 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass) g_param_spec_pointer ("sync", NULL, NULL, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GdkGLTextureBuilder:color-state: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_color_state org.gtk.Property.set=gdk_gl_texture_builder_set_color_state) + * + * The color state of the texture. + * + * Since: 4.16 + */ + properties[PROP_COLOR_STATE] = + g_param_spec_boxed ("color-state", NULL, NULL, + GDK_TYPE_COLOR_STATE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GdkGLTextureBuilder:update-region: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_update_region org.gtk.Property.set=gdk_gl_texture_builder_set_update_region) * @@ -329,6 +353,7 @@ static void gdk_gl_texture_builder_init (GdkGLTextureBuilder *self) { self->format = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; + self->color_state = gdk_color_state_get_srgb (); } /** @@ -672,6 +697,49 @@ gdk_gl_texture_builder_set_format (GdkGLTextureBuilder *self, g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FORMAT]); } +/** + * gdk_gl_texture_builder_get_color_state: (attributes org.gtk.Method.get_property=color-state) + * @self: a `GdkGLTextureBuilder` + * + * Gets the color state previously set via gdk_gl_texture_builder_set_color_state(). + * + * Returns: the color state + * + * Since: 4.16 + */ +GdkColorState * +gdk_gl_texture_builder_get_color_state (GdkGLTextureBuilder *self) +{ + g_return_val_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self), NULL); + + return self->color_state; +} + +/** + * gdk_gl_texture_builder_set_color_state: (attributes org.gtk.Method.set_property=color-state) + * @self: a `GdkGLTextureBuilder` + * @color_state: a `GdkColorState` + * + * Sets the color state for the texture. + * Sets the color state of the texture. The default is SRGB. + * + * Since: 4.16 + */ +void +gdk_gl_texture_builder_set_color_state (GdkGLTextureBuilder *self, + GdkColorState *color_state) +{ + g_return_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self)); + g_return_if_fail (color_state != NULL); + + if (self->color_state != color_state) + { + g_clear_pointer (&self->color_state, gdk_color_state_unref); + self->color_state = gdk_color_state_ref (color_state); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COLOR_STATE]); + } +} + /** * gdk_gl_texture_builder_get_update_texture: (attributes org.gtk.Method.get_property=update-texture) * @self: a `GdkGLTextureBuilder` diff --git a/gdk/gdkgltexturebuilder.h b/gdk/gdkgltexturebuilder.h index 8bf105064b..33b7e82f19 100644 --- a/gdk/gdkgltexturebuilder.h +++ b/gdk/gdkgltexturebuilder.h @@ -64,6 +64,12 @@ GDK_AVAILABLE_IN_4_12 void gdk_gl_texture_builder_set_format (GdkGLTextureBuilder *self, GdkMemoryFormat format); +GDK_AVAILABLE_IN_4_16 +GdkColorState * gdk_gl_texture_builder_get_color_state (GdkGLTextureBuilder *self); +GDK_AVAILABLE_IN_4_16 +void gdk_gl_texture_builder_set_color_state (GdkGLTextureBuilder *self, + GdkColorState *color_state); + GDK_AVAILABLE_IN_4_12 gboolean gdk_gl_texture_builder_get_has_mipmap (GdkGLTextureBuilder *self) G_GNUC_PURE; GDK_AVAILABLE_IN_4_12