您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
372 行
11 KiB
372 行
11 KiB
using System;
|
|
using Unity.UIWidgets.flow;
|
|
using UnityEngine;
|
|
using Unity.UIWidgets.foundation;
|
|
|
|
namespace Unity.UIWidgets.ui {
|
|
public interface Canvas {
|
|
void save();
|
|
|
|
void saveLayer(Rect bounds, Paint paint = null);
|
|
|
|
void restore();
|
|
|
|
int getSaveCount();
|
|
|
|
void translate(float dx, float dy);
|
|
|
|
void scale(float sx, float? sy = null);
|
|
|
|
void rotate(float radians, Offset offset = null);
|
|
|
|
void skew(float sx, float sy);
|
|
|
|
void concat(Matrix3 matrix);
|
|
|
|
Matrix3 getTotalMatrix();
|
|
|
|
void resetMatrix();
|
|
|
|
void setMatrix(Matrix3 matrix);
|
|
|
|
float getDevicePixelRatio();
|
|
|
|
void clipRect(Rect rect);
|
|
|
|
void clipRRect(RRect rrect);
|
|
|
|
void clipPath(Path path);
|
|
|
|
void drawLine(Offset from, Offset to, Paint paint);
|
|
|
|
void drawRect(Rect rect, Paint paint);
|
|
|
|
void drawShadow(Path path, Color color, float elevation, bool transparentOccluder);
|
|
|
|
void drawRRect(RRect rect, Paint paint);
|
|
|
|
void drawDRRect(RRect outer, RRect inner, Paint paint);
|
|
|
|
void drawOval(Rect rect, Paint paint);
|
|
|
|
void drawCircle(Offset c, float radius, Paint paint);
|
|
|
|
void drawArc(Rect rect, float startAngle, float sweepAngle, bool useCenter, Paint paint);
|
|
|
|
void drawPath(Path path, Paint paint);
|
|
|
|
void drawImage(Image image, Offset offset, Paint paint);
|
|
|
|
void drawImageRect(Image image, Rect dst, Paint paint);
|
|
|
|
void drawImageRect(Image image, Rect src, Rect dst, Paint paint);
|
|
|
|
void drawImageNine(Image image, Rect center, Rect dst, Paint paint);
|
|
|
|
void drawImageNine(Image image, Rect src, Rect center, Rect dst, Paint paint);
|
|
|
|
void drawPicture(Picture picture);
|
|
|
|
void drawTextBlob(TextBlob textBlob, Offset offset, Paint paint);
|
|
|
|
void drawParagraph(Paragraph paragraph, Offset offset);
|
|
void flush();
|
|
|
|
void reset();
|
|
}
|
|
|
|
public class RecorderCanvas : Canvas {
|
|
public RecorderCanvas(PictureRecorder recorder) {
|
|
this._recorder = recorder;
|
|
}
|
|
|
|
protected readonly PictureRecorder _recorder;
|
|
|
|
int _saveCount = 1;
|
|
|
|
public void save() {
|
|
this._saveCount++;
|
|
this._recorder.addDrawCmd(new DrawSave {
|
|
});
|
|
}
|
|
|
|
public void saveLayer(Rect rect, Paint paint) {
|
|
this._saveCount++;
|
|
this._recorder.addDrawCmd(new DrawSaveLayer {
|
|
rect = rect,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void restore() {
|
|
this._saveCount--;
|
|
this._recorder.addDrawCmd(new DrawRestore {
|
|
});
|
|
}
|
|
|
|
public int getSaveCount() {
|
|
return this._saveCount;
|
|
}
|
|
|
|
public void translate(float dx, float dy) {
|
|
this._recorder.addDrawCmd(new DrawTranslate {
|
|
dx = dx,
|
|
dy = dy,
|
|
});
|
|
}
|
|
|
|
public void scale(float sx, float? sy = null) {
|
|
this._recorder.addDrawCmd(new DrawScale {
|
|
sx = sx,
|
|
sy = sy,
|
|
});
|
|
}
|
|
|
|
public void rotate(float radians, Offset offset = null) {
|
|
this._recorder.addDrawCmd(new DrawRotate {
|
|
radians = radians,
|
|
offset = offset,
|
|
});
|
|
}
|
|
|
|
public void skew(float sx, float sy) {
|
|
this._recorder.addDrawCmd(new DrawSkew {
|
|
sx = sx,
|
|
sy = sy,
|
|
});
|
|
}
|
|
|
|
public void concat(Matrix3 matrix) {
|
|
this._recorder.addDrawCmd(new DrawConcat {
|
|
matrix = matrix,
|
|
});
|
|
}
|
|
|
|
public Matrix3 getTotalMatrix() {
|
|
return this._recorder.getTotalMatrix();
|
|
}
|
|
|
|
public void resetMatrix() {
|
|
this._recorder.addDrawCmd(new DrawResetMatrix {
|
|
});
|
|
}
|
|
|
|
public void setMatrix(Matrix3 matrix) {
|
|
this._recorder.addDrawCmd(new DrawSetMatrix {
|
|
matrix = matrix,
|
|
});
|
|
}
|
|
|
|
public virtual float getDevicePixelRatio() {
|
|
throw new Exception("not available in recorder");
|
|
}
|
|
|
|
public void clipRect(Rect rect) {
|
|
this._recorder.addDrawCmd(new DrawClipRect {
|
|
rect = rect,
|
|
});
|
|
}
|
|
|
|
public void clipRRect(RRect rrect) {
|
|
this._recorder.addDrawCmd(new DrawClipRRect {
|
|
rrect = rrect,
|
|
});
|
|
}
|
|
|
|
public void clipPath(Path path) {
|
|
this._recorder.addDrawCmd(new DrawClipPath {
|
|
path = path,
|
|
});
|
|
}
|
|
|
|
public void drawLine(Offset from, Offset to, Paint paint) {
|
|
var path = new Path();
|
|
path.moveTo(from.dx, from.dy);
|
|
path.lineTo(to.dx, to.dy);
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawShadow(Path path, Color color, float elevation, bool transparentOccluder) {
|
|
float dpr = Window.instance.devicePixelRatio;
|
|
PhysicalShapeLayer.drawShadow(this, path, color, elevation, transparentOccluder, dpr);
|
|
}
|
|
|
|
public void drawRect(Rect rect, Paint paint) {
|
|
if (rect.size.isEmpty) {
|
|
return;
|
|
}
|
|
|
|
var path = new Path();
|
|
path.addRect(rect);
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawRRect(RRect rrect, Paint paint) {
|
|
var path = new Path();
|
|
path.addRRect(rrect);
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawDRRect(RRect outer, RRect inner, Paint paint) {
|
|
var path = new Path();
|
|
path.addRRect(outer);
|
|
path.addRRect(inner);
|
|
path.winding(PathWinding.clockwise);
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawOval(Rect rect, Paint paint) {
|
|
var w = rect.width / 2;
|
|
var h = rect.height / 2;
|
|
var path = new Path();
|
|
path.addEllipse(rect.left + w, rect.top + h, w, h);
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawCircle(Offset c, float radius, Paint paint) {
|
|
var path = new Path();
|
|
path.addCircle(c.dx, c.dy, radius);
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawArc(Rect rect, float startAngle, float sweepAngle, bool useCenter, Paint paint) {
|
|
var path = new Path();
|
|
|
|
if (useCenter) {
|
|
var center = rect.center;
|
|
path.moveTo(center.dx, center.dy);
|
|
}
|
|
|
|
bool forceMoveTo = !useCenter;
|
|
while (sweepAngle <= -Mathf.PI * 2) {
|
|
path.addArc(rect, startAngle, -Mathf.PI, forceMoveTo);
|
|
startAngle -= Mathf.PI;
|
|
path.addArc(rect, startAngle, -Mathf.PI, false);
|
|
startAngle -= Mathf.PI;
|
|
forceMoveTo = false;
|
|
sweepAngle += Mathf.PI * 2;
|
|
}
|
|
|
|
while (sweepAngle >= Mathf.PI * 2) {
|
|
path.addArc(rect, startAngle, Mathf.PI, forceMoveTo);
|
|
startAngle += Mathf.PI;
|
|
path.addArc(rect, startAngle, Mathf.PI, false);
|
|
startAngle += Mathf.PI;
|
|
forceMoveTo = false;
|
|
sweepAngle -= Mathf.PI * 2;
|
|
}
|
|
|
|
path.addArc(rect, startAngle, sweepAngle, forceMoveTo);
|
|
if (useCenter) {
|
|
path.close();
|
|
}
|
|
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawPath(Path path, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawPath {
|
|
path = path,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawImage(Image image, Offset offset, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawImage {
|
|
image = image,
|
|
offset = offset,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawImageRect(Image image, Rect dst, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawImageRect {
|
|
image = image,
|
|
dst = dst,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawImageRect(Image image, Rect src, Rect dst, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawImageRect {
|
|
image = image,
|
|
src = src,
|
|
dst = dst,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawImageNine(Image image, Rect center, Rect dst, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawImageNine {
|
|
image = image,
|
|
center = center,
|
|
dst = dst,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawImageNine(Image image, Rect src, Rect center, Rect dst, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawImageNine {
|
|
image = image,
|
|
src = src,
|
|
center = center,
|
|
dst = dst,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawPicture(Picture picture) {
|
|
this._recorder.addDrawCmd(new DrawPicture {
|
|
picture = picture,
|
|
});
|
|
}
|
|
|
|
public void drawTextBlob(TextBlob textBlob, Offset offset, Paint paint) {
|
|
this._recorder.addDrawCmd(new DrawTextBlob {
|
|
textBlob = textBlob,
|
|
offset = offset,
|
|
paint = new Paint(paint),
|
|
});
|
|
}
|
|
|
|
public void drawParagraph(Paragraph paragraph, Offset offset) {
|
|
D.assert(paragraph != null);
|
|
D.assert(PaintingUtils._offsetIsValid(offset));
|
|
paragraph.paint(this, offset);
|
|
}
|
|
|
|
public virtual void flush() {
|
|
throw new Exception("not available in recorder");
|
|
}
|
|
|
|
public void reset() {
|
|
this._recorder.reset();
|
|
}
|
|
}
|
|
}
|