X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gdk%2Fgdkcolor.c;h=ace91012e001b70ae058cfcd395bc97443289b61;hb=76420c4793e1d7b3d8cb36fe48c6203c400c4a96;hp=d548d73865385c919b5ee330d06493f7bd9cf5b5;hpb=afee2c67c5091539cbe6270b14e7e74b2a7b60a7;p=~andy%2Fgtk diff --git a/gdk/gdkcolor.c b/gdk/gdkcolor.c index d548d7386..ace91012e 100644 --- a/gdk/gdkcolor.c +++ b/gdk/gdkcolor.c @@ -24,195 +24,170 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#include +#include "config.h" #include "gdkcolor.h" -#include "gdkinternals.h" - -GdkColormap* -gdk_colormap_ref (GdkColormap *cmap) -{ - return (GdkColormap *) g_object_ref (G_OBJECT (cmap)); -} -void -gdk_colormap_unref (GdkColormap *cmap) -{ - g_object_unref (G_OBJECT (cmap)); -} - -GdkVisual * -gdk_colormap_get_visual (GdkColormap *colormap) -{ - g_return_val_if_fail (GDK_IS_COLORMAP (colormap), NULL); +#include "gdkscreen.h" +#include "gdkinternals.h" - return colormap->visual; -} - -void -gdk_colors_store (GdkColormap *colormap, - GdkColor *colors, - gint ncolors) -{ - gint i; +#include - for (i = 0; i < ncolors; i++) - { - colormap->colors[i].pixel = colors[i].pixel; - colormap->colors[i].red = colors[i].red; - colormap->colors[i].green = colors[i].green; - colormap->colors[i].blue = colors[i].blue; - } +/** + * SECTION:colors + * @Short_description: Manipulation of colors + * @Title: Colors + * + * A #GdkColor represents a color. + * + * When working with cairo, it is often more convenient + * to use a #GdkRGBA instead. + */ - gdk_colormap_change (colormap, ncolors); -} -/* - *-------------------------------------------------------------- - * gdk_color_copy - * - * Copy a color structure into new storage. +/** + * gdk_color_copy: + * @color: a #GdkColor * - * Arguments: - * "color" is the color struct to copy. + * Makes a copy of a color structure. * - * Results: - * A new color structure. Free it with gdk_color_free. + * The result must be freed using gdk_color_free(). * - *-------------------------------------------------------------- + * Return value: a copy of @color */ - -static GMemChunk *color_chunk; - GdkColor* gdk_color_copy (const GdkColor *color) { GdkColor *new_color; - - g_return_val_if_fail (color != NULL, NULL); - if (color_chunk == NULL) - color_chunk = g_mem_chunk_new ("colors", - sizeof (GdkColor), - 4096, - G_ALLOC_AND_FREE); + g_return_val_if_fail (color != NULL, NULL); - new_color = g_chunk_new (GdkColor, color_chunk); + new_color = g_slice_new (GdkColor); *new_color = *color; return new_color; } -/* - *-------------------------------------------------------------- - * gdk_color_free - * - * Free a color structure obtained from gdk_color_copy. Do not use - * with other color structures. - * - * Arguments: - * "color" is the color struct to free. +/** + * gdk_color_free: + * @color: a #GdkColor * - *-------------------------------------------------------------- */ - + * Frees a color structure created with gdk_color_copy(). + */ void gdk_color_free (GdkColor *color) { - g_assert (color_chunk != NULL); g_return_if_fail (color != NULL); - g_mem_chunk_free (color_chunk, color); + g_slice_free (GdkColor, color); } -gboolean -gdk_color_white (GdkColormap *colormap, - GdkColor *color) +/** + * gdk_color_hash: + * @color: a #GdkColor + * + * A hash function suitable for using for a hash + * table that stores #GdkColors. + * + * Return value: The hash function applied to @color + */ +guint +gdk_color_hash (const GdkColor *color) { - gint return_val; - - g_return_val_if_fail (colormap != NULL, FALSE); - - if (color) - { - color->red = 65535; - color->green = 65535; - color->blue = 65535; - - return_val = gdk_color_alloc (colormap, color); - } - else - return_val = FALSE; - - return return_val; + return ((color->red) + + (color->green << 11) + + (color->blue << 22) + + (color->blue >> 6)); } +/** + * gdk_color_equal: + * @colora: a #GdkColor + * @colorb: another #GdkColor + * + * Compares two colors. + * + * Return value: %TRUE if the two colors compare equal + */ gboolean -gdk_color_black (GdkColormap *colormap, - GdkColor *color) +gdk_color_equal (const GdkColor *colora, + const GdkColor *colorb) { - gint return_val; - - g_return_val_if_fail (colormap != NULL, FALSE); - - if (color) - { - color->red = 0; - color->green = 0; - color->blue = 0; - - return_val = gdk_color_alloc (colormap, color); - } - else - return_val = FALSE; + g_return_val_if_fail (colora != NULL, FALSE); + g_return_val_if_fail (colorb != NULL, FALSE); - return return_val; + return ((colora->red == colorb->red) && + (colora->green == colorb->green) && + (colora->blue == colorb->blue)); } -/******************** - * Color allocation * - ********************/ +G_DEFINE_BOXED_TYPE (GdkColor, gdk_color, + gdk_color_copy, + gdk_color_free) +/** + * gdk_color_parse: + * @spec: the string specifying the color + * @color: (out): the #GdkColor to fill in + * + * Parses a textual specification of a color and fill in the + * red, green, + * and blue fields of a #GdkColor + * structure. + * + * The string can either one of a large set of standard names + * (taken from the X11 rgb.txt file), or + * it can be a hex value in the form '#rgb' '#rrggbb' + * '#rrrgggbbb' or '#rrrrggggbbbb' where 'r', 'g' and + * 'b' are hex digits of the red, green, and blue components + * of the color, respectively. (White in the four forms is + * '#fff', '#ffffff', '#fffffffff' and + * '#ffffffffffff'). + * + * Return value: %TRUE if the parsing succeeded + */ gboolean -gdk_colormap_alloc_color (GdkColormap *colormap, - GdkColor *color, - gboolean writeable, - gboolean best_match) +gdk_color_parse (const gchar *spec, + GdkColor *color) { - gboolean success; + PangoColor pango_color; - gdk_colormap_alloc_colors (colormap, color, 1, writeable, best_match, - &success); + if (pango_color_parse (&pango_color, spec)) + { + color->red = pango_color.red; + color->green = pango_color.green; + color->blue = pango_color.blue; - return success; + return TRUE; + } + else + return FALSE; } -gboolean -gdk_color_alloc (GdkColormap *colormap, - GdkColor *color) +/** + * gdk_color_to_string: + * @color: a #GdkColor + * + * Returns a textual specification of @color in the hexadecimal form + * #rrrrggggbbbb, where r, + * g and b are hex digits + * representing the red, green and blue components respectively. + * + * The returned string can be parsed by gdk_color_parse(). + * + * Return value: a newly-allocated text string + * + * Since: 2.12 + */ +gchar * +gdk_color_to_string (const GdkColor *color) { - gboolean success; - - gdk_colormap_alloc_colors (colormap, color, 1, FALSE, TRUE, &success); - - return success; -} + PangoColor pango_color; -guint -gdk_color_hash (const GdkColor *colora) -{ - return ((colora->red) + - (colora->green << 11) + - (colora->blue << 22) + - (colora->blue >> 6)); -} + g_return_val_if_fail (color != NULL, NULL); -gboolean -gdk_color_equal (const GdkColor *colora, - const GdkColor *colorb) -{ - g_return_val_if_fail (colora != NULL, FALSE); - g_return_val_if_fail (colorb != NULL, FALSE); + pango_color.red = color->red; + pango_color.green = color->green; + pango_color.blue = color->blue; - return ((colora->red == colorb->red) && - (colora->green == colorb->green) && - (colora->blue == colorb->blue)); + return pango_color_to_string (&pango_color); }