您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

305 行
10 KiB

using System;
using System.Linq;
using UIWidgets.painting;
using UIWidgets.ui;
using UnityEditor;
using UnityEngine;
using Color = UIWidgets.ui.Color;
using Rect = UIWidgets.ui.Rect;
namespace UIWidgets.Tests {
public class CanvasAndLayers : EditorWindow {
private readonly Action[] _options;
private readonly string[] _optionStrings;
private int _selected;
CanvasAndLayers() {
this._options = new Action[] {
this.drawPloygon4,
this.drawRect,
this.drawRectShadow,
this.drawPicture,
this.clipRect,
this.clipRRect,
this.saveLayer,
};
this._optionStrings = this._options.Select(x => x.Method.Name).ToArray();
this._selected = 0;
this.titleContent = new GUIContent("CanvasAndLayers");
}
void OnGUI() {
this._selected = EditorGUILayout.Popup("test case", this._selected, this._optionStrings);
if (Event.current.type == EventType.Repaint) {
this._options[this._selected]();
}
}
void drawPloygon4() {
var canvas = new CanvasImpl();
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawPloygon4(
new[] {new Offset(10, 10), new Offset(10, 110), new Offset(110, 110), new Offset(110, 10)},
paint);
canvas.drawPloygon4(
new[] {new Offset(10, 150), new Offset(10, 160), new Offset(140, 120), new Offset(110, 180)},
paint);
}
void drawRect() {
var canvas = new CanvasImpl();
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawRect(
Rect.fromLTWH(10, 10, 100, 100),
BorderWidth.only(2, 4, 6, 8),
BorderRadius.only(0, 4, 8, 16),
paint);
paint = new Paint {
color = new Color(0xFF00FF00),
};
canvas.drawRect(
Rect.fromLTWH(10, 150, 100, 100),
BorderWidth.only(),
BorderRadius.only(0, 4, 8, 16),
paint);
canvas.drawRect(
Rect.fromLTWH(150, 150, 100, 100),
BorderWidth.only(10, 12, 14, 16),
BorderRadius.only(),
paint);
}
void drawRectShadow() {
var canvas = new CanvasImpl();
var paint = new Paint {
color = new Color(0xFF00FF00),
blurSigma = 3.0,
};
canvas.drawRectShadow(
Rect.fromLTWH(10, 10, 100, 100),
paint);
paint = new Paint {
color = new Color(0xFFFFFF00),
blurSigma = 2.0,
};
canvas.drawRectShadow(
Rect.fromLTWH(10, 150, 100, 100),
paint);
}
void drawPicture() {
var pictureRecorder = new PictureRecorder();
var canvas = new RecorderCanvas(pictureRecorder);
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawPloygon4(
new[] {new Offset(10, 10), new Offset(10, 110), new Offset(90, 110), new Offset(110, 10)},
paint);
paint = new Paint {
color = new Color(0xFFFFFF00),
};
canvas.drawRect(
Rect.fromLTWH(10, 150, 100, 100),
BorderWidth.only(2, 4, 6, 8),
BorderRadius.only(0, 4, 8, 16),
paint);
canvas.concat(Matrix4x4.Translate(new Vector2(-150, -150)));
canvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -45)));
canvas.concat(Matrix4x4.Translate(new Vector2(150, 150)));
paint = new Paint {
color = new Color(0xFF00FFFF),
blurSigma = 3,
};
canvas.drawRectShadow(
Rect.fromLTWH(150, 150, 110, 120),
paint);
var picture = pictureRecorder.endRecording();
Debug.Log("picture.paintBounds: " + picture.paintBounds);
var editorCanvas = new CanvasImpl();
editorCanvas.drawPicture(picture);
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -15)));
editorCanvas.concat(Matrix4x4.Translate(new Vector2(100, 100)));
editorCanvas.drawPicture(picture);
}
void clipRect() {
var pictureRecorder = new PictureRecorder();
var canvas = new RecorderCanvas(pictureRecorder);
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawPloygon4(
new[] {new Offset(10, 10), new Offset(10, 110), new Offset(90, 110), new Offset(110, 10)},
paint);
paint = new Paint {
color = new Color(0xFFFFFF00),
};
canvas.drawRect(
Rect.fromLTWH(10, 150, 100, 100),
BorderWidth.only(2, 4, 6, 8),
BorderRadius.only(0, 4, 8, 16),
paint);
canvas.concat(Matrix4x4.Translate(new Vector2(-150, -150)));
canvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -45)));
canvas.concat(Matrix4x4.Translate(new Vector2(150, 150)));
paint = new Paint {
color = new Color(0xFF00FFFF),
blurSigma = 3,
};
canvas.drawRectShadow(
Rect.fromLTWH(150, 150, 110, 120),
paint);
var picture = pictureRecorder.endRecording();
Debug.Log("picture.paintBounds: " + picture.paintBounds);
var editorCanvas = new CanvasImpl();
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -5)));
editorCanvas.clipRect(Rect.fromLTWH(25, 15, 250, 250));
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, 5)));
editorCanvas.drawPicture(picture);
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -15)));
editorCanvas.concat(Matrix4x4.Translate(new Vector2(100, 100)));
editorCanvas.drawPicture(picture);
}
void clipRRect() {
var pictureRecorder = new PictureRecorder();
var canvas = new RecorderCanvas(pictureRecorder);
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawPloygon4(
new[] {new Offset(10, 10), new Offset(10, 110), new Offset(90, 110), new Offset(110, 10)},
paint);
paint = new Paint {
color = new Color(0xFFFFFF00),
};
canvas.drawRect(
Rect.fromLTWH(10, 150, 100, 100),
BorderWidth.only(2, 4, 6, 8),
BorderRadius.only(0, 4, 8, 16),
paint);
canvas.concat(Matrix4x4.Translate(new Vector2(-150, -150)));
canvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -45)));
canvas.concat(Matrix4x4.Translate(new Vector2(150, 150)));
paint = new Paint {
color = new Color(0xFF00FFFF),
blurSigma = 3,
};
canvas.drawRectShadow(
Rect.fromLTWH(150, 150, 110, 120),
paint);
var picture = pictureRecorder.endRecording();
Debug.Log("picture.paintBounds: " + picture.paintBounds);
var editorCanvas = new CanvasImpl();
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -5)));
editorCanvas.clipRRect(RRect.fromRectAndRadius(Rect.fromLTWH(25, 15, 250, 250), 50));
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, 5)));
editorCanvas.drawPicture(picture);
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -15)));
editorCanvas.concat(Matrix4x4.Translate(new Vector2(100, 100)));
editorCanvas.drawPicture(picture);
}
void saveLayer() {
var pictureRecorder = new PictureRecorder();
var canvas = new RecorderCanvas(pictureRecorder);
var paint = new Paint {
color = new Color(0xFFFF0000),
};
canvas.drawPloygon4(
new[] {new Offset(10, 10), new Offset(10, 110), new Offset(90, 110), new Offset(110, 10)},
paint);
paint = new Paint {
color = new Color(0xFFFFFF00),
};
canvas.drawRect(
Rect.fromLTWH(10, 150, 100, 100),
BorderWidth.only(2, 4, 6, 8),
BorderRadius.only(0, 4, 8, 16),
paint);
canvas.concat(Matrix4x4.Translate(new Vector2(-150, -150)));
canvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -45)));
canvas.concat(Matrix4x4.Translate(new Vector2(150, 150)));
canvas.clipRRect(RRect.fromRectAndRadius(Rect.fromLTWH(180, 150, 60, 120), 40));
paint = new Paint {
color = new Color(0xFF00FFFF),
blurSigma = 3,
};
canvas.drawRectShadow(
Rect.fromLTWH(150, 150, 110, 120),
paint);
var picture = pictureRecorder.endRecording();
Debug.Log("picture.paintBounds: " + picture.paintBounds);
var editorCanvas = new CanvasImpl();
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -5)));
editorCanvas.clipRRect(RRect.fromRectAndRadius(Rect.fromLTWH(25, 15, 250, 250), 50));
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, 5)));
editorCanvas.saveLayer(picture.paintBounds, new Paint {color = new Color(0x7FFFFFFF)});
editorCanvas.drawPicture(picture);
editorCanvas.concat(Matrix4x4.Rotate(Quaternion.Euler(0, 0, -15)));
editorCanvas.concat(Matrix4x4.Translate(new Vector2(100, 100)));
editorCanvas.drawPicture(picture);
editorCanvas.restore();
}
}
}