[evince] ev-view: Refactor zoom methods



commit a9459eacc1500c3dfbf11959764e06fca442cb03
Author: Chow Loong Jin <hyperair debian org>
Date:   Tue Aug 7 19:25:19 2012 +0200

    ev-view: Refactor zoom methods
    
    The ev_view_[can_]zoom_{in,out} functions have been refactored slightly
    to reduce code duplication and allow for zooming by a factor other than
    ZOOM_IN_FACTOR and ZOOM_OUT_FACTOR by adding two new functions, needed
    for smooth zooming via Ctrl+scroll:
    - gboolean ev_view_can_zoom (EvView *view, gdouble factor)
    - void     ev_view_zoom     (EvView *view, gdouble factor)

 libview/ev-view.c |   42 ++++++++++++++++++++++++++++++------------
 1 files changed, 30 insertions(+), 12 deletions(-)
---
diff --git a/libview/ev-view.c b/libview/ev-view.c
index b096285..c84f5bf 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -244,6 +244,10 @@ static double	zoom_for_size_best_fit 			     (gdouble doc_width,
 							      gdouble doc_height,
 							      int     target_width,
 							      int     target_height);
+static gboolean ev_view_can_zoom                             (EvView *view,
+                                                              gdouble factor);
+static void     ev_view_zoom                                 (EvView *view,
+                                                              gdouble factor);
 static void     ev_view_zoom_for_size                        (EvView *view,
 							      int     width,
 							      int     height);
@@ -5438,41 +5442,55 @@ ev_view_reload (EvView *view)
 }
 
 /*** Zoom and sizing mode ***/
+static gboolean
+ev_view_can_zoom (EvView *view, gdouble factor)
+{
+	gdouble scale = view->scale * factor;
+
+	if (factor == 1.0)
+		return TRUE;
+
+	else if (factor < 1.0)
+		return ev_document_model_get_min_scale (view->model) <= scale;
+
+	else
+		return scale <= ev_document_model_get_max_scale (view->model);
+}
 
 gboolean
 ev_view_can_zoom_in (EvView *view)
 {
-	return view->scale * ZOOM_IN_FACTOR <= ev_document_model_get_max_scale (view->model);
+	return ev_view_can_zoom (view, ZOOM_IN_FACTOR);
 }
 
 gboolean
 ev_view_can_zoom_out (EvView *view)
 {
-	return view->scale * ZOOM_OUT_FACTOR >= ev_document_model_get_min_scale (view->model);
+	return ev_view_can_zoom (view, ZOOM_OUT_FACTOR);
 }
 
-void
-ev_view_zoom_in (EvView *view)
+static void
+ev_view_zoom (EvView *view, gdouble factor)
 {
 	gdouble scale;
 
 	g_return_if_fail (view->sizing_mode == EV_SIZING_FREE);
 
 	view->pending_scroll = SCROLL_TO_CENTER;
-	scale = ev_document_model_get_scale (view->model) * ZOOM_IN_FACTOR;
+	scale = ev_document_model_get_scale (view->model) * factor;
 	ev_document_model_set_scale (view->model, scale);
 }
 
 void
-ev_view_zoom_out (EvView *view)
+ev_view_zoom_in (EvView *view)
 {
-	gdouble scale;
-
-	g_return_if_fail (view->sizing_mode == EV_SIZING_FREE);
+	ev_view_zoom (view, ZOOM_IN_FACTOR);
+}
 
-	view->pending_scroll = SCROLL_TO_CENTER;
-	scale = ev_document_model_get_scale (view->model) * ZOOM_OUT_FACTOR;
-	ev_document_model_set_scale (view->model, scale);
+void
+ev_view_zoom_out (EvView *view)
+{
+	ev_view_zoom (view, ZOOM_OUT_FACTOR);
 }
 
 static double



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