[gthumb] image-viewer: clip the expose event region only ones
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] image-viewer: clip the expose event region only ones
- Date: Sat, 15 Jan 2011 16:51:25 +0000 (UTC)
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]