diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-10-15 16:08:57 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-10-15 16:08:57 +0200 |
commit | 5466563f4b5b6b86523e3f89bb7f77e5b5270c78 (patch) | |
tree | 8caccf7cd03a15207cde3ba282c88bf132482a91 /Source/WebKit/chromium/src/WebPluginContainerImpl.cpp | |
parent | 33b26980cb24288b5a9f2590ccf32a949281bb79 (diff) | |
download | qtwebkit-5466563f4b5b6b86523e3f89bb7f77e5b5270c78.tar.gz |
Imported WebKit commit 0dc6cd75e1d4836eaffbb520be96fac4847cc9d2 (http://svn.webkit.org/repository/webkit/trunk@131300)
WebKit update which introduces the QtWebKitWidgets module that contains the WK1
widgets based API. (In fact it renames QtWebKit to QtWebKitWidgets while we're
working on completing the entire split as part of
https://bugs.webkit.org/show_bug.cgi?id=99314
Diffstat (limited to 'Source/WebKit/chromium/src/WebPluginContainerImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebPluginContainerImpl.cpp | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp index 5c164319e..689154058 100644 --- a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp +++ b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp @@ -33,6 +33,7 @@ #include "Chrome.h" #include "ChromeClientImpl.h" +#include "ClipboardChromium.h" #include "ScrollbarGroup.h" #include "WebCursorInfo.h" #include "WebDataSourceImpl.h" @@ -73,6 +74,7 @@ #include <public/Platform.h> #include <public/WebClipboard.h> #include <public/WebCompositorSupport.h> +#include <public/WebDragData.h> #include <public/WebExternalTextureLayer.h> #include <public/WebRect.h> #include <public/WebString.h> @@ -115,8 +117,13 @@ void WebPluginContainerImpl::paint(GraphicsContext* gc, const IntRect& damageRec if (!parent()) return; + FloatRect scaledDamageRect = damageRect; + float frameScaleFactor = m_element->document()->page()->mainFrame()->frameScaleFactor(); + scaledDamageRect.scale(frameScaleFactor); + scaledDamageRect.move(-frameRect().x() * (frameScaleFactor - 1), -frameRect().y() * (frameScaleFactor - 1)); + // Don't paint anything if the plugin doesn't intersect the damage rect. - if (!frameRect().intersects(damageRect)) + if (!frameRect().intersects(enclosingIntRect(scaledDamageRect))) return; gc->save(); @@ -132,7 +139,7 @@ void WebPluginContainerImpl::paint(GraphicsContext* gc, const IntRect& damageRec WebCanvas* canvas = gc->platformContext()->canvas(); IntRect windowRect = - IntRect(view->contentsToWindow(damageRect.location()), damageRect.size()); + IntRect(view->contentsToWindow(enclosingIntRect(scaledDamageRect))); m_webPlugin->paint(canvas, windowRect); gc->restore(); @@ -653,11 +660,16 @@ void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) { ASSERT(parent()->isFrameView()); + if (event->isDragEvent()) { + handleDragEvent(event); + return; + } + // We cache the parent FrameView here as the plugin widget could be deleted // in the call to HandleEvent. See http://b/issue?id=1362948 FrameView* parentView = static_cast<FrameView*>(parent()); - WebMouseEventBuilder webEvent(this, *event); + WebMouseEventBuilder webEvent(this, m_element->renderer(), *event); if (webEvent.type == WebInputEvent::Undefined) return; @@ -696,9 +708,35 @@ void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) chromeClient->setCursorForPlugin(cursorInfo); } +void WebPluginContainerImpl::handleDragEvent(MouseEvent* event) +{ + ASSERT(event->isDragEvent()); + + WebDragStatus dragStatus = WebDragStatusUnknown; + if (event->type() == eventNames().dragenterEvent) + dragStatus = WebDragStatusEnter; + else if (event->type() == eventNames().dragleaveEvent) + dragStatus = WebDragStatusLeave; + else if (event->type() == eventNames().dragoverEvent) + dragStatus = WebDragStatusOver; + else if (event->type() == eventNames().dropEvent) + dragStatus = WebDragStatusDrop; + + if (dragStatus == WebDragStatusUnknown) + return; + + ClipboardChromium* clipboard = static_cast<ClipboardChromium*>(event->dataTransfer()); + WebDragData dragData = clipboard->dataObject(); + WebDragOperationsMask dragOperationMask = static_cast<WebDragOperationsMask>(clipboard->sourceOperation()); + WebPoint dragScreenLocation(event->screenX(), event->screenY()); + WebPoint dragLocation(event->absoluteLocation().x() - location().x(), event->absoluteLocation().y() - location().y()); + + m_webPlugin->handleDragStatusUpdate(dragStatus, dragData, dragOperationMask, dragLocation, dragScreenLocation); +} + void WebPluginContainerImpl::handleWheelEvent(WheelEvent* event) { - WebMouseWheelEventBuilder webEvent(this, *event); + WebMouseWheelEventBuilder webEvent(this, m_element->renderer(), *event); if (webEvent.type == WebInputEvent::Undefined) return; @@ -747,7 +785,9 @@ void WebPluginContainerImpl::handleKeyboardEvent(KeyboardEvent* event) void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) { - WebTouchEventBuilder webEvent(this, *event); + if (!m_isAcceptingTouchEvents) + return; + WebTouchEventBuilder webEvent(this, m_element->renderer(), *event); if (webEvent.type == WebInputEvent::Undefined) return; WebCursorInfo cursorInfo; @@ -758,7 +798,7 @@ void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) void WebPluginContainerImpl::handleGestureEvent(GestureEvent* event) { - WebGestureEventBuilder webEvent(this, *event); + WebGestureEventBuilder webEvent(this, m_element->renderer(), *event); if (webEvent.type == WebInputEvent::Undefined) return; WebCursorInfo cursorInfo; |