Hook up page zooming

Change-Id: I52bb2a95d5e30984608ebf356207ba8b9c666f1f
diff --git a/Source/WebKit/fuchsia/WebView.cpp b/Source/WebKit/fuchsia/WebView.cpp
index fe9ca80..8c2823d 100644
--- a/Source/WebKit/fuchsia/WebView.cpp
+++ b/Source/WebKit/fuchsia/WebView.cpp
@@ -197,6 +197,12 @@
     m_page->setIsVisible(visible);
 }
 
+void WebView::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor)
+{
+    auto& mainFrame = m_page->mainFrame();
+    mainFrame.setPageAndTextZoomFactors(pageZoomFactor, textZoomFactor);
+}
+
 void WebView::handleMouseEvent(int x, int y, MouseEventKind eventType)
 {
     auto& mainFrame = m_page->mainFrame();
diff --git a/Source/WebKit/fuchsia/WebView.h b/Source/WebKit/fuchsia/WebView.h
index 0b89c59..ed562d7 100644
--- a/Source/WebKit/fuchsia/WebView.h
+++ b/Source/WebKit/fuchsia/WebView.h
@@ -28,10 +28,10 @@
 #include <memory>
 
 namespace WebCore {
-    class GraphicsContext;
-    class MainFrame;
-    class Page;
-    class URL;
+class GraphicsContext;
+class MainFrame;
+class Page;
+class URL;
 }
 
 class WebFrameLoaderClient;
@@ -40,10 +40,11 @@
 typedef struct _cairo cairo_t;
 typedef struct _cairo_surface cairo_surface_t;
 
-class WebView
-{
+class WebView {
 public:
-    enum MouseEventKind { kMouseDown, kMouseMoved, kMouseUp };
+    enum MouseEventKind { kMouseDown,
+        kMouseMoved,
+        kMouseUp };
     ~WebView();
 
     bool setup(unsigned char* pixelBuffer, int pixelFormat, size_t targetWidth, size_t targetHeight, size_t rowbytes);
@@ -54,6 +55,7 @@
 
     void setFocused(bool);
     void setVisible(bool);
+    void setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor);
 
     void handleMouseEvent(int x, int y, MouseEventKind eventType);
     void handleKeyEvent(uint8_t keycode, uint8_t charValue, bool pressed);
@@ -66,13 +68,13 @@
 private:
     void setURLInternal(const WebCore::URL& url);
 
-    WebCore::Page* m_page = {nullptr};
-    cairo_t* m_cairoContext = {nullptr};
-    cairo_surface_t* m_cairoSurface = {nullptr};
+    WebCore::Page* m_page = { nullptr };
+    cairo_t* m_cairoContext = { nullptr };
+    cairo_surface_t* m_cairoSurface = { nullptr };
     size_t m_pageWidth;
     size_t m_pageHeight;
-    WebFrameLoaderClient* m_frameLoaderClient = {nullptr};
-    WebChromeClient* m_chromeClient = {nullptr};
+    WebFrameLoaderClient* m_frameLoaderClient = { nullptr };
+    WebChromeClient* m_chromeClient = { nullptr };
     bool fControl = false;
     bool fShift = false;
 };
diff --git a/Tools/MiniBrowser/fuchsia/main.cpp b/Tools/MiniBrowser/fuchsia/main.cpp
index 5429127..be21ff7 100644
--- a/Tools/MiniBrowser/fuchsia/main.cpp
+++ b/Tools/MiniBrowser/fuchsia/main.cpp
@@ -66,6 +66,10 @@
 
 #define USE_INPUT 1
 
+constexpr float kMinimumZoomMultiplier = 0.5f;
+constexpr float kMaximumZoomMultiplier = 3.0f;
+constexpr float kZoomMultiplierRatio = 1.2f;
+
 constexpr char kVirtualConsole[] = "/dev/class/console/vc";
 
 int main(int argc, char** argv)
@@ -167,6 +171,7 @@
     webView.setVisible(true);
     bool shiftDown = false;
     bool controlDown = false;
+    float webScale = 1.0;
 
     while (true) {
 #if USE_INPUT
@@ -207,7 +212,21 @@
                         exit(0);
                     }
                     uint8_t ch = hid_map_key(keycode, shiftDown, qwerty_map);
-                    webView.handleKeyEvent(keycode, ch, pressed);
+                    if (controlDown && ch == '+') {
+                        float newScale = webScale * kZoomMultiplierRatio;
+                        if (newScale < kMaximumZoomMultiplier) {
+                            webScale = newScale;
+                            webView.setPageAndTextZoomFactors(webScale, 1);
+                        }
+                    } else if (controlDown && ch == '-') {
+                        float newScale = webScale / kZoomMultiplierRatio;
+                        if (newScale > kMinimumZoomMultiplier) {
+                            webScale = newScale;
+                            webView.setPageAndTextZoomFactors(webScale, 1);
+                        }
+                    } else {
+                        webView.handleKeyEvent(keycode, ch, pressed);
+                    }
                 }
             }
         }