| Index: sky/sdk/lib/rendering/sky_binding.dart
|
| diff --git a/sky/sdk/lib/rendering/sky_binding.dart b/sky/sdk/lib/rendering/sky_binding.dart
|
| index 1dc76019fc14fda318a4f9ce1a42f09667bdb8a1..b18ca94c9b37b4f67284b4eef683fa96ab1f0c5f 100644
|
| --- a/sky/sdk/lib/rendering/sky_binding.dart
|
| +++ b/sky/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];
|
|
|