Commit 051354ae authored by Adam Barth's avatar Adam Barth

Remove EventDisposition

All the use cases for EventDisposition are now addressed by the gesture
detection system.
parent 1976ae1d
......@@ -16,7 +16,7 @@ AssetBundle _initBundle() {
final AssetBundle _bundle = _initBundle();
EventDisposition launch(String relativeUrl, String bundle) {
void launch(String relativeUrl, String bundle) {
// TODO(eseidel): This is a hack to keep non-skyx examples working for now:
Uri productionBase = Uri.parse(
'https://domokit.github.io/example/demo_launcher/lib/main.dart');
......@@ -40,7 +40,6 @@ EventDisposition launch(String relativeUrl, String bundle) {
}
activity.startActivity(intent);
return EventDisposition.processed;
}
class SkyDemo {
......
......@@ -80,12 +80,11 @@ class FeedFragment extends StatefulComponent {
AnimationStatus _snackBarStatus = AnimationStatus.dismissed;
bool _isShowingSnackBar = false;
EventDisposition _handleFitnessModeChange(FitnessMode value) {
void _handleFitnessModeChange(FitnessMode value) {
setState(() {
_fitnessMode = value;
_drawerShowing = false;
});
return EventDisposition.processed;
}
Drawer buildDrawer() {
......@@ -136,10 +135,9 @@ class FeedFragment extends StatefulComponent {
});
}
EventDisposition _handleShowSettings() {
void _handleShowSettings() {
navigator.pop();
navigator.pushNamed('/settings');
return EventDisposition.processed;
}
// TODO(jackson): We should be localizing
......
......@@ -63,7 +63,7 @@ class SettingsFragment extends StatefulComponent {
}
}
EventDisposition _handleGoalWeightPressed() {
void _handleGoalWeightPressed() {
showDialog(navigator, (navigator) {
return new Dialog(
title: new Text("Goal Weight"),
......@@ -92,7 +92,6 @@ class SettingsFragment extends StatefulComponent {
]
);
}).then((double goalWeight) => updater(goalWeight: goalWeight));
return EventDisposition.processed;
}
Widget buildSettingsPane() {
......
......@@ -190,11 +190,10 @@ class MineDiggerApp extends App {
);
}
EventDisposition handleToolbarPointerDown(sky.PointerEvent event) {
void handleToolbarPointerDown(sky.PointerEvent event) {
setState(() {
resetGame();
});
return EventDisposition.processed;
}
// User action. The user uncovers the cell which can cause losing the game.
......
......@@ -528,15 +528,11 @@ class RenderSolidColor extends RenderDecoratedSector {
deltaTheta = constraints.constrainDeltaTheta(desiredDeltaTheta);
}
EventDisposition handleEvent(sky.Event event, HitTestEntry entry) {
if (event.type == 'pointerdown') {
void handleEvent(sky.Event event, HitTestEntry entry) {
if (event.type == 'pointerdown')
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
return EventDisposition.processed;
} else if (event.type == 'pointerup') {
else if (event.type == 'pointerup')
decoration = new BoxDecoration(backgroundColor: backgroundColor);
return EventDisposition.processed;
}
return EventDisposition.ignored;
}
}
......
......@@ -42,14 +42,10 @@ class RenderSolidColorBox extends RenderDecoratedBox {
size = constraints.constrain(desiredSize);
}
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event.type == 'pointerdown') {
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event.type == 'pointerdown')
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
return EventDisposition.processed;
} else if (event.type == 'pointerup') {
else if (event.type == 'pointerup')
decoration = new BoxDecoration(backgroundColor: backgroundColor);
return EventDisposition.processed;
}
return EventDisposition.ignored;
}
}
......@@ -39,7 +39,7 @@ class RenderTouchDemo extends RenderBox {
RenderTouchDemo();
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event is sky.PointerEvent) {
switch (event.type) {
case 'pointerdown':
......@@ -57,9 +57,7 @@ class RenderTouchDemo extends RenderBox {
break;
}
markNeedsPaint();
return EventDisposition.processed;
}
return EventDisposition.processed;
}
void performLayout() {
......
......@@ -81,13 +81,12 @@ class StockHome extends StatefulComponent {
});
}
EventDisposition _handleStockModeChange(StockMode value) {
void _handleStockModeChange(StockMode value) {
setState(() {
stockMode = value;
});
if (modeUpdater != null)
modeUpdater(value);
return EventDisposition.processed;
}
void _handleMenuShow() {
......@@ -146,10 +145,9 @@ class StockHome extends StatefulComponent {
);
}
EventDisposition _handleShowSettings() {
void _handleShowSettings() {
navigator.pop();
navigator.pushNamed('/settings');
return EventDisposition.processed;
}
Widget buildToolBar() {
......
......@@ -39,7 +39,7 @@ class StockSettings extends StatefulComponent {
sendUpdates();
}
EventDisposition _confirmOptimismChange() {
void _confirmOptimismChange() {
switch (optimism) {
case StockMode.optimistic:
_handleOptimismChanged(false);
......@@ -70,7 +70,6 @@ class StockSettings extends StatefulComponent {
}).then(_handleOptimismChanged);
break;
}
return EventDisposition.processed;
}
void sendUpdates() {
......
......@@ -68,39 +68,35 @@ class DragAndDropApp extends App {
DragController _dragController;
Offset _displacement = Offset.zero;
EventDisposition _startDrag(sky.PointerEvent event) {
void _startDrag(sky.PointerEvent event) {
setState(() {
_dragController = new DragController(new DragData("Orange"));
_dragController.update(new Point(event.x, event.y));
_displacement = Offset.zero;
});
return EventDisposition.consumed;
}
EventDisposition _updateDrag(sky.PointerEvent event) {
void _updateDrag(sky.PointerEvent event) {
setState(() {
_dragController.update(new Point(event.x, event.y));
_displacement += new Offset(event.dx, event.dy);
});
return EventDisposition.consumed;
}
EventDisposition _cancelDrag(sky.PointerEvent event) {
void _cancelDrag(sky.PointerEvent event) {
setState(() {
_dragController.cancel();
_dragController = null;
});
return EventDisposition.consumed;
}
EventDisposition _drop(sky.PointerEvent event) {
void _drop(sky.PointerEvent event) {
setState(() {
_dragController.update(new Point(event.x, event.y));
_dragController.drop();
_dragController = null;
_displacement = Offset.zero;
});
return EventDisposition.consumed;
}
Widget build() {
......@@ -114,6 +110,7 @@ class DragAndDropApp extends App {
new Positioned(
top: kTop,
left: kLeft,
// TODO(abarth): We should be using a GestureDetector
child: new Listener(
onPointerDown: _startDrag,
onPointerMove: _updateDrag,
......
......@@ -99,7 +99,7 @@ class OverlayGeometryApp extends App {
});
}
EventDisposition handlePointerDown(Widget target, sky.PointerEvent event) {
void handlePointerDown(Widget target, sky.PointerEvent event) {
setState(() {
markers[MarkerType.touch] = new Point(event.x, event.y);
markers[MarkerType.topLeft] = target.localToGlobal(new Point(0.0, 0.0));
......@@ -113,8 +113,6 @@ class OverlayGeometryApp extends App {
scrollable.addListener(scrollListener);
}
});
return EventDisposition.processed;
}
Widget builder(int index) {
......
......@@ -24,19 +24,17 @@ class Key {
final String soundUrl;
MediaPlayerProxy player;
EventDisposition down() {
void down() {
if (player == null)
return EventDisposition.ignored;
return;
player.ptr.seekTo(0);
player.ptr.start();
return EventDisposition.processed;
}
EventDisposition up() {
void up() {
if (player == null)
return EventDisposition.ignored;
return;
player.ptr.pause();
return EventDisposition.processed;
}
}
......
......@@ -63,11 +63,10 @@ HAL: This mission is too important for me to allow you to jeopardize it.''';
);
}
EventDisposition toggleToTextFunction(_) {
void toggleToTextFunction(_) {
setState(() {
toText = (toText == toPlainText) ? toStyledText : toPlainText;
});
return EventDisposition.processed;
}
Widget build() {
......
......@@ -16,7 +16,6 @@ export 'package:sky/rendering.dart' show
BoxShadow,
Color,
EdgeDims,
EventDisposition,
FlexAlignItems,
FlexDirection,
FlexJustifyContent,
......
......@@ -7,8 +7,6 @@ import 'dart:math' as math;
import 'package:sky/src/rendering/box.dart';
import 'package:sky/src/rendering/object.dart';
export 'package:sky/src/rendering/object.dart' show EventDisposition;
/// Parent data for use with [RenderFlex]
class FlexParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> {
/// The flex factor to use for this child
......
......@@ -4,34 +4,10 @@
import 'dart:sky' as sky;
/// The outcome of running an event handler.
enum EventDisposition {
/// The event handler ignored this event.
ignored,
/// The event handler did not ignore the event but other event handlers should
/// process the event as well.
processed,
/// The event handler did not ignore the event and other event handlers
/// should not process the event.
consumed,
}
/// Merges two [EventDisposition] values such that the result indicates the
/// maximum amount of processing indicated by the two inputs.
EventDisposition combineEventDispositions(EventDisposition left, EventDisposition right) {
if (left == EventDisposition.consumed || right == EventDisposition.consumed)
return EventDisposition.consumed;
if (left == EventDisposition.processed || right == EventDisposition.processed)
return EventDisposition.processed;
return EventDisposition.ignored;
}
/// An object that can handle events.
abstract class HitTestTarget {
/// Override this function to receive events.
EventDisposition handleEvent(sky.Event event, HitTestEntry entry);
void handleEvent(sky.Event event, HitTestEntry entry);
}
/// Data collected during a hit test about a specific [HitTestTarget].
......
......@@ -14,7 +14,7 @@ import 'package:sky/src/rendering/node.dart';
import 'package:vector_math/vector_math.dart';
export 'dart:sky' show Point, Offset, Size, Rect, Color, Paint, Path;
export 'package:sky/src/rendering/hit_test.dart' show EventDisposition, HitTestTarget, HitTestEntry, HitTestResult;
export 'package:sky/src/rendering/hit_test.dart' show HitTestTarget, HitTestEntry, HitTestResult;
/// Base class for data associated with a [RenderObject] by its parent
///
......@@ -1028,8 +1028,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
// EVENTS
/// Override this function to handle events that hit this render object
EventDisposition handleEvent(sky.Event event, HitTestEntry entry) {
return EventDisposition.ignored;
void handleEvent(sky.Event event, HitTestEntry entry) {
}
......
......@@ -123,7 +123,7 @@ class SkyBinding extends HitTestTarget {
return state;
}
EventDisposition _handlePointerEvent(sky.PointerEvent event) {
void _handlePointerEvent(sky.PointerEvent event) {
Point position = new Point(event.x, event.y);
_PointerState state = _getOrCreateStateForPointer(event, position);
......@@ -149,27 +149,19 @@ class SkyBinding extends HitTestTarget {
}
/// Dispatch the given event to the path of the given hit test result
EventDisposition dispatchEvent(sky.Event event, HitTestResult result) {
void dispatchEvent(sky.Event event, HitTestResult result) {
assert(result != null);
EventDisposition disposition = EventDisposition.ignored;
for (HitTestEntry entry in result.path) {
EventDisposition entryDisposition = entry.target.handleEvent(event, entry);
if (entryDisposition == EventDisposition.consumed)
return EventDisposition.consumed;
else if (entryDisposition == EventDisposition.processed)
disposition = EventDisposition.processed;
}
return disposition;
for (HitTestEntry entry in result.path)
entry.target.handleEvent(event, entry);
}
EventDisposition handleEvent(sky.Event e, BindingHitTestEntry entry) {
if (e is! sky.PointerEvent)
return EventDisposition.ignored;
sky.PointerEvent event = e;
pointerRouter.route(event);
if (event.type == 'pointerdown')
GestureArena.instance.close(event.pointer);
return EventDisposition.processed;
void handleEvent(sky.Event e, BindingHitTestEntry entry) {
if (e is sky.PointerEvent) {
sky.PointerEvent event = e;
pointerRouter.route(event);
if (event.type == 'pointerdown')
GestureArena.instance.close(event.pointer);
}
}
}
......
......@@ -31,12 +31,9 @@ abstract class RenderToggleable extends RenderConstrainedBox {
..addListener(markNeedsPaint);
}
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event.type == 'pointerdown') {
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event.type == 'pointerdown')
_tap.addPointer(event);
return EventDisposition.processed;
}
return EventDisposition.ignored;
}
TapGestureRecognizer _tap;
......
......@@ -27,7 +27,6 @@ export 'package:sky/src/painting/text_style.dart';
export 'package:sky/src/rendering/block.dart' show BlockDirection;
export 'package:sky/src/rendering/box.dart' show BoxConstraints;
export 'package:sky/src/rendering/flex.dart' show FlexJustifyContent, FlexAlignItems, FlexDirection;
export 'package:sky/src/rendering/hit_test.dart' show EventDisposition, combineEventDispositions;
export 'package:sky/src/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
export 'package:sky/src/rendering/proxy_box.dart' show BackgroundImage, BoxDecoration, BoxDecorationPosition, BoxShadow, Border, BorderSide, EdgeDims, Shape;
export 'package:sky/src/rendering/shifted_box.dart' show ShrinkWrap;
......
......@@ -14,23 +14,22 @@ abstract class ButtonBase extends StatefulComponent {
highlight = source.highlight;
}
EventDisposition _handlePointerDown(_) {
void _handlePointerDown(_) {
setState(() {
highlight = true;
});
return EventDisposition.processed;
}
EventDisposition _handlePointerUp(_) {
void _handlePointerUp(_) {
setState(() {
highlight = false;
});
return EventDisposition.processed;
}
EventDisposition _handlePointerCancel(_) {
void _handlePointerCancel(_) {
setState(() {
highlight = false;
});
return EventDisposition.processed;
}
Widget build() {
......
......@@ -119,11 +119,9 @@ class DatePickerHeader extends Component {
DatePickerMode mode;
DatePickerModeChanged onModeChanged;
EventDisposition _handleChangeMode(DatePickerMode value) {
if (value == mode)
return EventDisposition.ignored;
onModeChanged(value);
return EventDisposition.processed;
void _handleChangeMode(DatePickerMode value) {
if (value != mode)
onModeChanged(value);
}
Widget build() {
......
......@@ -16,7 +16,6 @@ import 'package:sky/src/rendering/sky_binding.dart';
import 'package:sky/src/rendering/view.dart';
export 'package:sky/src/rendering/box.dart' show BoxConstraints, BoxDecoration, Border, BorderSide, EdgeDims;
export 'package:sky/src/rendering/hit_test.dart' show EventDisposition, combineEventDispositions;
export 'package:sky/src/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
final bool _shouldLogRenderDuration = false; // see also 'enableProfilingLoop' argument to runApp()
......@@ -686,9 +685,7 @@ abstract class Inherited extends TagNode {
}
typedef EventDisposition GestureEventListener(sky.GestureEvent e);
typedef EventDisposition PointerEventListener(sky.PointerEvent e);
typedef EventDisposition EventListener(sky.Event e);
typedef void PointerEventListener(sky.PointerEvent e);
class Listener extends TagNode {
Listener({
......@@ -705,7 +702,7 @@ class Listener extends TagNode {
final PointerEventListener onPointerUp;
final PointerEventListener onPointerCancel;
EventDisposition _handleEvent(sky.Event event) {
void _handleEvent(sky.Event event) {
if (onPointerDown != null && event.type == 'pointerdown')
return onPointerDown(event);
if (onPointerMove != null && event.type == 'pointermove')
......@@ -714,7 +711,6 @@ class Listener extends TagNode {
return onPointerUp(event);
if (onPointerCancel != null && event.type == 'pointercancel')
return onPointerCancel(event);
return EventDisposition.ignored;
}
}
......@@ -1500,24 +1496,16 @@ class WidgetSkyBinding extends SkyBinding {
assert(SkyBinding.instance is WidgetSkyBinding);
}
EventDisposition handleEvent(sky.Event event, BindingHitTestEntry entry) {
EventDisposition disposition = EventDisposition.ignored;
void handleEvent(sky.Event event, BindingHitTestEntry entry) {
for (HitTestEntry entry in entry.result.path) {
if (entry.target is! RenderObject)
continue;
for (Widget target in RenderObjectWrapper.getWidgetsForRenderObject(entry.target)) {
if (target is Listener) {
EventDisposition targetDisposition = target._handleEvent(event);
if (targetDisposition == EventDisposition.consumed) {
return targetDisposition;
} else if (targetDisposition == EventDisposition.processed) {
disposition = EventDisposition.processed;
}
}
target = target._parent;
if (target is Listener)
target._handleEvent(event);
}
}
return combineEventDispositions(disposition, super.handleEvent(event, entry));
super.handleEvent(event, entry);
}
void beginFrame(double timeStamp) {
......
......@@ -219,7 +219,7 @@ class GestureDetector extends StatefulComponent {
return null;
}
EventDisposition _handlePointerDown(sky.PointerEvent event) {
void _handlePointerDown(sky.PointerEvent event) {
if (_tap != null)
_tap.addPointer(event);
if (_showPress != null)
......@@ -234,7 +234,6 @@ class GestureDetector extends StatefulComponent {
_pan.addPointer(event);
if (_scale != null)
_scale.addPointer(event);
return EventDisposition.processed;
}
Widget build() {
......
......@@ -81,18 +81,17 @@ class RenderInkWell extends RenderProxyBox {
final List<InkSplash> _splashes = new List<InkSplash>();
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event is sky.GestureEvent) {
switch (event.type) {
case 'gesturetapdown':
_startSplash(event.primaryPointer, entry.localPosition);
return EventDisposition.processed;
break;
case 'gesturetap':
_confirmSplash(event.primaryPointer);
return EventDisposition.processed;
break;
}
}
return EventDisposition.ignored;
}
void _startSplash(int pointer, Point position) {
......
......@@ -113,7 +113,7 @@ class Input extends StatefulComponent {
);
}
EventDisposition focus(_) {
void focus(_) {
if (Focus.at(this)) {
assert(_keyboardHandle.attached);
_keyboardHandle.showByRequest();
......@@ -121,7 +121,6 @@ class Input extends StatefulComponent {
Focus.moveTo(this);
// we'll get told to rebuild and we'll take care of the keyboard then
}
return EventDisposition.processed;
}
void didUnmount() {
......
......@@ -209,7 +209,7 @@ class Navigator extends StatefulComponent {
}
if (visibleRoutes.length > 1) {
visibleRoutes.insert(1, new Listener(
onPointerDown: (_) { pop(); return EventDisposition.consumed; },
onPointerDown: (_) { pop(); },
child: new Container()
));
}
......
......@@ -174,9 +174,8 @@ abstract class Scrollable extends StatefulComponent {
return scrollVelocity.clamp(_kMinFlingVelocity, _kMaxFlingVelocity) / _kMillisecondsPerSecond;
}
EventDisposition _handlePointerDown(_) {
void _handlePointerDown(_) {
_stopAnimations();
return EventDisposition.processed;
}
void _handleDragUpdate(double delta) {
......
......@@ -68,20 +68,14 @@ class _RenderSwitch extends RenderToggleable {
RadialReaction _radialReaction;
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event is sky.PointerEvent) {
if (event.type == 'pointerdown') {
if (event.type == 'pointerdown')
_showRadialReaction(entry.localPosition);
return combineEventDispositions(EventDisposition.processed,
super.handleEvent(event, entry));
}
if (event.type == 'pointerup') {
else if (event.type == 'pointerup')
_hideRadialReaction();
return combineEventDispositions(EventDisposition.processed,
super.handleEvent(event, entry));
}
}
return super.handleEvent(event, entry);
super.handleEvent(event, entry);
}
void _showRadialReaction(Point startLocation) {
......
......@@ -458,7 +458,7 @@ class TabBar extends Scrollable {
.clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset);
}
EventDisposition _handleTap(int tabIndex) {
void _handleTap(int tabIndex) {
if (tabIndex != selectedIndex) {
if (_tabWidths != null) {
if (isScrollable)
......@@ -467,9 +467,7 @@ class TabBar extends Scrollable {
}
if (onChanged != null)
onChanged(tabIndex);
return EventDisposition.processed;
}
return EventDisposition.ignored;
}
Widget _toTab(TabLabel label, int tabIndex, Color color, Color selectedColor) {
......
......@@ -178,9 +178,9 @@ class SpriteBox extends RenderBox {
}
}
EventDisposition handleEvent(sky.Event event, _SpriteBoxHitTestEntry entry) {
void handleEvent(sky.Event event, _SpriteBoxHitTestEntry entry) {
if (!attached)
return EventDisposition.ignored;
return;
if (event is sky.PointerEvent) {
......@@ -229,7 +229,6 @@ class SpriteBox extends RenderBox {
}
}
}
return EventDisposition.ignored;
}
bool hitTest(HitTestResult result, { Point position }) {
......
......@@ -15,9 +15,8 @@ class Inside extends StatefulComponent {
);
}
EventDisposition _handlePointerDown(_) {
void _handlePointerDown(_) {
setState(() { });
return EventDisposition.processed;
}
}
......@@ -37,9 +36,8 @@ class Middle extends StatefulComponent {
);
}
EventDisposition _handlePointerDown(_) {
void _handlePointerDown(_) {
setState(() { });
return EventDisposition.processed;
}
}
......
......@@ -105,8 +105,8 @@ class WidgetTester {
HitTestResult _hitTest(Point location) => SkyBinding.instance.hitTest(location);
EventDisposition _dispatchEvent(sky.Event event, HitTestResult result) {
return SkyBinding.instance.dispatchEvent(event, result);
void _dispatchEvent(sky.Event event, HitTestResult result) {
SkyBinding.instance.dispatchEvent(event, result);
}
void tap(Widget widget, { int pointer: 1 }) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment