Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp

Issue 2580083002: Remove MouseRelatedEvent (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « third_party/WebKit/Source/core/events/MouseRelatedEvent.h ('k') | third_party/WebKit/Source/core/events/TouchEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698