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

Side by Side Diff: third_party/WebKit/Source/core/events/MouseRelatedEvent.h

Issue 2406263003: Make PointerEvent coordinates fractional for touch (Closed)
Patch Set: Fixed test values in {mouse,wheel}-event-constructor.html. Rebased. Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 2 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3 * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) 3 * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 4 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc. 5 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 23 matching lines...) Expand all
34 // Internal only: Helper class for what's common between mouse and wheel events. 34 // Internal only: Helper class for what's common between mouse and wheel events.
35 class CORE_EXPORT MouseRelatedEvent : public UIEventWithKeyState { 35 class CORE_EXPORT MouseRelatedEvent : public UIEventWithKeyState {
36 public: 36 public:
37 enum class PositionType { 37 enum class PositionType {
38 Position, 38 Position,
39 // Positionless mouse events are used, for example, for 'click' events from 39 // Positionless mouse events are used, for example, for 'click' events from
40 // keyboard input. It's kind of surprising for a mouse event not to have a 40 // keyboard input. It's kind of surprising for a mouse event not to have a
41 // position. 41 // position.
42 Positionless 42 Positionless
43 }; 43 };
44
44 // Note that these values are adjusted to counter the effects of zoom, so that 45 // Note that these values are adjusted to counter the effects of zoom, so that
45 // values exposed via DOM APIs are invariant under zooming. 46 // values exposed via DOM APIs are invariant under zooming.
46 int screenX() const { return m_screenLocation.x(); } 47 // TODO(mustaq): Remove the PointerEvent specific code when mouse has
47 int screenY() const { return m_screenLocation.y(); } 48 // fractional coordinates. See crbug.com/655786.
48 const IntPoint& screenLocation() const { return m_screenLocation; } 49 double screenX() const {
49 int clientX() const { return m_clientLocation.x().toInt(); } 50 return isPointerEvent() ? m_screenLocation.x()
50 int clientY() const { return m_clientLocation.y().toInt(); } 51 : static_cast<int>(m_screenLocation.x());
51 int movementX() const { return m_movementDelta.x().toInt(); } 52 }
52 int movementY() const { return m_movementDelta.y().toInt(); } 53 double screenY() const {
53 const LayoutPoint& clientLocation() const { return m_clientLocation; } 54 return isPointerEvent() ? m_screenLocation.y()
55 : static_cast<int>(m_screenLocation.y());
56 }
57
58 double clientX() const {
59 return isPointerEvent() ? m_clientLocation.x()
60 : static_cast<int>(m_clientLocation.x());
61 }
62 double clientY() const {
63 return isPointerEvent() ? m_clientLocation.y()
64 : static_cast<int>(m_clientLocation.y());
65 }
66
67 int movementX() const { return m_movementDelta.x(); }
68 int movementY() const { return m_movementDelta.y(); }
69
54 int layerX(); 70 int layerX();
55 int layerY(); 71 int layerY();
72
56 int offsetX(); 73 int offsetX();
57 int offsetY(); 74 int offsetY();
58 int pageX() const; 75
59 int pageY() const; 76 double pageX() const {
60 int x() const; 77 return isPointerEvent() ? m_pageLocation.x()
61 int y() const; 78 : static_cast<int>(m_pageLocation.x());
79 }
80 double pageY() const {
81 return isPointerEvent() ? m_pageLocation.y()
82 : static_cast<int>(m_pageLocation.y());
83 }
84
85 double x() const { return clientX(); }
86 double y() const { return clientY(); }
87
62 bool hasPosition() const { return m_positionType == PositionType::Position; } 88 bool hasPosition() const { return m_positionType == PositionType::Position; }
63 89
64 // Page point in "absolute" coordinates (i.e. post-zoomed, page-relative 90 // Page point in "absolute" coordinates (i.e. post-zoomed, page-relative
65 // coords, usable with LayoutObject::absoluteToLocal) relative to view(), i.e. 91 // coords, usable with LayoutObject::absoluteToLocal) relative to view(), i.e.
66 // the local frame. 92 // the local frame.
67 const LayoutPoint& absoluteLocation() const { return m_absoluteLocation; } 93 const DoublePoint& absoluteLocation() const { return m_absoluteLocation; }
68 void setAbsoluteLocation(const LayoutPoint& p) { m_absoluteLocation = p; }
69 94
70 DECLARE_VIRTUAL_TRACE(); 95 DECLARE_VIRTUAL_TRACE();
71 96
72 protected: 97 protected:
73 MouseRelatedEvent(); 98 MouseRelatedEvent();
74 // TODO(lanwei): Will make this argument non-optional and all the callers need 99 // TODO(lanwei): Will make this argument non-optional and all the callers need
75 // to provide sourceCapabilities even when it is null, see 100 // to provide sourceCapabilities even when it is null, see
76 // https://crbug.com/476530. 101 // https://crbug.com/476530.
77 MouseRelatedEvent(const AtomicString& type, 102 MouseRelatedEvent(const AtomicString& type,
78 bool canBubble, 103 bool canBubble,
79 bool cancelable, 104 bool cancelable,
80 AbstractView*, 105 AbstractView*,
81 int detail, 106 int detail,
82 const IntPoint& screenLocation, 107 const IntPoint& screenLocation,
83 const IntPoint& rootFrameLocation, 108 const IntPoint& rootFrameLocation,
84 const IntPoint& movementDelta, 109 const IntPoint& movementDelta,
85 PlatformEvent::Modifiers, 110 PlatformEvent::Modifiers,
86 double platformTimeStamp, 111 double platformTimeStamp,
87 PositionType, 112 PositionType,
88 InputDeviceCapabilities* sourceCapabilities = nullptr); 113 InputDeviceCapabilities* sourceCapabilities = nullptr);
89 114
90 MouseRelatedEvent(const AtomicString& type, 115 MouseRelatedEvent(const AtomicString& type,
91 const MouseEventInit& initializer); 116 const MouseEventInit& initializer);
92 117
93 void initCoordinates(const LayoutPoint& clientLocation); 118 void initCoordinates(const double clientX, const double clientY);
94 void receivedTarget() final; 119 void receivedTarget() final;
95 120
96 void computePageLocation(); 121 void computePageLocation();
97 void computeRelativePosition(); 122 void computeRelativePosition();
98 123
99 // Expose these so MouseEvent::initMouseEvent can set them. 124 // Expose these so MouseEvent::initMouseEvent can set them.
100 IntPoint m_screenLocation; 125 DoublePoint m_screenLocation;
101 LayoutPoint m_clientLocation; 126 DoublePoint m_clientLocation;
102 LayoutPoint m_movementDelta; 127 DoublePoint m_movementDelta;
103 128
104 private: 129 private:
105 LayoutPoint m_pageLocation; 130 DoublePoint m_pageLocation;
bokan 2016/11/15 12:55:39 Why double? We've recently settled the debate abou
mustaq 2016/11/15 15:21:15 I learned somewhere that floats can't represent in
bokan 2016/11/15 15:26:00 See crbug.com/470718 for the debate. LayoutPoint i
mustaq 2016/11/15 16:51:39 Done. I understand that the float vs Layout discu
106 LayoutPoint m_layerLocation; 131 DoublePoint m_layerLocation;
107 LayoutPoint m_offsetLocation; 132 DoublePoint m_offsetLocation;
108 LayoutPoint m_absoluteLocation; 133 DoublePoint m_absoluteLocation;
109 PositionType m_positionType; 134 PositionType m_positionType;
110 bool m_hasCachedRelativePosition; 135 bool m_hasCachedRelativePosition;
111 }; 136 };
112 137
113 } // namespace blink 138 } // namespace blink
114 139
115 #endif // MouseRelatedEvent_h 140 #endif // MouseRelatedEvent_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/events/MouseEventInit.idl ('k') | third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698