Title: [108056] trunk/Tools
Revision
108056
Author
[email protected]
Date
2012-02-17 03:09:59 -0800 (Fri, 17 Feb 2012)

Log Message

[GTK] Implement zoom in/out in MiniBrowser
https://bugs.webkit.org/show_bug.cgi?id=75253

Reviewed by Gustavo Noronha Silva.

* MiniBrowser/gtk/BrowserWindow.c:
(browserWindowCanZoomIn):
(browserWindowCanZoomOut):
(browserWindowUpdateZoomActions):
(webViewZoomLevelChanged):
(zoomInCallback):
(zoomOutCallback):
(browser_window_init):
(browserWindowConstructed):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (108055 => 108056)


--- trunk/Tools/ChangeLog	2012-02-17 11:09:07 UTC (rev 108055)
+++ trunk/Tools/ChangeLog	2012-02-17 11:09:59 UTC (rev 108056)
@@ -1,3 +1,20 @@
+2012-02-17  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Implement zoom in/out in MiniBrowser
+        https://bugs.webkit.org/show_bug.cgi?id=75253
+
+        Reviewed by Gustavo Noronha Silva.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (browserWindowCanZoomIn):
+        (browserWindowCanZoomOut):
+        (browserWindowUpdateZoomActions):
+        (webViewZoomLevelChanged):
+        (zoomInCallback):
+        (zoomOutCallback):
+        (browser_window_init):
+        (browserWindowConstructed):
+
 2012-02-17  Nikolas Zimmermann  <[email protected]>
 
         layoutTestController.display() is flaky for SVG tests

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (108055 => 108056)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-02-17 11:09:07 UTC (rev 108055)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-02-17 11:09:59 UTC (rev 108056)
@@ -42,6 +42,8 @@
     GtkWidget *uriEntry;
     GtkWidget *backItem;
     GtkWidget *forwardItem;
+    GtkWidget *zoomInItem;
+    GtkWidget *zoomOutItem;
     GtkWidget *statusLabel;
     GtkWidget *settingsDialog;
     WebKitWebView *webView;
@@ -53,6 +55,9 @@
 };
 
 static const char *defaultWindowTitle = "WebKitGTK+ MiniBrwoser";
+static const gdouble minimumZoomLevel = 0.5;
+static const gdouble maximumZoomLevel = 3;
+static const gdouble zoomStep = 1.2;
 static gint windowCount = 0;
 
 G_DEFINE_TYPE(BrowserWindow, browser_window, GTK_TYPE_WINDOW)
@@ -261,6 +266,41 @@
     browserWindowSetStatusText(window, webkit_hit_test_result_get_link_uri(hitTestResult));
 }
 
+static gboolean browserWindowCanZoomIn(BrowserWindow *window)
+{
+    gdouble zoomLevel = webkit_web_view_get_zoom_level(window->webView) * zoomStep;
+    return zoomLevel < maximumZoomLevel;
+}
+
+static gboolean browserWindowCanZoomOut(BrowserWindow *window)
+{
+    gdouble zoomLevel = webkit_web_view_get_zoom_level(window->webView) / zoomStep;
+    return zoomLevel > minimumZoomLevel;
+}
+
+static void browserWindowUpdateZoomActions(BrowserWindow *window)
+{
+    gtk_widget_set_sensitive(window->zoomInItem, browserWindowCanZoomIn(window));
+    gtk_widget_set_sensitive(window->zoomOutItem, browserWindowCanZoomOut(window));
+}
+
+static void webViewZoomLevelChanged(GObject *object, GParamSpec *paramSpec, BrowserWindow *window)
+{
+    browserWindowUpdateZoomActions(window);
+}
+
+static void zoomInCallback(BrowserWindow *window)
+{
+    gdouble zoomLevel = webkit_web_view_get_zoom_level(window->webView) * zoomStep;
+    webkit_web_view_set_zoom_level(window->webView, zoomLevel);
+}
+
+static void zoomOutCallback(BrowserWindow *window)
+{
+    gdouble zoomLevel = webkit_web_view_get_zoom_level(window->webView) / zoomStep;
+    webkit_web_view_set_zoom_level(window->webView, zoomLevel);
+}
+
 static void browserWindowFinalize(GObject *gObject)
 {
     G_OBJECT_CLASS(browser_window_parent_class)->finalize(gObject);
@@ -329,6 +369,18 @@
     gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
     gtk_widget_show(GTK_WIDGET(item));
 
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
+    window->zoomOutItem = GTK_WIDGET(item);
+    g_signal_connect_swapped(item, "clicked", G_CALLBACK(zoomOutCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
+    window->zoomInItem = GTK_WIDGET(item);
+    g_signal_connect_swapped(item, "clicked", G_CALLBACK(zoomInCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
     item = gtk_tool_item_new();
     gtk_tool_item_set_expand(item, TRUE);
     gtk_container_add(GTK_CONTAINER(item), window->uriEntry);
@@ -354,6 +406,8 @@
 {
     BrowserWindow *window = BROWSER_WINDOW(gObject);
 
+    browserWindowUpdateZoomActions(window);
+
     g_signal_connect(window->webView, "notify::uri", G_CALLBACK(webViewURIChanged), window);
     g_signal_connect(window->webView, "notify::estimated-load-progress", G_CALLBACK(webViewLoadProgressChanged), window);
     g_signal_connect(window->webView, "notify::title", G_CALLBACK(webViewTitleChanged), window);
@@ -361,6 +415,7 @@
     g_signal_connect(window->webView, "load-failed", G_CALLBACK(webViewLoadFailed), window);
     g_signal_connect(window->webView, "decide-policy", G_CALLBACK(webViewDecidePolicy), window);
     g_signal_connect(window->webView, "mouse-target-changed", G_CALLBACK(webViewMouseTargetChanged), window);
+    g_signal_connect(window->webView, "notify::zoom-level", G_CALLBACK(webViewZoomLevelChanged), window);
 
     WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView);
     g_signal_connect(backForwadlist, "changed", G_CALLBACK(backForwadlistChanged), window);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to