diff --git a/examples/fn2/container.dart b/examples/fn2/container.dart index 0be6f50cf889814ba67353f64e5268d5541e6c2e..5abda8572005943525628d545c68a98343de998d 100644 --- a/examples/fn2/container.dart +++ b/examples/fn2/container.dart @@ -38,12 +38,17 @@ class ContainerApp extends App { ), ])), ]), - onPointerDown: _handlePointerDown); + onPointerDown: _handlePointerDown, + onGestureTap: _handleGestureTap); } void _handlePointerDown(sky.PointerEvent event) { print("_handlePointerDown"); } + + void _handleGestureTap(sky.GestureEvent event) { + print("_handleGestureTap"); + } } void main() { diff --git a/examples/game/lib/sprite_box.dart b/examples/game/lib/sprite_box.dart index 5658dbd5b34fe0050f9b85057e86bb0bf264e836..6926200aed8e81103f9324bdd8e24f7781fc78ae 100644 --- a/examples/game/lib/sprite_box.dart +++ b/examples/game/lib/sprite_box.dart @@ -41,7 +41,7 @@ class SpriteBox extends RenderBox { size = constraints.constrain(new Size.infinite()); } - void handlePointer(PointerEvent event) { + void handleEvent(Event event) { switch (event.type) { case 'pointerdown': print("pointerdown"); diff --git a/examples/raw/ink_well.dart b/examples/raw/ink_well.dart index d2ff9f82289a06ea7aadbb7ad5b0af693c41ba3e..27eb60b23cdee6203f099e06eb6dff2e89da5899 100644 --- a/examples/raw/ink_well.dart +++ b/examples/raw/ink_well.dart @@ -41,7 +41,7 @@ class InkSplash { class InkWell extends RenderBox { final List _splashes = new List(); - void handlePointer(sky.PointerEvent event) { + void handleEvent(sky.Event event) { switch (event.type) { case 'pointerdown': _splashes.add(new InkSplash(position: new sky.Point(event.x, event.y), diff --git a/examples/raw/sector_layout.dart b/examples/raw/sector_layout.dart index 21a1bfa4347b6f5672cf363d01a6762a39fe7cc8..f43ee5a1eeb06e8fed244fc21d8f0c954ba3df9d 100644 --- a/examples/raw/sector_layout.dart +++ b/examples/raw/sector_layout.dart @@ -482,7 +482,7 @@ class RenderSolidColor extends RenderDecoratedSector { deltaTheta = constraints.constrainDeltaTheta(desiredDeltaTheta); } - void handlePointer(sky.PointerEvent event) { + void handleEvent(sky.Event event) { if (event.type == 'pointerdown') decoration = new BoxDecoration(backgroundColor: const sky.Color(0xFFFF0000)); else if (event.type == 'pointerup') diff --git a/examples/raw/touch_demo.dart b/examples/raw/touch_demo.dart index f4c565940490c075c2abea5e51e122e4d23337ea..58caeea12e03ccde2a757d45696db59d0e816f93 100644 --- a/examples/raw/touch_demo.dart +++ b/examples/raw/touch_demo.dart @@ -42,7 +42,7 @@ class RenderTouchDemo extends RenderBox { RenderTouchDemo(); - void handlePointer(PointerEvent event) { + void handleEvent(sky.Event event) { switch (event.type) { case 'pointerdown': int color = colors[event.pointer.remainder(colors.length)]; diff --git a/examples/stocks2/lib/stock_app.dart b/examples/stocks2/lib/stock_app.dart index cefb468608c273753bef047aab35c3fd7a80ff93..de1fa38f5088c2404e63380d2f8f9ef3b395a048 100644 --- a/examples/stocks2/lib/stock_app.dart +++ b/examples/stocks2/lib/stock_app.dart @@ -164,7 +164,7 @@ class StocksApp extends App { return new ToolBar( left: new IconButton( icon: 'navigation/menu_white', - onGestureTap: (_) => _drawerController.toggle), + onGestureTap: _drawerController.toggle), center: new Text('Stocks'), right: [ new IconButton( diff --git a/sdk/lib/framework/app.dart b/sdk/lib/framework/app.dart index 38113d44ca55d529189a01d601bcbad4bc04d06b..f0dce51ce55edfb4e2f143bd55ae33d7a9ee5303 100644 --- a/sdk/lib/framework/app.dart +++ b/sdk/lib/framework/app.dart @@ -43,8 +43,21 @@ class AppView { } void _handleEvent(sky.Event event) { - if (event is sky.PointerEvent) + if (event is sky.PointerEvent) { _handlePointerEvent(event); + } else if (event is sky.GestureEvent) { + HitTestResult result = new HitTestResult(); + _renderView.hitTest(result, position: new sky.Point(event.x, event.y)); + dispatchEvent(event, result); + } + } + + PointerState _createStateForPointer(sky.PointerEvent event, sky.Point position) { + HitTestResult result = new HitTestResult(); + _renderView.hitTest(result, position: position); + PointerState state = new PointerState(result: result, lastPosition: position); + _stateForPointer[event.pointer] = state; + return state; } void _handlePointerEvent(sky.PointerEvent event) { @@ -53,10 +66,7 @@ class AppView { PointerState state; switch(event.type) { case 'pointerdown': - HitTestResult result = new HitTestResult(); - _renderView.hitTest(result, position: position); - state = new PointerState(result: result, lastPosition: position); - _stateForPointer[event.pointer] = state; + state = _createStateForPointer(event, position); break; case 'pointerup': case 'pointercancel': @@ -66,22 +76,20 @@ class AppView { case 'pointermove': state = _stateForPointer[event.pointer]; // In the case of mouse hover we won't already have a cached down. - if (state.result == null) { - state.result = new HitTestResult(); - _renderView.hitTest(state.result, position: position); - } + if (state == null) + state = _createStateForPointer(event, position); break; } event.dx = position.x - state.lastPosition.x; event.dy = position.y - state.lastPosition.y; state.lastPosition = position; - dispatchPointerEvent(event, state.result); + dispatchEvent(event, state.result); } - void dispatchPointerEvent(sky.PointerEvent event, HitTestResult result) { + void dispatchEvent(sky.Event event, HitTestResult result) { assert(result != null); for (RenderNode node in result.path.reversed) - node.handlePointer(event); + node.handleEvent(event); } } diff --git a/sdk/lib/framework/fn2.dart b/sdk/lib/framework/fn2.dart index fe1bf71df316c279cc16a66df3d074a5e37cfd65..77fde9afa1620bbc00a1f983ab1d583d09d34f08 100644 --- a/sdk/lib/framework/fn2.dart +++ b/sdk/lib/framework/fn2.dart @@ -915,8 +915,8 @@ class Container extends Component { class _AppView extends AppView { _AppView() : super(null); - void dispatchPointerEvent(sky.PointerEvent event, HitTestResult result) { - super.dispatchPointerEvent(event, result); + void dispatchEvent(sky.Event event, HitTestResult result) { + super.dispatchEvent(event, result); UINode target = RenderNodeWrapper._getMounted(result.path.first); diff --git a/sdk/lib/framework/rendering/node.dart b/sdk/lib/framework/rendering/node.dart index 9d6248eaf7e4037cb6e61c56b8421b413b61f357..07cf57cdfa457499aeadf0c4cfb7c0fc076a6a16 100644 --- a/sdk/lib/framework/rendering/node.dart +++ b/sdk/lib/framework/rendering/node.dart @@ -180,13 +180,16 @@ abstract class RenderNode extends AbstractNode { void paint(RenderNodeDisplayList canvas) { } - // HIT TESTING + // EVENTS - void handlePointer(sky.PointerEvent event) { + void handleEvent(sky.Event event) { // override this if you have a client, to hand it to the client - // override this if you want to do anything with the pointer event + // override this if you want to do anything with the event } + + // HIT TESTING + // RenderNode subclasses are expected to have a method like the // following (with the signature being whatever passes for coordinates // for this particular class): diff --git a/tests/raw/render_flex.dart b/tests/raw/render_flex.dart index 2713b150e97729337eb160106670767b2d1fa65a..47a1b0c481a18fc71eff990402783fefb5e865b6 100644 --- a/tests/raw/render_flex.dart +++ b/tests/raw/render_flex.dart @@ -28,7 +28,7 @@ class RenderSolidColor extends RenderDecoratedBox { size = constraints.constrain(desiredSize); } - void handlePointer(sky.PointerEvent event) { + void handleEvent(sky.Event event) { if (event.type == 'pointerdown') decoration = new BoxDecoration(backgroundColor: const sky.Color(0xFFFF0000)); else if (event.type == 'pointerup')