diff options
Diffstat (limited to 'cc/layer_tree_host.cc')
-rw-r--r-- | cc/layer_tree_host.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc index 003f130..f030a8e 100644 --- a/cc/layer_tree_host.cc +++ b/cc/layer_tree_host.cc @@ -731,25 +731,26 @@ void LayerTreeHost::applyScrollAndScale(const ScrollAndScaleSet& info) m_client->applyScrollAndScale(rootScrollDelta, info.pageScaleDelta); } -gfx::PointF LayerTreeHost::adjustEventPointForPinchZoom(const gfx::PointF& point) +gfx::PointF LayerTreeHost::adjustEventPointForPinchZoom(const gfx::PointF& zoomedViewportPoint) const { - WebKit::WebTransformationMatrix inverseImplTransform = m_implTransform; - // TODO(wjmaclean) Need to determine why the next two lines are - // necessary for this to work ... it seems like just inverting - // m_implTransform should be sufficient. - DCHECK(inverseImplTransform.m11()); - DCHECK(inverseImplTransform.m22()); - inverseImplTransform.setM41(inverseImplTransform.m41() - / inverseImplTransform.m11()); - inverseImplTransform.setM42(inverseImplTransform.m42() - / inverseImplTransform.m22()); - inverseImplTransform = inverseImplTransform.inverse(); + if (m_implTransform.isIdentity()) + return zoomedViewportPoint; + + DCHECK(m_implTransform.isInvertible()); + + // Scale to screen space before applying implTransform inverse. + gfx::PointF zoomedScreenspacePoint = gfx::ScalePoint(zoomedViewportPoint, deviceScaleFactor()); + WebKit::WebTransformationMatrix inverseImplTransform = m_implTransform.inverse(); + bool wasClipped = false; - gfx::PointF adjustedPoint = MathUtil::projectPoint(inverseImplTransform, point, wasClipped); + gfx::PointF unzoomedScreenspacePoint = MathUtil::projectPoint(inverseImplTransform, zoomedScreenspacePoint, wasClipped); DCHECK(!wasClipped); - return adjustedPoint; + // Convert back to logical pixels for hit testing. + gfx::PointF unzoomedViewportPoint = gfx::ScalePoint(unzoomedScreenspacePoint, 1 / deviceScaleFactor()); + + return unzoomedViewportPoint; } void LayerTreeHost::setImplTransform(const WebKit::WebTransformationMatrix& transform) |