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

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

Issue 2406263003: Make PointerEvent coordinates fractional for touch (Closed)
Patch Set: 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 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
index 111fa052ead619cdfb278b41160667ee4aa67287..98be463e468cc55712983bb4bdf654b441cd6051 100644
--- a/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp
@@ -74,16 +74,16 @@ MouseRelatedEvent::MouseRelatedEvent(
m_screenLocation(screenLocation),
m_movementDelta(movementDelta),
m_positionType(positionType) {
- LayoutPoint adjustedPageLocation;
- LayoutSize scrollOffset;
+ DoublePoint adjustedPageLocation;
+ DoubleSize scrollOffset;
LocalFrame* frame = view() && view()->isLocalDOMWindow()
? toLocalDOMWindow(view())->frame()
: nullptr;
if (frame && hasPosition()) {
if (FrameView* frameView = frame->view()) {
- scrollOffset = LayoutSize(frameView->scrollOffsetInt());
adjustedPageLocation = frameView->rootFrameToContents(rootFrameLocation);
+ scrollOffset = frameView->scrollOffsetInt();
float scaleFactor = 1 / frame->pageZoomFactor();
if (scaleFactor != 1.0f) {
adjustedPageLocation.scale(scaleFactor, scaleFactor);
@@ -107,18 +107,20 @@ MouseRelatedEvent::MouseRelatedEvent(
MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType,
const MouseEventInit& initializer)
: UIEventWithKeyState(eventType, initializer),
- m_screenLocation(IntPoint(initializer.screenX(), initializer.screenY())),
+ m_screenLocation(
+ DoublePoint(initializer.screenX(), initializer.screenY())),
m_movementDelta(
IntPoint(initializer.movementX(), initializer.movementY())),
m_positionType(PositionType::Position) {
- initCoordinates(IntPoint(initializer.clientX(), initializer.clientY()));
+ initCoordinates(initializer.clientX(), initializer.clientY());
}
-void MouseRelatedEvent::initCoordinates(const LayoutPoint& clientLocation) {
+void MouseRelatedEvent::initCoordinates(const double clientX,
+ const double clientY) {
// Set up initial values for coordinates.
// Correct values are computed lazily, see computeRelativePosition.
- m_clientLocation = clientLocation;
- m_pageLocation = clientLocation + contentsScrollOffset(view());
+ m_clientLocation = DoublePoint(clientX, clientY);
+ m_pageLocation = m_clientLocation + DoubleSize(contentsScrollOffset(view()));
m_layerLocation = m_pageLocation;
m_offsetLocation = m_pageLocation;
@@ -138,8 +140,7 @@ static float pageZoomFactor(const UIEvent* event) {
void MouseRelatedEvent::computePageLocation() {
float scaleFactor = pageZoomFactor(this);
- setAbsoluteLocation(
- LayoutPoint(FloatPoint(pageX() * scaleFactor, pageY() * scaleFactor)));
+ m_absoluteLocation = m_pageLocation.scaledBy(scaleFactor);
}
void MouseRelatedEvent::receivedTarget() {
@@ -187,7 +188,7 @@ void MouseRelatedEvent::computeRelativePosition() {
localPos.move(-layoutBox->borderLeft(), -layoutBox->borderTop());
}
- m_offsetLocation = LayoutPoint(localPos);
+ m_offsetLocation = DoublePoint(localPos);
float scaleFactor = 1 / pageZoomFactor(this);
if (scaleFactor != 1.0f)
m_offsetLocation.scale(scaleFactor, scaleFactor);
@@ -204,8 +205,10 @@ void MouseRelatedEvent::computeRelativePosition() {
if (n) {
// FIXME: This logic is a wrong implementation of convertToLayerCoords.
for (PaintLayer* layer = n->layoutObject()->enclosingLayer(); layer;
- layer = layer->parent())
- m_layerLocation -= toLayoutSize(layer->location());
+ layer = layer->parent()) {
+ m_layerLocation -= DoubleSize(layer->location().x().toDouble(),
+ layer->location().y().toDouble());
+ }
}
m_hasCachedRelativePosition = true;
@@ -214,13 +217,21 @@ void MouseRelatedEvent::computeRelativePosition() {
int MouseRelatedEvent::layerX() {
if (!m_hasCachedRelativePosition)
computeRelativePosition();
- return m_layerLocation.x().toInt();
+
+ // 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();
- return m_layerLocation.y().toInt();
+
+ // 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() {
@@ -228,7 +239,7 @@ int MouseRelatedEvent::offsetX() {
return 0;
if (!m_hasCachedRelativePosition)
computeRelativePosition();
- return roundToInt(m_offsetLocation.x());
+ return std::round(m_offsetLocation.x());
}
int MouseRelatedEvent::offsetY() {
@@ -236,29 +247,7 @@ int MouseRelatedEvent::offsetY() {
return 0;
if (!m_hasCachedRelativePosition)
computeRelativePosition();
- return roundToInt(m_offsetLocation.y());
-}
-
-int MouseRelatedEvent::pageX() const {
- return m_pageLocation.x().toInt();
-}
-
-int MouseRelatedEvent::pageY() const {
- return m_pageLocation.y().toInt();
-}
-
-int MouseRelatedEvent::x() const {
- // FIXME: This is not correct.
- // See Microsoft documentation and
- // <http://www.quirksmode.org/dom/w3c_events.html>.
- return m_clientLocation.x().toInt();
-}
-
-int MouseRelatedEvent::y() const {
- // FIXME: This is not correct.
- // See Microsoft documentation and
- // <http://www.quirksmode.org/dom/w3c_events.html>.
- return m_clientLocation.y().toInt();
+ return std::round(m_offsetLocation.y());
}
DEFINE_TRACE(MouseRelatedEvent) {

Powered by Google App Engine
This is Rietveld 408576698