[gimp] app: port GimpFgBgView rendering to cairo
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: port GimpFgBgView rendering to cairo
- Date: Thu, 29 Jul 2010 12:06:22 +0000 (UTC)
commit 8d67b5b69b01e5868456cf0f1858359f8936375c
Author: Michael Natterer <mitch gimp org>
Date: Thu Jul 29 14:05:51 2010 +0200
app: port GimpFgBgView rendering to cairo
app/widgets/gimpfgbgview.c | 92 ++++++++++---------------------------------
app/widgets/gimpfgbgview.h | 3 -
2 files changed, 22 insertions(+), 73 deletions(-)
---
diff --git a/app/widgets/gimpfgbgview.c b/app/widgets/gimpfgbgview.c
index d7b022b..40a8b6c 100644
--- a/app/widgets/gimpfgbgview.c
+++ b/app/widgets/gimpfgbgview.c
@@ -139,68 +139,9 @@ gimp_fg_bg_view_destroy (GtkObject *object)
if (view->context)
gimp_fg_bg_view_set_context (view, NULL);
- if (view->render_buf)
- {
- g_free (view->render_buf);
- view->render_buf = NULL;
- view->render_buf_size = 0;
- }
-
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
-static void
-gimp_fg_bg_view_draw_rect (GimpFgBgView *view,
- GdkDrawable *drawable,
- GdkGC *gc,
- gint x,
- gint y,
- gint width,
- gint height,
- const GimpRGB *color)
-{
- gint rowstride;
- guchar r, g, b;
- gint xx, yy;
- guchar *bp;
-
- if (! (width > 0 && height > 0))
- return;
-
- gimp_rgb_get_uchar (color, &r, &g, &b);
-
- rowstride = 3 * ((width + 3) & -4);
-
- if (! view->render_buf || view->render_buf_size < height * rowstride)
- {
- view->render_buf_size = rowstride * height;
-
- g_free (view->render_buf);
- view->render_buf = g_malloc (view->render_buf_size);
- }
-
- bp = view->render_buf;
- for (xx = 0; xx < width; xx++)
- {
- *bp++ = r;
- *bp++ = g;
- *bp++ = b;
- }
-
- bp = view->render_buf;
-
- for (yy = 1; yy < height; yy++)
- {
- bp += rowstride;
- memcpy (bp, view->render_buf, rowstride);
- }
-
- gdk_draw_rgb_image (drawable, gc, x, y, width, height,
- GDK_RGB_DITHER_MAX,
- view->render_buf,
- rowstride);
-}
-
static gboolean
gimp_fg_bg_view_expose (GtkWidget *widget,
GdkEventExpose *eevent)
@@ -208,6 +149,7 @@ gimp_fg_bg_view_expose (GtkWidget *widget,
GimpFgBgView *view = GIMP_FG_BG_VIEW (widget);
GtkStyle *style = gtk_widget_get_style (widget);
GdkWindow *window = gtk_widget_get_window (widget);
+ cairo_t *cr;
GtkAllocation allocation;
gint x, y;
gint width, height;
@@ -217,6 +159,11 @@ gimp_fg_bg_view_expose (GtkWidget *widget,
if (! gtk_widget_is_drawable (widget))
return FALSE;
+ cr = gdk_cairo_create (eevent->window);
+
+ gdk_cairo_region (cr, eevent->region);
+ cairo_clip (cr);
+
gtk_widget_get_allocation (widget, &allocation);
x = allocation.x;
@@ -232,12 +179,14 @@ gimp_fg_bg_view_expose (GtkWidget *widget,
if (view->context)
{
gimp_context_get_background (view->context, &color);
- gimp_fg_bg_view_draw_rect (view, window,
- style->fg_gc[0],
- x + width - rect_w + 1,
- y + height - rect_h + 1,
- rect_w - 2, rect_h - 2,
- &color);
+ gimp_cairo_set_source_rgb (cr, &color);
+
+ cairo_rectangle (cr,
+ x + width - rect_w + 1,
+ y + height - rect_h + 1,
+ rect_w - 2,
+ rect_h - 2);
+ cairo_fill (cr);
}
gtk_paint_shadow (style, window, GTK_STATE_NORMAL,
@@ -250,11 +199,14 @@ gimp_fg_bg_view_expose (GtkWidget *widget,
if (view->context)
{
gimp_context_get_foreground (view->context, &color);
- gimp_fg_bg_view_draw_rect (view, window,
- style->fg_gc[0],
- x + 1, y + 1,
- rect_w - 2, rect_h - 2,
- &color);
+ gimp_cairo_set_source_rgb (cr, &color);
+
+ cairo_rectangle (cr,
+ x + 1,
+ y + 1,
+ rect_w - 2,
+ rect_h - 2);
+ cairo_fill (cr);
}
gtk_paint_shadow (style, window, GTK_STATE_NORMAL,
diff --git a/app/widgets/gimpfgbgview.h b/app/widgets/gimpfgbgview.h
index c27d40d..067c4d3 100644
--- a/app/widgets/gimpfgbgview.h
+++ b/app/widgets/gimpfgbgview.h
@@ -37,9 +37,6 @@ struct _GimpFgBgView
GtkWidget parent_instance;
GimpContext *context;
-
- guchar *render_buf;
- gint render_buf_size;
};
struct _GimpFgBgViewClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]