clutter/color-state: Adds an ID to ColorStates

The ID is required for the wayland protocol. In the future we might want
to spend a bit more effort to re-use existing color states when a new
one is requested and also try to re-use IDs instead of just counting up.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3897>
This commit is contained in:
Sebastian Wick 2024-07-03 15:50:57 +02:00 committed by Marge Bot
parent 75baecb3d9
commit 58cb44186d
4 changed files with 32 additions and 4 deletions

View File

@ -25,6 +25,8 @@
#include "clutter/clutter-color-manager.h" #include "clutter/clutter-color-manager.h"
#include "clutter/clutter-private.h" #include "clutter/clutter-private.h"
unsigned int clutter_color_manager_get_next_id (ClutterColorManager *color_manager);
CoglSnippet * clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager, CoglSnippet * clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager,
const ClutterColorTransformKey *key); const ClutterColorTransformKey *key);

View File

@ -45,6 +45,7 @@ struct _ClutterColorManager
ClutterContext *context; ClutterContext *context;
GHashTable *snippet_cache; GHashTable *snippet_cache;
unsigned int id_counter;
}; };
G_DEFINE_FINAL_TYPE (ClutterColorManager, clutter_color_manager, G_TYPE_OBJECT) G_DEFINE_FINAL_TYPE (ClutterColorManager, clutter_color_manager, G_TYPE_OBJECT)
@ -133,6 +134,12 @@ clutter_color_manager_init (ClutterColorManager *color_manager)
g_object_unref); g_object_unref);
} }
unsigned int
clutter_color_manager_get_next_id (ClutterColorManager *color_manager)
{
return ++color_manager->id_counter;
}
CoglSnippet * CoglSnippet *
clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager, clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager,
const ClutterColorTransformKey *key) const ClutterColorTransformKey *key)

View File

@ -67,20 +67,19 @@ enum
static GParamSpec *obj_props[N_PROPS]; static GParamSpec *obj_props[N_PROPS];
typedef struct _ClutterColorStatePrivate ClutterColorStatePrivate;
struct _ClutterColorState struct _ClutterColorState
{ {
GObject parent_instance; GObject parent_instance;
}; };
struct _ClutterColorStatePrivate typedef struct _ClutterColorStatePrivate
{ {
ClutterContext *context; ClutterContext *context;
unsigned int id;
ClutterColorspace colorspace; ClutterColorspace colorspace;
ClutterTransferFunction transfer_function; ClutterTransferFunction transfer_function;
}; } ClutterColorStatePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState, G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
clutter_color_state, clutter_color_state,
@ -160,6 +159,18 @@ clutter_transfer_function_to_string (ClutterTransferFunction transfer_function)
g_assert_not_reached (); g_assert_not_reached ();
} }
unsigned int
clutter_color_state_get_id (ClutterColorState *color_state)
{
ClutterColorStatePrivate *priv;
g_return_val_if_fail (CLUTTER_IS_COLOR_STATE (color_state), 0);
priv = clutter_color_state_get_instance_private (color_state);
return priv->id;
}
ClutterColorspace ClutterColorspace
clutter_color_state_get_colorspace (ClutterColorState *color_state) clutter_color_state_get_colorspace (ClutterColorState *color_state)
{ {
@ -192,8 +203,13 @@ clutter_color_state_constructed (GObject *object)
ClutterColorState *color_state = CLUTTER_COLOR_STATE (object); ClutterColorState *color_state = CLUTTER_COLOR_STATE (object);
ClutterColorStatePrivate *priv = ClutterColorStatePrivate *priv =
clutter_color_state_get_instance_private (color_state); clutter_color_state_get_instance_private (color_state);
ClutterColorManager *color_manager;
g_warn_if_fail (priv->context); g_warn_if_fail (priv->context);
color_manager = clutter_context_get_color_manager (priv->context);
priv->id = clutter_color_manager_get_next_id (color_manager);
} }
static void static void

View File

@ -43,6 +43,9 @@ ClutterColorState * clutter_color_state_new (ClutterContext *context,
ClutterColorspace colorspace, ClutterColorspace colorspace,
ClutterTransferFunction transfer_function); ClutterTransferFunction transfer_function);
CLUTTER_EXPORT
unsigned int clutter_color_state_get_id (ClutterColorState *color_state);
CLUTTER_EXPORT CLUTTER_EXPORT
ClutterColorspace clutter_color_state_get_colorspace (ClutterColorState *color_state); ClutterColorspace clutter_color_state_get_colorspace (ClutterColorState *color_state);