From d6bc711ba7f7b00387843ebb7ed72d8aad83f073 Mon Sep 17 00:00:00 2001 From: Felix Riemann Date: Sun, 26 Feb 2017 18:02:07 +0100 Subject: EogZoomEntry: Generate the menu entries at runtime This ensures the values listed match what is displayed after selecting a zoom level. --- src/eog-zoom-entry.c | 51 +++++++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/eog-zoom-entry.c b/src/eog-zoom-entry.c index 02bb78df..12c8fc7e 100644 --- a/src/eog-zoom-entry.c +++ b/src/eog-zoom-entry.c @@ -57,19 +57,10 @@ struct _EogZoomEntry { EogZoomEntryPrivate *priv; }; -static const struct { - const gchar *name; - const double level; -} zoom_levels[] = { - { N_("33%"), (1.0/3.0) }, - { N_("50%"), (1.0/2.0) }, - { N_("100%"), 1.0 }, - { N_("133%"), (1.0/0.75) }, - { N_("200%"), 2.0 }, - { N_("500%"), 5.0 }, - { N_("1000%"), 10.0 }, - { N_("1500%"), 15.0 }, - { N_("2000%"), 20.0 } +static const gdouble zoom_levels[] = { + (1.0/3.0), (1.0/2.0), + 1.0, /* 100% */ + (1.0/0.75), 2.0, 5.0, 10.0, 15.0, 20.0 }; G_DEFINE_TYPE_WITH_PRIVATE (EogZoomEntry, eog_zoom_entry, GTK_TYPE_BOX); @@ -78,29 +69,39 @@ static void eog_zoom_entry_reset_zoom_level (EogZoomEntry *entry); static void eog_zoom_entry_set_zoom_level (EogZoomEntry *entry, gdouble zoom); static void eog_zoom_entry_update_sensitivity (EogZoomEntry *entry); +static gchar* +eog_zoom_entry_format_zoom_value (gdouble value) +{ + gchar *name; + /* Mimic the zoom calculation from EogWindow to get matching displays */ + const gint zoom_percent = (gint) floor (value * 100. + 0.5); + + name = g_strdup_printf("%d%%", zoom_percent); + + return name; +} static void eog_zoom_entry_populate_free_zoom_section (EogZoomEntry *zoom_entry) { guint i; - gint width = 0; for (i = 0; i < G_N_ELEMENTS (zoom_levels); i++) { GMenuItem *item; - gint length; + gchar *name; + - if (zoom_levels[i].level > EOG_SCROLL_VIEW_MAX_ZOOM_FACTOR) + if (zoom_levels[i] > EOG_SCROLL_VIEW_MAX_ZOOM_FACTOR) break; - length = g_utf8_strlen (zoom_levels[i].name, -1); - if (length > width) - width = length; + name = eog_zoom_entry_format_zoom_value (zoom_levels[i]); - item = g_menu_item_new (zoom_levels[i].name, NULL); + item = g_menu_item_new (name, NULL); g_menu_item_set_action_and_target (item, "win.zoom-set", - "d", zoom_levels[i].level); + "d", zoom_levels[i]); g_menu_append_item (G_MENU (zoom_entry->priv->zoom_free_section), item); g_object_unref (item); + g_free (name); } } @@ -269,13 +270,10 @@ static void eog_zoom_entry_set_zoom_level (EogZoomEntry *entry, gdouble zoom) { gchar *zoom_str; - gdouble zoom_percent; - /* Mimic the zoom calculation from EogWindow to get matching displays */ zoom = CLAMP (zoom, EOG_SCROLL_VIEW_MIN_ZOOM_FACTOR, EOG_SCROLL_VIEW_MAX_ZOOM_FACTOR); - zoom_percent = floor (zoom * 100. + 0.5); - zoom_str = g_strdup_printf ("%d%%", (gint) zoom_percent); + zoom_str = eog_zoom_entry_format_zoom_value (zoom); gtk_entry_set_text (GTK_ENTRY (entry->priv->value_entry), zoom_str); g_free (zoom_str); } @@ -359,7 +357,8 @@ eog_zoom_entry_init (EogZoomEntry *entry) entry); } -GtkWidget* eog_zoom_entry_new(EogScrollView *view, GMenu *menu) +GtkWidget* +eog_zoom_entry_new(EogScrollView *view, GMenu *menu) { g_return_val_if_fail (EOG_IS_SCROLL_VIEW (view), NULL); g_return_val_if_fail (G_IS_MENU (menu), NULL); -- cgit v1.2.1