clutter/color-state: Add transfer function
Another enum, defining SRGB gamma transfer function, and the PQ transfer function. As with color spaces, add a 'default' that for now is treated as if it was sRGB. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
This commit is contained in:
parent
b74515b8cf
commit
af71749e75
@ -17838,7 +17838,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_COLORSPACE_DEFAULT,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_DEFAULT);
|
||||||
|
|
||||||
return color_state;
|
return color_state;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ enum
|
|||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
PROP_COLORSPACE,
|
PROP_COLORSPACE,
|
||||||
|
PROP_TRANSFER_FUNCTION,
|
||||||
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
@ -72,6 +73,7 @@ struct _ClutterColorState
|
|||||||
struct _ClutterColorStatePrivate
|
struct _ClutterColorStatePrivate
|
||||||
{
|
{
|
||||||
ClutterColorspace colorspace;
|
ClutterColorspace colorspace;
|
||||||
|
ClutterTransferFunction transfer_function;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
|
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
|
||||||
@ -91,6 +93,19 @@ clutter_color_state_get_colorspace (ClutterColorState *color_state)
|
|||||||
return priv->colorspace;
|
return priv->colorspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClutterTransferFunction
|
||||||
|
clutter_color_state_get_transfer_function (ClutterColorState *color_state)
|
||||||
|
{
|
||||||
|
ClutterColorStatePrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_COLOR_STATE (color_state),
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_DEFAULT);
|
||||||
|
|
||||||
|
priv = clutter_color_state_get_instance_private (color_state);
|
||||||
|
|
||||||
|
return priv->transfer_function;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_color_state_set_property (GObject *object,
|
clutter_color_state_set_property (GObject *object,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -108,6 +123,10 @@ clutter_color_state_set_property (GObject *object,
|
|||||||
priv->colorspace = g_value_get_enum (value);
|
priv->colorspace = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_TRANSFER_FUNCTION:
|
||||||
|
priv->transfer_function = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -129,6 +148,11 @@ clutter_color_state_get_property (GObject *object,
|
|||||||
clutter_color_state_get_colorspace (color_state));
|
clutter_color_state_get_colorspace (color_state));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_TRANSFER_FUNCTION:
|
||||||
|
g_value_set_enum (value,
|
||||||
|
clutter_color_state_get_transfer_function (color_state));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -157,6 +181,19 @@ clutter_color_state_class_init (ClutterColorStateClass *klass)
|
|||||||
G_PARAM_STATIC_STRINGS |
|
G_PARAM_STATIC_STRINGS |
|
||||||
G_PARAM_CONSTRUCT_ONLY);
|
G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterColorState:transfer-function:
|
||||||
|
*
|
||||||
|
* Transfer function.
|
||||||
|
*/
|
||||||
|
obj_props[PROP_TRANSFER_FUNCTION] =
|
||||||
|
g_param_spec_enum ("transfer-function", NULL, NULL,
|
||||||
|
CLUTTER_TYPE_TRANSFER_FUNCTION,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_SRGB,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_STATIC_STRINGS |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
|
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,10 +209,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 (ClutterColorspace colorspace,
|
||||||
|
ClutterTransferFunction transfer_function)
|
||||||
{
|
{
|
||||||
return g_object_new (CLUTTER_TYPE_COLOR_STATE,
|
return g_object_new (CLUTTER_TYPE_COLOR_STATE,
|
||||||
"colorspace", colorspace,
|
"colorspace", colorspace,
|
||||||
|
"transfer-function", transfer_function,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
@ -39,9 +39,13 @@ 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 (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);
|
||||||
|
|
||||||
|
CLUTTER_EXPORT
|
||||||
|
ClutterTransferFunction clutter_color_state_get_transfer_function (ClutterColorState *color_state);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -1015,6 +1015,23 @@ typedef enum
|
|||||||
CLUTTER_COLORSPACE_BT2020,
|
CLUTTER_COLORSPACE_BT2020,
|
||||||
} ClutterColorspace;
|
} ClutterColorspace;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterTransferFunction:
|
||||||
|
* @CLUTTER_TRANSFER_FUNCTION_DEFAULT: Unknown transfer function
|
||||||
|
* @CLUTTER_TRANSFER_FUNCTION_SRGB: The sRGB gamma transfer function
|
||||||
|
* @CLUTTER_TRANSFER_FUNCTION_PQ: Perceptual quantizer (PQ)
|
||||||
|
* @CLUTTER_TRANSFER_FUNCTION_LINEAR: Linear transfer function
|
||||||
|
*
|
||||||
|
* Colorspace information.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_DEFAULT,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_SRGB,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_PQ,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_LINEAR,
|
||||||
|
} ClutterTransferFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterStepMode:
|
* ClutterStepMode:
|
||||||
* @CLUTTER_STEP_MODE_START: The change in the value of a
|
* @CLUTTER_STEP_MODE_START: The change in the value of a
|
||||||
|
@ -49,8 +49,10 @@ actor_color_state_passed (void)
|
|||||||
ClutterActor *actor;
|
ClutterActor *actor;
|
||||||
ClutterColorState *color_state;
|
ClutterColorState *color_state;
|
||||||
ClutterColorspace colorspace;
|
ClutterColorspace colorspace;
|
||||||
|
ClutterTransferFunction transfer_function;
|
||||||
|
|
||||||
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020);
|
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||||
|
|
||||||
if (!color_state)
|
if (!color_state)
|
||||||
g_critical ("Failed to create color state with provided colorspace.");
|
g_critical ("Failed to create color state with provided colorspace.");
|
||||||
@ -67,8 +69,10 @@ actor_color_state_passed (void)
|
|||||||
|
|
||||||
color_state = clutter_actor_get_color_state (actor);
|
color_state = clutter_actor_get_color_state (actor);
|
||||||
colorspace = clutter_color_state_get_colorspace (color_state);
|
colorspace = clutter_color_state_get_colorspace (color_state);
|
||||||
|
transfer_function = clutter_color_state_get_transfer_function (color_state);
|
||||||
|
|
||||||
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_BT2020);
|
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_BT2020);
|
||||||
|
g_assert_cmpuint (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||||
|
|
||||||
clutter_actor_destroy (actor);
|
clutter_actor_destroy (actor);
|
||||||
}
|
}
|
||||||
@ -80,10 +84,12 @@ actor_change_color_state (void)
|
|||||||
ClutterActor *actor;
|
ClutterActor *actor;
|
||||||
ClutterColorState *color_state;
|
ClutterColorState *color_state;
|
||||||
ClutterColorspace colorspace;
|
ClutterColorspace colorspace;
|
||||||
|
ClutterTransferFunction transfer_function;
|
||||||
|
|
||||||
actor = clutter_actor_new ();
|
actor = clutter_actor_new ();
|
||||||
|
|
||||||
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020);
|
color_state = clutter_color_state_new (CLUTTER_COLORSPACE_BT2020,
|
||||||
|
CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||||
|
|
||||||
if (!color_state)
|
if (!color_state)
|
||||||
g_critical ("Failed to create color state with provided colorspace.");
|
g_critical ("Failed to create color state with provided colorspace.");
|
||||||
@ -92,8 +98,10 @@ actor_change_color_state (void)
|
|||||||
|
|
||||||
color_state = clutter_actor_get_color_state (actor);
|
color_state = clutter_actor_get_color_state (actor);
|
||||||
colorspace = clutter_color_state_get_colorspace (color_state);
|
colorspace = clutter_color_state_get_colorspace (color_state);
|
||||||
|
transfer_function = clutter_color_state_get_transfer_function (color_state);
|
||||||
|
|
||||||
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_BT2020);
|
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_BT2020);
|
||||||
|
g_assert_cmpuint (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||||
|
|
||||||
clutter_actor_destroy (actor);
|
clutter_actor_destroy (actor);
|
||||||
}
|
}
|
||||||
@ -106,6 +114,7 @@ actor_change_color_state_to_null (void)
|
|||||||
ClutterActor *actor;
|
ClutterActor *actor;
|
||||||
ClutterColorState *color_state;
|
ClutterColorState *color_state;
|
||||||
ClutterColorspace colorspace;
|
ClutterColorspace colorspace;
|
||||||
|
ClutterTransferFunction transfer_function;
|
||||||
|
|
||||||
actor = clutter_actor_new ();
|
actor = clutter_actor_new ();
|
||||||
|
|
||||||
@ -113,8 +122,10 @@ actor_change_color_state_to_null (void)
|
|||||||
|
|
||||||
color_state = clutter_actor_get_color_state (actor);
|
color_state = clutter_actor_get_color_state (actor);
|
||||||
colorspace = clutter_color_state_get_colorspace (color_state);
|
colorspace = clutter_color_state_get_colorspace (color_state);
|
||||||
|
transfer_function = clutter_color_state_get_transfer_function (color_state);
|
||||||
|
|
||||||
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_DEFAULT);
|
g_assert_cmpuint (colorspace, ==, CLUTTER_COLORSPACE_DEFAULT);
|
||||||
|
g_assert_cmpuint (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_DEFAULT);
|
||||||
|
|
||||||
clutter_actor_destroy (actor);
|
clutter_actor_destroy (actor);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user