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
5 changed files with 78 additions and 6 deletions
|
@ -17838,7 +17838,8 @@ create_default_color_state (ClutterActor *self)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ enum
|
|||
PROP_0,
|
||||
|
||||
PROP_COLORSPACE,
|
||||
PROP_TRANSFER_FUNCTION,
|
||||
|
||||
N_PROPS
|
||||
};
|
||||
|
@ -72,6 +73,7 @@ struct _ClutterColorState
|
|||
struct _ClutterColorStatePrivate
|
||||
{
|
||||
ClutterColorspace colorspace;
|
||||
ClutterTransferFunction transfer_function;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
|
||||
|
@ -91,6 +93,19 @@ clutter_color_state_get_colorspace (ClutterColorState *color_state)
|
|||
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
|
||||
clutter_color_state_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
|
@ -108,6 +123,10 @@ clutter_color_state_set_property (GObject *object,
|
|||
priv->colorspace = g_value_get_enum (value);
|
||||
break;
|
||||
|
||||
case PROP_TRANSFER_FUNCTION:
|
||||
priv->transfer_function = g_value_get_enum (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -129,6 +148,11 @@ clutter_color_state_get_property (GObject *object,
|
|||
clutter_color_state_get_colorspace (color_state));
|
||||
break;
|
||||
|
||||
case PROP_TRANSFER_FUNCTION:
|
||||
g_value_set_enum (value,
|
||||
clutter_color_state_get_transfer_function (color_state));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -157,6 +181,19 @@ clutter_color_state_class_init (ClutterColorStateClass *klass)
|
|||
G_PARAM_STATIC_STRINGS |
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -172,10 +209,12 @@ clutter_color_state_init (ClutterColorState *color_state)
|
|||
*
|
||||
* Return value: A new ClutterColorState object.
|
||||
**/
|
||||
ClutterColorState*
|
||||
clutter_color_state_new (ClutterColorspace colorspace)
|
||||
ClutterColorState *
|
||||
clutter_color_state_new (ClutterColorspace colorspace,
|
||||
ClutterTransferFunction transfer_function)
|
||||
{
|
||||
return g_object_new (CLUTTER_TYPE_COLOR_STATE,
|
||||
"colorspace", colorspace,
|
||||
"transfer-function", transfer_function,
|
||||
NULL);
|
||||
}
|
||||
|
|
|
@ -39,9 +39,13 @@ G_DECLARE_FINAL_TYPE (ClutterColorState, clutter_color_state,
|
|||
GObject)
|
||||
|
||||
CLUTTER_EXPORT
|
||||
ClutterColorState * clutter_color_state_new (ClutterColorspace colorspace);
|
||||
ClutterColorState * clutter_color_state_new (ClutterColorspace colorspace,
|
||||
ClutterTransferFunction transfer_function);
|
||||
|
||||
CLUTTER_EXPORT
|
||||
ClutterColorspace clutter_color_state_get_colorspace (ClutterColorState *color_state);
|
||||
|
||||
CLUTTER_EXPORT
|
||||
ClutterTransferFunction clutter_color_state_get_transfer_function (ClutterColorState *color_state);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -1015,6 +1015,23 @@ typedef enum
|
|||
CLUTTER_COLORSPACE_BT2020,
|
||||
} 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:
|
||||
* @CLUTTER_STEP_MODE_START: The change in the value of a
|
||||
|
|
|
@ -49,8 +49,10 @@ actor_color_state_passed (void)
|
|||
ClutterActor *actor;
|
||||
ClutterColorState *color_state;
|
||||
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)
|
||||
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);
|
||||
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 (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||
|
||||
clutter_actor_destroy (actor);
|
||||
}
|
||||
|
@ -80,10 +84,12 @@ actor_change_color_state (void)
|
|||
ClutterActor *actor;
|
||||
ClutterColorState *color_state;
|
||||
ClutterColorspace colorspace;
|
||||
ClutterTransferFunction transfer_function;
|
||||
|
||||
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)
|
||||
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);
|
||||
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 (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_PQ);
|
||||
|
||||
clutter_actor_destroy (actor);
|
||||
}
|
||||
|
@ -106,6 +114,7 @@ actor_change_color_state_to_null (void)
|
|||
ClutterActor *actor;
|
||||
ClutterColorState *color_state;
|
||||
ClutterColorspace colorspace;
|
||||
ClutterTransferFunction transfer_function;
|
||||
|
||||
actor = clutter_actor_new ();
|
||||
|
||||
|
@ -113,8 +122,10 @@ actor_change_color_state_to_null (void)
|
|||
|
||||
color_state = clutter_actor_get_color_state (actor);
|
||||
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 (transfer_function, ==, CLUTTER_TRANSFER_FUNCTION_DEFAULT);
|
||||
|
||||
clutter_actor_destroy (actor);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue