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

371 行
12 KiB

using System;
using System.Collections.Generic;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.ui;
using UnityEngine;
using Color = Unity.UIWidgets.ui.Color;
namespace Unity.UIWidgets.painting {
public partial class painting_ {
internal static float _getHue(float red, float green, float blue, float max, float delta) {
float hue = 0;
if (max == 0.0f) {
hue = 0.0f;
}
else if (max == red) {
hue = 60.0f * (((green - blue) / delta) % 6);
}
else if (max == green) {
hue = 60.0f * (((blue - red) / delta) + 2);
}
else if (max == blue) {
hue = 60.0f * (((red - green) / delta) + 4);
}
return hue;
}
internal static Color _colorFromHue(
float alpha,
float hue,
float chroma,
float secondary,
float match
) {
float red;
float green;
float blue;
if (hue < 60.0f) {
red = chroma;
green = secondary;
blue = 0.0f;
}
else if (hue < 120.0f) {
red = secondary;
green = chroma;
blue = 0.0f;
}
else if (hue < 180.0f) {
red = 0.0f;
green = chroma;
blue = secondary;
}
else if (hue < 240.0f) {
red = 0.0f;
green = secondary;
blue = chroma;
}
else if (hue < 300.0f) {
red = secondary;
green = 0.0f;
blue = chroma;
}
else {
red = chroma;
green = 0.0f;
blue = secondary;
}
return Color.fromARGB((alpha * 0xFF).round(), ((red + match) * 0xFF).round(),
((green + match) * 0xFF).round(), ((blue + match) * 0xFF).round());
}
}
public class HSVColor {
HSVColor(float alpha, float hue, float saturation, float value) {
D.assert(this.alpha >= 0);
D.assert(this.alpha <= 1);
D.assert(hue >= 0);
D.assert(hue <= 360);
D.assert(saturation >= 0);
D.assert(saturation <= 1);
D.assert(value >= 0);
D.assert(value <= 1);
this.alpha = alpha;
this.hue = hue;
this.saturation = saturation;
this.value = value;
}
public static HSVColor fromAHSV(float alpha, float hue, float saturation, float value) {
return new HSVColor(alpha, hue, saturation, value);
}
public HSVColor withAlpha(float alpha) {
return fromAHSV(alpha, hue, saturation, value);
}
public HSVColor withHue(float hue) {
return fromAHSV(alpha, hue, saturation, value);
}
public HSVColor withSaturation(float saturation) {
return fromAHSV(alpha, hue, saturation, value);
}
public HSVColor withValue(float value) {
return fromAHSV(alpha, hue, saturation, value);
}
public Color toColor() {
float chroma = saturation * value;
float secondary = chroma * (1.0f - (((hue / 60.0f) % 2.0f) - 1.0f).abs());
float match = value - chroma;
return painting_._colorFromHue(alpha, hue, chroma, secondary, match);
}
public readonly float alpha;
public readonly float hue;
public readonly float saturation;
public readonly float value;
public override string ToString() {
return $"{foundation_.objectRuntimeType(this, "HSVColor")}({alpha}, {hue}, {saturation},{value})";
}
}
public class HSLColor : IEquatable<HSLColor> {
private HSLColor(float alpha,
float hue,
float saturation,
float lightness) {
this.alpha = alpha;
this.hue = hue;
this.saturation = saturation;
this.lightness = lightness;
}
public static HSLColor fromAHSL(float alpha, float hue, float saturation, float lightness) {
D.assert(alpha >= 0.0f);
D.assert(alpha <= 1.0f);
D.assert(hue >= 0.0f);
D.assert(hue <= 360.0f);
D.assert(saturation >= 0.0f);
D.assert(saturation <= 1.0f);
D.assert(lightness >= 0.0f);
D.assert(lightness <= 1.0f);
return new HSLColor(alpha, hue, saturation, lightness);
}
public static HSLColor fromColor(Color color) {
float red = color.red / 0xFF;
float green = color.green / 0xFF;
float blue = color.blue / 0xFF;
float max = Mathf.Max(red, Mathf.Max(green, blue));
float min = Mathf.Min(red, Mathf.Min(green, blue));
float delta = max - min;
float alpha = color.alpha / 0xFF;
float hue = painting_._getHue(red, green, blue, max, delta);
float lightness = (max + min) / 2.0f;
float saturation = lightness == 1.0f
? 0.0f
: ((delta / (1.0f - Mathf.Abs(2.0f * lightness - 1.0f))).clamp(0.0f, 1.0f));
return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}
readonly float alpha;
readonly float hue;
readonly float saturation;
readonly float lightness;
HSLColor withAlpha(float alpha) {
return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}
HSLColor withHue(float hue) {
return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}
HSLColor withSaturation(float saturation) {
return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}
HSLColor withLightness(float lightness) {
return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}
Color toColor() {
float chroma = Mathf.Abs(1.0f - (2.0f * lightness - 1.0f) * saturation);
float secondary = chroma * (1.0f - Mathf.Abs(((hue / 60.0f) % 2.0f) - 1.0f));
float match = lightness - chroma / 2.0f;
return painting_._colorFromHue(alpha, hue, chroma, secondary, match);
}
HSLColor _scaleAlpha(float factor) {
return withAlpha(alpha * factor);
}
static HSLColor lerp(HSLColor a, HSLColor b, float t) {
D.assert(t != null);
if (a == null && b == null)
return null;
if (a == null)
return b._scaleAlpha(t);
if (b == null)
return a._scaleAlpha(1.0f - t);
return HSLColor.fromAHSL(
Mathf.Lerp(a.alpha, b.alpha, t).clamp(0.0f, 1.0f),
Mathf.Lerp(a.hue, b.hue, t) % 360.0f,
Mathf.Lerp(a.saturation, b.saturation, t).clamp(0.0f, 1.0f),
Mathf.Lerp(a.lightness, b.lightness, t).clamp(0.0f, 1.0f)
);
}
public override string ToString() {
return $"{foundation_.objectRuntimeType(this, "HSLColor")}({alpha}, {hue}, {saturation}, {lightness})";
}
public static bool operator ==(HSLColor left, HSLColor right) {
return Equals(left, right);
}
public static bool operator !=(HSLColor left, HSLColor right) {
return !Equals(left, right);
}
public bool Equals(HSLColor other) {
if (ReferenceEquals(null, other)) {
return false;
}
if (ReferenceEquals(this, other)) {
return true;
}
return alpha.Equals(other.alpha) && hue.Equals(other.hue) && saturation.Equals(other.saturation) &&
lightness.Equals(other.lightness);
}
public override bool Equals(object obj) {
if (ReferenceEquals(null, obj)) {
return false;
}
if (ReferenceEquals(this, obj)) {
return true;
}
if (obj.GetType() != GetType()) {
return false;
}
return Equals((HSLColor) obj);
}
public override int GetHashCode() {
unchecked {
var hashCode = alpha.GetHashCode();
hashCode = (hashCode * 397) ^ hue.GetHashCode();
hashCode = (hashCode * 397) ^ saturation.GetHashCode();
hashCode = (hashCode * 397) ^ lightness.GetHashCode();
return hashCode;
}
}
}
public class ColorSwatch<T> : Color {
public ColorSwatch(
uint primary,
Dictionary<T, Color> swatch) : base(primary) {
_swatch = swatch;
}
protected readonly Dictionary<T, Color> _swatch;
public Color this[T index] {
get { return _swatch[index]; }
}
public bool Equals(ColorSwatch<T> other) {
if (ReferenceEquals(null, other)) {
return false;
}
if (ReferenceEquals(this, other)) {
return true;
}
return value == other.value && _swatch == other._swatch;
}
public override bool Equals(object obj) {
if (ReferenceEquals(null, obj)) {
return false;
}
if (ReferenceEquals(this, obj)) {
return true;
}
if (obj.GetType() != GetType()) {
return false;
}
return Equals((ColorSwatch<T>) obj);
}
public static bool operator ==(ColorSwatch<T> left, ColorSwatch<T> right) {
return Equals(left, right);
}
public static bool operator !=(ColorSwatch<T> left, ColorSwatch<T> right) {
return !Equals(left, right);
}
public override int GetHashCode() {
unchecked {
var hashCode = (int) value;
hashCode = (hashCode * 397) ^ _swatch.GetHashCode();
return hashCode;
}
}
public override string ToString() {
return GetType() + "(primary value: " + base.ToString() + ")";
}
}
public class ColorProperty : DiagnosticsProperty<Color> {
public ColorProperty(
string name = "",
Color value = null,
bool showName = true,
object defaultValue = null,
DiagnosticsTreeStyle style = DiagnosticsTreeStyle.singleLine,
DiagnosticLevel level = DiagnosticLevel.info
) : base(name, value,
defaultValue: defaultValue,
showName: showName,
style: style,
level: level
) {
D.assert(showName != null);
D.assert(style != null);
D.assert(level != null);
}
public override Dictionary<string, object> toJsonMap(DiagnosticsSerializationDelegate Delegate) {
Dictionary<string, object> json = base.toJsonMap(Delegate);
if (value != null) {
json["valueProperties"] = new Dictionary<string, object> {
{"red", value.red},
{"green", value.green},
{"blue", value.blue},
{"alpha", value.alpha}
};
}
return json;
}
}
}