[epiphany] Zoom level does not show values in between
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] Zoom level does not show values in between
- Date: Mon, 29 Jan 2018 15:45:54 +0000 (UTC)
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]