/* * 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 . * * Author: * Naveen Kumar */ /** * 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/clutter-build-config.h" #include "clutter/clutter-color-state.h" #include "clutter/clutter-debug.h" #include "clutter/clutter-enum-types.h" #include "clutter/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", NULL, NULL, 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); }