[epiphany] Zoom level does not show values in between



commit e4fe8206161b25b522423485ee87ebfa85ed4461
Author: Jan-Michael Brummer <jan brummer tabos org>
Date:   Mon Jan 29 16:17:11 2018 +0100

    Zoom level does not show values in between
    
    Currently the zoom level buttons uses a fixed table of zoom levels. This leads to an empty text on zoom 
level button when using a zooming gesture iff the value is falling in-between the supported table range.
    
    This patch simplifies the zooming code to rely on webkit only. Zoom in/out are set in 0.25 steps with a 
minimum and maximum border. It further more fixes missing zoom level text when using touch gestures.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=792949

 lib/ephy-zoom.c   |   53 +++++++++++------------------------------------------
 lib/ephy-zoom.h   |   32 ++++----------------------------
 src/ephy-window.c |    5 ++++-
 3 files changed, 19 insertions(+), 71 deletions(-)
---
diff --git a/lib/ephy-zoom.c b/lib/ephy-zoom.c
index 889125c..437f00d 100644
--- a/lib/ephy-zoom.c
+++ b/lib/ephy-zoom.c
@@ -23,51 +23,20 @@
 
 #include <math.h>
 
-int
-ephy_zoom_get_zoom_level_index (float level)
-{
-  guint i;
-  float previous, current, mean;
-
-  previous = zoom_levels[0].level;
-
-  for (i = 1; i < n_zoom_levels; i++) {
-    current = zoom_levels[i].level;
-    mean = sqrt (previous * current);
-
-    if (level <= mean) return i - 1;
-
-    previous = current;
-  }
-
-  return n_zoom_levels - 1;
-}
-
-
 float
 ephy_zoom_get_changed_zoom_level (float level, int steps)
 {
-  int index;
-
-  index = ephy_zoom_get_zoom_level_index (level);
-  return zoom_levels[CLAMP (index + steps, 0, (int)n_zoom_levels - 1)].level;
-}
-
-float
-ephy_zoom_get_nearest_zoom_level (float level)
-{
-  return ephy_zoom_get_changed_zoom_level (level, 0);
-}
-
-const char *
-ephy_zoom_get_zoom_level_name (float level)
-{
-  unsigned int i;
-
-  for (i = 0; i < n_zoom_levels; i++) {
-    if (zoom_levels[i].level == level)
-      return zoom_levels[i].name;
+  float new_level = level;
+
+  if (steps == -1) {
+    new_level -= 0.25;
+    if (new_level < ZOOM_MINIMAL)
+      new_level = ZOOM_MINIMAL;
+  } else if (steps == 1) {
+    new_level += 0.25;
+    if (new_level > ZOOM_MAXIMAL)
+      new_level = ZOOM_MAXIMAL;
   }
 
-  return "";
+  return new_level;
 }
diff --git a/lib/ephy-zoom.h b/lib/ephy-zoom.h
index 229c3d6..0dac03a 100644
--- a/lib/ephy-zoom.h
+++ b/lib/ephy-zoom.h
@@ -29,36 +29,12 @@
 
 G_BEGIN_DECLS
 
-static const
-struct
-{
-  const gchar *name;
-  float level;
-}
-zoom_levels[] =
-{
-  { N_("50%"), 0.7071067811 },
-  { N_("75%"), 0.8408964152 },
-  { N_("100%"), 1.0 },
-  { N_("125%"), 1.1892071149 },
-  { N_("150%"), 1.4142135623 },
-  { N_("175%"), 1.6817928304 },
-  { N_("200%"), 2.0 },
-  { N_("300%"), 2.8284271247 },
-  { N_("400%"), 4.0 }
-};
+#define ZOOM_MINIMAL  (0.5)
+#define ZOOM_MAXIMAL  (2.5)
+#define ZOOM_IN       (-1.0)
+#define ZOOM_OUT      (-2.0)
 
-static const guint n_zoom_levels = G_N_ELEMENTS (zoom_levels);
-
-#define ZOOM_MINIMAL  (zoom_levels[0].level)
-#define ZOOM_MAXIMAL  (zoom_levels[n_zoom_levels - 1].level)
-#define ZOOM_IN   (-1.0)
-#define ZOOM_OUT  (-2.0)
-
-int         ephy_zoom_get_zoom_level_index   (float level);
 float       ephy_zoom_get_changed_zoom_level (float level,
                                               int   steps);
-float       ephy_zoom_get_nearest_zoom_level (float level);
-const char *ephy_zoom_get_zoom_level_name    (float level);
 
 G_END_DECLS
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 1b9897b..3d90f26 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -961,6 +961,7 @@ sync_tab_zoom (WebKitWebView *web_view, GParamSpec *pspec, EphyWindow *window)
   gboolean can_zoom_in = TRUE, can_zoom_out = TRUE, can_zoom_normal = FALSE;
   double zoom;
   GtkWidget *zoom_level_button;
+  gchar *zoom_level;
 
   if (window->closing)
     return;
@@ -969,7 +970,9 @@ sync_tab_zoom (WebKitWebView *web_view, GParamSpec *pspec, EphyWindow *window)
 
   zoom_level_button = ephy_header_bar_get_zoom_level_button (EPHY_HEADER_BAR (window->header_bar));
 
-  gtk_button_set_label (GTK_BUTTON (zoom_level_button), ephy_zoom_get_zoom_level_name (zoom));
+  zoom_level = g_strdup_printf ("%2.0f%%", zoom * 100);
+  gtk_button_set_label (GTK_BUTTON (zoom_level_button), zoom_level);
+  g_free (zoom_level);
 
   if (zoom >= ZOOM_MAXIMAL) {
     can_zoom_in = FALSE;


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