2006-05-29 08:59:36 +00:00
|
|
|
/*
|
|
|
|
* Clutter.
|
|
|
|
*
|
|
|
|
* An OpenGL based 'interactive canvas' library.
|
|
|
|
*
|
2009-02-28 16:16:09 +00:00
|
|
|
* Authored By: Matthew Allum <mallum@openedhand.com>
|
|
|
|
* Emmanuele Bassi <ebassi@linux.intel.com>
|
2006-05-29 08:59:36 +00:00
|
|
|
*
|
2009-02-28 16:16:09 +00:00
|
|
|
* Copyright (C) 2006, 2007, 2008 OpenedHand
|
|
|
|
* Copyright (C) 2009 Intel Corp.
|
2006-05-29 08:59:36 +00:00
|
|
|
*
|
|
|
|
* 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
|
2008-10-30 17:04:34 +00:00
|
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
2006-05-29 08:59:36 +00:00
|
|
|
*/
|
|
|
|
|
2015-07-07 14:51:13 +00:00
|
|
|
#ifndef __CLUTTER_COLOR_H__
|
|
|
|
#define __CLUTTER_COLOR_H__
|
|
|
|
|
2008-10-30 17:04:34 +00:00
|
|
|
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
|
|
|
|
#error "Only <clutter/clutter.h> can be included directly."
|
|
|
|
#endif
|
|
|
|
|
2010-11-18 18:23:49 +00:00
|
|
|
#include <clutter/clutter-types.h>
|
2006-05-29 08:59:36 +00:00
|
|
|
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
|
2006-06-05 Emmanuele Bassi <ebassi@openedhand.com>
* clutter-color.h:
* clutter-color.c: Reimplement ClutterColor as a boxed type;
add convenience API for color handling, like: add, subtract,
shade, HSL color-space conversion, packing and unpacking.
* clutter-private.h: Update ClutterMainContext, and export the
main context pointer here.
* clutter-rectangle.h:
* clutter-rectangle.c: Update the color-related code; make
clutter_rectangle_new() and empty constructor and provide
clutter_rectangle_new_with_color(); provide color setter
and getter API.
* clutter-label.h:
* clutter-label.c: Rename the "font" property to "font-name";
update the color-related code to the new ClutterColor object;
rename clutter_label_new() to clutter_label_new_with_text(),
and add setters and getters for the properties.
* clutter-marshal.list: Add VOID:OBJECT and VOID:BOXED marshallers
generators.
* clutter-stage.h:
* clutter-stage.c: Rework the API: provide a default constructor
for a singleton object, named clutter_stage_get_default(), which
supercedes the clutter_stage() function in clutter-main; provide
new events: button-press-event, button-release-event,
key-press-event and key-release-event; update the color-related
code;
(clutter_stage_snapshot): Allow negative width and height when
taking a snapshot (meaning: use full width/height).
(clutter_stage_get_element_at_pos): Rename clutter_stage_pick().
* clutter-element.c (clutter_element_paint): Clean up the
stage and color related code.
* clutter-event.h:
* clutter-event.c: Add generic ClutterAnyEvent type; add
clutter_event_new(), clutter_event_copy() and clutter_event_free();
make ClutterEvent a boxed type.
* clutter-main.h:
* clutter-main.c: Remove clutter_stage(); add clutter_main_quit(),
for cleanly quitting from clutter_main(); add multiple mainloops
support; allocate the ClutterCntx instead of adding it to the
stack; re-work the ClutterEvent dispatching.
* clutter-group.c (clutter_group_add), (clutter_group_remove): Keep
a reference on the element when added to a ClutterGroup.
* examples/rects.py
* examples/test.c:
* examples/test-text.c:
* examples/video-cube.c:
* examples/super-oh.c:
* examples/test-video.c: Update.
2006-06-05 13:38:31 +00:00
|
|
|
#define CLUTTER_TYPE_COLOR (clutter_color_get_type ())
|
2006-05-29 08:59:36 +00:00
|
|
|
|
2007-08-07 14:03:58 +00:00
|
|
|
/**
|
|
|
|
* ClutterColor:
|
|
|
|
* @red: red component, between 0 and 255
|
|
|
|
* @green: green component, between 0 and 255
|
|
|
|
* @blue: blue component, between 0 and 255
|
|
|
|
* @alpha: alpha component, between 0 and 255
|
|
|
|
*
|
2022-05-25 16:41:48 +00:00
|
|
|
* A simple type for representing colors.
|
|
|
|
*
|
|
|
|
* A #ClutterColor is expressed as a 4-tuple of values ranging from
|
|
|
|
* zero to 255, one for each color channel plus one for the alpha.
|
|
|
|
*
|
|
|
|
* The alpha channel is fully opaque at 255 and fully transparent at 0.
|
2007-08-07 14:03:58 +00:00
|
|
|
*/
|
2006-06-05 Emmanuele Bassi <ebassi@openedhand.com>
* clutter-color.h:
* clutter-color.c: Reimplement ClutterColor as a boxed type;
add convenience API for color handling, like: add, subtract,
shade, HSL color-space conversion, packing and unpacking.
* clutter-private.h: Update ClutterMainContext, and export the
main context pointer here.
* clutter-rectangle.h:
* clutter-rectangle.c: Update the color-related code; make
clutter_rectangle_new() and empty constructor and provide
clutter_rectangle_new_with_color(); provide color setter
and getter API.
* clutter-label.h:
* clutter-label.c: Rename the "font" property to "font-name";
update the color-related code to the new ClutterColor object;
rename clutter_label_new() to clutter_label_new_with_text(),
and add setters and getters for the properties.
* clutter-marshal.list: Add VOID:OBJECT and VOID:BOXED marshallers
generators.
* clutter-stage.h:
* clutter-stage.c: Rework the API: provide a default constructor
for a singleton object, named clutter_stage_get_default(), which
supercedes the clutter_stage() function in clutter-main; provide
new events: button-press-event, button-release-event,
key-press-event and key-release-event; update the color-related
code;
(clutter_stage_snapshot): Allow negative width and height when
taking a snapshot (meaning: use full width/height).
(clutter_stage_get_element_at_pos): Rename clutter_stage_pick().
* clutter-element.c (clutter_element_paint): Clean up the
stage and color related code.
* clutter-event.h:
* clutter-event.c: Add generic ClutterAnyEvent type; add
clutter_event_new(), clutter_event_copy() and clutter_event_free();
make ClutterEvent a boxed type.
* clutter-main.h:
* clutter-main.c: Remove clutter_stage(); add clutter_main_quit(),
for cleanly quitting from clutter_main(); add multiple mainloops
support; allocate the ClutterCntx instead of adding it to the
stack; re-work the ClutterEvent dispatching.
* clutter-group.c (clutter_group_add), (clutter_group_remove): Keep
a reference on the element when added to a ClutterGroup.
* examples/rects.py
* examples/test.c:
* examples/test-text.c:
* examples/video-cube.c:
* examples/super-oh.c:
* examples/test-video.c: Update.
2006-06-05 13:38:31 +00:00
|
|
|
struct _ClutterColor
|
|
|
|
{
|
2009-02-28 16:16:09 +00:00
|
|
|
/*< public >*/
|
2006-06-05 Emmanuele Bassi <ebassi@openedhand.com>
* clutter-color.h:
* clutter-color.c: Reimplement ClutterColor as a boxed type;
add convenience API for color handling, like: add, subtract,
shade, HSL color-space conversion, packing and unpacking.
* clutter-private.h: Update ClutterMainContext, and export the
main context pointer here.
* clutter-rectangle.h:
* clutter-rectangle.c: Update the color-related code; make
clutter_rectangle_new() and empty constructor and provide
clutter_rectangle_new_with_color(); provide color setter
and getter API.
* clutter-label.h:
* clutter-label.c: Rename the "font" property to "font-name";
update the color-related code to the new ClutterColor object;
rename clutter_label_new() to clutter_label_new_with_text(),
and add setters and getters for the properties.
* clutter-marshal.list: Add VOID:OBJECT and VOID:BOXED marshallers
generators.
* clutter-stage.h:
* clutter-stage.c: Rework the API: provide a default constructor
for a singleton object, named clutter_stage_get_default(), which
supercedes the clutter_stage() function in clutter-main; provide
new events: button-press-event, button-release-event,
key-press-event and key-release-event; update the color-related
code;
(clutter_stage_snapshot): Allow negative width and height when
taking a snapshot (meaning: use full width/height).
(clutter_stage_get_element_at_pos): Rename clutter_stage_pick().
* clutter-element.c (clutter_element_paint): Clean up the
stage and color related code.
* clutter-event.h:
* clutter-event.c: Add generic ClutterAnyEvent type; add
clutter_event_new(), clutter_event_copy() and clutter_event_free();
make ClutterEvent a boxed type.
* clutter-main.h:
* clutter-main.c: Remove clutter_stage(); add clutter_main_quit(),
for cleanly quitting from clutter_main(); add multiple mainloops
support; allocate the ClutterCntx instead of adding it to the
stack; re-work the ClutterEvent dispatching.
* clutter-group.c (clutter_group_add), (clutter_group_remove): Keep
a reference on the element when added to a ClutterGroup.
* examples/rects.py
* examples/test.c:
* examples/test-text.c:
* examples/video-cube.c:
* examples/super-oh.c:
* examples/test-video.c: Update.
2006-06-05 13:38:31 +00:00
|
|
|
guint8 red;
|
|
|
|
guint8 green;
|
|
|
|
guint8 blue;
|
|
|
|
|
|
|
|
guint8 alpha;
|
|
|
|
};
|
2006-05-29 08:59:36 +00:00
|
|
|
|
2012-04-13 10:26:38 +00:00
|
|
|
/**
|
|
|
|
* CLUTTER_COLOR_INIT:
|
|
|
|
* @r: value for the red channel, between 0 and 255
|
|
|
|
* @g: value for the green channel, between 0 and 255
|
|
|
|
* @b: value for the blue channel, between 0 and 255
|
|
|
|
* @a: value for the alpha channel, between 0 and 255
|
|
|
|
*
|
|
|
|
* A macro that initializes a #ClutterColor, to be used when declaring it.
|
|
|
|
*/
|
|
|
|
#define CLUTTER_COLOR_INIT(r,g,b,a) { (r), (g), (b), (a) }
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2014-03-17 18:19:52 +00:00
|
|
|
GType clutter_color_get_type (void) G_GNUC_CONST;
|
2006-05-29 08:59:36 +00:00
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
ClutterColor *clutter_color_new (guint8 red,
|
|
|
|
guint8 green,
|
|
|
|
guint8 blue,
|
|
|
|
guint8 alpha);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2012-04-13 10:26:38 +00:00
|
|
|
ClutterColor *clutter_color_alloc (void);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2012-04-13 10:26:38 +00:00
|
|
|
ClutterColor *clutter_color_init (ClutterColor *color,
|
|
|
|
guint8 red,
|
|
|
|
guint8 green,
|
|
|
|
guint8 blue,
|
|
|
|
guint8 alpha);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
ClutterColor *clutter_color_copy (const ClutterColor *color);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_free (ClutterColor *color);
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_add (const ClutterColor *a,
|
|
|
|
const ClutterColor *b,
|
|
|
|
ClutterColor *result);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_subtract (const ClutterColor *a,
|
|
|
|
const ClutterColor *b,
|
|
|
|
ClutterColor *result);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_lighten (const ClutterColor *color,
|
|
|
|
ClutterColor *result);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_darken (const ClutterColor *color,
|
|
|
|
ClutterColor *result);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_shade (const ClutterColor *color,
|
|
|
|
gdouble factor,
|
|
|
|
ClutterColor *result);
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
gchar * clutter_color_to_string (const ClutterColor *color);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
gboolean clutter_color_from_string (ClutterColor *color,
|
|
|
|
const gchar *str);
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_to_hls (const ClutterColor *color,
|
|
|
|
gfloat *hue,
|
|
|
|
gfloat *luminance,
|
|
|
|
gfloat *saturation);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_from_hls (ClutterColor *color,
|
|
|
|
gfloat hue,
|
|
|
|
gfloat luminance,
|
|
|
|
gfloat saturation);
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
guint32 clutter_color_to_pixel (const ClutterColor *color);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
void clutter_color_from_pixel (ClutterColor *color,
|
|
|
|
guint32 pixel);
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
guint clutter_color_hash (gconstpointer v);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2009-02-28 16:16:09 +00:00
|
|
|
gboolean clutter_color_equal (gconstpointer v1,
|
|
|
|
gconstpointer v2);
|
2006-05-29 08:59:36 +00:00
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2010-10-11 14:04:54 +00:00
|
|
|
void clutter_color_interpolate (const ClutterColor *initial,
|
|
|
|
const ClutterColor *final,
|
|
|
|
gdouble progress,
|
|
|
|
ClutterColor *result);
|
|
|
|
|
2008-10-17 16:23:46 +00:00
|
|
|
#define CLUTTER_TYPE_PARAM_COLOR (clutter_param_color_get_type ())
|
|
|
|
#define CLUTTER_PARAM_SPEC_COLOR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), CLUTTER_TYPE_PARAM_COLOR, ClutterParamSpecColor))
|
|
|
|
#define CLUTTER_IS_PARAM_SPEC_COLOR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), CLUTTER_TYPE_PARAM_COLOR))
|
|
|
|
|
|
|
|
/**
|
|
|
|
* CLUTTER_VALUE_HOLDS_COLOR:
|
|
|
|
* @x: a #GValue
|
|
|
|
*
|
2022-05-25 16:41:48 +00:00
|
|
|
* Evaluates to %TRUE if @x holds a `ClutterColor`.
|
2008-10-17 16:23:46 +00:00
|
|
|
*/
|
2008-10-21 18:50:44 +00:00
|
|
|
#define CLUTTER_VALUE_HOLDS_COLOR(x) (G_VALUE_HOLDS ((x), CLUTTER_TYPE_COLOR))
|
2008-10-17 16:23:46 +00:00
|
|
|
|
|
|
|
typedef struct _ClutterParamSpecColor ClutterParamSpecColor;
|
|
|
|
|
|
|
|
/**
|
2010-12-10 17:15:39 +00:00
|
|
|
* ClutterParamSpecColor: (skip)
|
|
|
|
* @default_value: default color value
|
|
|
|
*
|
|
|
|
* A #GParamSpec subclass for defining properties holding
|
|
|
|
* a #ClutterColor.
|
|
|
|
*/
|
2008-10-17 16:23:46 +00:00
|
|
|
struct _ClutterParamSpecColor
|
|
|
|
{
|
|
|
|
/*< private >*/
|
|
|
|
GParamSpec parent_instance;
|
|
|
|
|
|
|
|
/*< public >*/
|
|
|
|
ClutterColor *default_value;
|
|
|
|
};
|
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
Eliminate G_CONST_RETURN
The G_CONST_RETURN define in GLib is, and has always been, a bit fuzzy.
We always used it to conform to the platform, at least for public-facing
API.
At first I assumed it has something to do with brain-damaged compilers
or with weird platforms where const was not really supported; sadly,
it's something much, much worse: it's a define that can be toggled at
compile-time to remove const from the signature of public API. This is a
truly terrifying feature that I assume was added in the past century,
and whose inception clearly had something to do with massive doses of
absynthe and opium — because any other explanation would make the
existence of such a feature even worse than assuming drugs had anything
to do with it.
Anyway, and pleasing the gods, this dubious feature is being
removed/deprecated in GLib; see bug:
https://bugzilla.gnome.org/show_bug.cgi?id=644611
Before deprecation, though, we should just remove its usage from the
whole API. We should especially remove its usage from Cally's internals,
since there it never made sense in the first place.
2011-06-07 14:49:20 +00:00
|
|
|
void clutter_value_set_color (GValue *value,
|
|
|
|
const ClutterColor *color);
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
Eliminate G_CONST_RETURN
The G_CONST_RETURN define in GLib is, and has always been, a bit fuzzy.
We always used it to conform to the platform, at least for public-facing
API.
At first I assumed it has something to do with brain-damaged compilers
or with weird platforms where const was not really supported; sadly,
it's something much, much worse: it's a define that can be toggled at
compile-time to remove const from the signature of public API. This is a
truly terrifying feature that I assume was added in the past century,
and whose inception clearly had something to do with massive doses of
absynthe and opium — because any other explanation would make the
existence of such a feature even worse than assuming drugs had anything
to do with it.
Anyway, and pleasing the gods, this dubious feature is being
removed/deprecated in GLib; see bug:
https://bugzilla.gnome.org/show_bug.cgi?id=644611
Before deprecation, though, we should just remove its usage from the
whole API. We should especially remove its usage from Cally's internals,
since there it never made sense in the first place.
2011-06-07 14:49:20 +00:00
|
|
|
const ClutterColor * clutter_value_get_color (const GValue *value);
|
2008-10-17 16:23:46 +00:00
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2014-03-17 18:19:52 +00:00
|
|
|
GType clutter_param_color_get_type (void) G_GNUC_CONST;
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
2014-03-17 18:19:52 +00:00
|
|
|
GParamSpec * clutter_param_spec_color (const gchar *name,
|
|
|
|
const gchar *nick,
|
|
|
|
const gchar *blurb,
|
|
|
|
const ClutterColor *default_value,
|
|
|
|
GParamFlags flags);
|
2008-10-17 16:23:46 +00:00
|
|
|
|
2018-05-22 21:01:54 +00:00
|
|
|
CLUTTER_EXPORT
|
Eliminate G_CONST_RETURN
The G_CONST_RETURN define in GLib is, and has always been, a bit fuzzy.
We always used it to conform to the platform, at least for public-facing
API.
At first I assumed it has something to do with brain-damaged compilers
or with weird platforms where const was not really supported; sadly,
it's something much, much worse: it's a define that can be toggled at
compile-time to remove const from the signature of public API. This is a
truly terrifying feature that I assume was added in the past century,
and whose inception clearly had something to do with massive doses of
absynthe and opium — because any other explanation would make the
existence of such a feature even worse than assuming drugs had anything
to do with it.
Anyway, and pleasing the gods, this dubious feature is being
removed/deprecated in GLib; see bug:
https://bugzilla.gnome.org/show_bug.cgi?id=644611
Before deprecation, though, we should just remove its usage from the
whole API. We should especially remove its usage from Cally's internals,
since there it never made sense in the first place.
2011-06-07 14:49:20 +00:00
|
|
|
const ClutterColor *clutter_color_get_static (ClutterStaticColor color);
|
2010-04-06 09:54:20 +00:00
|
|
|
|
2006-05-29 08:59:36 +00:00
|
|
|
G_END_DECLS
|
|
|
|
|
2009-06-25 13:59:11 +00:00
|
|
|
#endif /* __CLUTTER_COLOR_H__ */
|