[evince] ev-view: Refactor zoom methods
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] ev-view: Refactor zoom methods
- Date: Tue, 7 Aug 2012 17:42:42 +0000 (UTC)
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]