gtk-font-hack patch
- From: john fremlin vii <vii altern org>
- To: gtk-devel-list redhat com
- Subject: gtk-font-hack patch
- Date: Mon, 24 Jan 2000 01:26:06 +0000
This patch adds font smoothing to the GDK. I would appreciate
feedback!
I've attached a patch against 1.2.6.
http://altern.org/vii/programs/linux/gtk-font-hack/
Now no longer core dumps on me (so I'm calling it beta).
Problems now:
x For some reason fonts are not smudged in gnome-o-terminal
programs (e.g. gnome-terminal, gnome-genius, gnome-chess), though
the size allowed for them is halved. I guess this gadget bypasses
the GDK in some way (??).
x The right part of GHex's left display window with the hex
in it is missing inexplicably.
x When the GTK draws the same text twice in the same place
without clearing, the edges are darkened. I guess this is done in
too many places to fix quickly.
Help!
--
john fremlin vii
http://altern.org/vii
diff --recursive --new-file --unified gtk+-1.2.6.clean/gdk/gdk.h gtk+-1.2.6.font-hack/gdk/gdk.h
--- gtk+-1.2.6.clean/gdk/gdk.h Sat Jan 22 15:29:17 2000
+++ gtk+-1.2.6.font-hack/gdk/gdk.h Sat Jan 22 15:27:28 2000
@@ -517,6 +517,16 @@
gint y,
gint width,
gint height);
+void
+gdk_image_get_subimage (GdkImage* image,
+ GdkWindow *window,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gint dest_x,
+ gint dest_y
+ );
void gdk_image_put_pixel (GdkImage *image,
gint x,
gint y,
diff --recursive --new-file --unified gtk+-1.2.6.clean/gdk/gdkdraw.c gtk+-1.2.6.font-hack/gdk/gdkdraw.c
--- gtk+-1.2.6.clean/gdk/gdkdraw.c Sat Jan 22 15:29:17 2000
+++ gtk+-1.2.6.font-hack/gdk/gdkdraw.c Mon Jan 24 01:01:03 2000
@@ -29,6 +29,96 @@
#include "gdk.h"
#include "gdkprivate.h"
+#include "gdkfonthack.h"
+
+#if defined GTK_FONT_HACK
+
+static
+GdkPixmap*
+explode_image( GdkImage* source,
+ guint orig_width,
+ guint orig_height,
+ GdkDrawable* drawable );
+
+static
+GdkImage*
+fetch_image_from( GdkDrawable* drawable, gint x, gint y, guint width, guint height );
+
+static
+void
+condense_pixmap( GdkPixmap* exploded_pixmap,
+ guint condensed_width, guint condensed_height,
+ GdkImage* condensed_image );
+
+
+
+#define FONT_HACK_INIT_VARS gint width, ascent, descent; \
+ GdkDrawable* real_drawable = drawable; \
+ guint exploded_width, exploded_height; \
+ GdkImage* saved; \
+ guint saved_height, saved_width; \
+ gint saved_x, saved_y;
+
+
+#define FONT_HACK_CALC_DIMS \
+ saved_width = scale_down(width); \
+ saved_height = scale_down(ascent+descent); \
+ exploded_width = saved_width * scale;\
+ exploded_height = saved_height * scale;\
+ saved_x = x; \
+ saved_y = y - scale_down(ascent);
+
+#define FONT_HACK_FETCH_IMAGE \
+ saved = fetch_image_from( real_drawable, \
+ saved_x, saved_y, \
+ saved_width, saved_height ); \
+ if ( saved ) \
+ { \
+ /* This is really, really bad and shouldn't be done */ \
+ gdk_gc_set_clip_mask( gc, 0 ); \
+ drawable = explode_image( saved, saved_width, saved_height, drawable ); \
+ drawable_private = (GdkWindowPrivate*)drawable; \
+ x = 0; \
+ y = ascent; \
+ } \
+ else \
+ { \
+ font_hack_warning( "can't smudge this one." ); \
+ }
+
+
+#define FONT_HACK_CALC_DIMS_AND_FETCH_IMAGE \
+ FONT_HACK_CALC_DIMS ; \
+ FONT_HACK_FETCH_IMAGE
+
+#define FONT_HACK_DRAW_IMAGE \
+ if ( saved ) \
+ { \
+ GdkGC* clean_gc = gdk_gc_new(drawable); \
+\
+ condense_pixmap( drawable, saved_width, saved_height, saved ); \
+ gdk_pixmap_unref( drawable ); \
+ gdk_draw_image(real_drawable, \
+ clean_gc, \
+ saved, \
+ 0, \
+ 0, \
+ saved_x, \
+ saved_y, \
+ saved_width, \
+ saved_height ); \
+ gdk_gc_destroy( clean_gc ); \
+ gdk_image_destroy(saved); \
+ }
+#else
+
+#define FONT_HACK_INIT_VARS
+#define FONT_HACK_CALC_DIMS
+#define FONT_HACK_CALC_DIMS_AND_FETCH_IMAGE
+#define FONT_HACK_FETCH_IMAGE
+#define FONT_HACK_DRAW_IMAGE
+
+#endif
void
gdk_draw_point (GdkDrawable *drawable,
@@ -209,6 +299,12 @@
GdkFontPrivate *font_private;
GdkGCPrivate *gc_private;
+#if defined GTK_FONT_HACK
+ gint text_length = strlen(string);
+#endif
+
+ FONT_HACK_INIT_VARS;
+
g_return_if_fail (drawable != NULL);
g_return_if_fail (font != NULL);
g_return_if_fail (gc != NULL);
@@ -219,7 +315,14 @@
return;
gc_private = (GdkGCPrivate*) gc;
font_private = (GdkFontPrivate*) font;
-
+
+#if defined GTK_FONT_HACK
+ gdk_text_extents_unscaled( font, string, text_length, 0, 0,
+ &width, &ascent, &descent );
+#endif
+
+ FONT_HACK_CALC_DIMS_AND_FETCH_IMAGE;
+
if (font->type == GDK_FONT_FONT)
{
XFontStruct *xfont = (XFontStruct *) font_private->xfont;
@@ -244,6 +347,8 @@
}
else
g_error("undefined font type\n");
+
+ FONT_HACK_DRAW_IMAGE;
}
/* gdk_draw_text
@@ -265,6 +370,8 @@
GdkFontPrivate *font_private;
GdkGCPrivate *gc_private;
+ FONT_HACK_INIT_VARS;
+
g_return_if_fail (drawable != NULL);
g_return_if_fail (font != NULL);
g_return_if_fail (gc != NULL);
@@ -276,6 +383,15 @@
gc_private = (GdkGCPrivate*) gc;
font_private = (GdkFontPrivate*) font;
+#if defined GTK_FONT_HACK
+
+ gdk_text_extents_unscaled( font, text, text_length, 0, 0,
+ &width, &ascent, &descent );
+
+#endif
+
+ FONT_HACK_CALC_DIMS_AND_FETCH_IMAGE;
+
if (font->type == GDK_FONT_FONT)
{
XFontStruct *xfont = (XFontStruct *) font_private->xfont;
@@ -299,6 +415,8 @@
}
else
g_error("undefined font type\n");
+
+ FONT_HACK_DRAW_IMAGE;
}
void
@@ -313,6 +431,8 @@
GdkWindowPrivate *drawable_private;
GdkFontPrivate *font_private;
GdkGCPrivate *gc_private;
+
+ FONT_HACK_INIT_VARS;
g_return_if_fail (drawable != NULL);
g_return_if_fail (font != NULL);
@@ -325,6 +445,15 @@
gc_private = (GdkGCPrivate*) gc;
font_private = (GdkFontPrivate*) font;
+#if defined GTK_FONT_HACK
+
+ gdk_text_extents_wc_unscaled( font, text, text_length, 0, 0,
+ &width, &ascent, &descent );
+
+#endif
+
+ FONT_HACK_CALC_DIMS_AND_FETCH_IMAGE;
+
if (font->type == GDK_FONT_FONT)
{
XFontStruct *xfont = (XFontStruct *) font_private->xfont;
@@ -359,6 +488,8 @@
}
else
g_error("undefined font type\n");
+
+ FONT_HACK_DRAW_IMAGE;
}
void
@@ -512,3 +643,238 @@
npoints,
CoordModeOrigin);
}
+
+#if defined GTK_FONT_HACK
+
+GdkImage*
+fetch_image_from( GdkDrawable* drawable, gint x, gint y, guint width, guint height )
+{
+ guint window_height;
+ guint window_width;
+ gint offset_x = 0;
+ gint offset_y = 0;
+ gint error;
+
+ GdkImage* image;
+ GdkVisual* visual;
+
+ g_return_val_if_fail( width != 0, NULL );
+ g_return_val_if_fail( height != 0, NULL );
+ g_return_val_if_fail( drawable != NULL, NULL );
+
+ visual = gdk_window_get_visual(drawable);
+ if ( !visual )
+ {
+ visual = gdk_window_get_visual( (GdkWindow*)&gdk_root_parent );
+ }
+
+ gdk_window_get_size( drawable, &window_width, &window_height );
+
+
+ image = gdk_image_new( GDK_IMAGE_FASTEST,
+ visual,
+ width, height );
+
+ if ( !image )
+ {
+ g_error( "null from gdk_image_new!" );
+ return 0;
+ }
+ if ( x < 0 )
+ {
+ // font_hack_warning( "x subzero" );
+ offset_x = -x;
+ x = 0;
+ }
+
+ if ( y < 0 )
+ {
+ // font_hack_warning( "y subzero" );
+
+ y = 0;
+ offset_y = -y;
+ }
+
+
+ if ( x >= window_width )
+ {
+ // font_hack_warning( "x low out of bounds" );
+ return image;
+ }
+ if ( y >= window_height )
+ {
+ // font_hack_warning( "y low out of bounds" );
+ return image;
+ }
+
+
+ if ( (x+width) >= window_width )
+ {
+ //font_hack_warning( "x high out of bounds" );
+ width = window_width - x;
+ }
+
+ if ( (y+height) >= window_height )
+ {
+ // font_hack_warning( "y high out of bounds" );
+ height = window_height - y;
+ }
+
+
+ gdk_error_trap_push();
+
+ gdk_image_get_subimage( image,
+ drawable,
+ x,
+ y,
+ width,
+ height,
+ offset_x,offset_y);
+ // gdk_draw_rectangle( drawable, gdk_gc_new(drawable), 1, x,y, width, height );
+ //XSync( ((GdkWindowPrivate*)drawable)->xdisplay,0 );
+ //sleep(1);
+
+ if ( (error = gdk_error_trap_pop()) != 0 )
+ {
+ char buf[64];
+
+ XGetErrorText ( ((GdkWindowPrivate*)drawable)->xdisplay, error, buf, 63);
+
+ font_hack_warning( "X error: dump follows" );
+
+ g_print( "X error %d:%s\n", error, buf );
+ g_print( "x:%d y:%d width:%u height:%u\n",
+ x,y, width, height );
+ g_print( "win width:%u win height:%u\n", window_width, window_height );
+ g_print( "rectangle (%d,%d) (%d,%d)\n", x,y, x+width, y+height );
+
+ font_hack_warning( "X error trapped (don't panic!)" );
+ return 0;
+ }
+
+ return image;
+}
+
+
+GdkPixmap*
+explode_image( GdkImage* source,
+ guint orig_width,
+ guint orig_height,
+ GdkDrawable* drawable )
+{
+ GdkPixmap* exploded_pixmap;
+ GdkImage* exploded_image;
+
+ guint i,j;
+ guint little_x,little_y;
+ guint32 pixel;
+ GdkGC* gc;
+ GdkVisual* visual;
+
+ guint exploded_width, exploded_height;
+
+ visual = gdk_window_get_visual(drawable);
+ if ( !visual )
+ {
+ visual = gdk_window_get_visual( (GdkWindow*)&gdk_root_parent );
+ }
+ exploded_width = orig_width*scale;
+ exploded_height = orig_height*scale*scale;
+
+ exploded_pixmap = gdk_pixmap_new( drawable, exploded_width,
+ exploded_height, visual->depth );
+
+
+ exploded_image = gdk_image_new( GDK_IMAGE_FASTEST,
+ visual,
+ exploded_width, exploded_height );
+
+
+ for( i=0; i<orig_width; i++ )
+ for( j=0; j<orig_height; j++ )
+ {
+
+ pixel = gdk_image_get_pixel( source, i, j );
+
+ for( little_y = 0; little_y < scale; little_y++ )
+ for( little_x = 0; little_x < scale; little_x++ )
+ {
+ gdk_image_put_pixel( exploded_image,
+ (i*scale)+little_x,
+ (j*scale)+little_y, pixel );
+ }
+ }
+
+ gc = gdk_gc_new( drawable );
+
+ gdk_draw_image(exploded_pixmap,
+ gc,
+ exploded_image,
+ 0,
+ 0,
+ 0,
+ 0,
+ exploded_width,
+ exploded_height );
+
+ gdk_gc_destroy( gc );
+ gdk_image_destroy( exploded_image );
+
+ return exploded_pixmap;
+}
+
+void
+condense_pixmap( GdkPixmap* exploded_pixmap,
+ guint condensed_width, guint condensed_height,
+ GdkImage* condensed_image )
+{
+ GdkImage* exploded_image;
+ guint j,i;
+ guint red,green,blue;
+ guint32 pixel;
+ guint little_x,little_y;
+
+ guint exploded_width, exploded_height;
+
+ exploded_width = condensed_width * scale;
+ exploded_height = condensed_height * scale;
+
+ exploded_image = gdk_image_get( exploded_pixmap, 0,0, exploded_width,
+ exploded_height );
+
+ for( j=0; j < condensed_height; j++ )
+ {
+ for( i=0; i < condensed_width; i++ )
+ {
+ red = 0;
+ green = 0;
+ blue = 0;
+
+ for( little_y = 0; little_y < scale; little_y ++ )
+ for( little_x = 0; little_x < scale; little_x ++ )
+ {
+
+ pixel = gdk_image_get_pixel( exploded_image,
+ (i*scale)+little_x,
+ (j*scale)+little_y );
+ red += ((pixel >> 16) & 0xff);
+ green += ((pixel >> 8) & 0xff);
+ blue += (pixel & 0xff);
+ }
+
+ red /= (scale*scale);
+ green /= (scale*scale);
+ blue /= (scale*scale);
+
+ pixel = ((red << 16)
+ | (green << 8 )
+ | blue );
+
+ gdk_image_put_pixel( condensed_image, i, j, pixel );
+ }
+ }
+
+ gdk_image_destroy( exploded_image );
+}
+
+#endif
diff --recursive --new-file --unified gtk+-1.2.6.clean/gdk/gdkfont.c gtk+-1.2.6.font-hack/gdk/gdkfont.c
--- gtk+-1.2.6.clean/gdk/gdkfont.c Sat Jan 22 15:29:17 2000
+++ gtk+-1.2.6.font-hack/gdk/gdkfont.c Mon Jan 24 00:58:54 2000
@@ -24,11 +24,15 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
+/* Font smooth hack: by John Fremlin <vii@altern.org> (http://altern.org/vii) */
+
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include "gdk.h"
#include "gdkprivate.h"
+#include "gdkfonthack.h"
+
static GHashTable *font_name_hash = NULL;
static GHashTable *fontset_name_hash = NULL;
@@ -122,8 +126,9 @@
font = (GdkFont*) private;
font->type = GDK_FONT_FONT;
- font->ascent = xfont->ascent;
- font->descent = xfont->descent;
+
+ font->ascent = scale_down(xfont->ascent);
+ font->descent = scale_down(xfont->descent);
gdk_xid_table_insert (&xfont->fid, font);
}
@@ -295,6 +300,13 @@
gdk_string_width (GdkFont *font,
const gchar *string)
{
+ return scale_down( gdk_string_width_unscaled(font,string) );
+}
+
+gint
+gdk_string_width_unscaled (GdkFont *font,
+ const gchar *string)
+{
GdkFontPrivate *font_private;
gint width;
XFontStruct *xfont;
@@ -329,11 +341,21 @@
return width;
}
+
gint
gdk_text_width (GdkFont *font,
const gchar *text,
gint text_length)
{
+ return scale_down( gdk_text_width_unscaled(font, text, text_length) );
+}
+
+
+gint
+gdk_text_width_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length)
+{
GdkFontPrivate *private;
gint width;
XFontStruct *xfont;
@@ -367,11 +389,21 @@
return width;
}
+
gint
gdk_text_width_wc (GdkFont *font,
const GdkWChar *text,
gint text_length)
{
+ return scale_down( gdk_text_width_wc_unscaled( font, text, text_length ) );
+}
+
+
+gint
+gdk_text_width_wc_unscaled (GdkFont *font,
+ const GdkWChar *text,
+ gint text_length)
+{
GdkFontPrivate *private;
gint width;
XFontStruct *xfont;
@@ -428,6 +460,13 @@
gdk_char_width (GdkFont *font,
gchar character)
{
+ return scale_down( gdk_char_width_unscaled( font, character ) );
+}
+
+gint
+gdk_char_width_unscaled (GdkFont *font,
+ gchar character)
+{
GdkFontPrivate *private;
XCharStruct *chars;
gint width;
@@ -470,10 +509,18 @@
return width;
}
+
gint
gdk_char_width_wc (GdkFont *font,
GdkWChar character)
{
+ return scale_down( gdk_char_width_wc_unscaled( font, character ));
+}
+
+gint
+gdk_char_width_wc_unscaled (GdkFont *font,
+ GdkWChar character)
+{
GdkFontPrivate *private;
XCharStruct *chars;
gint width;
@@ -520,18 +567,27 @@
return width;
}
-gint
-gdk_string_measure (GdkFont *font,
- const gchar *string)
+void
+gdk_text_extents (GdkFont *font,
+ const gchar *text,
+ gint text_length,
+ gint *lbearing,
+ gint *rbearing,
+ gint *width,
+ gint *ascent,
+ gint *descent)
{
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (string != NULL, -1);
-
- return gdk_text_measure (font, string, strlen (string));
+ gdk_text_extents_unscaled( font, text, text_length, lbearing, rbearing,
+ width, ascent, descent );
+ scale_down_ptr( width );
+ scale_down_ptr( ascent );
+ scale_down_ptr( descent );
+ scale_down_ptr( lbearing );
+ scale_down_ptr( rbearing );
}
void
-gdk_text_extents (GdkFont *font,
+gdk_text_extents_unscaled (GdkFont *font,
const gchar *text,
gint text_length,
gint *lbearing,
@@ -609,6 +665,28 @@
gint *ascent,
gint *descent)
{
+ gdk_text_extents_wc_unscaled( font,
+ text, text_length,
+ lbearing, rbearing, width, ascent, descent );
+
+ scale_down_ptr( width );
+ scale_down_ptr( ascent );
+ scale_down_ptr( descent );
+ scale_down_ptr( lbearing );
+ scale_down_ptr( rbearing );
+}
+
+
+void
+gdk_text_extents_wc_unscaled (GdkFont *font,
+ const GdkWChar *text,
+ gint text_length,
+ gint *lbearing,
+ gint *rbearing,
+ gint *width,
+ gint *ascent,
+ gint *descent)
+{
GdkFontPrivate *private;
XCharStruct overall;
XFontStruct *xfont;
@@ -707,6 +785,14 @@
const gchar *text,
gint text_length)
{
+ return gdk_text_measure_unscaled( font,text,text_length );
+}
+
+gint
+gdk_text_measure_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length)
+{
GdkFontPrivate *private;
XCharStruct overall;
XFontStruct *xfont;
@@ -770,11 +856,21 @@
return gdk_text_height (font, string, strlen (string));
}
+
gint
gdk_text_height (GdkFont *font,
const gchar *text,
gint text_length)
{
+ return scale_down( gdk_text_height_unscaled( font, text, text_length ) );
+}
+
+
+gint
+gdk_text_height_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length)
+{
GdkFontPrivate *private;
XCharStruct overall;
XFontStruct *xfont;
@@ -827,3 +923,14 @@
return gdk_text_height (font, &character, 1);
}
+
+gint
+gdk_string_measure (GdkFont *font,
+ const gchar *string)
+{
+ g_return_val_if_fail (font != NULL, -1);
+ g_return_val_if_fail (string != NULL, -1);
+
+ return gdk_text_measure (font, string, strlen (string));
+}
+
diff --recursive --new-file --unified gtk+-1.2.6.clean/gdk/gdkfonthack.h gtk+-1.2.6.font-hack/gdk/gdkfonthack.h
--- gtk+-1.2.6.clean/gdk/gdkfonthack.h Thu Jan 1 01:00:00 1970
+++ gtk+-1.2.6.font-hack/gdk/gdkfonthack.h Mon Jan 24 01:00:22 2000
@@ -0,0 +1,99 @@
+/* Font smooth hack: by John Fremlin <vii@altern.org> (http://altern.org/vii) */
+
+#ifndef __GDK_FONTHACK_H__
+#define __GDK_FONTHACK_H__
+
+#include "gdk.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h" /* for inline */
+#endif
+
+#define GTK_FONT_HACK
+
+#if defined GTK_FONT_HACK
+
+#define font_hack_warning(string) g_warning( "gdk font hack:%s:%u: %s", __FILE__, __LINE__, (string) )
+
+static const unsigned scale = 2;
+
+gint
+gdk_string_width_unscaled (GdkFont *font,
+ const gchar *string);
+
+gint
+gdk_text_width_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length);
+
+
+gint
+gdk_text_width_wc_unscaled (GdkFont *font,
+ const GdkWChar *text,
+ gint text_length);
+
+gint
+gdk_char_width_unscaled (GdkFont *font,
+ gchar character);
+
+gint
+gdk_char_width_wc_unscaled (GdkFont *font,
+ GdkWChar character);
+
+void
+gdk_text_extents_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length,
+ gint *lbearing,
+ gint *rbearing,
+ gint *width,
+ gint *ascent,
+ gint *descent);
+
+void
+gdk_text_extents_wc_unscaled (GdkFont *font,
+ const GdkWChar *text,
+ gint text_length,
+ gint *lbearing,
+ gint *rbearing,
+ gint *width,
+ gint *ascent,
+ gint *descent);
+
+gint
+gdk_text_measure_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length);
+
+gint
+gdk_text_height_unscaled (GdkFont *font,
+ const gchar *text,
+ gint text_length);
+
+
+inline
+static
+gint
+scale_down( gint length )
+{
+ return ((length+scale/2)/scale)+1;
+}
+
+inline
+static
+void
+scale_down_ptr( gint* length )
+{
+ if ( length )
+ *length = scale_down( *length );
+}
+#else
+
+#define scale_down(x) (x)
+#define scale_down_ptr(x)
+
+#define font_hack_warning(string)
+
+#endif //GTK_FONT_HACK
+
+#endif
diff --recursive --new-file --unified gtk+-1.2.6.clean/gdk/gdkimage.c gtk+-1.2.6.font-hack/gdk/gdkimage.c
--- gtk+-1.2.6.clean/gdk/gdkimage.c Sat Jan 22 15:29:17 2000
+++ gtk+-1.2.6.font-hack/gdk/gdkimage.c Sat Jan 22 15:27:28 2000
@@ -347,6 +347,8 @@
win_private->xwindow,
x, y, width, height,
AllPlanes, ZPixmap);
+ if( !private->ximage )
+ return NULL;
image->type = GDK_IMAGE_NORMAL;
image->visual = gdk_window_get_visual (window);
@@ -361,6 +363,39 @@
return image;
}
+
+void
+gdk_image_get_subimage (GdkImage* image,
+ GdkWindow *window,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gint dest_x,
+ gint dest_y
+ )
+{
+ GdkImagePrivate *private;
+ GdkWindowPrivate *win_private;
+
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (image != NULL);
+
+ win_private = (GdkWindowPrivate *) window;
+ if (win_private->destroyed)
+ return;
+
+ private = (GdkImagePrivate*)image;
+
+ XGetSubImage
+ (private->xdisplay,
+ win_private->xwindow,
+ x, y, width, height,
+ AllPlanes, ZPixmap,
+ private->ximage, dest_x,
+ dest_y );
+}
+
guint32
gdk_image_get_pixel (GdkImage *image,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]