Author: abrander
Date: 2009-06-26 00:45:41 +0200 (Fri, 26 Jun 2009)
New Revision: 2511

Modified:
   trunk/src/rs-preview-widget.c
Log:
Only initialize the Cairo context if needed in redraw().

Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c       2009-06-25 21:53:37 UTC (rev 2510)
+++ trunk/src/rs-preview-widget.c       2009-06-25 22:45:41 UTC (rev 2511)
@@ -347,7 +347,7 @@
        preview->scale = 1.0;
 
        /* We'll take care of double buffering ourself */
-       gtk_widget_set_double_buffered(GTK_WIDGET(preview), FALSE);
+       gtk_widget_set_double_buffered(GTK_WIDGET(preview), TRUE);
 
        g_signal_connect(G_OBJECT(preview->canvas), "expose-event", 
G_CALLBACK(expose), preview);
        g_signal_connect(G_OBJECT(preview->canvas), "size-allocate", 
G_CALLBACK(size_allocate), preview);
@@ -1229,6 +1229,21 @@
        }
 }
 
+static cairo_t *
+redraw_cairo_init(GdkDrawable *drawable, GdkRectangle *dirty_area)
+{
+       cairo_t *cr = gdk_cairo_create(drawable);
+
+       /* Clip Cairo to dirty area */
+    cairo_new_path(cr);
+    cairo_rectangle(cr, dirty_area->x, dirty_area->y, dirty_area->width, 
dirty_area->height);
+       cairo_clip(cr);
+
+       cairo_set_antialias(cr, CAIRO_ANTIALIAS_GRAY);
+
+       return cr;
+}
+
 static void
 redraw(RSPreviewWidget *preview, GdkRectangle *dirty_area)
 {
@@ -1239,7 +1254,7 @@
        GdkDrawable *drawable = GDK_DRAWABLE(window);
        GdkGC *gc = gdk_gc_new(drawable);
        gint i;
-       cairo_t *cr;
+       cairo_t *cr = NULL;
        const static gdouble dashes[] = { 4.0, 4.0, };
        gint width, height;
 
@@ -1249,16 +1264,6 @@
 
        gdk_window_begin_paint_rect(window, dirty_area);
 
-       /* Prepare for drawing snapshot-identifier */
-       cr = gdk_cairo_create(drawable);
-
-       /* Clip Cairo to dirty area */
-    cairo_new_path(cr);
-    cairo_rectangle(cr, dirty_area->x, dirty_area->y, dirty_area->width, 
dirty_area->height);
-       cairo_clip(cr);
-
-       cairo_set_antialias(cr, CAIRO_ANTIALIAS_GRAY);
-
        for(i=0;i<preview->views;i++)
        {
                width = rs_filter_get_width(preview->filter_end[i]);
@@ -1315,6 +1320,8 @@
 
                if (preview->state & DRAW_ROI)
                {
+                       if (!cr)
+                               cr = redraw_cairo_init(drawable, dirty_area);
                        gchar *text;
                        cairo_text_extents_t te;
 
@@ -1486,6 +1493,8 @@
                /* Draw snapshot-identifier */
                if (preview->views > 1)
                {
+                       if (!cr)
+                               cr = redraw_cairo_init(drawable, dirty_area);
                        GdkRectangle canvas;
                        const gchar *txt;
                        switch (preview->snapshot[i])
@@ -1525,6 +1534,8 @@
        /* Draw straighten-line */
        if (preview->state & STRAIGHTEN_MOVE)
        {
+               if (!cr)
+                       cr = redraw_cairo_init(drawable, dirty_area);
                cairo_set_line_width(cr, 1.0);
 
                cairo_set_dash(cr, dashes, 2, 0.0);
@@ -1559,7 +1570,8 @@
        }
 
        g_object_unref(gc);
-       cairo_destroy(cr);
+       if (cr)
+               cairo_destroy(cr);
 
        gdk_window_end_paint(window);
 #undef CAIRO_LINE


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to