Title: [129882] trunk/Source
Revision
129882
Author
[email protected]
Date
2012-09-28 06:08:50 -0700 (Fri, 28 Sep 2012)

Log Message

Web Inspector: [Device Metrics] Remove the gutter overlay moving its functionality into the InspectorOverlay
https://bugs.webkit.org/show_bug.cgi?id=97799

Reviewed by Pavel Feldman.

Source/WebCore:

In order to reduce the amount of port-specific code, the gutter overlay painted in the device metrics emulation mode
has been replaced by the respective functionality in the HTML-based InspectorOverlay in WebCore. The InspectorOverlay
now covers the entire WebView rather than the FrameView only.

* inspector/InspectorController.cpp:
(WebCore::InspectorController::webViewResized):
(WebCore):
* inspector/InspectorController.h:
(WebCore):
(InspectorController):
* inspector/InspectorOverlay.cpp:
(WebCore::InspectorOverlay::InspectorOverlay):
(WebCore::InspectorOverlay::paint):
(WebCore::InspectorOverlay::resize):
(WebCore):
(WebCore::InspectorOverlay::update):
(WebCore::InspectorOverlay::drawGutter):
(WebCore::InspectorOverlay::reset):
* inspector/InspectorOverlay.h:
(InspectorOverlay):
* inspector/InspectorOverlayPage.html: Introduce the gutter painting functionality previously found in the Chromium's
DeviceMetricsSupport class, which used to implement WebPageOverlay.

Source/WebKit/chromium:

- Dispatch the webViewResized() event on InspectorController, which is necessary to update the InspectorOverlay.
- Remove the gutter overlay painting code.

* src/WebDevToolsAgentImpl.cpp:
(WebKit::DeviceMetricsSupport::DeviceMetricsSupport):
(WebKit::DeviceMetricsSupport::~DeviceMetricsSupport):
(WebKit::WebDevToolsAgentImpl::attach):
(WebKit::WebDevToolsAgentImpl::webViewResized):
(WebKit::WebDevToolsAgentImpl::overrideDeviceMetrics):
* src/WebDevToolsAgentImpl.h:
(WebDevToolsAgentImpl):
* src/WebDevToolsAgentPrivate.h:
(WebDevToolsAgentPrivate):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::resize):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (129881 => 129882)


--- trunk/Source/WebCore/ChangeLog	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/ChangeLog	2012-09-28 13:08:50 UTC (rev 129882)
@@ -1,3 +1,33 @@
+2012-09-27  Alexander Pavlov  <[email protected]>
+
+        Web Inspector: [Device Metrics] Remove the gutter overlay moving its functionality into the InspectorOverlay
+        https://bugs.webkit.org/show_bug.cgi?id=97799
+
+        Reviewed by Pavel Feldman.
+
+        In order to reduce the amount of port-specific code, the gutter overlay painted in the device metrics emulation mode
+        has been replaced by the respective functionality in the HTML-based InspectorOverlay in WebCore. The InspectorOverlay
+        now covers the entire WebView rather than the FrameView only.
+
+        * inspector/InspectorController.cpp:
+        (WebCore::InspectorController::webViewResized):
+        (WebCore):
+        * inspector/InspectorController.h:
+        (WebCore):
+        (InspectorController):
+        * inspector/InspectorOverlay.cpp:
+        (WebCore::InspectorOverlay::InspectorOverlay):
+        (WebCore::InspectorOverlay::paint):
+        (WebCore::InspectorOverlay::resize):
+        (WebCore):
+        (WebCore::InspectorOverlay::update):
+        (WebCore::InspectorOverlay::drawGutter):
+        (WebCore::InspectorOverlay::reset):
+        * inspector/InspectorOverlay.h:
+        (InspectorOverlay):
+        * inspector/InspectorOverlayPage.html: Introduce the gutter painting functionality previously found in the Chromium's
+        DeviceMetricsSupport class, which used to implement WebPageOverlay.
+
 2012-09-28  Sudarsana Nagineni  <[email protected]>
 
         editing/pasteboard/paste-removing-iframe.html crashes on EFL bots

Modified: trunk/Source/WebCore/inspector/InspectorController.cpp (129881 => 129882)


--- trunk/Source/WebCore/inspector/InspectorController.cpp	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/inspector/InspectorController.cpp	2012-09-28 13:08:50 UTC (rev 129882)
@@ -289,6 +289,11 @@
     IdentifiersFactory::setProcessId(processId);
 }
 
+void InspectorController::webViewResized(const IntSize& size)
+{
+    m_overlay->resize(size);
+}
+
 void InspectorController::evaluateForTestInFrontend(long callId, const String& script)
 {
     m_inspectorAgent->evaluateForTestInFrontend(callId, script);

Modified: trunk/Source/WebCore/inspector/InspectorController.h (129881 => 129882)


--- trunk/Source/WebCore/inspector/InspectorController.h	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/inspector/InspectorController.h	2012-09-28 13:08:50 UTC (rev 129882)
@@ -58,6 +58,7 @@
 class InspectorResourceAgent;
 class InspectorState;
 class InstrumentingAgents;
+class IntSize;
 class Page;
 class PostWorkerNotificationToFrontendTask;
 class Node;
@@ -91,6 +92,7 @@
     void disconnectFrontend();
     void reconnectFrontend(InspectorFrontendChannel*, const String& inspectorStateCookie);
     void setProcessId(long);
+    void webViewResized(const IntSize&);
 
     void inspect(Node*);
     void drawHighlight(GraphicsContext&) const;

Modified: trunk/Source/WebCore/inspector/InspectorOverlay.cpp (129881 => 129882)


--- trunk/Source/WebCore/inspector/InspectorOverlay.cpp	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/inspector/InspectorOverlay.cpp	2012-09-28 13:08:50 UTC (rev 129882)
@@ -205,7 +205,7 @@
 
 void InspectorOverlay::paint(GraphicsContext& context)
 {
-    if (m_pausedInDebuggerMessage.isNull() && !m_highlightNode && !m_highlightRect)
+    if (m_pausedInDebuggerMessage.isNull() && !m_highlightNode && !m_highlightRect && m_size.isEmpty())
         return;
     GraphicsContextStateSaver stateSaver(context);
     FrameView* view = overlayPage()->mainFrame()->view();
@@ -237,6 +237,12 @@
         buildRectHighlight(m_page, m_highlightRect.get(), m_rectHighlightConfig, highlight);
 }
 
+void InspectorOverlay::resize(const IntSize& size)
+{
+    m_size = size;
+    update();
+}
+
 void InspectorOverlay::setPausedInDebuggerMessage(const String* message)
 {
     m_pausedInDebuggerMessage = message ? *message : String();
@@ -271,7 +277,7 @@
 
 void InspectorOverlay::update()
 {
-    if (!m_highlightNode && !m_highlightRect && m_pausedInDebuggerMessage.isNull()) {
+    if (!m_highlightNode && !m_highlightRect && m_pausedInDebuggerMessage.isNull() && m_size.isEmpty()) {
         m_client->hideHighlight();
         return;
     }
@@ -281,12 +287,16 @@
         return;
 
     FrameView* overlayView = overlayPage()->mainFrame()->view();
-    IntRect visibleRect = enclosingIntRect(view->visibleContentRect());
-    overlayView->resize(visibleRect.width(), visibleRect.height());
+    IntSize viewportSize = enclosingIntRect(view->visibleContentRect()).size();
+    IntSize frameViewFullSize = enclosingIntRect(view->visibleContentRect(true)).size();
+    IntSize size = m_size.isEmpty() ? frameViewFullSize : m_size;
+    overlayView->resize(size);
 
     // Clear canvas and paint things.
-    reset();
+    reset(viewportSize, m_size.isEmpty() ? IntSize() : frameViewFullSize);
 
+    // Include scrollbars to avoid masking them by the gutter.
+    drawGutter();
     drawNodeHighlight();
     drawRectHighlight();
     drawPausedInDebuggerMessage();
@@ -300,7 +310,7 @@
     m_client->highlight();
 }
 
-static RefPtr<InspectorObject> buildObjectForPoint(const FloatPoint& point)
+static PassRefPtr<InspectorObject> buildObjectForPoint(const FloatPoint& point)
 {
     RefPtr<InspectorObject> object = InspectorObject::create();
     object->setNumber("x", point.x());
@@ -308,7 +318,7 @@
     return object.release();
 }
 
-static RefPtr<InspectorArray> buildArrayForQuad(const FloatQuad& quad)
+static PassRefPtr<InspectorArray> buildArrayForQuad(const FloatQuad& quad)
 {
     RefPtr<InspectorArray> array = InspectorArray::create();
     array->pushObject(buildObjectForPoint(quad.p1()));
@@ -318,7 +328,7 @@
     return array.release();
 }
 
-static RefPtr<InspectorObject> buildObjectForHighlight(FrameView* mainView, const Highlight& highlight)
+static PassRefPtr<InspectorObject> buildObjectForHighlight(FrameView* mainView, const Highlight& highlight)
 {
     RefPtr<InspectorObject> object = InspectorObject::create();
     RefPtr<InspectorArray> array = InspectorArray::create();
@@ -343,6 +353,19 @@
     return object.release();
 }
 
+static PassRefPtr<InspectorObject> buildObjectForSize(const IntSize& size)
+{
+    RefPtr<InspectorObject> result = InspectorObject::create();
+    result->setNumber("width", size.width());
+    result->setNumber("height", size.height());
+    return result.release();
+}
+
+void InspectorOverlay::drawGutter()
+{
+    evaluateInOverlay("drawGutter", "");
+}
+
 void InspectorOverlay::drawNodeHighlight()
 {
     if (!m_highlightNode)
@@ -451,9 +474,13 @@
     return m_overlayPage.get();
 }
 
-void InspectorOverlay::reset()
+void InspectorOverlay::reset(const IntSize& viewportSize, const IntSize& frameViewFullSize)
 {
-    evaluateInOverlay("reset", String::number(m_page->deviceScaleFactor()));
+    RefPtr<InspectorObject> resetData = InspectorObject::create();
+    resetData->setNumber("deviceScaleFactor", m_page->deviceScaleFactor());
+    resetData->setObject("viewportSize", buildObjectForSize(viewportSize));
+    resetData->setObject("frameViewFullSize", buildObjectForSize(frameViewFullSize));
+    evaluateInOverlay("reset", resetData.release());
 }
 
 void InspectorOverlay::evaluateInOverlay(const String& method, const String& argument)

Modified: trunk/Source/WebCore/inspector/InspectorOverlay.h (129881 => 129882)


--- trunk/Source/WebCore/inspector/InspectorOverlay.h	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/inspector/InspectorOverlay.h	2012-09-28 13:08:50 UTC (rev 129882)
@@ -100,6 +100,7 @@
     void paint(GraphicsContext&);
     void drawOutline(GraphicsContext*, const LayoutRect&, const Color&);
     void getHighlight(Highlight*) const;
+    void resize(const IntSize&);
 
     void setPausedInDebuggerMessage(const String*);
 
@@ -112,11 +113,12 @@
 private:
     InspectorOverlay(Page*, InspectorClient*);
 
+    void drawGutter();
     void drawNodeHighlight();
     void drawRectHighlight();
     void drawPausedInDebuggerMessage();
     Page* overlayPage();
-    void reset();
+    void reset(const IntSize& viewportSize, const IntSize& frameViewFullSize);
     void evaluateInOverlay(const String& method, const String& argument);
     void evaluateInOverlay(const String& method, PassRefPtr<InspectorValue> argument);
 
@@ -128,6 +130,7 @@
     OwnPtr<IntRect> m_highlightRect;
     OwnPtr<Page> m_overlayPage;
     HighlightConfig m_rectHighlightConfig;
+    IntSize m_size;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/inspector/InspectorOverlayPage.html (129881 => 129882)


--- trunk/Source/WebCore/inspector/InspectorOverlayPage.html	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebCore/inspector/InspectorOverlayPage.html	2012-09-28 13:08:50 UTC (rev 129882)
@@ -89,6 +89,24 @@
 #node-id {
     color: rgb(26, 26, 166);
 }
+
+#right-gutter {
+    display: none;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    position: absolute;
+    background-color: darkgray;
+}
+
+#bottom-gutter {
+    display: none;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    position: absolute;
+    background-color: darkgray;
+}
 </style>
 <script>
 const lightGridColor = "rgba(0,0,0,0.2)";
@@ -266,14 +284,41 @@
         quad1[3].x === quad2[3].x && quad1[3].y === quad2[3].y;
 }
 
-function reset(deviceScaleFactor)
+function drawGutter()
 {
+    var frameWidth = frameViewFullSize.width;
+    var frameHeight = frameViewFullSize.height;
+
+    if (!frameWidth || document.body.offsetWidth <= frameWidth)
+        rightGutter.style.removeProperty("display");
+    else {
+        rightGutter.style.display = "block";
+        rightGutter.style.left = frameWidth + "px";
+    }
+
+    if (!frameHeight || document.body.offsetHeight <= frameHeight)
+        bottomGutter.style.removeProperty("display");
+    else {
+        bottomGutter.style.display = "block";
+        bottomGutter.style.top = frameHeight + "px";
+    }
+}
+
+function reset(resetData)
+{
+    var deviceScaleFactor = resetData.deviceScaleFactor;
+    var viewportSize = resetData.viewportSize;
+    window.frameViewFullSize = resetData.frameViewFullSize;
+
     window.canvas = document.getElementById("canvas");
     window.context = canvas.getContext("2d");
-    canvas.width = deviceScaleFactor * document.body.offsetWidth;
-    canvas.height = deviceScaleFactor * document.body.offsetHeight;
-    canvas.style.width = document.body.offsetWidth + "px";
-    canvas.style.height = document.body.offsetHeight + "px";
+    window.rightGutter = document.getElementById("right-gutter");
+    window.bottomGutter = document.getElementById("bottom-gutter");
+
+    canvas.width = deviceScaleFactor * viewportSize.width;
+    canvas.height = deviceScaleFactor * viewportSize.height;
+    canvas.style.width = viewportSize.width + "px";
+    canvas.style.height = viewportSize.height + "px";
     context.scale(deviceScaleFactor, deviceScaleFactor);
 
     document.getElementById("paused-in-debugger").style.visibility = "hidden";
@@ -517,5 +562,7 @@
   <span id="tag-name"></span><span id="node-id"></span><span id="class-name"></span>
   <span id="node-width"></span><span class="px">px</span><span class="px"> &#xD7; </span><span id="node-height"></span><span class="px">px</span>
 </div>
+<div id="right-gutter"></div>
+<div id="bottom-gutter"></div>
 <div id="log"></div>
 </html>

Modified: trunk/Source/WebKit/chromium/ChangeLog (129881 => 129882)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-09-28 13:08:50 UTC (rev 129882)
@@ -1,3 +1,26 @@
+2012-09-27  Alexander Pavlov  <[email protected]>
+
+        Web Inspector: [Device Metrics] Remove the gutter overlay moving its functionality into the InspectorOverlay
+        https://bugs.webkit.org/show_bug.cgi?id=97799
+
+        Reviewed by Pavel Feldman.
+
+        - Dispatch the webViewResized() event on InspectorController, which is necessary to update the InspectorOverlay.
+        - Remove the gutter overlay painting code.
+
+        * src/WebDevToolsAgentImpl.cpp:
+        (WebKit::DeviceMetricsSupport::DeviceMetricsSupport):
+        (WebKit::DeviceMetricsSupport::~DeviceMetricsSupport):
+        (WebKit::WebDevToolsAgentImpl::attach):
+        (WebKit::WebDevToolsAgentImpl::webViewResized):
+        (WebKit::WebDevToolsAgentImpl::overrideDeviceMetrics):
+        * src/WebDevToolsAgentImpl.h:
+        (WebDevToolsAgentImpl):
+        * src/WebDevToolsAgentPrivate.h:
+        (WebDevToolsAgentPrivate):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::resize):
+
 2012-09-28  Pavel Feldman  <[email protected]>
 
         Web Inspector: [chromium] remove devtools_frontend.zip

Modified: trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp (129881 => 129882)


--- trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp	2012-09-28 13:08:50 UTC (rev 129882)
@@ -72,8 +72,6 @@
 using namespace std;
 
 namespace OverlayZOrders {
-static const int viewportGutter = 97;
-
 // Use 99 as a big z-order number so that highlight is above other overlays.
 static const int highlight = 99;
 }
@@ -183,20 +181,18 @@
     OwnPtr<WebDevToolsAgent::MessageDescriptor> m_descriptor;
 };
 
-class DeviceMetricsSupport : public WebPageOverlay {
+class DeviceMetricsSupport {
 public:
     DeviceMetricsSupport(WebViewImpl* webView)
         : m_webView(webView)
         , m_fitWindow(false)
         , m_originalZoomFactor(0)
     {
-        m_webView->addPageOverlay(this, OverlayZOrders::viewportGutter);
     }
 
     ~DeviceMetricsSupport()
     {
         restore();
-        m_webView->removePageOverlay(this);
     }
 
     void setDeviceMetrics(int width, int height, float textZoomFactor, bool fitWindow)
@@ -285,7 +281,7 @@
         view->setHorizontalScrollbarLock(false);
         view->setVerticalScrollbarLock(false);
         view->setScrollbarModes(ScrollbarAuto, ScrollbarAuto, false, false);
-        view->resize(IntSize(m_webView->size()));
+        view->setFrameRect(IntRect(IntPoint(), IntSize(m_webView->size())));
         m_webView->sendResizeEventAndRepaint();
     }
 
@@ -341,19 +337,6 @@
         doc->updateLayout();
     }
 
-    virtual void paintPageOverlay(WebCanvas* canvas)
-    {
-        FrameView* frameView = this->frameView();
-        if (!frameView)
-            return;
-
-        GraphicsContextBuilder builder(canvas);
-        GraphicsContext& gc = builder.context();
-        gc.clipOut(IntRect(IntPoint(), frameView->size()));
-        gc.setFillColor(Color::darkGray, ColorSpaceDeviceRGB);
-        gc.drawRect(IntRect(IntPoint(), m_webView->size()));
-    }
-
     WebCore::FrameView* frameView()
     {
         return m_webView->mainFrameImpl() ? m_webView->mainFrameImpl()->frameView() : 0;
@@ -389,6 +372,7 @@
 
     ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client);
     inspectorController()->connectFrontend(this);
+    inspectorController()->webViewResized(m_webViewImpl->size());
     m_attached = true;
 }
 
@@ -437,10 +421,12 @@
     return !!m_metricsSupport;
 }
 
-void WebDevToolsAgentImpl::webViewResized()
+void WebDevToolsAgentImpl::webViewResized(const WebSize& size)
 {
     if (m_metricsSupport)
         m_metricsSupport->webViewResized();
+    if (InspectorController* ic = inspectorController())
+        ic->webViewResized(IntSize(size.width, size.height));
 }
 
 void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float fontScaleFactor, bool fitWindow)
@@ -448,12 +434,19 @@
     if (!width && !height) {
         if (m_metricsSupport)
             m_metricsSupport.clear();
+        if (InspectorController* ic = inspectorController())
+            ic->webViewResized(IntSize());
         return;
     }
 
     if (!m_metricsSupport)
         m_metricsSupport = adoptPtr(new DeviceMetricsSupport(m_webViewImpl));
+
     m_metricsSupport->setDeviceMetrics(width, height, fontScaleFactor, fitWindow);
+    if (InspectorController* ic = inspectorController()) {
+        WebSize size = m_webViewImpl->size();
+        ic->webViewResized(IntSize(size.width, size.height));
+    }
 }
 
 void WebDevToolsAgentImpl::autoZoomPageToFitWidth()

Modified: trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h (129881 => 129882)


--- trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h	2012-09-28 13:08:50 UTC (rev 129882)
@@ -76,7 +76,7 @@
     virtual void didCreateScriptContext(WebFrameImpl*, int worldId);
     virtual void mainFrameViewCreated(WebFrameImpl*);
     virtual bool metricsOverridden();
-    virtual void webViewResized();
+    virtual void webViewResized(const WebSize&);
 
     // WebDevToolsAgent implementation.
     virtual void attach();

Modified: trunk/Source/WebKit/chromium/src/WebDevToolsAgentPrivate.h (129881 => 129882)


--- trunk/Source/WebKit/chromium/src/WebDevToolsAgentPrivate.h	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebKit/chromium/src/WebDevToolsAgentPrivate.h	2012-09-28 13:08:50 UTC (rev 129882)
@@ -54,7 +54,7 @@
     virtual bool metricsOverridden() = 0;
 
     // WebViewImpl has been resized.
-    virtual void webViewResized() = 0;
+    virtual void webViewResized(const WebSize&) = 0;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (129881 => 129882)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-09-28 12:56:55 UTC (rev 129881)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2012-09-28 13:08:50 UTC (rev 129882)
@@ -1521,9 +1521,9 @@
 #endif
 
     WebDevToolsAgentPrivate* agentPrivate = devToolsAgentPrivate();
-    if (agentPrivate && agentPrivate->metricsOverridden())
-        agentPrivate->webViewResized();
-    else {
+    if (agentPrivate)
+        agentPrivate->webViewResized(newSize);
+    if (!agentPrivate || !agentPrivate->metricsOverridden()) {
         WebFrameImpl* webFrame = mainFrameImpl();
         if (webFrame->frameView())
             webFrame->frameView()->resize(newSize.width, newSize.height);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to