mirror of
https://github.com/flutter/flutter
synced 2024-10-13 11:42:54 +00:00
Track overflow during flex layout
This commit is contained in:
parent
65d47af75c
commit
62fc9d8515
|
@ -81,6 +81,8 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _overflowOccurredDuringLayout = false;
|
||||||
|
|
||||||
void setupParentData(RenderBox child) {
|
void setupParentData(RenderBox child) {
|
||||||
if (child.parentData is! FlexBoxParentData)
|
if (child.parentData is! FlexBoxParentData)
|
||||||
child.parentData = new FlexBoxParentData();
|
child.parentData = new FlexBoxParentData();
|
||||||
|
@ -376,16 +378,20 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Size desiredSize;
|
||||||
switch (_direction) {
|
switch (_direction) {
|
||||||
case FlexDirection.horizontal:
|
case FlexDirection.horizontal:
|
||||||
size = constraints.constrain(new Size(mainSize, crossSize));
|
desiredSize = new Size(mainSize, crossSize);
|
||||||
|
size = constraints.constrain(desiredSize);
|
||||||
crossSize = size.height;
|
crossSize = size.height;
|
||||||
break;
|
break;
|
||||||
case FlexDirection.vertical:
|
case FlexDirection.vertical:
|
||||||
|
desiredSize = new Size(crossSize, mainSize);
|
||||||
size = constraints.constrain(new Size(crossSize, mainSize));
|
size = constraints.constrain(new Size(crossSize, mainSize));
|
||||||
crossSize = size.width;
|
crossSize = size.width;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
_overflowOccurredDuringLayout = desiredSize != size;
|
||||||
|
|
||||||
// Position elements
|
// Position elements
|
||||||
double childMainPosition = leadingSpace;
|
double childMainPosition = leadingSpace;
|
||||||
|
@ -433,6 +439,13 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
|
||||||
}
|
}
|
||||||
|
|
||||||
void paint(PaintingCanvas canvas, Offset offset) {
|
void paint(PaintingCanvas canvas, Offset offset) {
|
||||||
defaultPaint(canvas, offset);
|
if (_overflowOccurredDuringLayout) {
|
||||||
|
canvas.save();
|
||||||
|
canvas.clipRect(offset & size);
|
||||||
|
defaultPaint(canvas, offset);
|
||||||
|
canvas.restore();
|
||||||
|
} else {
|
||||||
|
defaultPaint(canvas, offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue