Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: sky/sdk/lib/framework/app.dart

Issue 1147143005: Make Drawer in components2 work (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/sdk/BUILD.gn ('k') | sky/sdk/lib/framework/components2/drawer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/framework/app.dart
diff --git a/sky/sdk/lib/framework/app.dart b/sky/sdk/lib/framework/app.dart
index 62b76d838b38b1c0ec0b2ef5f5be012f675426e1..38113d44ca55d529189a01d601bcbad4bc04d06b 100644
--- a/sky/sdk/lib/framework/app.dart
+++ b/sky/sdk/lib/framework/app.dart
@@ -7,6 +7,13 @@ import 'rendering/box.dart';
import 'rendering/node.dart';
import 'scheduler.dart' as scheduler;
+class PointerState {
+ HitTestResult result;
+ sky.Point lastPosition;
+
+ PointerState({ this.result, this.lastPosition });
+}
+
class AppView {
AppView(RenderBox root) {
@@ -24,7 +31,7 @@ class AppView {
RenderView _renderView;
- Map<int, HitTestResult> _hitTestResultForPointer = new Map<int, HitTestResult>();
+ Map<int, PointerState> _stateForPointer = new Map<int, PointerState>();
RenderBox get root => _renderView.child;
void set root(RenderBox value) {
@@ -41,28 +48,35 @@ class AppView {
}
void _handlePointerEvent(sky.PointerEvent event) {
- HitTestResult result;
+ sky.Point position = new sky.Point(event.x, event.y);
+
+ PointerState state;
switch(event.type) {
case 'pointerdown':
- result = new HitTestResult();
- _renderView.hitTest(result, position: new sky.Point(event.x, event.y));
- _hitTestResultForPointer[event.pointer] = result;
+ HitTestResult result = new HitTestResult();
+ _renderView.hitTest(result, position: position);
+ state = new PointerState(result: result, lastPosition: position);
+ _stateForPointer[event.pointer] = state;
break;
case 'pointerup':
case 'pointercancel':
- result = _hitTestResultForPointer[event.pointer];
- _hitTestResultForPointer.remove(event.pointer);
+ state = _stateForPointer[event.pointer];
+ _stateForPointer.remove(event.pointer);
break;
case 'pointermove':
- result = _hitTestResultForPointer[event.pointer];
+ state = _stateForPointer[event.pointer];
// In the case of mouse hover we won't already have a cached down.
- if (result == null) {
- result = new HitTestResult();
- _renderView.hitTest(result, position: new sky.Point(event.x, event.y));
+ if (state.result == null) {
+ state.result = new HitTestResult();
+ _renderView.hitTest(state.result, position: position);
}
break;
}
- dispatchPointerEvent(event, result);
+ event.dx = position.x - state.lastPosition.x;
+ event.dy = position.y - state.lastPosition.y;
+ state.lastPosition = position;
+
+ dispatchPointerEvent(event, state.result);
}
void dispatchPointerEvent(sky.PointerEvent event, HitTestResult result) {
« no previous file with comments | « sky/sdk/BUILD.gn ('k') | sky/sdk/lib/framework/components2/drawer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698