Commit 0e2dea86 authored by Andrew Wilson's avatar Andrew Wilson

Merge pull request #576 from apwilson/mimic_overlay

Maximum bounds for the mimic in the overlay can now be specified.
parents 611dd69a a1249ad2
...@@ -15,13 +15,15 @@ class MimicOverlay extends AnimatedComponent { ...@@ -15,13 +15,15 @@ class MimicOverlay extends AnimatedComponent {
this.children, this.children,
this.overlay, this.overlay,
this.duration: const Duration(milliseconds: 200), this.duration: const Duration(milliseconds: 200),
this.curve: linear this.curve: linear,
this.targetRect
}) : super(key: key); }) : super(key: key);
List<Widget> children; List<Widget> children;
GlobalKey overlay; GlobalKey overlay;
Duration duration; Duration duration;
Curve curve; Curve curve;
Rect targetRect;
void syncFields(MimicOverlay source) { void syncFields(MimicOverlay source) {
children = source.children; children = source.children;
...@@ -29,20 +31,28 @@ class MimicOverlay extends AnimatedComponent { ...@@ -29,20 +31,28 @@ class MimicOverlay extends AnimatedComponent {
duration = source.duration; duration = source.duration;
_expandPerformance.duration = duration; _expandPerformance.duration = duration;
targetRect = source.targetRect;
_mimicBounds.end = targetRect;
if (_expandPerformance.isCompleted) {
_mimicBounds.value = _mimicBounds.end;
}
curve = source.curve; curve = source.curve;
_mimicBounds.curve = curve; _mimicBounds.curve = curve;
if (overlay != source.overlay) { if (overlay != source.overlay) {
overlay = source.overlay; overlay = source.overlay;
if (_expandPerformance.isDismissed) if (_expandPerformance.isDismissed) {
_activeOverlay = overlay; _activeOverlay = overlay;
else } else {
_expandPerformance.reverse(); _expandPerformance.reverse();
} }
} }
}
void initState() { void initState() {
_mimicBounds = new AnimatedRect(new Rect(), curve: curve); _mimicBounds = new AnimatedRect(new Rect(), curve: curve);
_mimicBounds.end = targetRect;
_expandPerformance = new AnimationPerformance() _expandPerformance = new AnimationPerformance()
..duration = duration ..duration = duration
..addVariable(_mimicBounds) ..addVariable(_mimicBounds)
...@@ -62,14 +72,11 @@ class MimicOverlay extends AnimatedComponent { ...@@ -62,14 +72,11 @@ class MimicOverlay extends AnimatedComponent {
} }
} }
void _handleStackSizeChanged(Size size) {
_mimicBounds.end = Point.origin & size;
}
void _handleMimicCallback(Rect globalBounds) { void _handleMimicCallback(Rect globalBounds) {
setState(() { setState(() {
// TODO(abarth): We need to convert global bounds into local coordinates. // TODO(abarth): We need to convert global bounds into local coordinates.
_mimicBounds.begin = globalToLocal(globalBounds.topLeft) & globalBounds.size; _mimicBounds.begin =
globalToLocal(globalBounds.topLeft) & globalBounds.size;
_mimicBounds.value = _mimicBounds.begin; _mimicBounds.value = _mimicBounds.begin;
}); });
_expandPerformance.forward(); _expandPerformance.forward();
...@@ -78,8 +85,9 @@ class MimicOverlay extends AnimatedComponent { ...@@ -78,8 +85,9 @@ class MimicOverlay extends AnimatedComponent {
Widget build() { Widget build() {
List<Widget> layers = new List<Widget>(); List<Widget> layers = new List<Widget>();
if (children != null) if (children != null) {
layers.addAll(children); layers.addAll(children);
}
if (_activeOverlay != null) { if (_activeOverlay != null) {
layers.add( layers.add(
...@@ -98,9 +106,6 @@ class MimicOverlay extends AnimatedComponent { ...@@ -98,9 +106,6 @@ class MimicOverlay extends AnimatedComponent {
); );
} }
return new SizeObserver( return new Stack(layers);
callback: _handleStackSizeChanged,
child: new Stack(layers)
);
} }
} }
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