diff options
author | Ben Murdoch <benm@google.com> | 2011-05-24 11:24:40 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-02 09:53:15 +0100 |
commit | 81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch) | |
tree | 7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebKit/chromium/src/WebViewImpl.cpp | |
parent | 94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff) | |
download | external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2 |
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebKit/chromium/src/WebViewImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebViewImpl.cpp | 125 |
1 files changed, 70 insertions, 55 deletions
diff --git a/Source/WebKit/chromium/src/WebViewImpl.cpp b/Source/WebKit/chromium/src/WebViewImpl.cpp index 18a953e..6ae4f35 100644 --- a/Source/WebKit/chromium/src/WebViewImpl.cpp +++ b/Source/WebKit/chromium/src/WebViewImpl.cpp @@ -120,6 +120,7 @@ #include "WebString.h" #include "WebVector.h" #include "WebViewClient.h" +#include "cc/CCHeadsUpDisplay.h" #include <wtf/ByteArray.h> #include <wtf/CurrentTime.h> #include <wtf/RefPtr.h> @@ -805,6 +806,15 @@ bool WebViewImpl::scrollViewWithKeyboard(int keyCode, int modifiers) { ScrollDirection scrollDirection; ScrollGranularity scrollGranularity; +#if OS(DARWIN) + // Control-Up/Down should be PageUp/Down on Mac. + if (modifiers & WebMouseEvent::ControlKey) { + if (keyCode == VKEY_UP) + keyCode = VKEY_PRIOR; + else if (keyCode == VKEY_DOWN) + keyCode = VKEY_NEXT; + } +#endif if (!mapKeyCodeForScroll(keyCode, &scrollDirection, &scrollGranularity)) return false; return propagateScroll(scrollDirection, scrollGranularity); @@ -900,7 +910,7 @@ void WebViewImpl::hideAutoFillPopup() } } -Frame* WebViewImpl::focusedWebCoreFrame() +Frame* WebViewImpl::focusedWebCoreFrame() const { return m_page.get() ? m_page->focusController()->focusedOrMainFrame() : 0; } @@ -1005,10 +1015,7 @@ void WebViewImpl::layout() #if USE(ACCELERATED_COMPOSITING) void WebViewImpl::doPixelReadbackToCanvas(WebCanvas* canvas, const IntRect& rect) { - ASSERT(rect.maxX() <= m_layerRenderer->rootLayerTextureSize().width() - && rect.maxY() <= m_layerRenderer->rootLayerTextureSize().height()); - -#if PLATFORM(SKIA) +#if USE(SKIA) PlatformContextSkia context(canvas); // PlatformGraphicsContext is actually a pointer to PlatformContextSkia @@ -1050,7 +1057,7 @@ void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect) if (canvas) { // Clip rect to the confines of the rootLayerTexture. IntRect resizeRect(rect); - resizeRect.intersect(IntRect(IntPoint(), m_layerRenderer->rootLayerTextureSize())); + resizeRect.intersect(IntRect(IntPoint(), m_layerRenderer->visibleRectSize())); doPixelReadbackToCanvas(canvas, resizeRect); } #endif @@ -1106,36 +1113,49 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent) m_currentInputEvent = &inputEvent; if (m_mouseCaptureNode.get() && WebInputEvent::isMouseEventType(inputEvent.type)) { - // Save m_mouseCaptureNode since mouseCaptureLost() will clear it. - RefPtr<Node> node = m_mouseCaptureNode; - - // Not all platforms call mouseCaptureLost() directly. - if (inputEvent.type == WebInputEvent::MouseUp) + const int mouseButtonModifierMask = WebInputEvent::LeftButtonDown | WebInputEvent::MiddleButtonDown | WebInputEvent::RightButtonDown; + if (inputEvent.type == WebInputEvent::MouseDown || + (inputEvent.modifiers & mouseButtonModifierMask) == 0) { + // It's possible the mouse was released and we didn't get the "up" + // message. This can happen if a dialog pops up while the mouse is + // held, for example. This will leave us "stuck" in capture mode. + // If we get a new mouse down message or any other mouse message + // where no "down" flags are set, we know the user is no longer + // dragging and we can release the capture and fall through to the + // regular event processing. mouseCaptureLost(); + } else { + // Save m_mouseCaptureNode since mouseCaptureLost() will clear it. + RefPtr<Node> node = m_mouseCaptureNode; - AtomicString eventType; - switch (inputEvent.type) { - case WebInputEvent::MouseMove: - eventType = eventNames().mousemoveEvent; - break; - case WebInputEvent::MouseLeave: - eventType = eventNames().mouseoutEvent; - break; - case WebInputEvent::MouseDown: - eventType = eventNames().mousedownEvent; - break; - case WebInputEvent::MouseUp: - eventType = eventNames().mouseupEvent; - break; - default: - ASSERT_NOT_REACHED(); - } + // Not all platforms call mouseCaptureLost() directly. + if (inputEvent.type == WebInputEvent::MouseUp) + mouseCaptureLost(); - node->dispatchMouseEvent( - PlatformMouseEventBuilder(mainFrameImpl()->frameView(), *static_cast<const WebMouseEvent*>(&inputEvent)), - eventType, static_cast<const WebMouseEvent*>(&inputEvent)->clickCount); - m_currentInputEvent = 0; - return true; + AtomicString eventType; + switch (inputEvent.type) { + case WebInputEvent::MouseMove: + eventType = eventNames().mousemoveEvent; + break; + case WebInputEvent::MouseLeave: + eventType = eventNames().mouseoutEvent; + break; + case WebInputEvent::MouseDown: + eventType = eventNames().mousedownEvent; + break; + case WebInputEvent::MouseUp: + eventType = eventNames().mouseupEvent; + break; + default: + ASSERT_NOT_REACHED(); + } + + node->dispatchMouseEvent( + PlatformMouseEventBuilder(mainFrameImpl()->frameView(), *static_cast<const WebMouseEvent*>(&inputEvent)), + eventType, static_cast<const WebMouseEvent*>(&inputEvent)->clickCount); + m_currentInputEvent = 0; + return true; + } } bool handled = true; @@ -1276,7 +1296,7 @@ bool WebViewImpl::setComposition( // node, which doesn't exist any longer. PassRefPtr<Range> range = editor->compositionRange(); if (range) { - const Node* node = range->startPosition().node(); + const Node* node = range->startContainer(); if (!node || !node->isContentEditable()) return false; } @@ -1325,7 +1345,7 @@ bool WebViewImpl::confirmComposition(const WebString& text) // node, which doesn't exist any longer. PassRefPtr<Range> range = editor->compositionRange(); if (range) { - const Node* node = range->startPosition().node(); + const Node* node = range->startContainer(); if (!node || !node->isContentEditable()) return false; } @@ -1356,7 +1376,7 @@ WebTextInputType WebViewImpl::textInputType() if (!controller) return type; - const Node* node = controller->start().node(); + const Node* node = controller->start().deprecatedNode(); if (!node) return type; @@ -1385,14 +1405,14 @@ WebRect WebViewImpl::caretOrSelectionBounds() if (!view) return rect; - const Node* node = controller->start().node(); + const Node* node = controller->start().deprecatedNode(); if (!node || !node->renderer()) return rect; if (controller->isCaret()) rect = view->contentsToWindow(controller->absoluteCaretBounds()); else if (controller->isRange()) { - node = controller->end().node(); + node = controller->end().deprecatedNode(); if (!node || !node->renderer()) return rect; RefPtr<Range> range = controller->toNormalizedRange(); @@ -1749,21 +1769,6 @@ WebDragOperation WebViewImpl::dragTargetDragEnter( return dragTargetDragEnterOrOver(clientPoint, screenPoint, DragEnter); } -WebDragOperation WebViewImpl::dragTargetDragEnterNew( - int identity, - const WebPoint& clientPoint, - const WebPoint& screenPoint, - WebDragOperationsMask operationsAllowed) -{ - ASSERT(!m_currentDragData.get()); - - m_currentDragData = ChromiumDataObject::createReadable(m_page->mainFrame(), Clipboard::DragAndDrop); - m_dragIdentity = identity; - m_operationsAllowed = operationsAllowed; - - return dragTargetDragEnterOrOver(clientPoint, screenPoint, DragEnter); -} - WebDragOperation WebViewImpl::dragTargetDragOver( const WebPoint& clientPoint, const WebPoint& screenPoint, @@ -1979,7 +1984,7 @@ void WebViewImpl::applyAutoFillSuggestions( if (m_autoFillPopupShowing) { refreshAutoFillPopup(); } else { - m_autoFillPopup->show(focusedNode->getRect(), focusedNode->ownerDocument()->view(), 0); + m_autoFillPopup->showInRect(focusedNode->getRect(), focusedNode->ownerDocument()->view(), 0); m_autoFillPopupShowing = true; } } @@ -2383,6 +2388,7 @@ void WebViewImpl::doComposite() ASSERT(isAcceleratedCompositingActive()); if (!page()) return; + FrameView* view = page()->mainFrame()->view(); // The visibleRect includes scrollbars whereas the contentRect doesn't. @@ -2393,7 +2399,16 @@ void WebViewImpl::doComposite() WebViewImplTilePaintInterface tilePaint(this); WebViewImplScrollbarPaintInterface scrollbarPaint(this); - m_layerRenderer->drawLayers(visibleRect, contentRect, scroll, tilePaint, scrollbarPaint); + m_layerRenderer->setCompositeOffscreen(settings()->compositeToTextureEnabled()); + + CCHeadsUpDisplay* hud = m_layerRenderer->headsUpDisplay(); + hud->setShowFPSCounter(settings()->showFPSCounter()); + hud->setShowPlatformLayerTree(settings()->showPlatformLayerTree()); + + m_layerRenderer->updateAndDrawLayers(visibleRect, contentRect, scroll, tilePaint, scrollbarPaint); + + if (m_layerRenderer->isCompositingOffscreen()) + m_layerRenderer->copyOffscreenTextureToDisplay(); } void WebViewImpl::reallocateRenderer() |