GtkPixmap patch for large pixmaps
- From: Sam O'Connor <oconnor eiffel com>
- To: gtk-devel-list gnome org
- Subject: GtkPixmap patch for large pixmaps
- Date: Mon, 24 Apr 2000 15:03:20 -0700
Currently, if the minimum size of a pixmap is set
smaller that the actual size of the pixmap, the
pixmap is drawn over other widgets. This simple
patch sets the source region in the call to
gdk_draw_pixmap to draw only in the allocated area.
This seems like the right thing to do.
Sam
*** gtk+-1.2.7.old/gtk/gtkpixmap.c Wed Feb 24 02:15:10 1999
--- gtk+-1.2.7/gtk/gtkpixmap.c Mon Apr 24 14:57:00 2000
***************
*** 189,194 ****
--- 189,195 ----
GtkPixmap *pixmap;
GtkMisc *misc;
gint x, y;
+ gint src_x, src_y, src_width, src_height;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_PIXMAP (widget), FALSE);
***************
*** 214,219 ****
--- 215,244 ----
gdk_gc_set_clip_origin (widget->style->black_gc, x, y);
}
+ if (x < widget->allocation.x)
+ {
+ src_x = widget->allocation.x - x;
+ x += src_x;
+ src_width = widget->allocation.width;
+ }
+ else
+ {
+ src_x = 0;
+ src_width = -1;
+ }
+
+ if (y < widget->allocation.y)
+ {
+ src_y = widget->allocation.y - y;
+ y += src_y;
+ src_height = widget->allocation.height;
+ }
+ else
+ {
+ src_y = 0;
+ src_height = -1;
+ }
+
if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE
&& pixmap->build_insensitive)
{
***************
*** 222,235 ****
gdk_draw_pixmap (widget->window,
widget->style->black_gc,
pixmap->pixmap_insensitive,
! 0, 0, x, y, -1, -1);
}
else
{
gdk_draw_pixmap (widget->window,
widget->style->black_gc,
pixmap->pixmap,
! 0, 0, x, y, -1, -1);
}
if (pixmap->mask)
--- 247,260 ----
gdk_draw_pixmap (widget->window,
widget->style->black_gc,
pixmap->pixmap_insensitive,
! src_x, src_y, x, y, src_width, src_height);
}
else
{
gdk_draw_pixmap (widget->window,
widget->style->black_gc,
pixmap->pixmap,
! src_x, src_y, x, y, src_width, src_height);
}
if (pixmap->mask)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]