1
0
Fork 0

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-private.h"
unsigned int clutter_color_manager_get_next_id (ClutterColorManager *color_manager);
CoglSnippet * clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager,
const ClutterColorTransformKey *key);

View file

@ -45,6 +45,7 @@ struct _ClutterColorManager
ClutterContext *context;
GHashTable *snippet_cache;
unsigned int id_counter;
};
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);
}
unsigned int
clutter_color_manager_get_next_id (ClutterColorManager *color_manager)
{
return ++color_manager->id_counter;
}
CoglSnippet *
clutter_color_manager_lookup_snippet (ClutterColorManager *color_manager,
const ClutterColorTransformKey *key)

View file

@ -67,20 +67,19 @@ enum
static GParamSpec *obj_props[N_PROPS];
typedef struct _ClutterColorStatePrivate ClutterColorStatePrivate;
struct _ClutterColorState
{
GObject parent_instance;
};
struct _ClutterColorStatePrivate
typedef struct _ClutterColorStatePrivate
{
ClutterContext *context;
unsigned int id;
ClutterColorspace colorspace;
ClutterTransferFunction transfer_function;
};
} ClutterColorStatePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
clutter_color_state,
@ -160,6 +159,18 @@ clutter_transfer_function_to_string (ClutterTransferFunction transfer_function)
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
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);
ClutterColorStatePrivate *priv =
clutter_color_state_get_instance_private (color_state);
ClutterColorManager *color_manager;
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

View file

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