mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1174532 - Even if the APZC is not pannable, have a small slop area to consume touchmove events. r=botond
This commit is contained in:
parent
13c6fac078
commit
b84ed986fc
@ -1028,6 +1028,10 @@ pref("apz.fling_friction", "0.0019");
|
||||
pref("apz.max_velocity_inches_per_ms", "0.07");
|
||||
pref("apz.touch_start_tolerance", "0.1");
|
||||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
pref("apz.touch_move_tolerance", "0.03");
|
||||
#endif
|
||||
|
||||
// Tweak default displayport values to reduce the risk of running out of
|
||||
// memory when zooming in
|
||||
pref("apz.x_skate_size_multiplier", "1.25");
|
||||
|
@ -290,11 +290,19 @@ using mozilla::gfx::PointTyped;
|
||||
* \li\b apz.test.logging_enabled
|
||||
* Enable logging of APZ test data (see bug 961289).
|
||||
*
|
||||
* \li\b apz.touch_move_tolerance
|
||||
* See the description for apz.touch_start_tolerance below. This is a similar
|
||||
* threshold, except it is used to suppress touchmove events from being delivered
|
||||
* to content for NON-scrollable frames (or more precisely, for APZCs where
|
||||
* ArePointerEventsConsumable returns false).\n
|
||||
* Units: (real-world, i.e. screen) inches
|
||||
*
|
||||
* \li\b apz.touch_start_tolerance
|
||||
* Constant describing the tolerance in distance we use, multiplied by the
|
||||
* device DPI, before we start panning the screen. This is to prevent us from
|
||||
* accidentally processing taps as touch moves, and from very short/accidental
|
||||
* touches moving the screen.\n
|
||||
* touches moving the screen. touchmove events are also not delivered to content
|
||||
* within this distance on scrollable frames.\n
|
||||
* Units: (real-world, i.e. screen) inches
|
||||
*
|
||||
* \li\b apz.use_paint_duration
|
||||
|
@ -831,7 +831,8 @@ TouchBlockState::TouchActionAllowsPanningXY() const
|
||||
}
|
||||
|
||||
bool
|
||||
TouchBlockState::UpdateSlopState(const MultiTouchInput& aInput)
|
||||
TouchBlockState::UpdateSlopState(const MultiTouchInput& aInput,
|
||||
bool aApzcCanConsumeEvents)
|
||||
{
|
||||
if (aInput.mType == MultiTouchInput::MULTITOUCH_START) {
|
||||
// this is by definition the first event in this block. If it's the first
|
||||
@ -844,10 +845,12 @@ TouchBlockState::UpdateSlopState(const MultiTouchInput& aInput)
|
||||
return false;
|
||||
}
|
||||
if (mInSlop) {
|
||||
ScreenCoord threshold = aApzcCanConsumeEvents
|
||||
? AsyncPanZoomController::GetTouchStartTolerance()
|
||||
: ScreenCoord(gfxPrefs::APZTouchMoveTolerance() * APZCTreeManager::GetDPI());
|
||||
bool stayInSlop = (aInput.mType == MultiTouchInput::MULTITOUCH_MOVE) &&
|
||||
(aInput.mTouches.Length() == 1) &&
|
||||
((aInput.mTouches[0].mScreenPoint - mSlopOrigin).Length() <
|
||||
AsyncPanZoomController::GetTouchStartTolerance());
|
||||
((aInput.mTouches[0].mScreenPoint - mSlopOrigin).Length() < threshold);
|
||||
if (!stayInSlop) {
|
||||
// we're out of the slop zone, and will stay out for the remainder of
|
||||
// this block
|
||||
|
@ -434,11 +434,13 @@ public:
|
||||
* Notifies the input block of an incoming touch event so that the block can
|
||||
* update its internal slop state. "Slop" refers to the area around the
|
||||
* initial touchstart where we drop touchmove events so that content doesn't
|
||||
* see them.
|
||||
* see them. The |aApzcCanConsumeEvents| parameter is factored into how large
|
||||
* the slop area is - if this is true the slop area is larger.
|
||||
* @return true iff the provided event is a touchmove in the slop area and
|
||||
* so should not be sent to content.
|
||||
*/
|
||||
bool UpdateSlopState(const MultiTouchInput& aInput);
|
||||
bool UpdateSlopState(const MultiTouchInput& aInput,
|
||||
bool aApzcCanConsumeEvents);
|
||||
|
||||
bool HasEvents() const override;
|
||||
void DropEvents() override;
|
||||
|
@ -160,12 +160,15 @@ InputQueue::ReceiveTouchInput(const RefPtr<AsyncPanZoomController>& aTarget,
|
||||
INPQ_LOG("dropping event due to block %p being in fast motion\n", block);
|
||||
result = nsEventStatus_eConsumeNoDefault;
|
||||
} else if (target && target->ArePointerEventsConsumable(block, aEvent.AsMultiTouchInput().mTouches.Length())) {
|
||||
if (block->UpdateSlopState(aEvent.AsMultiTouchInput())) {
|
||||
if (block->UpdateSlopState(aEvent.AsMultiTouchInput(), true)) {
|
||||
INPQ_LOG("dropping event due to block %p being in slop\n", block);
|
||||
result = nsEventStatus_eConsumeNoDefault;
|
||||
} else {
|
||||
result = nsEventStatus_eConsumeDoDefault;
|
||||
}
|
||||
} else if (block->UpdateSlopState(aEvent.AsMultiTouchInput(), false)) {
|
||||
INPQ_LOG("dropping event due to block %p being in mini-slop\n", block);
|
||||
result = nsEventStatus_eConsumeNoDefault;
|
||||
}
|
||||
if (!MaybeHandleCurrentBlock(block, aEvent)) {
|
||||
block->AddEvent(aEvent.AsMultiTouchInput());
|
||||
|
@ -181,6 +181,7 @@ private:
|
||||
DECL_GFX_PREF(Live, "apz.printtree", APZPrintTree, bool, false);
|
||||
DECL_GFX_PREF(Live, "apz.smooth_scroll_repaint_interval", APZSmoothScrollRepaintInterval, int32_t, 75);
|
||||
DECL_GFX_PREF(Live, "apz.test.logging_enabled", APZTestLoggingEnabled, bool, false);
|
||||
DECL_GFX_PREF(Live, "apz.touch_move_tolerance", APZTouchMoveTolerance, float, 0.0);
|
||||
DECL_GFX_PREF(Live, "apz.touch_start_tolerance", APZTouchStartTolerance, float, 1.0f/4.5f);
|
||||
DECL_GFX_PREF(Live, "apz.use_paint_duration", APZUsePaintDuration, bool, true);
|
||||
DECL_GFX_PREF(Live, "apz.velocity_bias", APZVelocityBias, float, 1.0f);
|
||||
|
@ -588,6 +588,7 @@ pref("apz.printtree", false);
|
||||
|
||||
pref("apz.test.logging_enabled", false);
|
||||
pref("apz.touch_start_tolerance", "0.2222222"); // 0.2222222 came from 1.0/4.5
|
||||
pref("apz.touch_move_tolerance", "0.0");
|
||||
pref("apz.use_paint_duration", true);
|
||||
pref("apz.velocity_bias", "1.0");
|
||||
pref("apz.velocity_relevance_time_ms", 150);
|
||||
|
Loading…
Reference in New Issue
Block a user