From 67e3afe42e765af1405df124acf07958fede58bb Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 7 Jun 2024 08:48:54 -0400 Subject: [PATCH] Give textures a color state --- gdk/gdktexture.c | 47 +++++++++++++++++++++++++++++++++++++++++ gdk/gdktexture.h | 3 +++ gdk/gdktextureprivate.h | 2 ++ 3 files changed, 52 insertions(+) diff --git a/gdk/gdktexture.c b/gdk/gdktexture.c index 44f7359801..8aea1d461e 100644 --- a/gdk/gdktexture.c +++ b/gdk/gdktexture.c @@ -44,6 +44,7 @@ #include "gdkmemorytextureprivate.h" #include "gdkpaintable.h" #include "gdksnapshot.h" +#include "gdkcolorstate.h" #include #include "loaders/gdkpngprivate.h" @@ -69,6 +70,7 @@ enum { PROP_0, PROP_WIDTH, PROP_HEIGHT, + PROP_COLOR_STATE, N_PROPS }; @@ -282,6 +284,12 @@ gdk_texture_set_property (GObject *gobject, self->height = g_value_get_int (value); break; + case PROP_COLOR_STATE: + if (self->color_state) + gdk_color_state_unref (self->color_state); + self->color_state = gdk_color_state_ref (g_value_get_boxed (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; @@ -306,6 +314,10 @@ gdk_texture_get_property (GObject *gobject, g_value_set_int (value, self->height); break; + case PROP_COLOR_STATE: + g_value_set_boxed (value, self->color_state); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; @@ -344,6 +356,8 @@ gdk_texture_dispose (GObject *object) gdk_texture_clear_render_data (self); + g_clear_pointer (&self->color_state, gdk_color_state_unref); + G_OBJECT_CLASS (gdk_texture_parent_class)->dispose (object); } @@ -388,12 +402,28 @@ gdk_texture_class_init (GdkTextureClass *klass) G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * GdkTexture:color-state: (attributes org.gtk.Property.get=gdk_texture_get_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_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY); + g_object_class_install_properties (gobject_class, N_PROPS, properties); } static void gdk_texture_init (GdkTexture *self) { + self->color_state = gdk_color_state_get_srgb (); } /** @@ -727,6 +757,23 @@ gdk_texture_get_height (GdkTexture *texture) return texture->height; } +/** + * gdk_texture_get_color_state: (attributes org.gtk.Method.get_property=color-state) + * @texture: a `GdkTexture` + * + * Returns the color state associsated with @texture. + * + * Returns: (transfer none): the color state of the `GdkTexture` + * + * Since: 4.16 + */ +GdkColorState * +gdk_texture_get_color_state (GdkTexture *texture) +{ + g_return_val_if_fail (GDK_IS_TEXTURE (texture), NULL); + + return texture->color_state; +} void gdk_texture_do_download (GdkTexture *texture, GdkMemoryFormat format, diff --git a/gdk/gdktexture.h b/gdk/gdktexture.h index c359e56179..a932119148 100644 --- a/gdk/gdktexture.h +++ b/gdk/gdktexture.h @@ -83,6 +83,9 @@ int gdk_texture_get_height (GdkTexture GDK_AVAILABLE_IN_4_10 GdkMemoryFormat gdk_texture_get_format (GdkTexture *self) G_GNUC_PURE; +GDK_AVAILABLE_IN_4_16 +GdkColorState * gdk_texture_get_color_state (GdkTexture *self); + GDK_AVAILABLE_IN_ALL void gdk_texture_download (GdkTexture *texture, guchar *data, diff --git a/gdk/gdktextureprivate.h b/gdk/gdktextureprivate.h index 2a78d7415c..b03dce912e 100644 --- a/gdk/gdktextureprivate.h +++ b/gdk/gdktextureprivate.h @@ -26,6 +26,8 @@ struct _GdkTexture int width; int height; + GdkColorState *color_state; + gpointer render_key; gpointer render_data; GDestroyNotify render_notify;