summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/MouseRelatedEvent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/dom/MouseRelatedEvent.cpp')
-rw-r--r--WebCore/dom/MouseRelatedEvent.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/WebCore/dom/MouseRelatedEvent.cpp b/WebCore/dom/MouseRelatedEvent.cpp
index a69c8a7..c66b0a8 100644
--- a/WebCore/dom/MouseRelatedEvent.cpp
+++ b/WebCore/dom/MouseRelatedEvent.cpp
@@ -97,6 +97,8 @@ void MouseRelatedEvent::initCoordinates()
m_layerY = m_pageY;
m_offsetX = m_pageX;
m_offsetY = m_pageY;
+
+ computePageLocation();
}
void MouseRelatedEvent::initCoordinates(int clientX, int clientY)
@@ -112,6 +114,14 @@ void MouseRelatedEvent::initCoordinates(int clientX, int clientY)
m_layerY = m_pageY;
m_offsetX = m_pageX;
m_offsetY = m_pageY;
+
+ computePageLocation();
+}
+
+void MouseRelatedEvent::computePageLocation()
+{
+ float zoomFactor = (view() && view()->frame()) ? view()->frame()->pageZoomFactor() : 1.0f;
+ setAbsoluteLocation(roundedIntPoint(FloatPoint(pageX() * zoomFactor, pageY() * zoomFactor)));
}
void MouseRelatedEvent::receivedTarget()
@@ -133,9 +143,10 @@ void MouseRelatedEvent::receivedTarget()
// Adjust offsetX/Y to be relative to the target's position.
if (!isSimulated()) {
if (RenderObject* r = targ->renderer()) {
- FloatPoint absPos = r->absoluteToLocal(FloatPoint(m_pageX, m_pageY), false, true);
- m_offsetX = absPos.x();
- m_offsetY = absPos.y();
+ FloatPoint localPos = r->absoluteToLocal(absoluteLocation(), false, true);
+ float zoomFactor = (view() && view()->frame()) ? view()->frame()->pageZoomFactor() : 1.0f;
+ m_offsetX = lroundf(localPos.x() / zoomFactor);
+ m_offsetY = lroundf(localPos.y() / zoomFactor);
}
}
@@ -151,8 +162,8 @@ void MouseRelatedEvent::receivedTarget()
RenderLayer* layer = n->renderer()->enclosingLayer();
layer->updateLayerPosition();
for (; layer; layer = layer->parent()) {
- m_layerX -= layer->xPos();
- m_layerY -= layer->yPos();
+ m_layerX -= layer->x();
+ m_layerY -= layer->y();
}
}
}