提交 16f8b216 编写于 作者: A Adam Barth

Fix gesture events in fn2

This CL makes gesture events work again in fn2.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1146923005
上级 80786656
......@@ -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() {
......
......@@ -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");
......
......@@ -41,7 +41,7 @@ class InkSplash {
class InkWell extends RenderBox {
final List<InkSplash> _splashes = new List<InkSplash>();
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),
......
......@@ -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')
......
......@@ -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)];
......
......@@ -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(
......
......@@ -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);
}
}
......@@ -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);
......
......@@ -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):
......
......@@ -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')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册