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);
+ }
}
}
}