author | Kevin Wern <kevin.m.wern@gmail.com> |
Wed, 02 Nov 2016 04:45:09 -0400 | |
changeset 321076 | 720fa40353a7e2c671c0fae81865b4deb573f64a |
parent 321075 | 2a1b034ed3fb496b52ae8f4b55e3a18f44a81c29 |
child 321077 | 579eddccb01aafc9ece22a1b69530a03c8c2a79d |
push id | 30915 |
push user | philringnalda@gmail.com |
push date | Sat, 05 Nov 2016 03:42:29 +0000 |
treeherder | mozilla-central@a7c654513f2f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | botond |
bugs | 1249710 |
milestone | 52.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp +++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp @@ -828,45 +828,63 @@ AsyncPanZoomController::ArePointerEvents bool consumable = (aTouchPoints == 1 ? pannable : zoomable); if (!consumable) { return false; } return true; } -template <typename T> -static float GetAxisStart(AsyncDragMetrics::DragDirection aDir, T aValue) { +template <typename Units> +static CoordTyped<Units> GetAxisStart(AsyncDragMetrics::DragDirection aDir, const PointTyped<Units>& aValue) { + if (aDir == AsyncDragMetrics::HORIZONTAL) { + return aValue.x; + } else { + return aValue.y; + } +} + +template <typename Units> +static CoordTyped<Units> GetAxisStart(AsyncDragMetrics::DragDirection aDir, const RectTyped<Units>& aValue) { if (aDir == AsyncDragMetrics::HORIZONTAL) { return aValue.x; } else { return aValue.y; } } -template <typename T> -static float GetAxisEnd(AsyncDragMetrics::DragDirection aDir, T aValue) { +template <typename Units> +static IntCoordTyped<Units> GetAxisStart(AsyncDragMetrics::DragDirection aDir, const IntRectTyped<Units>& aValue) { + if (aDir == AsyncDragMetrics::HORIZONTAL) { + return aValue.x; + } else { + return aValue.y; + } +} + +template <typename Units> +static IntCoordTyped<Units> GetAxisEnd(AsyncDragMetrics::DragDirection aDir, const IntRectTyped<Units>& aValue) { if (aDir == AsyncDragMetrics::HORIZONTAL) { return aValue.x + aValue.width; } else { return aValue.y + aValue.height; } } -template <typename T> -static float GetAxisSize(AsyncDragMetrics::DragDirection aDir, T aValue) { +template <typename Units> +static CoordTyped<Units> GetAxisSize(AsyncDragMetrics::DragDirection aDir, const RectTyped<Units>& aValue) { if (aDir == AsyncDragMetrics::HORIZONTAL) { return aValue.width; } else { return aValue.height; } } -template <typename T> -static float GetAxisScale(AsyncDragMetrics::DragDirection aDir, T aValue) { +template <typename FromUnits, typename ToUnits> +static float GetAxisScale(AsyncDragMetrics::DragDirection aDir, const ScaleFactors2D<FromUnits, ToUnits>& aValue) { if (aDir == AsyncDragMetrics::HORIZONTAL) { return aValue.xScale; } else { return aValue.yScale; } } nsEventStatus AsyncPanZoomController::HandleDragEvent(const MouseInput& aEvent, @@ -891,34 +909,34 @@ nsEventStatus AsyncPanZoomController::Ha ReentrantMonitorAutoEnter lock(mMonitor); CSSPoint scrollFramePoint = aEvent.mLocalOrigin / GetFrameMetrics().GetZoom(); // The scrollbar can be transformed with the frame but the pres shell // resolution is only applied to the scroll frame. CSSPoint scrollbarPoint = scrollFramePoint * mFrameMetrics.GetPresShellResolution(); CSSRect cssCompositionBound = mFrameMetrics.CalculateCompositedRectInCssPixels(); - float mousePosition = GetAxisStart(aDragMetrics.mDirection, scrollbarPoint) - - aDragMetrics.mScrollbarDragOffset - + CSSCoord mousePosition = GetAxisStart(aDragMetrics.mDirection, scrollbarPoint) - + CSSCoord(aDragMetrics.mScrollbarDragOffset) - GetAxisStart(aDragMetrics.mDirection, cssCompositionBound) - - GetAxisStart(aDragMetrics.mDirection, aDragMetrics.mScrollTrack); - - float scrollMax = GetAxisEnd(aDragMetrics.mDirection, aDragMetrics.mScrollTrack); + CSSCoord(GetAxisStart(aDragMetrics.mDirection, aDragMetrics.mScrollTrack)); + + CSSCoord scrollMax = CSSCoord(GetAxisEnd(aDragMetrics.mDirection, aDragMetrics.mScrollTrack)); scrollMax -= node->GetScrollSize() / GetAxisScale(aDragMetrics.mDirection, mFrameMetrics.GetZoom()) * mFrameMetrics.GetPresShellResolution(); float scrollPercent = mousePosition / scrollMax; - float minScrollPosition = + CSSCoord minScrollPosition = GetAxisStart(aDragMetrics.mDirection, mFrameMetrics.GetScrollableRect().TopLeft()); - float maxScrollPosition = + CSSCoord maxScrollPosition = GetAxisSize(aDragMetrics.mDirection, mFrameMetrics.GetScrollableRect()) - - GetAxisSize(aDragMetrics.mDirection, mFrameMetrics.GetCompositionBounds()); - float scrollPosition = scrollPercent * maxScrollPosition; + GetAxisSize(aDragMetrics.mDirection, cssCompositionBound); + CSSCoord scrollPosition = scrollPercent * maxScrollPosition; scrollPosition = std::max(scrollPosition, minScrollPosition); scrollPosition = std::min(scrollPosition, maxScrollPosition); CSSPoint scrollOffset = mFrameMetrics.GetScrollOffset(); if (aDragMetrics.mDirection == AsyncDragMetrics::HORIZONTAL) { scrollOffset.x = scrollPosition; } else {