您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
132 行
3.5 KiB
132 行
3.5 KiB
using Unity.UIWidgets.foundation;
|
|
using Unity.UIWidgets.ui;
|
|
|
|
namespace Unity.UIWidgets.rendering {
|
|
public class RenderLottie : RenderBox {
|
|
public RenderLottie(
|
|
Skottie skottie,
|
|
float? width = null,
|
|
float? height = null,
|
|
float scale = 1.0f,
|
|
float frame = 0
|
|
) {
|
|
_width = width;
|
|
_height = height;
|
|
_scale = scale;
|
|
_skottie = skottie;
|
|
_frame = frame;
|
|
_duration = skottie.duration();
|
|
}
|
|
|
|
Skottie _skottie;
|
|
float _frame = 0;
|
|
float _duration = 0;
|
|
|
|
public float frame {
|
|
get { return _frame; }
|
|
set {
|
|
while (value > _duration) {
|
|
value -= _duration;
|
|
}
|
|
if (value == _frame) {
|
|
return;
|
|
}
|
|
|
|
_frame = value;
|
|
markNeedsLayout();
|
|
}
|
|
}
|
|
|
|
float? _width;
|
|
|
|
public float? width {
|
|
get { return _width; }
|
|
set {
|
|
if (value == _width) {
|
|
return;
|
|
}
|
|
|
|
_width = value;
|
|
markNeedsLayout();
|
|
}
|
|
}
|
|
|
|
float? _height;
|
|
|
|
public float? height {
|
|
get { return _height; }
|
|
set {
|
|
if (value == _height) {
|
|
return;
|
|
}
|
|
|
|
_height = value;
|
|
markNeedsLayout();
|
|
}
|
|
}
|
|
|
|
|
|
float _scale;
|
|
|
|
public float scale {
|
|
get { return _scale; }
|
|
set {
|
|
if (value == _scale) {
|
|
return;
|
|
}
|
|
|
|
_scale = value;
|
|
markNeedsLayout();
|
|
}
|
|
}
|
|
|
|
Size _sizeForConstraints(BoxConstraints constraints) {
|
|
constraints = BoxConstraints.tightFor(
|
|
_width,
|
|
_height
|
|
).enforce(constraints);
|
|
|
|
return constraints.smallest;
|
|
}
|
|
|
|
protected internal override float computeMinIntrinsicWidth(float height) {
|
|
D.assert(height >= 0.0);
|
|
if (_width == null && _height == null) {
|
|
return 0.0f;
|
|
}
|
|
|
|
return _sizeForConstraints(BoxConstraints.tightForFinite(height: height)).width;
|
|
}
|
|
|
|
protected internal override float computeMaxIntrinsicWidth(float height) {
|
|
D.assert(height >= 0.0);
|
|
return _sizeForConstraints(BoxConstraints.tightForFinite(height: height)).width;
|
|
}
|
|
|
|
protected internal override float computeMinIntrinsicHeight(float width) {
|
|
D.assert(width >= 0.0);
|
|
if (_width == null && _height == null) {
|
|
return 0.0f;
|
|
}
|
|
|
|
return _sizeForConstraints(BoxConstraints.tightForFinite(width: width)).height;
|
|
}
|
|
|
|
protected internal override float computeMaxIntrinsicHeight(float width) {
|
|
D.assert(width >= 0.0);
|
|
return _sizeForConstraints(BoxConstraints.tightForFinite(width: width)).height;
|
|
}
|
|
|
|
protected override bool hitTestSelf(Offset position) {
|
|
return true;
|
|
}
|
|
|
|
protected override void performLayout() {
|
|
size = _sizeForConstraints(constraints);
|
|
}
|
|
|
|
public override void paint(PaintingContext context, Offset offset) {
|
|
_skottie.paint(context.canvas, offset, _width ?? 0, _height ?? 0, _frame);
|
|
}
|
|
}
|
|
}
|