Add gdk_rgb_find_color() to get a pixel value using GdkRGB functionality
Sun Jul 2 12:45:50 2000 Owen Taylor <otaylor@redhat.com> * gdk/gdkrgb.[ch]: Add gdk_rgb_find_color() to get a pixel value using GdkRGB functionality given GdkColormap and GdkColor. (name not final, waiting for inspiration.) * gdk/gdkgc.[ch] (gdk_gc_set_rgb_fg/bg_color): New functions to set the foreground/background of a GC using the GC's colormap and GdkRGB. (name not final, waiting for inspiration.) * gdk/gdkcompat.h gdk/gdkrgb.c (gdk_rgb_get_colormap): Rename from gdk_rgb_get_cmap(), put #define in gdkcompat.h. * gtk/gtkwidget.[ch] gtkcompat.h: Make visuals for gtk_widget_get_visual(), gtk_widget_get_default_visual, etc, purely a function of the corresponding colormap. Make gtk_widget_set_visual(), etc, noop macros in gtkcompat.h. * gdk/gdkpixmap.c gdk/x11/gdkpixmap-c11.c: Rewrite gdk_pixbuf_*create_from_xpm_* in terms of gdk_pixbuf_new_from_xpm_data(), move into platform independent code. * gdk/gdkpixbuf-render.c (gdk_pixbuf_render_to_drawable): Take advantage of the new draw_rgb_32_image_dithalign. * gdk/gdkrgb.c (gdk_draw_rgb_32_image_dithalign): Added. * gtk/gtkgc.c (gtk_gc_new): Set the appropriate colormap on each created GC. * gdk/gdkgc.[ch]: Add gdk_gc_get/set_colormap. * gdk/gdkgc.[ch]: Add a colormap field to the GdkGC structure which we initialize from the drawable when the GC is created, if the drawable has a colormap. * gdk/x11/gdkgc-x11.c: include string.h for memset. * gdk/x11/gdkinput-x11.c: include string.h for strlen, etc. * gtk/gtklayout.[ch]: Remove unsed configure serial member.
This commit is contained in:
155
gdk/gdkgc.c
155
gdk/gdkgc.c
@ -27,8 +27,14 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "gdkgc.h"
|
||||
#include "gdkrgb.h"
|
||||
#include "gdkprivate.h"
|
||||
|
||||
static void gdk_gc_class_init (GObjectClass *class);
|
||||
static void gdk_gc_finalize (GObject *object);
|
||||
|
||||
GObjectClass *parent_class;
|
||||
|
||||
GType
|
||||
gdk_gc_get_type (void)
|
||||
{
|
||||
@ -41,7 +47,7 @@ gdk_gc_get_type (void)
|
||||
sizeof (GdkGCClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) NULL,
|
||||
(GClassInitFunc) gdk_gc_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GdkGC),
|
||||
@ -57,6 +63,14 @@ gdk_gc_get_type (void)
|
||||
return object_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_gc_class_init (GObjectClass *class)
|
||||
{
|
||||
parent_class = g_type_class_peek_parent (class);
|
||||
|
||||
class->finalize = gdk_gc_finalize;
|
||||
}
|
||||
|
||||
GdkGC*
|
||||
gdk_gc_new (GdkDrawable *drawable)
|
||||
{
|
||||
@ -90,9 +104,24 @@ gdk_gc_new_with_values (GdkDrawable *drawable,
|
||||
if (values_mask & GDK_GC_TS_Y_ORIGIN)
|
||||
gc->ts_y_origin = values->ts_y_origin;
|
||||
|
||||
gc->colormap = gdk_drawable_get_colormap (drawable);
|
||||
if (gc->colormap)
|
||||
g_object_ref (G_OBJECT (gc->colormap));
|
||||
|
||||
return gc;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_gc_finalize (GObject *object)
|
||||
{
|
||||
GdkGC *gc = GDK_GC (object);
|
||||
|
||||
if (gc->colormap)
|
||||
g_object_unref (G_OBJECT (gc->colormap));
|
||||
|
||||
parent_class->finalize (object);
|
||||
}
|
||||
|
||||
GdkGC *
|
||||
gdk_gc_ref (GdkGC *gc)
|
||||
{
|
||||
@ -323,3 +352,127 @@ gdk_gc_set_dashes (GdkGC *gc,
|
||||
|
||||
GDK_GC_GET_CLASS (gc)->set_dashes (gc, dash_offset, dash_list, n);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gc_set_colormap:
|
||||
* @gc: a #GdkGC
|
||||
* @colormap: a #GdkColormap
|
||||
*
|
||||
* Sets the colormap for the GC to the given colormap. The depth
|
||||
* of the colormap's visual must match the depth of the drawable
|
||||
* for which the GC was created.
|
||||
**/
|
||||
void
|
||||
gdk_gc_set_colormap (GdkGC *gc,
|
||||
GdkColormap *colormap)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_GC (gc));
|
||||
g_return_if_fail (GDK_IS_COLORMAP (colormap));
|
||||
|
||||
if (gc->colormap != colormap)
|
||||
{
|
||||
if (gc->colormap)
|
||||
g_object_unref (G_OBJECT (gc->colormap));
|
||||
|
||||
gc->colormap = colormap;
|
||||
g_object_ref (G_OBJECT (gc->colormap));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gc_get_colormap:
|
||||
* @gc: a #GdkGC
|
||||
*
|
||||
* Retrieves the colormap for a given GC, if it exists.
|
||||
* A GC will have a colormap if the drawable for which it was created
|
||||
* has a colormap, or if a colormap was set explicitely with
|
||||
* gdk_gc_set_colormap.
|
||||
*
|
||||
* Return value:
|
||||
**/
|
||||
GdkColormap *
|
||||
gdk_gc_get_colormap (GdkGC *gc)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_GC (gc), NULL);
|
||||
|
||||
return gc->colormap;
|
||||
}
|
||||
|
||||
static GdkColormap *
|
||||
gdk_gc_get_colormap_warn (GdkGC *gc)
|
||||
{
|
||||
GdkColormap *colormap = gdk_gc_get_colormap (gc);
|
||||
if (!colormap)
|
||||
{
|
||||
g_warning ("gdk_gc_set_rgb_fg_color() and gdk_gc_set_rgb_bg_color() can\n"
|
||||
"only be used on GC's with a colormap. A GC will have a colormap\n"
|
||||
"if it is created for a drawable with a colormap, or if a\n"
|
||||
"colormap has been set explicitly with gdk_gc_set_colormap.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return colormap;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gc_set_rgb_fg_color:
|
||||
* @gc: a #GdkGC
|
||||
* @color: an unallocated #GdkColor.
|
||||
*
|
||||
* Set the foreground color of a GC using an unallocated color. The
|
||||
* pixel value for the color will be determined using GdkRGB. If the
|
||||
* colormap for the GC has not previously been initialized for GdkRGB,
|
||||
* then for pseudo-color colormaps (colormaps with a small modifiable
|
||||
* number of colors), a colorcube will be allocated in the colormap.
|
||||
*
|
||||
* Calling this function for a GC without a colormap is an error.
|
||||
**/
|
||||
void
|
||||
gdk_gc_set_rgb_fg_color (GdkGC *gc, GdkColor *color)
|
||||
{
|
||||
GdkColormap *cmap;
|
||||
GdkColor tmp_color;
|
||||
|
||||
g_return_if_fail (GDK_IS_GC (gc));
|
||||
g_return_if_fail (color != NULL);
|
||||
|
||||
cmap = gdk_gc_get_colormap_warn (gc);
|
||||
if (!cmap)
|
||||
return;
|
||||
|
||||
tmp_color = *color;
|
||||
gdk_rgb_find_color (cmap, &tmp_color);
|
||||
gdk_gc_set_foreground (cmap, &tmp_color);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gc_set_rgb_bg_color:
|
||||
* @gc: a #GdkGC
|
||||
* @color: an unallocated #GdkColor.
|
||||
*
|
||||
* Set the background color of a GC using an unallocated color. The
|
||||
* pixel value for the color will be determined using GdkRGB. If the
|
||||
* colormap for the GC has not previously been initialized for GdkRGB,
|
||||
* then for pseudo-color colormaps (colormaps with a small modifiable
|
||||
* number of colors), a colorcube will be allocated in the colormap.
|
||||
*
|
||||
* Calling this function for a GC without a colormap is an error.
|
||||
**/
|
||||
void
|
||||
gdk_gc_set_rgb_bg_color (GdkGC *gc, GdkColor *color)
|
||||
{
|
||||
GdkColormap *cmap;
|
||||
GdkColor tmp_color;
|
||||
|
||||
g_return_if_fail (GDK_IS_GC (gc));
|
||||
g_return_if_fail (color != NULL);
|
||||
|
||||
cmap = gdk_gc_get_colormap_warn (gc);
|
||||
if (!cmap)
|
||||
return;
|
||||
|
||||
tmp_color = *color;
|
||||
gdk_rgb_find_color (cmap, &tmp_color);
|
||||
gdk_gc_set_foreground (cmap, &tmp_color);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user