diff --git a/sdk/lib/rendering/sky_binding.dart b/sdk/lib/rendering/sky_binding.dart index 1dc76019fc14fda318a4f9ce1a42f09667bdb8a1..b18ca94c9b37b4f67284b4eef683fa96ab1f0c5f 100644 --- a/sdk/lib/rendering/sky_binding.dart +++ b/sdk/lib/rendering/sky_binding.dart @@ -9,6 +9,17 @@ import '../base/hit_test.dart'; import 'box.dart'; import 'object.dart'; +int _hammingWeight(int value) { + if (value == 0) + return 0; + int weight = 0; + for (int i = 0; i < value.bitLength; ++i) { + if (value & (1 << i) != 0) + ++weight; + } + return weight; +} + class PointerState { PointerState({ this.result, this.lastPosition }); HitTestResult result; @@ -104,7 +115,8 @@ class SkyBinding { case 'pointerup': case 'pointercancel': state = _stateForPointer[event.pointer]; - _stateForPointer.remove(event.pointer); + if (_hammingWeight(event.buttons) <= 1) + _stateForPointer.remove(event.pointer); break; case 'pointermove': state = _stateForPointer[event.pointer];