diff options
Diffstat (limited to 'WebCore/dom/MouseRelatedEvent.cpp')
-rw-r--r-- | WebCore/dom/MouseRelatedEvent.cpp | 21 |
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(); } } } |