summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-10-15 16:08:57 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-10-15 16:08:57 +0200
commit5466563f4b5b6b86523e3f89bb7f77e5b5270c78 (patch)
tree8caccf7cd03a15207cde3ba282c88bf132482a91 /Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
parent33b26980cb24288b5a9f2590ccf32a949281bb79 (diff)
downloadqtwebkit-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.cpp52
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;