modules: port to GtkWidget::draw()

This commit is contained in:
Michael Natterer 2010-10-21 12:49:13 +02:00
parent b85f40b815
commit 58802a7109
1 changed files with 24 additions and 24 deletions

View File

@ -74,8 +74,8 @@ static void colorsel_water_set_config (GimpColorSelector *selector,
static void colorsel_water_create_transform (ColorselWater *water);
static void colorsel_water_destroy_transform (ColorselWater *water);
static gboolean select_area_expose (GtkWidget *widget,
GdkEventExpose *event,
static gboolean select_area_draw (GtkWidget *widget,
cairo_t *cr,
ColorselWater *water);
static gboolean button_press_event (GtkWidget *widget,
GdkEventButton *event,
@ -159,8 +159,8 @@ colorsel_water_init (ColorselWater *water)
water->area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (frame), water->area);
g_signal_connect (water->area, "expose-event",
G_CALLBACK (select_area_expose),
g_signal_connect (water->area, "draw",
G_CALLBACK (select_area_draw),
water);
/* Event signals */
@ -290,12 +290,13 @@ colorsel_water_destroy_transform (ColorselWater *water)
}
static gboolean
select_area_expose (GtkWidget *widget,
GdkEventExpose *event,
ColorselWater *water)
select_area_draw (GtkWidget *widget,
cairo_t *cr,
ColorselWater *water)
{
cairo_t *cr;
GdkRectangle area;
GtkAllocation allocation;
gdouble x1, y1, x2, y2;
gdouble dx;
gdouble dy;
cairo_surface_t *surface;
@ -303,10 +304,12 @@ select_area_expose (GtkWidget *widget,
gdouble y;
gint j;
cr = gdk_cairo_create (event->window);
cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
area.x = floor (x1);
area.y = floor (y1);
area.width = ceil (x2) - area.x;
area.height = ceil (y2) - area.y;
gtk_widget_get_allocation (widget, &allocation);
@ -314,16 +317,16 @@ select_area_expose (GtkWidget *widget,
dy = 1.0 / allocation.height;
surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
event->area.width,
event->area.height);
area.width,
area.height);
dest = cairo_image_surface_get_data (surface);
if (! water->transform)
colorsel_water_create_transform (water);
for (j = 0, y = event->area.y / allocation.height;
j < event->area.height;
for (j = 0, y = area.y / allocation.height;
j < area.height;
j++, y += dy)
{
guchar *d = dest;
@ -338,11 +341,11 @@ select_area_expose (GtkWidget *widget,
gint i;
r += event->area.x * dr;
g += event->area.x * dg;
b += event->area.x * db;
r += area.x * dr;
g += area.x * dg;
b += area.x * db;
for (i = 0; i < event->area.width ; i++)
for (i = 0; i < area.width; i++)
{
GIMP_CAIRO_RGB24_SET_PIXEL (d,
CLAMP ((gint) r, 0, 255),
@ -362,20 +365,17 @@ select_area_expose (GtkWidget *widget,
dest,
babl_format ("cairo-RGB24"),
dest,
event->area.width);
area.width);
dest += cairo_image_surface_get_stride (surface);
}
cairo_surface_mark_dirty (surface);
cairo_set_source_surface (cr, surface,
event->area.x, event->area.y);
cairo_set_source_surface (cr, surface, area.x, area.y);
cairo_surface_destroy (surface);
cairo_paint (cr);
cairo_destroy (cr);
return FALSE;
}