diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ephy-nautilus-view.c | 98 | ||||
-rw-r--r-- | src/ephy-tab.c | 2 | ||||
-rw-r--r-- | src/ephy-window.c | 67 | ||||
-rw-r--r-- | src/ephy-window.h | 2 | ||||
-rwxr-xr-x | src/toolbar.c | 27 | ||||
-rw-r--r-- | src/toolbar.h | 2 | ||||
-rw-r--r-- | src/window-commands.c | 24 |
7 files changed, 133 insertions, 89 deletions
diff --git a/src/ephy-nautilus-view.c b/src/ephy-nautilus-view.c index 56b0edb06..f4373667b 100644 --- a/src/ephy-nautilus-view.c +++ b/src/ephy-nautilus-view.c @@ -29,6 +29,7 @@ #include "find-dialog.h" #include "print-dialog.h" #include "ephy-prefs.h" +#include "ephy-zoom.h" #include "eel-gconf-extensions.h" #include "ephy-debug.h" @@ -47,7 +48,7 @@ static gint gnv_embed_dom_mouse_down_cb (EphyEmbed *embed, EphyEmbedEvent *event, EphyNautilusView *view); static void gnv_embed_zoom_change_cb (EphyNautilusView *embed, - guint new_zoom, + float new_zoom, EphyNautilusView *view); @@ -97,34 +98,6 @@ static void gnv_popup_cmd_frame_in_new_window (BonoboUIComponent *uic, EphyEmbedPopup *popup, const char* verbname); - -static float preferred_zoom_levels[] = { - 0.2, 0.4, 0.6, 0.8, - 1.0, 1.2, 1.4, 1.6, 1.8, - 2.0, 2.2, 2.4, 2.6, 2.8, - 3.0, 3.2, 3.4, 3.6, 3.8, - 4.0, 4.2, 4.4, 4.6, 4.8, - 5.0, 5.2, 5.4, 5.6, 5.8, - 6.0, 6.2, 6.4, 6.6, 6.8, - 7.0, 7.2, 7.4, 7.6, 7.8, - 8.0, 8.2, 8.4, 8.6, 8.8, - 9.0, 9.2, 9.4, 9.6, 9.8, -}; - -static const gchar *preferred_zoom_level_names[] = { - "20%", "40%", "60%", "80%", - "100%", "120%", "140%", "160%", "180%", - "200%", "220%", "240%", "260%", "280%", - "300%", "320%", "340%", "360%", "380%", - "400%", "420%", "440%", "460%", "480%", - "500%", "520%", "540%", "560%", "580%", - "600%", "620%", "640%", "660%", "680%", - "700%", "720%", "740%", "760%", "780%", - "800%", "820%", "840%", "860%", "880%", - "900%", "920%", "940%", "960%", "980%", -}; -#define NUM_ZOOM_LEVELS (sizeof (preferred_zoom_levels) / sizeof (float)) - struct EphyNautilusViewPrivate { EphyEmbed *embed; char *title; @@ -170,6 +143,9 @@ ephy_nautilus_view_instance_init (EphyNautilusView *view) GtkWidget *w; EphyNautilusViewPrivate *p = g_new0 (EphyNautilusViewPrivate, 1); EphyEmbedSingle *single; + float *levels; + gchar **names; + guint i; single = ephy_embed_shell_get_embed_single (EPHY_EMBED_SHELL (ephy_shell)); @@ -250,14 +226,26 @@ ephy_nautilus_view_instance_init (EphyNautilusView *view) bonobo_object_add_interface (BONOBO_OBJECT (view), BONOBO_OBJECT (view->priv->zoomable)); + /* get zoom levels */ + levels = g_new0 (float, n_zoom_levels); + names = g_new0 (gchar *, n_zoom_levels); + for (i = 0; i < n_zoom_levels; i++) + { + levels[i] = zoom_levels[i].level; + names[i] = zoom_levels[i].name; + } + bonobo_zoomable_set_parameters_full (view->priv->zoomable, 1.0, - preferred_zoom_levels [0], - preferred_zoom_levels [NUM_ZOOM_LEVELS - 1], + levels [0], + levels [n_zoom_levels-1], FALSE, FALSE, TRUE, - preferred_zoom_levels, - preferred_zoom_level_names, - NUM_ZOOM_LEVELS); + levels, + (const gchar **) names, + n_zoom_levels); + + g_free (levels); + g_free (names); bonobo_object_add_interface (BONOBO_OBJECT (view), BONOBO_OBJECT (view->priv->zoomable)); @@ -613,33 +601,41 @@ gnv_zoomable_set_zoom_level_cb (BonoboZoomable *zoomable, float level, EphyNautilusView *view) { - gint zoom = level * 100; g_return_if_fail (EPHY_IS_NAUTILUS_VIEW (view)); - if (zoom < 10) return; - if (zoom > 1000) return; - ephy_embed_zoom_set (view->priv->embed, zoom, TRUE); + ephy_embed_zoom_set (view->priv->embed, + ephy_zoom_get_nearest_zoom_level (level), TRUE); } static void gnv_zoomable_zoom_in_cb (BonoboZoomable *zoomable, EphyNautilusView *view) { - gint zoom; + float zoom, new_zoom; + gresult rv; + g_return_if_fail (EPHY_IS_NAUTILUS_VIEW (view)); - ephy_embed_zoom_get (view->priv->embed, &zoom); - if (zoom > 990) return; - ephy_embed_zoom_set (view->priv->embed, zoom + 10, TRUE); + + rv = ephy_embed_zoom_get (view->priv->embed, &zoom); + if (rv == G_FAILED) return; + + new_zoom = ephy_zoom_get_changed_zoom_level (zoom, 1); + ephy_embed_zoom_set (view->priv->embed, new_zoom, TRUE); } static void gnv_zoomable_zoom_out_cb (BonoboZoomable *zoomable, EphyNautilusView *view) { - gint zoom; + float zoom, new_zoom; + gresult rv; + g_return_if_fail (EPHY_IS_NAUTILUS_VIEW (view)); - ephy_embed_zoom_get (view->priv->embed, &zoom); - if (zoom < 20) return; - ephy_embed_zoom_set (view->priv->embed, zoom - 10, TRUE); + + rv = ephy_embed_zoom_get (view->priv->embed, &zoom); + if (rv == G_FAILED) return; + + new_zoom = ephy_zoom_get_changed_zoom_level (zoom, -1); + ephy_embed_zoom_set (view->priv->embed, new_zoom, TRUE); } static void @@ -654,22 +650,18 @@ gnv_zoomable_zoom_to_default_cb (BonoboZoomable *zoomable, EphyNautilusView *view) { g_return_if_fail (EPHY_IS_NAUTILUS_VIEW (view)); - ephy_embed_zoom_set (view->priv->embed, 100, TRUE); + ephy_embed_zoom_set (view->priv->embed, 1.0, TRUE); } static void gnv_embed_zoom_change_cb (EphyNautilusView *embed, - guint new_zoom, + float new_zoom, EphyNautilusView *view) { - float flevel; g_return_if_fail (EPHY_IS_NAUTILUS_VIEW (view)); - flevel = ((float) new_zoom) / 100.0; - bonobo_zoomable_report_zoom_level_changed (view->priv->zoomable, - flevel, NULL); - + new_zoom, NULL); } diff --git a/src/ephy-tab.c b/src/ephy-tab.c index 70302a595..dd6b321ab 100644 --- a/src/ephy-tab.c +++ b/src/ephy-tab.c @@ -407,7 +407,7 @@ ephy_tab_location_cb (EphyEmbed *embed, EphyTab *tab) } static void -ephy_tab_zoom_changed_cb (EphyEmbed *embed, gint zoom, EphyTab *tab) +ephy_tab_zoom_changed_cb (EphyEmbed *embed, float zoom, EphyTab *tab) { if (tab->priv->is_active) { diff --git a/src/ephy-window.c b/src/ephy-window.c index b8d3bc656..aa7d4bbcd 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -30,6 +30,7 @@ #include "ephy-shell.h" #include "eel-gconf-extensions.h" #include "ephy-prefs.h" +#include "ephy-zoom.h" #include "ephy-debug.h" #include "ephy-file-helpers.h" #include "statusbar.h" @@ -469,8 +470,6 @@ setup_window (EphyWindow *window) g_object_set (action, "short_label", _("Print"), NULL); action = egg_action_group_get_action (action_group, "FileBookmarkPage"); g_object_set (action, "short_label", _("Bookmark"), NULL); - action = egg_action_group_get_action (action_group, "ViewZoomNormal"); - g_object_set (action, "sensitive", FALSE, NULL); action_group = egg_action_group_new ("PopupsActions"); egg_action_group_add_actions (action_group, ephy_popups_entries, @@ -1094,6 +1093,40 @@ update_nav_control (EphyWindow *window) } static void +update_zoom_control (EphyWindow *window) +{ + EphyEmbed *embed; + EggActionGroup *action_group; + EggAction *action; + gboolean can_zoom_in = TRUE, can_zoom_out = TRUE, can_zoom_normal = FALSE; + float zoom = 1.0; + gresult rv; + + g_return_if_fail (window != NULL); + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + rv = ephy_embed_zoom_get (embed, &zoom); + if (rv == G_OK) + { + if (zoom >= ZOOM_MAXIMAL) can_zoom_in = FALSE; + if (zoom <= ZOOM_MINIMAL) can_zoom_out = FALSE; + if (zoom != 1.0) can_zoom_normal = TRUE; + } + + toolbar_update_zoom (window->priv->toolbar, zoom); + + action_group = window->priv->action_group; + action = egg_action_group_get_action (action_group, "ViewZoomIn"); + g_object_set (action, "sensitive", can_zoom_in, NULL); + action = egg_action_group_get_action (action_group, "ViewZoomOut"); + g_object_set (action, "sensitive", can_zoom_out, NULL); + action = egg_action_group_get_action (action_group, "ViewZoomNormal"); + g_object_set (action, "sensitive", can_zoom_normal, NULL); +} + +static void update_title_control (EphyWindow *window) { EphyTab *tab; @@ -1247,6 +1280,7 @@ ephy_window_update_control (EphyWindow *window, /* the zoom control is updated at the same time than the navigation controls. This keeps it synched most of the time, but not always, because we don't get a notification when zoom changes */ + update_zoom_control (window); case NavControl: update_nav_control (window); break; @@ -1290,6 +1324,7 @@ ephy_window_update_all_controls (EphyWindow *window) update_security (window); update_find_control (window); update_spinner_control (window); + update_zoom_control (window); } } @@ -1432,27 +1467,31 @@ ephy_window_get_find_dialog (EphyWindow *window) void ephy_window_set_zoom (EphyWindow *window, - gint zoom) + float zoom) { EphyEmbed *embed; - gboolean zoom_out, zoom_normal; - EggActionGroup *action_group; - EggAction *action; + float current_zoom = 1.0; g_return_if_fail (IS_EPHY_WINDOW (window)); embed = ephy_window_get_active_embed (window); g_return_if_fail (embed != NULL); - ephy_embed_zoom_set (embed, zoom, TRUE); + ephy_embed_zoom_get (embed, ¤t_zoom); - zoom_normal = (zoom != 100); - zoom_out = (zoom > 0); - action_group = window->priv->action_group; - action = egg_action_group_get_action (action_group, "ViewZoomOut"); - g_object_set (action, "sensitive", zoom_out, NULL); - action = egg_action_group_get_action (action_group, "ViewZoomNormal"); - g_object_set (action, "sensitive", zoom_normal, NULL); + if (zoom == ZOOM_IN) + { + zoom = ephy_zoom_get_changed_zoom_level (current_zoom, 1); + } + else if (zoom == ZOOM_OUT) + { + zoom = ephy_zoom_get_changed_zoom_level (current_zoom, -1); + } + + if (zoom != current_zoom) + { + ephy_embed_zoom_set (embed, zoom, TRUE); + } } Toolbar * diff --git a/src/ephy-window.h b/src/ephy-window.h index 807ee5c96..39b051f0d 100644 --- a/src/ephy-window.h +++ b/src/ephy-window.h @@ -108,7 +108,7 @@ void ephy_window_load_url (EphyWindow *window, const char *url); void ephy_window_set_zoom (EphyWindow *window, - gint zoom); + float zoom); void ephy_window_activate_location (EphyWindow *window); diff --git a/src/toolbar.c b/src/toolbar.c index 728f81daf..d211de6d5 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -35,6 +35,7 @@ #include "ephy-go-action.h" #include "ephy-navigation-action.h" #include "ephy-bookmark-action.h" +#include "ephy-zoom-action.h" #include "window-commands.h" #include "ephy-string.h" #include "ephy-debug.h" @@ -126,6 +127,11 @@ go_location_cb (EggAction *action, char *location, EphyWindow *window) ephy_embed_load_url (embed, location); } +static void +zoom_to_level_cb (EggAction *action, float zoom, EphyWindow *window) +{ + ephy_window_set_zoom (window, zoom); +} static EggAction * ensure_bookmark_action (Toolbar *t, EphyBookmarks *bookmarks, gulong id, const char *action_name) @@ -302,6 +308,16 @@ toolbar_setup_actions (Toolbar *t) egg_action_group_add_action (t->priv->action_group, action); g_object_unref (action); + action = g_object_new (EPHY_TYPE_ZOOM_ACTION, + "name", "Zoom", + "label", _("Zoom"), + "zoom", 1.0, + NULL); + g_signal_connect (action, "zoom_to_level", + G_CALLBACK (zoom_to_level_cb), t->priv->window); + egg_action_group_add_action (t->priv->action_group, action); + g_object_unref (action); + action = g_object_new (EPHY_TYPE_FAVICON_ACTION, "name", "Favicon", "label", _("Favicon"), @@ -754,3 +770,14 @@ toolbar_set_visibility (Toolbar *t, } } } + +void +toolbar_update_zoom (Toolbar *t, float zoom) +{ + EggActionGroup *action_group; + EggAction *action; + + action_group = t->priv->action_group; + action = egg_action_group_get_action (action_group, "Zoom"); + g_object_set (action, "zoom", zoom, NULL); +} diff --git a/src/toolbar.h b/src/toolbar.h index 98d6790a4..e21d12d3c 100644 --- a/src/toolbar.h +++ b/src/toolbar.h @@ -73,6 +73,8 @@ void toolbar_update_navigation_actions (Toolbar *t, gboolean back, gboolean forward, gboolean up); +void toolbar_update_zoom (Toolbar *t, + float zoom); void toolbar_set_visibility (Toolbar *t, gboolean normal_toolbars, diff --git a/src/window-commands.c b/src/window-commands.c index fbc141ca0..652b8c23e 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -36,6 +36,7 @@ #include "toolbar.h" #include "ephy-state.h" #include "ephy-gui.h" +#include "ephy-zoom.h" #include <string.h> #include <libgnomevfs/gnome-vfs-uri.h> @@ -565,38 +566,21 @@ void window_cmd_view_zoom_in (EggAction *action, EphyWindow *window) { - EphyEmbed *embed; - int zoom; - - embed = ephy_window_get_active_embed (window); - g_return_if_fail (embed != NULL); - - ephy_embed_zoom_get (embed, &zoom); - ephy_window_set_zoom (window, zoom + 10); + ephy_window_set_zoom (window, ZOOM_IN); } void window_cmd_view_zoom_out (EggAction *action, EphyWindow *window) { - EphyEmbed *embed; - int zoom; - - embed = ephy_window_get_active_embed (window); - g_return_if_fail (embed != NULL); - - ephy_embed_zoom_get (embed, &zoom); - if (zoom >= 10) - { - ephy_window_set_zoom (window, zoom - 10); - } + ephy_window_set_zoom (window, ZOOM_OUT); } void window_cmd_view_zoom_normal (EggAction *action, EphyWindow *window) { - ephy_window_set_zoom (window, 100); + ephy_window_set_zoom (window, 1.0); } void |