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:
parent
75baecb3d9
commit
58cb44186d
4 changed files with 32 additions and 4 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue