clutter/color-state: Pass the ClutterContext when constructing

This will be used to cache pipeline snippets shared by multiple color
states.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
This commit is contained in:
Jonas Ådahl 2024-05-10 14:57:52 +02:00 committed by Sebastian Wick
parent 4a07242fed
commit d7bbc9712f
5 changed files with 54 additions and 8 deletions

View File

@ -17844,7 +17844,8 @@ create_default_color_state (ClutterActor *self)
{ {
ClutterColorState *color_state; ClutterColorState *color_state;
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_DEFAULT, color_state = clutter_color_state_new (clutter_actor_get_context (self),
CLUTTER_COLORSPACE_DEFAULT,
CLUTTER_TRANSFER_FUNCTION_DEFAULT); CLUTTER_TRANSFER_FUNCTION_DEFAULT);
return color_state; return color_state;

View File

@ -57,6 +57,7 @@ enum
{ {
PROP_0, PROP_0,
PROP_CONTEXT,
PROP_COLORSPACE, PROP_COLORSPACE,
PROP_TRANSFER_FUNCTION, PROP_TRANSFER_FUNCTION,
@ -74,6 +75,8 @@ struct _ClutterColorState
struct _ClutterColorStatePrivate struct _ClutterColorStatePrivate
{ {
ClutterContext *context;
ClutterColorspace colorspace; ClutterColorspace colorspace;
ClutterTransferFunction transfer_function; ClutterTransferFunction transfer_function;
}; };
@ -142,6 +145,16 @@ clutter_color_state_get_transfer_function (ClutterColorState *color_state)
return priv->transfer_function; return priv->transfer_function;
} }
static void
clutter_color_state_constructed (GObject *object)
{
ClutterColorState *color_state = CLUTTER_COLOR_STATE (object);
ClutterColorStatePrivate *priv =
clutter_color_state_get_instance_private (color_state);
g_warn_if_fail (priv->context);
}
static void static void
clutter_color_state_set_property (GObject *object, clutter_color_state_set_property (GObject *object,
guint prop_id, guint prop_id,
@ -155,6 +168,10 @@ clutter_color_state_set_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_CONTEXT:
priv->context = g_value_get_object (value);
break;
case PROP_COLORSPACE: case PROP_COLORSPACE:
priv->colorspace = g_value_get_enum (value); priv->colorspace = g_value_get_enum (value);
break; break;
@ -176,9 +193,15 @@ clutter_color_state_get_property (GObject *object,
GParamSpec *pspec) GParamSpec *pspec)
{ {
ClutterColorState *color_state = CLUTTER_COLOR_STATE (object); ClutterColorState *color_state = CLUTTER_COLOR_STATE (object);
ClutterColorStatePrivate *priv =
clutter_color_state_get_instance_private (color_state);
switch (prop_id) switch (prop_id)
{ {
case PROP_CONTEXT:
g_value_set_object (value, priv->context);
break;
case PROP_COLORSPACE: case PROP_COLORSPACE:
g_value_set_enum (value, g_value_set_enum (value,
clutter_color_state_get_colorspace (color_state)); clutter_color_state_get_colorspace (color_state));
@ -200,9 +223,22 @@ clutter_color_state_class_init (ClutterColorStateClass *klass)
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->constructed = clutter_color_state_constructed;
gobject_class->set_property = clutter_color_state_set_property; gobject_class->set_property = clutter_color_state_set_property;
gobject_class->get_property = clutter_color_state_get_property; gobject_class->get_property = clutter_color_state_get_property;
/**
* ClutterColorState:context:
*
* The associated ClutterContext.
*/
obj_props[PROP_CONTEXT] =
g_param_spec_object ("context", NULL, NULL,
CLUTTER_TYPE_CONTEXT,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY);
/** /**
* ClutterColorState:colorspace: * ClutterColorState:colorspace:
* *
@ -246,10 +282,12 @@ clutter_color_state_init (ClutterColorState *color_state)
* Return value: A new ClutterColorState object. * Return value: A new ClutterColorState object.
**/ **/
ClutterColorState * ClutterColorState *
clutter_color_state_new (ClutterColorspace colorspace, clutter_color_state_new (ClutterContext *context,
ClutterTransferFunction transfer_function) ClutterColorspace colorspace,
ClutterTransferFunction transfer_function)
{ {
return g_object_new (CLUTTER_TYPE_COLOR_STATE, return g_object_new (CLUTTER_TYPE_COLOR_STATE,
"context", context,
"colorspace", colorspace, "colorspace", colorspace,
"transfer-function", transfer_function, "transfer-function", transfer_function,
NULL); NULL);

View File

@ -39,8 +39,9 @@ G_DECLARE_FINAL_TYPE (ClutterColorState, clutter_color_state,
GObject) GObject)
CLUTTER_EXPORT CLUTTER_EXPORT
ClutterColorState * clutter_color_state_new (ClutterColorspace colorspace, ClutterColorState * clutter_color_state_new (ClutterContext *context,
ClutterTransferFunction transfer_function); ClutterColorspace colorspace,
ClutterTransferFunction transfer_function);
CLUTTER_EXPORT CLUTTER_EXPORT
ClutterColorspace clutter_color_state_get_colorspace (ClutterColorState *color_state); ClutterColorspace clutter_color_state_get_colorspace (ClutterColorState *color_state);

View File

@ -358,7 +358,9 @@ meta_stage_new (MetaBackend *backend)
MetaStage *stage; MetaStage *stage;
MetaMonitorManager *monitor_manager; MetaMonitorManager *monitor_manager;
stage = g_object_new (META_TYPE_STAGE, NULL); stage = g_object_new (META_TYPE_STAGE,
"context", meta_backend_get_clutter_context (backend),
NULL);
stage->backend = backend; stage->backend = backend;
monitor_manager = meta_backend_get_monitor_manager (backend); monitor_manager = meta_backend_get_monitor_manager (backend);

View File

@ -46,12 +46,14 @@ actor_color_state_default (void)
static void static void
actor_color_state_passed (void) actor_color_state_passed (void)
{ {
ClutterContext *context = clutter_test_get_context ();
ClutterActor *actor; ClutterActor *actor;
ClutterColorState *color_state; ClutterColorState *color_state;
ClutterColorspace colorspace; ClutterColorspace colorspace;
ClutterTransferFunction transfer_function; ClutterTransferFunction transfer_function;
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020, color_state = clutter_color_state_new (context,
CLUTTER_COLORSPACE_BT2020,
CLUTTER_TRANSFER_FUNCTION_PQ); CLUTTER_TRANSFER_FUNCTION_PQ);
if (!color_state) if (!color_state)
@ -81,6 +83,7 @@ actor_color_state_passed (void)
static void static void
actor_change_color_state (void) actor_change_color_state (void)
{ {
ClutterContext *context = clutter_test_get_context ();
ClutterActor *actor; ClutterActor *actor;
ClutterColorState *color_state; ClutterColorState *color_state;
ClutterColorspace colorspace; ClutterColorspace colorspace;
@ -88,7 +91,8 @@ actor_change_color_state (void)
actor = clutter_actor_new (); actor = clutter_actor_new ();
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020, color_state = clutter_color_state_new (context,
CLUTTER_COLORSPACE_BT2020,
CLUTTER_TRANSFER_FUNCTION_PQ); CLUTTER_TRANSFER_FUNCTION_PQ);
if (!color_state) if (!color_state)