168 lines
3.3 KiB
Dart
168 lines
3.3 KiB
Dart
|
|
/// Created by @Haoyi on 2021/7/7
|
||
|
|
|
||
|
|
part of "design.dart";
|
||
|
|
|
||
|
|
abstract class DesignRect extends DesignObject<Rect> {
|
||
|
|
Rect get rect;
|
||
|
|
|
||
|
|
double get width;
|
||
|
|
|
||
|
|
double get height;
|
||
|
|
|
||
|
|
Offset get topLeft;
|
||
|
|
|
||
|
|
Offset get bottomLeft;
|
||
|
|
|
||
|
|
Offset get topRight;
|
||
|
|
|
||
|
|
Offset get bottomRight;
|
||
|
|
|
||
|
|
Offset get center;
|
||
|
|
|
||
|
|
double get top;
|
||
|
|
|
||
|
|
double get bottom;
|
||
|
|
|
||
|
|
double get right;
|
||
|
|
|
||
|
|
double get left;
|
||
|
|
|
||
|
|
DesignField get topField;
|
||
|
|
|
||
|
|
DesignField get leftField;
|
||
|
|
|
||
|
|
DesignField get rightField;
|
||
|
|
|
||
|
|
DesignField get bottomField;
|
||
|
|
}
|
||
|
|
|
||
|
|
class _DesignFieldRect extends DesignRect {
|
||
|
|
final DesignField leftField;
|
||
|
|
final DesignField topField;
|
||
|
|
final DesignField rightField;
|
||
|
|
final DesignField bottomField;
|
||
|
|
|
||
|
|
Rect? _rect;
|
||
|
|
|
||
|
|
Rect get rect => _rect!;
|
||
|
|
|
||
|
|
_DesignFieldRect.fromLTRB(this.leftField, this.topField, this.rightField, this.bottomField);
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get width => rect.width;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get height => rect.height;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get topLeft => rect.topLeft;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get bottomLeft => rect.bottomLeft;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get topRight => rect.topRight;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get bottomRight => rect.bottomRight;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get center => rect.center;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get top => rect.top;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get bottom => rect.bottom;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get right => rect.right;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get left => rect.left;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Rect measure(_DeviceMetrics metrics) {
|
||
|
|
if (_rect == null) {
|
||
|
|
final l = leftField.measure(metrics);
|
||
|
|
final t = topField.measure(metrics);
|
||
|
|
final r = rightField.measure(metrics);
|
||
|
|
final b = bottomField.measure(metrics);
|
||
|
|
_rect = Rect.fromLTRB(l, t, r, b);
|
||
|
|
}
|
||
|
|
return _rect!;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
class _DesignExplicitRect extends DesignRect {
|
||
|
|
final double designLeft;
|
||
|
|
final double designTop;
|
||
|
|
final double designRight;
|
||
|
|
final double designBottom;
|
||
|
|
|
||
|
|
Rect? _rect;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Rect get rect => _rect!;
|
||
|
|
|
||
|
|
_DesignExplicitRect.fromLTRB(
|
||
|
|
this.designLeft, this.designTop, this.designRight, this.designBottom);
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get width => rect.width;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get height => rect.height;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get topLeft => rect.topLeft;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get bottomLeft => rect.bottomLeft;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get topRight => rect.topRight;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get bottomRight => rect.bottomRight;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Offset get center => rect.center;
|
||
|
|
|
||
|
|
@override
|
||
|
|
DesignField get bottomField => DesignField._height(designBottom);
|
||
|
|
|
||
|
|
@override
|
||
|
|
DesignField get leftField => DesignField._width(designLeft);
|
||
|
|
|
||
|
|
@override
|
||
|
|
DesignField get rightField => DesignField._width(designRight);
|
||
|
|
|
||
|
|
@override
|
||
|
|
DesignField get topField => DesignField._height(designTop);
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get top => rect.top;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get bottom => rect.bottom;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get right => rect.right;
|
||
|
|
|
||
|
|
@override
|
||
|
|
double get left => rect.left;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Rect measure(_DeviceMetrics metrics) {
|
||
|
|
if (_rect == null) {
|
||
|
|
final l = DesignField._calculate(_DesignMethod.width, metrics, designLeft);
|
||
|
|
final t = DesignField._calculate(_DesignMethod.height, metrics, designTop);
|
||
|
|
final r = DesignField._calculate(_DesignMethod.width, metrics, designRight);
|
||
|
|
final b = DesignField._calculate(_DesignMethod.height, metrics, designBottom);
|
||
|
|
_rect = Rect.fromLTRB(l, t, r, b);
|
||
|
|
}
|
||
|
|
return _rect!;
|
||
|
|
}
|
||
|
|
}
|