[gthumb] sharpen tool: center the preview after activation



commit e01685a03953a71fe17d0a267522320bbf7aa790
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sun Sep 16 16:55:55 2012 +0200

    sharpen tool: center the preview after activation

 extensions/file_tools/gth-file-tool-sharpen.c |   24 ++++++++++++++++++++++++
 gthumb/gth-image-viewer.c                     |   17 +++++++++++++++++
 gthumb/gth-image-viewer.h                     |    1 +
 3 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/extensions/file_tools/gth-file-tool-sharpen.c b/extensions/file_tools/gth-file-tool-sharpen.c
index d5872a2..6b20b0a 100644
--- a/extensions/file_tools/gth-file-tool-sharpen.c
+++ b/extensions/file_tools/gth-file-tool-sharpen.c
@@ -47,6 +47,7 @@ struct _GthFileToolSharpenPrivate {
 	GthTask         *pixbuf_task;
 	guint            apply_event;
 	gboolean         show_preview;
+	gboolean         first_allocation;
 };
 
 
@@ -213,6 +214,9 @@ apply_cb (gpointer user_data)
 		w = MIN (gtk_adjustment_get_page_size (preview->hadj), cairo_image_surface_get_width (self->priv->source));
 		h = MIN (gtk_adjustment_get_page_size (preview->vadj), cairo_image_surface_get_height (self->priv->source));
 
+		if ((w < 0) || (h < 0))
+			return FALSE;
+
 		cairo_surface_destroy (self->priv->destination);
 		self->priv->destination = _cairo_image_surface_copy (self->priv->source);
 
@@ -267,6 +271,21 @@ preview_checkbutton_toggled_cb (GtkToggleButton    *toggle_button,
 }
 
 
+static void
+preview_size_allocate_cb (GtkWidget    *widget,
+			  GdkRectangle *allocation,
+			  gpointer      user_data)
+{
+	GthFileToolSharpen *self = user_data;
+
+	if (! self->priv->first_allocation)
+		return;
+	self->priv->first_allocation = FALSE;
+
+	gth_image_viewer_scroll_to_center (GTH_IMAGE_VIEWER (self->priv->preview));
+}
+
+
 static GtkWidget *
 gth_file_tool_sharpen_get_options (GthFileTool *base)
 {
@@ -293,6 +312,7 @@ gth_file_tool_sharpen_get_options (GthFileTool *base)
 		return NULL;
 
 	self->priv->destination = NULL;
+	self->priv->first_allocation = TRUE;
 
 	self->priv->builder = _gtk_builder_new_from_file ("sharpen-options.ui", "file_tools");
 	options = _gtk_builder_get_widget (self->priv->builder, "options");
@@ -358,6 +378,10 @@ gth_file_tool_sharpen_get_options (GthFileTool *base)
 			  "clicked",
 			  G_CALLBACK (preview_checkbutton_toggled_cb),
 			  self);
+	g_signal_connect_after (self->priv->preview,
+				"size-allocate",
+				G_CALLBACK (preview_size_allocate_cb),
+				self);
 
 	return options;
 }
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 4ab7859..4327774 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -2293,6 +2293,23 @@ gth_image_viewer_scroll_to (GthImageViewer *self,
 
 
 void
+gth_image_viewer_scroll_to_center (GthImageViewer *self)
+{
+	int zoomed_width;
+	int zoomed_height;
+	int visible_width;
+	int visible_height;
+
+	_gth_image_viewer_get_zoomed_size (self, &zoomed_width, &zoomed_height);
+	_gth_image_viewer_get_visible_area_size (self, &visible_width, &visible_height);
+
+	gth_image_viewer_scroll_to (self,
+				    (zoomed_width - visible_width) / 2,
+				    (zoomed_height - visible_height) / 2);
+}
+
+
+void
 gth_image_viewer_scroll_step_x (GthImageViewer *self,
 				gboolean        increment)
 {
diff --git a/gthumb/gth-image-viewer.h b/gthumb/gth-image-viewer.h
index 2dae86e..8100235 100644
--- a/gthumb/gth-image-viewer.h
+++ b/gthumb/gth-image-viewer.h
@@ -252,6 +252,7 @@ void           gth_image_viewer_set_tool                 (GthImageViewer
 void           gth_image_viewer_scroll_to                (GthImageViewer        *viewer,
 							  int                    x_offset,
 							  int                    y_offset);
+void           gth_image_viewer_scroll_to_center         (GthImageViewer        *viewer);
 void           gth_image_viewer_scroll_step_x            (GthImageViewer        *viewer,
 							  gboolean               increment);
 void           gth_image_viewer_scroll_step_y            (GthImageViewer        *viewer,



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