Bug 1105109 - Have APZCTreeManager keep track of the current mouse position. r=kats
MozReview-Commit-ID: 7o80O8rpdNS
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -981,16 +981,18 @@ APZCTreeManager::ReceiveInputEvent(Input
case MULTITOUCH_INPUT: {
MultiTouchInput& touchInput = aEvent.AsMultiTouchInput();
result = ProcessTouchInput(touchInput, aOutTargetGuid, aOutInputBlockId);
break;
} case MOUSE_INPUT: {
MouseInput& mouseInput = aEvent.AsMouseInput();
mouseInput.mHandledByAPZ = true;
+ mCurrentMousePosition = mouseInput.mOrigin;
+
bool startsDrag = DragTracker::StartsDrag(mouseInput);
if (startsDrag) {
// If this is the start of a drag we need to unambiguously know if it's
// going to land on a scrollbar or not. We can't apply an untransform
// here without knowing that, so we need to ensure the untransform is
// a no-op.
FlushRepaintsToClearScreenToGeckoTransform();
}
@@ -2473,16 +2475,22 @@ APZCTreeManager::GetApzcToGeckoTransform
// The above value for result when parent == P matches the required output
// as explained in the comment above this method. Note that any missing
// terms are guaranteed to be identity transforms.
}
return ViewAs<ParentLayerToScreenMatrix4x4>(result);
}
+ScreenPoint
+APZCTreeManager::GetCurrentMousePosition() const
+{
+ return mCurrentMousePosition;
+}
+
already_AddRefed<AsyncPanZoomController>
APZCTreeManager::GetMultitouchTarget(AsyncPanZoomController* aApzc1, AsyncPanZoomController* aApzc2) const
{
MutexAutoLock lock(mTreeLock);
RefPtr<AsyncPanZoomController> apzc;
// For now, we only ever want to do pinching on the root-content APZC for
// a given layers id.
if (aApzc1 && aApzc2 && aApzc1->GetLayersId() == aApzc2->GetLayersId()) {
--- a/gfx/layers/apz/src/APZCTreeManager.h
+++ b/gfx/layers/apz/src/APZCTreeManager.h
@@ -480,16 +480,17 @@ public:
RefPtr<HitTestingTreeNode> GetRootNode() const;
already_AddRefed<AsyncPanZoomController> GetTargetAPZC(const ScreenPoint& aPoint,
HitTestResult* aOutHitResult,
RefPtr<HitTestingTreeNode>* aOutScrollbarNode = nullptr);
already_AddRefed<AsyncPanZoomController> GetTargetAPZC(const uint64_t& aLayersId,
const FrameMetrics::ViewID& aScrollId);
ScreenToParentLayerMatrix4x4 GetScreenToApzcTransform(const AsyncPanZoomController *aApzc) const;
ParentLayerToScreenMatrix4x4 GetApzcToGeckoTransform(const AsyncPanZoomController *aApzc) const;
+ ScreenPoint GetCurrentMousePosition() const;
/**
* Process touch velocity.
* Sometimes the touch move event will have a velocity even though no scrolling
* is occurring such as when the toolbar is being hidden/shown in Fennec.
* This function can be called to have the y axis' velocity queue updated.
*/
void ProcessTouchVelocity(uint32_t aTimestampMs, float aSpeedY) override;
@@ -592,16 +593,19 @@ private:
/* Sometimes we want to ignore all touches except one. In such cases, this
* is set to the identifier of the touch we are not ignoring; in other cases,
* this is set to -1.
*/
int32_t mRetainedTouchIdentifier;
/* Tracks the number of touch points we are tracking that are currently on
* the screen. */
TouchCounter mTouchCounter;
+ /* Stores the current mouse position in screen coordinates.
+ */
+ ScreenPoint mCurrentMousePosition;
/* For logging the APZC tree for debugging (enabled by the apz.printtree
* pref). */
gfx::TreeLog mApzcTreeLog;
class CheckerboardFlushObserver;
friend class CheckerboardFlushObserver;
RefPtr<CheckerboardFlushObserver> mFlushObserver;