зеркало из https://github.com/mozilla/gecko-dev.git
Bug 962243 - Implement PINCH to TOUCHING transition in APZC. r=botond
--HG-- extra : commitid : FoHvf2KH9rd
This commit is contained in:
Родитель
201e5d02a4
Коммит
8df43f8eae
|
@ -1548,6 +1548,14 @@ nsEventStatus AsyncPanZoomController::OnScaleEnd(const PinchGestureInput& aEvent
|
|||
UpdateSharedCompositorFrameMetrics();
|
||||
}
|
||||
|
||||
// Non-negative focus point would indicate that one finger is still down
|
||||
if (aEvent.mFocusPoint.x != -1 && aEvent.mFocusPoint.y != -1) {
|
||||
mPanDirRestricted = false;
|
||||
mX.StartTouch(aEvent.mFocusPoint.x, aEvent.mTime);
|
||||
mY.StartTouch(aEvent.mFocusPoint.y, aEvent.mTime);
|
||||
SetState(TOUCHING);
|
||||
}
|
||||
|
||||
return nsEventStatus_eConsumeNoDefault;
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,13 @@ nsEventStatus GestureEventListener::HandleInputEvent(const MultiTouchInput& aEve
|
|||
}
|
||||
break;
|
||||
case MultiTouchInput::MULTITOUCH_MOVE:
|
||||
for (size_t i = 0; i < aEvent.mTouches.Length(); i++) {
|
||||
for (size_t j = 0; j < mTouches.Length(); j++) {
|
||||
if (aEvent.mTouches[i].mIdentifier == mTouches[j].mIdentifier) {
|
||||
mTouches[j].mScreenPoint = aEvent.mTouches[i].mScreenPoint;
|
||||
}
|
||||
}
|
||||
}
|
||||
rv = HandleInputTouchMove();
|
||||
break;
|
||||
case MultiTouchInput::MULTITOUCH_END:
|
||||
|
@ -375,10 +382,16 @@ nsEventStatus GestureEventListener::HandleInputTouchEnd()
|
|||
case GESTURE_PINCH:
|
||||
if (mTouches.Length() < 2) {
|
||||
SetState(GESTURE_NONE);
|
||||
ScreenPoint point(-1, -1);
|
||||
if (mTouches.Length() == 1) {
|
||||
// As user still keeps one finger down the event's focus point should
|
||||
// contain meaningful data.
|
||||
point = mTouches[0].mScreenPoint;
|
||||
}
|
||||
PinchGestureInput pinchEvent(PinchGestureInput::PINCHGESTURE_END,
|
||||
mLastTouchInput.mTime,
|
||||
mLastTouchInput.mTimeStamp,
|
||||
ScreenPoint(),
|
||||
point,
|
||||
1.0f,
|
||||
1.0f,
|
||||
mLastTouchInput.modifiers);
|
||||
|
|
|
@ -455,6 +455,9 @@ public:
|
|||
// point is implementation-specific, but can for example be the midpoint
|
||||
// between the very first and very last touch. This is in device pixels and
|
||||
// are the coordinates on the screen of this midpoint.
|
||||
// For PINCHGESTURE_END events, this instead will hold the coordinates of
|
||||
// the remaining finger, if there is one. If there isn't one then it will
|
||||
// store -1, -1.
|
||||
ScreenPoint mFocusPoint;
|
||||
|
||||
// |mFocusPoint| transformed to the local coordinates of the APZC targeted
|
||||
|
|
Загрузка…
Ссылка в новой задаче