Index: third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp |
diff --git a/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp b/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp |
deleted file mode 100644 |
index fef880252639c6acef8fd70f13cf9afd78f38da9..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp |
+++ /dev/null |
@@ -1,257 +0,0 @@ |
-/* |
- * Copyright (C) 2001 Peter Kelly (pmk@post.com) |
- * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) |
- * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
- * Copyright (C) 2003, 2005, 2006, 2008 Apple Inc. All rights reserved. |
- * |
- * This library is free software; you can redistribute it and/or |
- * modify it under the terms of the GNU Library General Public |
- * License as published by the Free Software Foundation; either |
- * version 2 of the License, or (at your option) any later version. |
- * |
- * This library is distributed in the hope that it will be useful, |
- * but WITHOUT ANY WARRANTY; without even the implied warranty of |
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
- * Library General Public License for more details. |
- * |
- * You should have received a copy of the GNU Library General Public License |
- * along with this library; see the file COPYING.LIB. If not, write to |
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
- * Boston, MA 02110-1301, USA. |
- */ |
- |
-#include "core/events/MouseRelatedEvent.h" |
- |
-#include "core/dom/Document.h" |
-#include "core/frame/LocalDOMWindow.h" |
-#include "core/frame/FrameView.h" |
-#include "core/frame/LocalFrame.h" |
-#include "core/layout/LayoutObject.h" |
-#include "core/paint/PaintLayer.h" |
-#include "core/svg/SVGElement.h" |
- |
-namespace blink { |
- |
-MouseRelatedEvent::MouseRelatedEvent() |
- : m_positionType(PositionType::Position), |
- m_hasCachedRelativePosition(false) {} |
- |
-static LayoutSize contentsScrollOffset(AbstractView* abstractView) { |
- if (!abstractView || !abstractView->isLocalDOMWindow()) |
- return LayoutSize(); |
- LocalFrame* frame = toLocalDOMWindow(abstractView)->frame(); |
- if (!frame) |
- return LayoutSize(); |
- FrameView* frameView = frame->view(); |
- if (!frameView) |
- return LayoutSize(); |
- float scaleFactor = frame->pageZoomFactor(); |
- return LayoutSize(frameView->scrollX() / scaleFactor, |
- frameView->scrollY() / scaleFactor); |
-} |
- |
-MouseRelatedEvent::MouseRelatedEvent( |
- const AtomicString& eventType, |
- bool canBubble, |
- bool cancelable, |
- AbstractView* abstractView, |
- int detail, |
- const IntPoint& screenLocation, |
- const IntPoint& rootFrameLocation, |
- const IntPoint& movementDelta, |
- PlatformEvent::Modifiers modifiers, |
- TimeTicks platformTimeStamp, |
- PositionType positionType, |
- InputDeviceCapabilities* sourceCapabilities) |
- : UIEventWithKeyState(eventType, |
- canBubble, |
- cancelable, |
- abstractView, |
- detail, |
- modifiers, |
- platformTimeStamp, |
- sourceCapabilities), |
- m_screenLocation(screenLocation), |
- m_movementDelta(movementDelta), |
- m_positionType(positionType) { |
- DoublePoint adjustedPageLocation; |
- DoubleSize scrollOffset; |
- |
- LocalFrame* frame = view() && view()->isLocalDOMWindow() |
- ? toLocalDOMWindow(view())->frame() |
- : nullptr; |
- if (frame && hasPosition()) { |
- if (FrameView* frameView = frame->view()) { |
- adjustedPageLocation = frameView->rootFrameToContents(rootFrameLocation); |
- scrollOffset = frameView->scrollOffsetInt(); |
- float scaleFactor = 1 / frame->pageZoomFactor(); |
- if (scaleFactor != 1.0f) { |
- adjustedPageLocation.scale(scaleFactor, scaleFactor); |
- scrollOffset.scale(scaleFactor, scaleFactor); |
- } |
- } |
- } |
- |
- m_clientLocation = adjustedPageLocation - scrollOffset; |
- m_pageLocation = adjustedPageLocation; |
- |
- // Set up initial values for coordinates. |
- // Correct values are computed lazily, see computeRelativePosition. |
- m_layerLocation = m_pageLocation; |
- m_offsetLocation = m_pageLocation; |
- |
- computePageLocation(); |
- m_hasCachedRelativePosition = false; |
-} |
- |
-MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, |
- const MouseEventInit& initializer) |
- : UIEventWithKeyState(eventType, initializer), |
- m_screenLocation( |
- DoublePoint(initializer.screenX(), initializer.screenY())), |
- m_movementDelta( |
- IntPoint(initializer.movementX(), initializer.movementY())), |
- m_positionType(PositionType::Position) { |
- initCoordinates(initializer.clientX(), initializer.clientY()); |
-} |
- |
-void MouseRelatedEvent::initCoordinates(const double clientX, |
- const double clientY) { |
- // Set up initial values for coordinates. |
- // Correct values are computed lazily, see computeRelativePosition. |
- m_clientLocation = DoublePoint(clientX, clientY); |
- m_pageLocation = m_clientLocation + DoubleSize(contentsScrollOffset(view())); |
- |
- m_layerLocation = m_pageLocation; |
- m_offsetLocation = m_pageLocation; |
- |
- computePageLocation(); |
- m_hasCachedRelativePosition = false; |
-} |
- |
-static float pageZoomFactor(const UIEvent* event) { |
- if (!event->view() || !event->view()->isLocalDOMWindow()) |
- return 1; |
- LocalFrame* frame = toLocalDOMWindow(event->view())->frame(); |
- if (!frame) |
- return 1; |
- return frame->pageZoomFactor(); |
-} |
- |
-void MouseRelatedEvent::computePageLocation() { |
- float scaleFactor = pageZoomFactor(this); |
- m_absoluteLocation = m_pageLocation.scaledBy(scaleFactor); |
-} |
- |
-void MouseRelatedEvent::receivedTarget() { |
- m_hasCachedRelativePosition = false; |
-} |
- |
-static const LayoutObject* findTargetLayoutObject(Node*& targetNode) { |
- LayoutObject* layoutObject = targetNode->layoutObject(); |
- if (!layoutObject || !layoutObject->isSVG()) |
- return layoutObject; |
- // If this is an SVG node, compute the offset to the padding box of the |
- // outermost SVG root (== the closest ancestor that has a CSS layout box.) |
- while (!layoutObject->isSVGRoot()) |
- layoutObject = layoutObject->parent(); |
- // Update the target node to point to the SVG root. |
- targetNode = layoutObject->node(); |
- DCHECK(!targetNode || (targetNode->isSVGElement() && |
- toSVGElement(*targetNode).isOutermostSVGSVGElement())); |
- return layoutObject; |
-} |
- |
-void MouseRelatedEvent::computeRelativePosition() { |
- Node* targetNode = target() ? target()->toNode() : nullptr; |
- if (!targetNode) |
- return; |
- |
- // Compute coordinates that are based on the target. |
- m_layerLocation = m_pageLocation; |
- m_offsetLocation = m_pageLocation; |
- |
- // Must have an updated layout tree for this math to work correctly. |
- targetNode->document().updateStyleAndLayoutIgnorePendingStylesheets(); |
- |
- // Adjust offsetLocation to be relative to the target's padding box. |
- if (const LayoutObject* layoutObject = findTargetLayoutObject(targetNode)) { |
- FloatPoint localPos = layoutObject->absoluteToLocal( |
- FloatPoint(absoluteLocation()), UseTransforms); |
- |
- // Adding this here to address crbug.com/570666. Basically we'd like to |
- // find the local coordinates relative to the padding box not the border |
- // box. |
- if (layoutObject->isBoxModelObject()) { |
- const LayoutBoxModelObject* layoutBox = |
- toLayoutBoxModelObject(layoutObject); |
- localPos.move(-layoutBox->borderLeft(), -layoutBox->borderTop()); |
- } |
- |
- m_offsetLocation = DoublePoint(localPos); |
- float scaleFactor = 1 / pageZoomFactor(this); |
- if (scaleFactor != 1.0f) |
- m_offsetLocation.scale(scaleFactor, scaleFactor); |
- } |
- |
- // Adjust layerLocation to be relative to the layer. |
- // FIXME: event.layerX and event.layerY are poorly defined, |
- // and probably don't always correspond to PaintLayer offsets. |
- // https://bugs.webkit.org/show_bug.cgi?id=21868 |
- Node* n = targetNode; |
- while (n && !n->layoutObject()) |
- n = n->parentNode(); |
- |
- if (n) { |
- // FIXME: This logic is a wrong implementation of convertToLayerCoords. |
- for (PaintLayer* layer = n->layoutObject()->enclosingLayer(); layer; |
- layer = layer->parent()) { |
- m_layerLocation -= DoubleSize(layer->location().x().toDouble(), |
- layer->location().y().toDouble()); |
- } |
- } |
- |
- m_hasCachedRelativePosition = true; |
-} |
- |
-int MouseRelatedEvent::layerX() { |
- if (!m_hasCachedRelativePosition) |
- computeRelativePosition(); |
- |
- // TODO(mustaq): Remove the PointerEvent specific code when mouse has |
- // fractional coordinates. See crbug.com/655786. |
- return isPointerEvent() ? m_layerLocation.x() |
- : static_cast<int>(m_layerLocation.x()); |
-} |
- |
-int MouseRelatedEvent::layerY() { |
- if (!m_hasCachedRelativePosition) |
- computeRelativePosition(); |
- |
- // TODO(mustaq): Remove the PointerEvent specific code when mouse has |
- // fractional coordinates. See crbug.com/655786. |
- return isPointerEvent() ? m_layerLocation.y() |
- : static_cast<int>(m_layerLocation.y()); |
-} |
- |
-int MouseRelatedEvent::offsetX() { |
- if (!hasPosition()) |
- return 0; |
- if (!m_hasCachedRelativePosition) |
- computeRelativePosition(); |
- return std::round(m_offsetLocation.x()); |
-} |
- |
-int MouseRelatedEvent::offsetY() { |
- if (!hasPosition()) |
- return 0; |
- if (!m_hasCachedRelativePosition) |
- computeRelativePosition(); |
- return std::round(m_offsetLocation.y()); |
-} |
- |
-DEFINE_TRACE(MouseRelatedEvent) { |
- UIEventWithKeyState::trace(visitor); |
-} |
- |
-} // namespace blink |