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