]> spindle.queued.net Git - midori/commitdiff
Add zoom functionality, if webkit supports it
authorChristian Dywan <christian@twotoasts.de>
Sun, 1 Jun 2008 09:26:10 +0000 (11:26 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 1 Jun 2008 09:26:10 +0000 (11:26 +0200)
src/main.c
src/midori-browser.c
src/midori-webview.c
src/midori-webview.h
src/sokoke.c
src/sokoke.h

index 07d3c987f1cd7a9c3847e487404139c9ae2d40ef..93724d10a51703e514ee6aa068170f9c308875ee 100644 (file)
@@ -118,11 +118,18 @@ settings_new_from_file (const gchar* filename)
         }
         else if (type == G_TYPE_PARAM_INT)
         {
-            guint integer = sokoke_key_file_get_integer_default (key_file,
+            gint integer = sokoke_key_file_get_integer_default (key_file,
                 "settings", property,
                 G_PARAM_SPEC_INT (pspec)->default_value, NULL);
             g_object_set (settings, property, integer, NULL);
         }
+        else if (type == G_TYPE_PARAM_FLOAT)
+        {
+            gdouble number = sokoke_key_file_get_double_default (key_file,
+                "settings", property,
+                G_PARAM_SPEC_FLOAT (pspec)->default_value, NULL);
+            g_object_set (settings, property, number, NULL);
+        }
         else if (type == G_TYPE_PARAM_BOOLEAN)
         {
             gboolean boolean = sokoke_key_file_get_boolean_default (key_file,
@@ -189,6 +196,12 @@ settings_save_to_file (MidoriWebSettings* settings,
             g_object_get (settings, property, &integer, NULL);
             g_key_file_set_integer (key_file, "settings", property, integer);
         }
+        else if (type == G_TYPE_PARAM_FLOAT)
+        {
+            gdouble number;
+            g_object_get (settings, property, &number, NULL);
+            g_key_file_set_double (key_file, "settings", property, number);
+        }
         else if (type == G_TYPE_PARAM_BOOLEAN)
         {
             gboolean boolean;
index 453acd0a3e726899428e7fc1fb9552d6949f08de..61f3c7dfb7e6fea0cf96e2981cb8c4a7aeb39986 100644 (file)
@@ -173,20 +173,26 @@ _midori_browser_update_interface (MidoriBrowser* browser)
 {
     MidoriBrowserPrivate* priv = browser->priv;
 
+    gboolean loading = FALSE;
     GtkWidget* web_view = midori_browser_get_current_web_view (browser);
-    gboolean loading = midori_web_view_is_loading (MIDORI_WEB_VIEW (web_view));
-    /*_action_set_sensitive (browser, "ZoomIn",
-        webkit_web_view_can_increase_text_size (WEBKIT_WEB_VIEW (web_view)));
-    _action_set_sensitive (browser, "ZoomOut",
-        webkit_web_view_can_decrease_text_size (WEBKIT_WEB_VIEW (web_view)));
-    _action_set_sensitive (browser, "ZoomNormal",
-        webkit_web_view_get_text_size (WEBKIT_WEB_VIEW (web_view)) != 1);*/
-    _action_set_sensitive (browser, "Back",
-        webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (web_view)));
-    _action_set_sensitive (browser, "Forward",
-        webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (web_view)));
-    _action_set_sensitive (browser, "Reload", !loading);
-    _action_set_sensitive (browser, "Stop", loading);
+    if (web_view)
+    {
+        loading = midori_web_view_is_loading (MIDORI_WEB_VIEW (web_view));
+        _action_set_sensitive (browser, "ZoomNormal",
+            midori_web_view_get_zoom_level (MIDORI_WEB_VIEW (web_view)) != 1.0);
+        if (!g_object_class_find_property (G_OBJECT_GET_CLASS (web_view),
+                                           "zoom-level"))
+        {
+            _action_set_sensitive (browser, "ZoomIn", FALSE);
+            _action_set_sensitive (browser, "ZoomOut", FALSE);
+        }
+        _action_set_sensitive (browser, "Back",
+            webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (web_view)));
+        _action_set_sensitive (browser, "Forward",
+            webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (web_view)));
+        _action_set_sensitive (browser, "Reload", !loading);
+        _action_set_sensitive (browser, "Stop", loading);
+    }
 
     GtkAction* action = gtk_action_group_get_action (priv->action_group,
                                                      "ReloadStop");
@@ -1230,33 +1236,49 @@ _action_reload_stop_activate (GtkAction*     action,
     g_free (stock_id);
 }
 
-/*static void
+static void
 _action_zoom_in_activate (GtkAction*     action,
                           MidoriBrowser* browser)
 {
     GtkWidget* web_view = midori_browser_get_current_web_view (browser);
-    const gfloat zoom = webkit_web_view_get_text_multiplier (
-        WEBKIT_WEB_VIEW (web_view));
-    webkit_web_view_set_text_multiplier (WEBKIT_WEB_VIEW (web_view), zoom + 0.1);
-}*/
+    if (web_view && g_object_class_find_property (
+        G_OBJECT_GET_CLASS (web_view), "zoom-level"))
+    {
+        MidoriBrowserPrivate* priv = browser->priv;
 
-/*static void
+        gfloat zoom_level, zoom_step;
+        g_object_get (web_view, "zoom-level", &zoom_level, NULL);
+        g_object_get (priv->settings, "zoom-step", &zoom_step, NULL);
+        g_object_set (web_view, "zoom-level", zoom_level + zoom_step, NULL);
+    }
+}
+
+static void
 _action_zoom_out_activate (GtkAction*     action,
                            MidoriBrowser* browser)
 {
     GtkWidget* web_view = midori_browser_get_current_web_view (browser);
-    const gfloat zoom = webkit_web_view_get_text_multiplier (
-        WEBKIT_WEB_VIEW (web_view));
-    webkit_web_view_set_text_multiplier (WEBKIT_WEB_VIEW (web_view), zoom - 0.1);
-}*/
+    if (web_view && g_object_class_find_property (
+        G_OBJECT_GET_CLASS (web_view), "zoom-level"))
+    {
+        MidoriBrowserPrivate* priv = browser->priv;
 
-/*static void
+        gfloat zoom_level, zoom_step;
+        g_object_get (web_view, "zoom-level", &zoom_level, NULL);
+        g_object_get (priv->settings, "zoom-step", &zoom_step, NULL);
+        g_object_set (web_view, "zoom-level", zoom_level - zoom_step, NULL);
+    }
+}
+
+static void
 _action_zoom_normal_activate (GtkAction*     action,
                               MidoriBrowser* browser)
 {
     GtkWidget* web_view = midori_browser_get_current_web_view (browser);
-    webkit_web_view_set_text_multiplier (WEBKIT_WEB_VIEW (web_View, 1));
-}*/
+    if (web_view && g_object_class_find_property (
+        G_OBJECT_GET_CLASS (web_view), "zoom-level"))
+        g_object_set (web_view, "zoom-level", 1.0, NULL);
+}
 
 /*static void
 _action_source_view_activate (GtkAction*     action,
@@ -2228,13 +2250,13 @@ static const GtkActionEntry entries[] = {
    N_("Reload the current page"), G_CALLBACK (_action_reload_stop_activate) },
  { "ZoomIn", GTK_STOCK_ZOOM_IN,
    NULL, "<Ctrl>plus",
-   "hm?", NULL/*G_CALLBACK (_action_zoom_in_activate)*/ },
+   "hm?", G_CALLBACK (_action_zoom_in_activate) },
  { "ZoomOut", GTK_STOCK_ZOOM_OUT,
    NULL, "<Ctrl>minus",
-   "hm?", NULL/*G_CALLBACK (_action_zoom_out_activate)*/ },
+   "hm?", G_CALLBACK (_action_zoom_out_activate) },
  { "ZoomNormal", GTK_STOCK_ZOOM_100,
    NULL, "<Ctrl>0",
-   "hm?", NULL/*G_CALLBACK (_action_zoom_normal_activate)*/ },
+   "hm?", G_CALLBACK (_action_zoom_normal_activate) },
  { "SourceView", NULL,
    N_("View Source"), "",
     "hm?", /*G_CALLBACK (_action_source_view_activate)*/ },
@@ -2609,7 +2631,7 @@ midori_browser_init (MidoriBrowser* browser)
 
     // Create the menubar
     priv->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");
-    GtkWidget* menuitem = gtk_menu_item_new();
+    GtkWidget* menuitem = gtk_menu_item_new ();
     gtk_widget_show (menuitem);
     priv->throbber = katze_throbber_new();
     gtk_widget_show(priv->throbber);
@@ -2661,7 +2683,7 @@ midori_browser_init (MidoriBrowser* browser)
         ui_manager, "/toolbar_navigation/Homepage");
 
     // Location
-    priv->location = sexy_icon_entry_new();
+    priv->location = sexy_icon_entry_new ();
     sokoke_entry_setup_completion (GTK_ENTRY (priv->location));
     priv->location_icon = gtk_image_new ();
     sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (priv->location)
@@ -2722,7 +2744,7 @@ midori_browser_init (MidoriBrowser* browser)
     priv->bookmarkbar = gtk_toolbar_new ();
     gtk_toolbar_set_icon_size (GTK_TOOLBAR (priv->bookmarkbar),
                                GTK_ICON_SIZE_MENU);
-    gtk_toolbar_set_style (GTK_TOOLBAR(priv->bookmarkbar),
+    gtk_toolbar_set_style (GTK_TOOLBAR (priv->bookmarkbar),
                            GTK_TOOLBAR_BOTH_HORIZ);
     _midori_browser_create_bookmark_menu (browser, bookmarks,
                                           priv->menu_bookmarks);
index f3810c72f51e3ff5ab4c8a8d4ab154bac9e1dd47..b5e0f080865f93701791f69c2ffd0a0018b5c3a2 100644 (file)
@@ -1097,3 +1097,26 @@ midori_web_view_get_link_uri (MidoriWebView* web_view)
     MidoriWebViewPrivate* priv = web_view->priv;
     return priv->link_uri;
 }
+
+/**
+ * midori_web_view_get_zoom_level:
+ * @web_view: a #MidoriWebView
+ *
+ * Retrieves the current zoom level.
+ *
+ * Return value: the zoom level, always 1 if not supported
+ **/
+gfloat
+midori_web_view_get_zoom_level (MidoriWebView* web_view)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_VIEW (web_view), 1);
+
+    if (g_object_class_find_property (G_OBJECT_GET_CLASS (web_view),
+                                      "zoom-level"))
+    {
+        gfloat zoom_level;
+        g_object_get (web_view, "zoom-level", &zoom_level, NULL);
+        return zoom_level;
+    }
+    return 1;
+}
index 5b5062185d8fdbade9c6bbc6ede57bc762f2dafd..71cab23fced3cc2e4a22c8b4fc49826f85a8b84a 100644 (file)
@@ -113,6 +113,9 @@ midori_web_view_get_display_title      (MidoriWebView*     web_view);
 const gchar*
 midori_web_view_get_link_uri           (MidoriWebView*     web_view);
 
+gfloat
+midori_web_view_get_zoom_level         (MidoriWebView*     web_view);
+
 G_END_DECLS
 
 #endif /* __MIDORI_WEB_VIEW_H__ */
index 72706bc79289266dead8fc3265014e4da16aee6d..df78e412d32ae2d63b8d33525f86cbb45acb56e2 100644 (file)
@@ -403,6 +403,18 @@ gint sokoke_key_file_get_integer_default(GKeyFile* keyFile
     return g_key_file_get_integer(keyFile, group, key, error);
 }
 
+gdouble
+sokoke_key_file_get_double_default (GKeyFile*     key_file,
+                                    const gchar*  group,
+                                    const gchar*  key,
+                                    const gdouble default_value,
+                                    GError**      error)
+{
+    if (!g_key_file_has_key (key_file, group, key, NULL))
+        return default_value;
+    return g_key_file_get_double (key_file, group, key, error);
+}
+
 gboolean
 sokoke_key_file_get_boolean_default (GKeyFile*      key_file,
                                      const gchar*   group,
index 3a89f4b23301d9f85db4cf6126e575c5aa53d30b..26a504db26a8b39b8f8c2a403dda27edf2120e27 100644 (file)
@@ -75,6 +75,13 @@ gint
 sokoke_key_file_get_integer_default(GKeyFile*, const gchar*, const gchar*
  , const gint, GError**);
 
+gdouble
+sokoke_key_file_get_double_default (GKeyFile*    key_file,
+                                    const gchar* group,
+                                    const gchar* key,
+                                    gdouble      default_value,
+                                    GError**     error);
+
 gboolean
 sokoke_key_file_get_boolean_default (GKeyFile*    key_file,
                                      const gchar* group,