[gthumb] image-viewer: clip the expose event region only ones



commit 7c7c3e038e26c9eb5db5ccd74141b6626c149e1f
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Jan 15 16:47:42 2011 +0100

    image-viewer: clip the expose event region only ones

 gthumb/gth-image-selector.c |   20 +++++--------
 gthumb/gth-image-viewer.c   |   67 ++++++++++++++++++++++++------------------
 2 files changed, 46 insertions(+), 41 deletions(-)
---
diff --git a/gthumb/gth-image-selector.c b/gthumb/gth-image-selector.c
index eadf676..59dd63e 100644
--- a/gthumb/gth-image-selector.c
+++ b/gthumb/gth-image-selector.c
@@ -583,17 +583,13 @@ paint_background (GthImageSelector *self,
 				       self->priv->viewer->y_offset - self->priv->viewer->image_area.y,
 				       &self->priv->viewer->image_area,
 				       event->region,
-				       GDK_INTERP_TILES);
+				       GDK_INTERP_NEAREST);
 
-	/* make the background darker */
-	{
+	if (! self->priv->viewer->dragging) { /* make the background darker */
 		GdkRectangle *rects;
 		int           n_rects;
 		int           i;
 
-		cairo_save (cr);
-		gdk_cairo_region (cr, event->region);
-		cairo_clip (cr);
 		gdk_cairo_rectangle (cr, &self->priv->viewer->image_area);
 		cairo_clip (cr);
 		cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5);
@@ -605,7 +601,6 @@ paint_background (GthImageSelector *self,
 				cairo_rectangle (cr, paint_area.x, paint_area.y, paint_area.width, paint_area.height);
 		}
 		cairo_fill (cr);
-		cairo_restore (cr);
 
 		g_free (rects);
 	}
@@ -630,9 +625,10 @@ paint_selection (GthImageSelector *self,
 				       self->priv->viewer->y_offset - self->priv->viewer->image_area.y,
 				       &selection_area,
 				       event->region,
-				       GDK_INTERP_TILES);
+				       GDK_INTERP_NEAREST);
 
 	cairo_save (cr);
+
 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 9, 2)
 	cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE);
 	cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
@@ -640,8 +636,6 @@ paint_selection (GthImageSelector *self,
 	cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
 #endif
 
-
-	gdk_cairo_region (cr, event->region);
 	gdk_cairo_rectangle (cr, &selection_area);
 	cairo_clip (cr);
 
@@ -686,8 +680,8 @@ paint_selection (GthImageSelector *self,
 	cairo_rectangle (cr,
 			 selection_area.x + 0.5,
 			 selection_area.y + 0.5,
-			 selection_area.width,
-			 selection_area.height);
+			 selection_area.width - 1,
+			 selection_area.height - 1);
 	cairo_stroke (cr);
 
 	cairo_restore (cr);
@@ -793,6 +787,7 @@ gth_image_selector_button_release (GthImageViewerTool *base,
 	update_cursor (self,
 		       event->x + self->priv->viewer->x_offset,
 		       event->y + self->priv->viewer->y_offset);
+	gtk_widget_queue_draw (GTK_WIDGET (self->priv->viewer));
 
 	return FALSE;
 }
@@ -965,6 +960,7 @@ gth_image_selector_button_press (GthImageViewerTool *base,
 		self->priv->viewer->pressed = TRUE;
 		self->priv->viewer->dragging = TRUE;
 		self->priv->drag_start_selection_area = self->priv->selection_area;
+		gtk_widget_queue_draw (GTK_WIDGET (self->priv->viewer));
 		retval = TRUE;
 	}
 
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 45f00de..be9b551 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -570,15 +570,15 @@ gth_image_viewer_size_allocate (GtkWidget     *widget,
 
 		if (width > gdk_width)
 			self->x_offset = CLAMP (self->x_offset,
-						  0,
-						  width - gdk_width);
+						0,
+						width - gdk_width);
 		else
 			self->x_offset = 0;
 
 		if (height > gdk_height)
 			self->y_offset = CLAMP (self->y_offset,
-						  0,
-						  height - gdk_height);
+						0,
+						height - gdk_height);
 		else
 			self->y_offset = 0;
 
@@ -589,40 +589,48 @@ gth_image_viewer_size_allocate (GtkWidget     *widget,
 
 		/* Change adjustment values. */
 
-		gtk_adjustment_set_lower (self->hadj, 0.0);
-		gtk_adjustment_set_upper (self->hadj, width);
-		gtk_adjustment_set_value (self->hadj, self->x_offset);
-		gtk_adjustment_set_step_increment (self->hadj, STEP_INCREMENT);
-		gtk_adjustment_set_page_increment (self->hadj, gdk_width / 2);
-		gtk_adjustment_set_page_size (self->hadj, gdk_width);
-
-		gtk_adjustment_set_lower (self->vadj, 0.0);
-		gtk_adjustment_set_upper (self->vadj, height);
-		gtk_adjustment_set_value (self->vadj, self->y_offset);
-		gtk_adjustment_set_step_increment (self->vadj, STEP_INCREMENT);
-		gtk_adjustment_set_page_increment (self->vadj, gdk_height / 2);
-		gtk_adjustment_set_page_size (self->vadj, gdk_height);
+		gtk_adjustment_configure (self->hadj,
+					  self->x_offset,
+					  0.0,
+					  width,
+					  STEP_INCREMENT,
+					  gdk_width / 2,
+					  gdk_width);
+		gtk_adjustment_configure (self->vadj,
+					  self->y_offset,
+					  0.0,
+					  height,
+					  STEP_INCREMENT,
+					  gdk_height / 2,
+					  gdk_height);
 	}
 	else {
-		gtk_adjustment_set_lower (self->hadj, 0.0);
-		gtk_adjustment_set_upper (self->hadj, 1.0);
-		gtk_adjustment_set_value (self->hadj, 0.0);
-		gtk_adjustment_set_page_size (self->hadj, 1.0);
-
-		gtk_adjustment_set_lower (self->vadj, 0.0);
-		gtk_adjustment_set_upper (self->vadj, 1.0);
-		gtk_adjustment_set_value (self->vadj, 0.0);
-		gtk_adjustment_set_page_size (self->vadj, 1.0);
+		gtk_adjustment_configure (self->hadj,
+					  0.0,
+					  0.0,
+					  1.0,
+					  0.1,
+					  1.0,
+					  1.0);
+		gtk_adjustment_configure (self->vadj,
+					  0.0,
+					  0.0,
+					  1.0,
+					  0.1,
+					  1.0,
+					  1.0);
 	}
 
 	_gth_image_viewer_update_image_area (self);
 
+	/* FIXME
 	g_signal_handlers_block_by_data (G_OBJECT (self->hadj), self);
 	g_signal_handlers_block_by_data (G_OBJECT (self->vadj), self);
 	gtk_adjustment_changed (self->hadj);
 	gtk_adjustment_changed (self->vadj);
 	g_signal_handlers_unblock_by_data (G_OBJECT (self->hadj), self);
 	g_signal_handlers_unblock_by_data (G_OBJECT (self->vadj), self);
+	*/
 
 	/**/
 
@@ -740,7 +748,6 @@ gth_image_viewer_expose (GtkWidget      *widget,
 	self = GTH_IMAGE_VIEWER (widget);
 
 	cr = gdk_cairo_create (gtk_widget_get_window (widget));
-
 	cairo_set_line_width (cr, 0.5);
 	cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
 
@@ -2550,8 +2557,7 @@ gth_image_viewer_paint_region (GthImageViewer *self,
 	int           i;
 
 	cairo_save (cr);
-	gdk_cairo_region (cr, region);
-	cairo_clip (cr);
+
 	gdk_cairo_rectangle (cr, pixbuf_area);
 	cairo_clip (cr);
 
@@ -2587,7 +2593,10 @@ gth_image_viewer_apply_painters (GthImageViewer *self,
 
 	for (scan = self->priv->painters; scan; scan = scan->next) {
 		PainterData *painter_data = scan->data;
+
+		cairo_save (cr);
 		painter_data->func (self, event, cr, painter_data->user_data);
+		cairo_restore (cr);
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]