summaryrefslogtreecommitdiffstats
path: root/WebKit
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2009-08-03 15:45:38 -0400
committerDerek Sollenberger <djsollen@google.com>2009-08-03 16:27:57 -0400
commit5655832af95b56bf25c0183a2d5d2cd909d6c8f4 (patch)
tree8a04a08cb255e2a90eb5649f3fc6d1dcef9b95e9 /WebKit
parent51c0d4c6b1b74fff7336d81451ba7d2fc132e31c (diff)
downloadexternal_webkit-5655832af95b56bf25c0183a2d5d2cd909d6c8f4.zip
external_webkit-5655832af95b56bf25c0183a2d5d2cd909d6c8f4.tar.gz
external_webkit-5655832af95b56bf25c0183a2d5d2cd909d6c8f4.tar.bz2
Fixing mouse and touch coordinates inside iframes.
Diffstat (limited to 'WebKit')
-rw-r--r--WebKit/android/plugins/PluginWidgetAndroid.cpp26
-rw-r--r--WebKit/android/plugins/PluginWidgetAndroid.h2
2 files changed, 24 insertions, 4 deletions
diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp
index 30a55cb..96aa74b 100644
--- a/WebKit/android/plugins/PluginWidgetAndroid.cpp
+++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp
@@ -71,7 +71,8 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) {
if (m_drawingModel == kSurface_ANPDrawingModel) {
if (m_surface) {
- m_surface->attach(window->x, window->y, window->width, window->height);
+ IntPoint docPoint = getDocumentCoordinates(window->x, window->y);
+ m_surface->attach(docPoint.x(), docPoint.y(), window->width, window->height);
}
} else {
m_flipPixelRef->safeUnref();
@@ -292,9 +293,7 @@ void PluginWidgetAndroid::scrollToVisibleFrameRect() {
// this requires converting the m_requestedFrameRect from frame to doc coordinates
// find the center of the visibleRect in document coordinates
- ScrollView* scrollView = m_pluginView->parent();
- IntPoint pluginFramePoint = IntPoint(m_requestedFrameRect.fLeft, m_requestedFrameRect.fTop);
- IntPoint pluginDocPoint = scrollView->convertToContainingWindow(pluginFramePoint);
+ IntPoint pluginDocPoint = getDocumentCoordinates(m_requestedFrameRect.fLeft, m_requestedFrameRect.fTop);
int rectCenterX = pluginDocPoint.x() + m_requestedFrameRect.width()/2;
int rectCenterY = pluginDocPoint.y() + m_requestedFrameRect.height()/2;
@@ -306,6 +305,25 @@ void PluginWidgetAndroid::scrollToVisibleFrameRect() {
int deltaX = rectCenterX - screenCenterX;
int deltaY = rectCenterY - screenCenterY;
+ ScrollView* scrollView = m_pluginView->parent();
android::WebViewCore* core = android::WebViewCore::getWebViewCore(scrollView);
core->scrollBy(deltaX, deltaY, true);
}
+
+IntPoint PluginWidgetAndroid::getDocumentCoordinates(int frameX, int frameY) {
+ IntPoint docPoint = IntPoint(frameX, frameY);
+
+ const ScrollView* currentScrollView = m_pluginView->parent();
+ if (currentScrollView) {
+ const ScrollView* parentScrollView = currentScrollView->parent();
+ while (parentScrollView) {
+
+ docPoint.move(currentScrollView->x(), currentScrollView->y());
+
+ currentScrollView = parentScrollView;
+ parentScrollView = parentScrollView->parent();
+ }
+ }
+
+ return docPoint;
+}
diff --git a/WebKit/android/plugins/PluginWidgetAndroid.h b/WebKit/android/plugins/PluginWidgetAndroid.h
index 1da618f..cc2d206 100644
--- a/WebKit/android/plugins/PluginWidgetAndroid.h
+++ b/WebKit/android/plugins/PluginWidgetAndroid.h
@@ -27,6 +27,7 @@
#define PluginWidgetAndroid_H
#include "android_npapi.h"
+#include "IntPoint.h"
#include "SkRect.h"
#include <wtf/OwnPtr.h>
@@ -132,6 +133,7 @@ struct PluginWidgetAndroid {
void setVisibleRects(const ANPRectI rects[], int32_t count);
private:
+ WebCore::IntPoint getDocumentCoordinates(int frameX, int frameY);
void computeVisibleFrameRect();
void scrollToVisibleFrameRect();