12c02b3f1a
ClutterColorState, that is a GObject. each ClutterActor would own such an object, and it'd be set via a GObject property. It would have an API to get the colorspace, whether the actor content is in pq or not, and things like that. if it is NULL, it will default to color state with sRGB colorspace. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2443>
183 lines
4.8 KiB
C
183 lines
4.8 KiB
C
/*
|
|
* Clutter.
|
|
*
|
|
* An OpenGL based 'interactive canvas' library.
|
|
*
|
|
* Copyright (C) 2022 Intel Corporation.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Author:
|
|
* Naveen Kumar <naveen1.kumar@intel.com>
|
|
*/
|
|
|
|
/**
|
|
* ClutterColorState:
|
|
*
|
|
* Color state of each ClutterActor
|
|
*
|
|
* The #ClutterColorState class contains the colorspace of each color
|
|
* states (e.g. sRGB colorspace).
|
|
*
|
|
* Each [class@Actor] would own such an object.
|
|
*
|
|
* A single #ClutterColorState object can be shared by multiple [class@Actor]
|
|
* or maybe a separate color state for each [class@Actor] (depending on whether
|
|
* #ClutterColorState would be statefull or stateless).
|
|
*
|
|
* #ClutterColorState, if not set during construction, it will default to sRGB
|
|
* color state
|
|
*
|
|
* The #ClutterColorState would have API to get the colorspace, whether the
|
|
* actor content is in pq or not, and things like that
|
|
*/
|
|
|
|
#include "clutter-build-config.h"
|
|
|
|
#include "clutter-color-state.h"
|
|
|
|
#include "clutter-debug.h"
|
|
#include "clutter-enum-types.h"
|
|
#include "clutter-private.h"
|
|
|
|
enum
|
|
{
|
|
PROP_0,
|
|
|
|
PROP_COLORSPACE,
|
|
|
|
N_PROPS
|
|
};
|
|
|
|
static GParamSpec *obj_props[N_PROPS];
|
|
|
|
typedef struct _ClutterColorStatePrivate ClutterColorStatePrivate;
|
|
|
|
struct _ClutterColorState
|
|
{
|
|
GObject parent_instance;
|
|
};
|
|
|
|
struct _ClutterColorStatePrivate
|
|
{
|
|
ClutterColorspace colorspace;
|
|
};
|
|
|
|
G_DEFINE_TYPE_WITH_PRIVATE (ClutterColorState,
|
|
clutter_color_state,
|
|
G_TYPE_OBJECT)
|
|
|
|
ClutterColorspace
|
|
clutter_color_state_get_colorspace (ClutterColorState *color_state)
|
|
{
|
|
ClutterColorStatePrivate *priv;
|
|
|
|
g_return_val_if_fail (CLUTTER_IS_COLOR_STATE (color_state),
|
|
CLUTTER_COLORSPACE_UNKNOWN);
|
|
|
|
priv = clutter_color_state_get_instance_private (color_state);
|
|
|
|
return priv->colorspace;
|
|
}
|
|
|
|
static void
|
|
clutter_color_state_set_property (GObject *object,
|
|
guint prop_id,
|
|
const GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
ClutterColorState *color_state = CLUTTER_COLOR_STATE (object);
|
|
ClutterColorStatePrivate *priv;
|
|
|
|
priv = clutter_color_state_get_instance_private (color_state);
|
|
|
|
switch (prop_id)
|
|
{
|
|
case PROP_COLORSPACE:
|
|
priv->colorspace = g_value_get_enum (value);
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
clutter_color_state_get_property (GObject *object,
|
|
guint prop_id,
|
|
GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
ClutterColorState *color_state = CLUTTER_COLOR_STATE (object);
|
|
|
|
switch (prop_id)
|
|
{
|
|
case PROP_COLORSPACE:
|
|
g_value_set_enum (value,
|
|
clutter_color_state_get_colorspace (color_state));
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
clutter_color_state_class_init (ClutterColorStateClass *klass)
|
|
{
|
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
|
|
gobject_class->set_property = clutter_color_state_set_property;
|
|
gobject_class->get_property = clutter_color_state_get_property;
|
|
|
|
/**
|
|
* ClutterColorState:colorspace:
|
|
*
|
|
* Colorspace information of the each color state,
|
|
* defaults to sRGB colorspace
|
|
*/
|
|
obj_props[PROP_COLORSPACE] =
|
|
g_param_spec_enum ("colorspace",
|
|
P_("Colorspace"),
|
|
P_("Colorspace information of the color state"),
|
|
CLUTTER_TYPE_COLORSPACE,
|
|
CLUTTER_COLORSPACE_SRGB,
|
|
CLUTTER_PARAM_READWRITE |
|
|
G_PARAM_CONSTRUCT_ONLY);
|
|
|
|
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
|
|
}
|
|
|
|
static void
|
|
clutter_color_state_init (ClutterColorState *color_state)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* clutter_color_state_new:
|
|
*
|
|
* Create a new ClutterColorState object.
|
|
*
|
|
* Return value: A new ClutterColorState object.
|
|
**/
|
|
ClutterColorState*
|
|
clutter_color_state_new (ClutterColorspace colorspace)
|
|
{
|
|
return g_object_new (CLUTTER_TYPE_COLOR_STATE,
|
|
"colorspace", colorspace,
|
|
NULL);
|
|
}
|