您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
352 行
12 KiB
352 行
12 KiB
using System.Collections.Generic;
|
|
using UIWidgets.foundation;
|
|
using UIWidgets.painting;
|
|
using UIWidgets.rendering;
|
|
using UIWidgets.ui;
|
|
using UnityEngine;
|
|
using Color = UIWidgets.ui.Color;
|
|
using Rect = UIWidgets.ui.Rect;
|
|
|
|
namespace UIWidgets.widgets {
|
|
public class Directionality : InheritedWidget {
|
|
public Directionality(
|
|
Widget child,
|
|
TextDirection textDirection,
|
|
Key key = null
|
|
) : base(key, child) {
|
|
this.textDirection = textDirection;
|
|
}
|
|
|
|
public TextDirection textDirection;
|
|
|
|
public static TextDirection of(BuildContext context) {
|
|
Directionality widget = context.inheritFromWidgetOfExactType(typeof(Directionality)) as Directionality;
|
|
return widget == null ? TextDirection.ltr : widget.textDirection;
|
|
}
|
|
|
|
public override bool updateShouldNotify(InheritedWidget oldWidget) {
|
|
return textDirection != ((Directionality) oldWidget).textDirection;
|
|
}
|
|
}
|
|
|
|
public class Opacity : SingleChildRenderObjectWidget {
|
|
public Opacity(double opacity, Key key = null, Widget child = null) : base(key, child) {
|
|
this.opacity = opacity;
|
|
}
|
|
|
|
public double opacity;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderOpacity(opacity: opacity);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderOpacity) renderObject).opacity = opacity;
|
|
}
|
|
}
|
|
|
|
public class LimitedBox : SingleChildRenderObjectWidget {
|
|
public LimitedBox(
|
|
Key key = null,
|
|
Widget child = null,
|
|
double maxWidth = double.MaxValue,
|
|
double maxHeight = double.MaxValue
|
|
) : base(key, child) {
|
|
this.maxHeight = maxHeight;
|
|
this.maxWidth = maxWidth;
|
|
}
|
|
|
|
public double maxWidth;
|
|
public double maxHeight;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderLimitedBox(
|
|
maxWidth: maxWidth,
|
|
maxHeight: maxHeight
|
|
);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderLimitedBox) renderObject).maxWidth = maxWidth;
|
|
((RenderLimitedBox) renderObject).maxHeight = maxHeight;
|
|
}
|
|
}
|
|
|
|
public class ConstrainedBox : SingleChildRenderObjectWidget {
|
|
public ConstrainedBox(
|
|
Key key = null,
|
|
BoxConstraints constraints = null,
|
|
Widget child = null
|
|
) : base(key, child) {
|
|
this.constraints = constraints;
|
|
}
|
|
|
|
public BoxConstraints constraints;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderConstrainedBox(additionalConstraints: constraints);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderConstrainedBox) renderObject)._additionalConstraints = constraints;
|
|
}
|
|
}
|
|
|
|
public class Padding : SingleChildRenderObjectWidget {
|
|
public Padding(
|
|
EdgeInsets padding,
|
|
Key key = null,
|
|
Widget child = null
|
|
) : base(key, child) {
|
|
this.padding = padding;
|
|
}
|
|
|
|
public EdgeInsets padding;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderPadding(
|
|
padding: padding
|
|
);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderPadding) renderObject).padding = padding;
|
|
}
|
|
}
|
|
|
|
public class Transform : SingleChildRenderObjectWidget {
|
|
public Transform(
|
|
Matrix4x4 transform,
|
|
Offset origin = null,
|
|
Alignment alignment = null,
|
|
bool transformHitTests = false,
|
|
Key key = null,
|
|
Widget child = null
|
|
) : base(key, child) {
|
|
this.alignment = alignment ?? Alignment.center;
|
|
this.origin = origin;
|
|
this.transformHitTests = transformHitTests;
|
|
this.transform = transform;
|
|
}
|
|
|
|
// scale
|
|
public Transform(
|
|
double scale,
|
|
Offset origin,
|
|
Alignment alignment,
|
|
bool transformHitTests = false,
|
|
Key key = null,
|
|
Widget child = null
|
|
) : base(key, child) {
|
|
this.alignment = alignment ?? Alignment.center;
|
|
this.origin = origin;
|
|
this.transformHitTests = transformHitTests;
|
|
this.transform = Matrix4x4.Scale(new Vector3((float) scale, (float) scale, (float) 1.0));
|
|
}
|
|
|
|
public Matrix4x4 transform;
|
|
public Offset origin;
|
|
public Alignment alignment;
|
|
public bool transformHitTests;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderTransform(
|
|
transform: transform,
|
|
origin: origin,
|
|
alignment: alignment,
|
|
textDirection: Directionality.of(context),
|
|
transformHitTests: transformHitTests
|
|
);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderTransform) renderObject).transform = transform;
|
|
((RenderTransform) renderObject).origin = origin;
|
|
((RenderTransform) renderObject).alignment = alignment;
|
|
((RenderTransform) renderObject).textDirection = Directionality.of(context);
|
|
((RenderTransform) renderObject).transformHitTests = transformHitTests;
|
|
}
|
|
}
|
|
|
|
|
|
public class Align : SingleChildRenderObjectWidget {
|
|
public Align(
|
|
double widthFactor = 0.0,
|
|
double heightFactor = 0.0,
|
|
Key key = null,
|
|
Widget child = null,
|
|
Alignment alignment = null
|
|
) : base(key, child) {
|
|
this.alignment = alignment ?? Alignment.center;
|
|
this.widthFactor = widthFactor;
|
|
this.heightFactor = heightFactor;
|
|
}
|
|
|
|
public Alignment alignment;
|
|
|
|
public double widthFactor;
|
|
|
|
public double heightFactor;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderPositionedBox(
|
|
alignment: alignment,
|
|
widthFactor: widthFactor,
|
|
heightFactor: heightFactor
|
|
);
|
|
}
|
|
}
|
|
|
|
public class RawImage : LeafRenderObjectWidget {
|
|
public RawImage(Key key, ui.Image image, double width, double height, double scale, Color color,
|
|
BlendMode colorBlendMode, BoxFit fit, Rect centerSlice, Alignment alignment = null,
|
|
ImageRepeat repeat = ImageRepeat.noRepeat) : base(key) {
|
|
this.image = image;
|
|
this.width = width;
|
|
this.height = height;
|
|
this.scale = scale;
|
|
this.color = color;
|
|
this.blendMode = colorBlendMode;
|
|
this.centerSlice = centerSlice;
|
|
this.fit = fit;
|
|
this.alignment = alignment == null ? Alignment.center : alignment;
|
|
this.repeat = repeat;
|
|
}
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderImage(
|
|
this.image,
|
|
this.width,
|
|
this.height,
|
|
this.color,
|
|
this.blendMode,
|
|
this.fit,
|
|
this.repeat,
|
|
this.centerSlice,
|
|
this.alignment
|
|
);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
|
|
((RenderImage) renderObject).image = this.image;
|
|
((RenderImage) renderObject).width = this.width;
|
|
((RenderImage) renderObject).height = this.height;
|
|
((RenderImage) renderObject).color = this.color;
|
|
((RenderImage) renderObject).fit = this.fit;
|
|
((RenderImage) renderObject).repeat = this.repeat;
|
|
((RenderImage) renderObject).centerSlice = this.centerSlice;
|
|
((RenderImage) renderObject).alignment = this.alignment;
|
|
}
|
|
|
|
public ui.Image image;
|
|
public double width;
|
|
public double height;
|
|
public double scale;
|
|
public Color color;
|
|
public BlendMode blendMode;
|
|
public BoxFit fit;
|
|
public Alignment alignment;
|
|
public ImageRepeat repeat;
|
|
public Rect centerSlice;
|
|
}
|
|
|
|
public class Listener : SingleChildRenderObjectWidget {
|
|
public Listener(
|
|
Key key = null,
|
|
PointerDownEventListener onPointerDown = null,
|
|
PointerMoveEventListener onPointerMove = null,
|
|
PointerUpEventListener onPointerUp = null,
|
|
PointerCancelEventListener onPointerCancel = null,
|
|
HitTestBehavior behavior = HitTestBehavior.deferToChild,
|
|
Widget child = null
|
|
) : base(key: key, child: child) {
|
|
this.onPointerDown = onPointerDown;
|
|
this.onPointerMove = onPointerMove;
|
|
this.onPointerUp = onPointerUp;
|
|
this.onPointerCancel = onPointerCancel;
|
|
this.behavior = behavior;
|
|
}
|
|
|
|
public readonly PointerDownEventListener onPointerDown;
|
|
|
|
public readonly PointerMoveEventListener onPointerMove;
|
|
|
|
public readonly PointerUpEventListener onPointerUp;
|
|
|
|
public readonly PointerCancelEventListener onPointerCancel;
|
|
|
|
public readonly HitTestBehavior behavior;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderPointerListener(
|
|
onPointerDown: this.onPointerDown,
|
|
onPointerMove: this.onPointerMove,
|
|
onPointerUp: this.onPointerUp,
|
|
onPointerCancel: this.onPointerCancel,
|
|
behavior: this.behavior
|
|
);
|
|
}
|
|
|
|
public override void updateRenderObject(BuildContext context, RenderObject renderObjectRaw) {
|
|
var renderObject = (RenderPointerListener) renderObjectRaw;
|
|
renderObject.onPointerDown = this.onPointerDown;
|
|
renderObject.onPointerMove = this.onPointerMove;
|
|
renderObject.onPointerUp = this.onPointerUp;
|
|
renderObject.onPointerCancel = this.onPointerCancel;
|
|
renderObject.behavior = this.behavior;
|
|
}
|
|
|
|
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
base.debugFillProperties(properties);
|
|
List<string> listeners = new List<string>();
|
|
if (this.onPointerDown != null) {
|
|
listeners.Add("down");
|
|
}
|
|
|
|
if (this.onPointerMove != null) {
|
|
listeners.Add("move");
|
|
}
|
|
|
|
if (this.onPointerUp != null) {
|
|
listeners.Add("up");
|
|
}
|
|
|
|
if (this.onPointerCancel != null) {
|
|
listeners.Add("cancel");
|
|
}
|
|
|
|
properties.add(new EnumerableProperty<string>("listeners", listeners, ifEmpty: "<none>"));
|
|
properties.add(new EnumProperty<HitTestBehavior>("behavior", this.behavior));
|
|
}
|
|
}
|
|
|
|
|
|
public class IgnorePointer : SingleChildRenderObjectWidget {
|
|
public IgnorePointer(
|
|
Key key = null,
|
|
bool ignoring = true,
|
|
Widget child = null
|
|
) : base(key: key, child: child) {
|
|
this.ignoring = ignoring;
|
|
}
|
|
|
|
public readonly bool ignoring;
|
|
|
|
public override RenderObject createRenderObject(BuildContext context) {
|
|
return new RenderIgnorePointer(
|
|
ignoring: this.ignoring
|
|
);
|
|
}
|
|
|
|
public override
|
|
void updateRenderObject(BuildContext context, RenderObject renderObjectRaw) {
|
|
var renderObject = (RenderIgnorePointer) renderObjectRaw;
|
|
renderObject.ignoring = this.ignoring;
|
|
}
|
|
|
|
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
base.debugFillProperties(properties);
|
|
properties.add(new DiagnosticsProperty<bool>("ignoring", this.ignoring));
|
|
}
|
|
}
|
|
}
|