From 985518c601c1a6e0d108d55fb0465a776ccae584 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 6 Apr 2010 10:54:20 +0100 Subject: [PATCH] color: Add named, global colors Since EGA colors are apparently all the rage in other toolkits, Clutter should not be left out. On top of the usual CGA/EGA palette the static colors also include the Tango Icon palette, which at least is more pleasant to the eye. Static colors are accessed through an enumeration by using clutter_color_get_static(), or using the short-hand pre-processor macros. http://bugzilla.clutter-project.org/show_bug.cgi?id=2066 --- clutter/Makefile.am | 1 + clutter/clutter-color-static.h | 77 +++++++++++++++ clutter/clutter-color.c | 77 +++++++++++++++ clutter/clutter-color.h | 107 +++++++++++++++++++++ clutter/clutter.h | 1 + doc/reference/clutter/Makefile.am | 1 + doc/reference/clutter/clutter-sections.txt | 2 + 7 files changed, 266 insertions(+) create mode 100644 clutter/clutter-color-static.h diff --git a/clutter/Makefile.am b/clutter/Makefile.am index a5be70857..eaea21b45 100644 --- a/clutter/Makefile.am +++ b/clutter/Makefile.am @@ -86,6 +86,7 @@ source_h = \ $(srcdir)/clutter-child-meta.h \ $(srcdir)/clutter-click-action.h \ $(srcdir)/clutter-clone.h \ + $(srcdir)/clutter-color-static.h \ $(srcdir)/clutter-color.h \ $(srcdir)/clutter-colorize-effect.h \ $(srcdir)/clutter-constraint.h \ diff --git a/clutter/clutter-color-static.h b/clutter/clutter-color-static.h new file mode 100644 index 000000000..f4403a8e4 --- /dev/null +++ b/clutter/clutter-color-static.h @@ -0,0 +1,77 @@ +/* + * Clutter. + * + * An OpenGL based 'interactive canvas' library. + * + * Copyright (C) 2010 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 . + */ + +#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __CLUTTER_COLOR_STATIC_H__ +#define __CLUTTER_COLOR_STATIC_H__ + +#define CLUTTER_COLOR_White (clutter_color_get_static (CLUTTER_COLOR_WHITE)) +#define CLUTTER_COLOR_Black (clutter_color_get_static (CLUTTER_COLOR_BLACK)) +#define CLUTTER_COLOR_Red (clutter_color_get_static (CLUTTER_COLOR_RED)) +#define CLUTTER_COLOR_DarkRed (clutter_color_get_static (CLUTTER_COLOR_DARK_RED)) +#define CLUTTER_COLOR_Green (clutter_color_get_static (CLUTTER_COLOR_GREEN)) +#define CLUTTER_COLOR_DarkGreen (clutter_color_get_static (CLUTTER_COLOR_DARK_GREEN)) +#define CLUTTER_COLOR_Blue (clutter_color_get_static (CLUTTER_COLOR_BLUE)) +#define CLUTTER_COLOR_DarkBlue (clutter_color_get_static (CLUTTER_COLOR_DARK_BLUE)) +#define CLUTTER_COLOR_Cyan (clutter_color_get_static (CLUTTER_COLOR_CYAN)) +#define CLUTTER_COLOR_DarkCyan (clutter_color_get_static (CLUTTER_COLOR_DARK_CYAN)) +#define CLUTTER_COLOR_Magenta (clutter_color_get_static (CLUTTER_COLOR_MAGENTA)) +#define CLUTTER_COLOR_DarkMagenta (clutter_color_get_static (CLUTTER_COLOR_DARK_MAGENTA)) +#define CLUTTER_COLOR_Yellow (clutter_color_get_static (CLUTTER_COLOR_YELLOW)) +#define CLUTTER_COLOR_DarkYellow (clutter_color_get_static (CLUTTER_COLOR_DARK_YELLOW)) +#define CLUTTER_COLOR_Gray (clutter_color_get_static (CLUTTER_COLOR_GRAY)) +#define CLUTTER_COLOR_DarkGray (clutter_color_get_static (CLUTTER_COLOR_DARK_GRAY)) +#define CLUTTER_COLOR_LightGray (clutter_color_get_static (CLUTTER_COLOR_LIGHT_GRAY)) + +#define CLUTTER_COLOR_Butter (clutter_color_get_static (CLUTTER_COLOR_BUTTER)) +#define CLUTTER_COLOR_LightButter (clutter_color_get_static (CLUTTER_COLOR_BUTTER_LIGHT)) +#define CLUTTER_COLOR_DarkButter (clutter_color_get_static (CLUTTER_COLOR_BUTTER_DARK)) +#define CLUTTER_COLOR_Orange (clutter_color_get_static (CLUTTER_COLOR_ORANGE)) +#define CLUTTER_COLOR_LightOrange (clutter_color_get_static (CLUTTER_COLOR_ORANGE_LIGHT)) +#define CLUTTER_COLOR_DarkOrange (clutter_color_get_static (CLUTTER_COLOR_ORANGE_DARK)) +#define CLUTTER_COLOR_Chocolate (clutter_color_get_static (CLUTTER_COLOR_CHOCOLATE)) +#define CLUTTER_COLOR_LightChocolate (clutter_color_get_static (CLUTTER_COLOR_CHOCOLATE_LIGHT)) +#define CLUTTER_COLOR_DarkChocolate (clutter_color_get_static (CLUTTER_COLOR_CHOCOLATE_DARK)) +#define CLUTTER_COLOR_Chameleon (clutter_color_get_static (CLUTTER_COLOR_CHAMELEON)) +#define CLUTTER_COLOR_LightChameleon (clutter_color_get_static (CLUTTER_COLOR_CHAMELEON_LIGHT)) +#define CLUTTER_COLOR_DarkChameleon (clutter_color_get_static (CLUTTER_COLOR_CHAMELEON_DARK)) +#define CLUTTER_COLOR_SkyBlue (clutter_color_get_static (CLUTTER_COLOR_SKY_BLUE)) +#define CLUTTER_COLOR_LightSkyBlue (clutter_color_get_static (CLUTTER_COLOR_SKY_BLUE_LIGHT)) +#define CLUTTER_COLOR_DarkSkyBlue (clutter_color_get_static (CLUTTER_COLOR_SKY_BLUE_DARK)) +#define CLUTTER_COLOR_Plum (clutter_color_get_static (CLUTTER_COLOR_PLUM)) +#define CLUTTER_COLOR_LightPlum (clutter_color_get_static (CLUTTER_COLOR_PLUM_LIGHT)) +#define CLUTTER_COLOR_DarkPlum (clutter_color_get_static (CLUTTER_COLOR_PLUM_DARK)) +#define CLUTTER_COLOR_ScarletRed (clutter_color_get_static (CLUTTER_COLOR_SCARLET_RED)) +#define CLUTTER_COLOR_LightScarletRed (clutter_color_get_static (CLUTTER_COLOR_SCARLET_RED_LIGHT)) +#define CLUTTER_COLOR_DarkScarletRed (clutter_color_get_static (CLUTTER_COLOR_SCARLET_RED_DARK)) +#define CLUTTER_COLOR_Aluminium1 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_1)) +#define CLUTTER_COLOR_Aluminium2 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_2)) +#define CLUTTER_COLOR_Aluminium3 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_3)) +#define CLUTTER_COLOR_Aluminium4 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_4)) +#define CLUTTER_COLOR_Aluminium5 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_5)) +#define CLUTTER_COLOR_Aluminium6 (clutter_color_get_static (CLUTTER_COLOR_ALUMINIUM_6)) + +#define CLUTTER_COLOR_Transparent (clutter_color_get_static (CLUTTER_COLOR_TRANSPARENT)) + +#endif /* __CLUTTER_COLOR_STATIC_H__ */ diff --git a/clutter/clutter-color.c b/clutter/clutter-color.c index 1ef3aebe6..7d0ab2981 100644 --- a/clutter/clutter-color.c +++ b/clutter/clutter-color.c @@ -47,6 +47,83 @@ #include "clutter-private.h" #include "clutter-debug.h" +/* XXX - keep in sync with the ClutterStaticColor enumeration order */ +static const ClutterColor const static_colors[] = { + /* CGA/EGA color palette */ + { 0xff, 0xff, 0xff, 0xff }, /* white */ + { 0x00, 0x00, 0x00, 0xff }, /* black */ + { 0xff, 0x00, 0x00, 0xff }, /* red */ + { 0x80, 0x00, 0x00, 0xff }, /* dark red */ + { 0x00, 0xff, 0x00, 0xff }, /* green */ + { 0x00, 0x80, 0x00, 0xff }, /* dark green */ + { 0x00, 0x00, 0xff, 0xff }, /* blue */ + { 0x00, 0x00, 0x80, 0xff }, /* dark blue */ + { 0x00, 0xff, 0xff, 0xff }, /* cyan */ + { 0x00, 0x80, 0x80, 0xff }, /* dark cyan */ + { 0xff, 0x00, 0xff, 0xff }, /* magenta */ + { 0x80, 0x00, 0x80, 0xff }, /* dark magenta */ + { 0xff, 0xff, 0x00, 0xff }, /* yellow */ + { 0x80, 0x80, 0x00, 0xff }, /* dark yellow */ + { 0xa0, 0xa0, 0xa4, 0xff }, /* gray */ + { 0x80, 0x80, 0x80, 0xff }, /* dark gray */ + { 0xc0, 0xc0, 0xc0, 0xff }, /* light gray */ + + /* Tango Icon color palette */ + { 0xed, 0xd4, 0x00, 0xff }, /* butter */ + { 0xfc, 0xe9, 0x4f, 0xff }, /* butter light */ + { 0xc4, 0xa0, 0x00, 0xff }, /* butter dark */ + { 0xf5, 0x79, 0x00, 0xff }, /* orange */ + { 0xfc, 0xaf, 0x3e, 0xff }, /* orange light */ + { 0xce, 0x5c, 0x00, 0xff }, /* orange dark */ + { 0xc1, 0x7d, 0x11, 0xff }, /* chocolate */ + { 0xe9, 0xb9, 0x6e, 0xff }, /* chocolate light */ + { 0x8f, 0x59, 0x02, 0xff }, /* chocolate dark */ + { 0x73, 0xd2, 0x16, 0xff }, /* chameleon */ + { 0x8a, 0xe2, 0x34, 0xff }, /* chameleon light */ + { 0x4e, 0x9a, 0x06, 0xff }, /* chameleon dark */ + { 0x34, 0x65, 0xa4, 0xff }, /* sky blue */ + { 0x72, 0x9f, 0xcf, 0xff }, /* sky blue light */ + { 0x20, 0x4a, 0x87, 0xff }, /* sky blue dark */ + { 0x75, 0x50, 0x7b, 0xff }, /* plum */ + { 0xad, 0x7f, 0xa8, 0xff }, /* plum light */ + { 0x5c, 0x35, 0x66, 0xff }, /* plum dark */ + { 0xcc, 0x00, 0x00, 0xff }, /* scarlet red */ + { 0xef, 0x29, 0x29, 0xff }, /* scarlet red light */ + { 0xa4, 0x00, 0x00, 0xff }, /* scarlet red dark */ + { 0xee, 0xee, 0xec, 0xff }, /* aluminium 1 */ + { 0xd3, 0xd7, 0xcf, 0xff }, /* aluminium 2 */ + { 0xba, 0xbd, 0xb6, 0xff }, /* aluminium 3 */ + { 0x88, 0x8a, 0x85, 0xff }, /* aluminium 4 */ + { 0x55, 0x57, 0x53, 0xff }, /* aluminium 5 */ + { 0x2e, 0x34, 0x36, 0xff }, /* aluminium 6 */ + + /* last color */ + { 0x00, 0x00, 0x00, 0x00 } /* transparent */ +}; + +/** + * clutter_color_get_static: + * @color: the named global color + * + * Retrieves a static color for the given @color name + * + * Static colors are created by Clutter and are guaranteed to always be + * available and valid + * + * Return value: a pointer to a static color; the returned pointer + * is owned by Clutter and it should never be modified or freed + * + * Since: 1.4 + */ +G_CONST_RETURN ClutterColor * +clutter_color_get_static (ClutterStaticColor color) +{ + g_return_val_if_fail (color >= CLUTTER_COLOR_WHITE && + color <= CLUTTER_COLOR_TRANSPARENT, NULL); + + return &static_colors[color]; +} + /** * clutter_color_add: * @a: a #ClutterColor diff --git a/clutter/clutter-color.h b/clutter/clutter-color.h index a9863b15d..e83407d87 100644 --- a/clutter/clutter-color.h +++ b/clutter/clutter-color.h @@ -152,6 +152,113 @@ GParamSpec *clutter_param_spec_color (const gchar *name, const ClutterColor *default_value, GParamFlags flags); +/** + * ClutterStaticColor: + * @CLUTTER_COLOR_WHITE: White color (#ffffffff) + * @CLUTTER_COLOR_BLACK: Black color (#000000ff) + * @CLUTTER_COLOR_RED: Red color (#ff0000ff) + * @CLUTTER_COLOR_DARK_RED: Dark red color (#800000ff) + * @CLUTTER_COLOR_GREEN: Green color (#00ff00ff) + * @CLUTTER_COLOR_DARK_GREEN: Dark green color (#008000ff) + * @CLUTTER_COLOR_BLUE: Blue color (#0000ffff) + * @CLUTTER_COLOR_DARK_BLUE: Dark blue color (#000080ff) + * @CLUTTER_COLOR_CYAN: Cyan color (#00ffffff) + * @CLUTTER_COLOR_DARK_CYAN: Dark cyan color (#008080ff) + * @CLUTTER_COLOR_MAGENTA: Magenta color (#ff00ffff) + * @CLUTTER_COLOR_DARK_MAGENTA: Dark magenta color (#800080ff) + * @CLUTTER_COLOR_YELLOW: Yellow color (#ffff00ff) + * @CLUTTER_COLOR_DARK_YELLOW: Dark yellow color (#808000ff) + * @CLUTTER_COLOR_GRAY: Gray color (#a0a0a4ff) + * @CLUTTER_COLOR_DARK_GRAY: Dark Gray color (#808080ff) + * @CLUTTER_COLOR_LIGHT_GRAY: Light gray color (#c0c0c0ff) + * @CLUTTER_COLOR_BUTTER: Butter color (#edd400) + * @CLUTTER_COLOR_BUTTER_LIGHT: Light butter color (#fce94f) + * @CLUTTER_COLOR_BUTTER_DARK: Dark butter color (#c4a000) + * @CLUTTER_COLOR_ORANGE: Orange color (#f57900) + * @CLUTTER_COLOR_ORANGE_LIGHT: Light orange color (#fcaf3f) + * @CLUTTER_COLOR_ORANGE_DARK: Dark orange color (#ce5c00) + * @CLUTTER_COLOR_CHOCOLATE: Chocolate color (#c17d11) + * @CLUTTER_COLOR_CHOCOLATE_LIGHT: Light chocolate color (#e9b96e) + * @CLUTTER_COLOR_CHOCOLATE_DARK: Dark chocolate color (#8f5902) + * @CLUTTER_COLOR_CHAMELEON: Chameleon color (#73d216) + * @CLUTTER_COLOR_CHAMELEON_LIGHT: Light chameleon color (#8ae234) + * @CLUTTER_COLOR_CHAMELEON_DARK: Dark chameleon color (#4e9a06) + * @CLUTTER_COLOR_SKY_BLUE: Sky color (#3465a4) + * @CLUTTER_COLOR_SKY_BLUE_LIGHT: Light sky color (#729fcf) + * @CLUTTER_COLOR_SKY_BLUE_DARK: Dark sky color (#204a87) + * @CLUTTER_COLOR_PLUM: Plum color (#75507b) + * @CLUTTER_COLOR_PLUM_LIGHT: Light plum color (#ad7fa8) + * @CLUTTER_COLOR_PLUM_DARK: Dark plum color (#5c3566) + * @CLUTTER_COLOR_SCARLET_RED: Scarlet red color (#cc0000) + * @CLUTTER_COLOR_SCARLET_RED_LIGHT: Light scarlet red color (#ef2929) + * @CLUTTER_COLOR_SCARLET_RED_DARK: Dark scarlet red color (#a40000) + * @CLUTTER_COLOR_ALUMINIUM_1: Aluminium, first variant (#eeeeec) + * @CLUTTER_COLOR_ALUMINIUM_2: Aluminium, second variant (#d3d7cf) + * @CLUTTER_COLOR_ALUMINIUM_3: Aluminium, third variant (#babdb6) + * @CLUTTER_COLOR_ALUMINIUM_4: Aluminium, fourth variant (#888a85) + * @CLUTTER_COLOR_ALUMINIUM_5: Aluminium, fifth variant (#555753) + * @CLUTTER_COLOR_ALUMINIUM_6: Aluminium, sixth variant (#2e3436) + * @CLUTTER_COLOR_TRANSPARENT: Transparent color (#00000000) + * + * Named colors, for accessing global colors defined by Clutter + * + * Since: 1.4 + */ +typedef enum { /*< prefix=CLUTTER_COLOR >*/ + /* CGA/EGA-like palette */ + CLUTTER_COLOR_WHITE = 0, + CLUTTER_COLOR_BLACK, + CLUTTER_COLOR_RED, + CLUTTER_COLOR_DARK_RED, + CLUTTER_COLOR_GREEN, + CLUTTER_COLOR_DARK_GREEN, + CLUTTER_COLOR_BLUE, + CLUTTER_COLOR_DARK_BLUE, + CLUTTER_COLOR_CYAN, + CLUTTER_COLOR_DARK_CYAN, + CLUTTER_COLOR_MAGENTA, + CLUTTER_COLOR_DARK_MAGENTA, + CLUTTER_COLOR_YELLOW, + CLUTTER_COLOR_DARK_YELLOW, + CLUTTER_COLOR_GRAY, + CLUTTER_COLOR_DARK_GRAY, + CLUTTER_COLOR_LIGHT_GRAY, + + /* Tango icon palette */ + CLUTTER_COLOR_BUTTER, + CLUTTER_COLOR_BUTTER_LIGHT, + CLUTTER_COLOR_BUTTER_DARK, + CLUTTER_COLOR_ORANGE, + CLUTTER_COLOR_ORANGE_LIGHT, + CLUTTER_COLOR_ORANGE_DARK, + CLUTTER_COLOR_CHOCOLATE, + CLUTTER_COLOR_CHOCOLATE_LIGHT, + CLUTTER_COLOR_CHOCOLATE_DARK, + CLUTTER_COLOR_CHAMELEON, + CLUTTER_COLOR_CHAMELEON_LIGHT, + CLUTTER_COLOR_CHAMELEON_DARK, + CLUTTER_COLOR_SKY_BLUE, + CLUTTER_COLOR_SKY_BLUE_LIGHT, + CLUTTER_COLOR_SKY_BLUE_DARK, + CLUTTER_COLOR_PLUM, + CLUTTER_COLOR_PLUM_LIGHT, + CLUTTER_COLOR_PLUM_DARK, + CLUTTER_COLOR_SCARLET_RED, + CLUTTER_COLOR_SCARLET_RED_LIGHT, + CLUTTER_COLOR_SCARLET_RED_DARK, + CLUTTER_COLOR_ALUMINIUM_1, + CLUTTER_COLOR_ALUMINIUM_2, + CLUTTER_COLOR_ALUMINIUM_3, + CLUTTER_COLOR_ALUMINIUM_4, + CLUTTER_COLOR_ALUMINIUM_5, + CLUTTER_COLOR_ALUMINIUM_6, + + /* Fully transparent black */ + CLUTTER_COLOR_TRANSPARENT +} ClutterStaticColor; + +G_CONST_RETURN ClutterColor *clutter_color_get_static (ClutterStaticColor color); + G_END_DECLS #endif /* __CLUTTER_COLOR_H__ */ diff --git a/clutter/clutter.h b/clutter/clutter.h index 0c81fdc44..ca3d1b527 100644 --- a/clutter/clutter.h +++ b/clutter/clutter.h @@ -57,6 +57,7 @@ #include "clutter-click-action.h" #include "clutter-clone.h" #include "clutter-color.h" +#include "clutter-color-static.h" #include "clutter-colorize-effect.h" #include "clutter-constraint.h" #include "clutter-container.h" diff --git a/doc/reference/clutter/Makefile.am b/doc/reference/clutter/Makefile.am index 22cb99ba2..f36a8a388 100644 --- a/doc/reference/clutter/Makefile.am +++ b/doc/reference/clutter/Makefile.am @@ -69,6 +69,7 @@ IGNORE_HFILES=\ clutter-actor-private.h \ clutter-backend-private.h \ clutter-bezier.h \ + clutter-color-static.h \ clutter-debug.h \ clutter-deprecated.h \ clutter-device-manager-private.h \ diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt index 8ccf32f79..060b679d8 100644 --- a/doc/reference/clutter/clutter-sections.txt +++ b/doc/reference/clutter/clutter-sections.txt @@ -960,6 +960,8 @@ clutter_color_copy clutter_color_free clutter_color_equal clutter_color_hash +ClutterStaticColor +clutter_color_get_static clutter_color_from_string