您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
124 行
4.2 KiB
124 行
4.2 KiB
using System;
|
|
using UIWidgets.ui;
|
|
|
|
namespace UIWidgets.rendering {
|
|
public class RelativeRect : IEquatable<RelativeRect> {
|
|
private RelativeRect(double left, double top, double right, double bottom) {
|
|
this.left = left;
|
|
this.top = top;
|
|
this.right = right;
|
|
this.bottom = bottom;
|
|
}
|
|
|
|
public readonly double left;
|
|
public readonly double top;
|
|
public readonly double right;
|
|
public readonly double bottom;
|
|
|
|
public static RelativeRect fromLTRB(double left, double top, double right, double bottom) {
|
|
return new RelativeRect(left, top, right, bottom);
|
|
}
|
|
|
|
public static RelativeRect fromSize(Rect rect, Size container) {
|
|
return new RelativeRect(
|
|
rect.left,
|
|
rect.top,
|
|
container.width - rect.right,
|
|
container.height - rect.bottom);
|
|
}
|
|
|
|
public static RelativeRect fromRect(Rect rect, Rect container) {
|
|
return RelativeRect.fromLTRB(
|
|
rect.left - container.left,
|
|
rect.top - container.top,
|
|
container.right - rect.right,
|
|
container.bottom - rect.bottom
|
|
);
|
|
}
|
|
|
|
public static readonly RelativeRect fill = RelativeRect.fromLTRB(0.0, 0.0, 0.0, 0.0);
|
|
|
|
public bool hasInsets {
|
|
get { return this.left > 0.0 || this.top > 0.0 || this.right > 0.0 || this.bottom > 0.0; }
|
|
}
|
|
|
|
public RelativeRect shift(Offset offset) {
|
|
return RelativeRect.fromLTRB(
|
|
this.left + offset.dx,
|
|
this.top + offset.dy,
|
|
this.right - offset.dx,
|
|
this.bottom - offset.dy);
|
|
}
|
|
|
|
public RelativeRect inflate(double delta) {
|
|
return RelativeRect.fromLTRB(
|
|
this.left - delta,
|
|
this.top - delta,
|
|
this.right - delta,
|
|
this.bottom - delta);
|
|
}
|
|
|
|
public RelativeRect deflate(double delta) {
|
|
return this.inflate(-delta);
|
|
}
|
|
|
|
public RelativeRect intersect(RelativeRect other) {
|
|
return RelativeRect.fromLTRB(
|
|
Math.Max(this.left, other.left),
|
|
Math.Max(this.top, other.top),
|
|
Math.Max(this.right, other.right),
|
|
Math.Max(this.bottom, other.bottom)
|
|
);
|
|
}
|
|
|
|
public Rect toRect(Rect container) {
|
|
return Rect.fromLTRB(
|
|
this.left + container.left,
|
|
this.top + container.top,
|
|
container.right - this.right,
|
|
container.bottom - this.bottom);
|
|
}
|
|
|
|
public Rect toSize(Size container) {
|
|
return Rect.fromLTRB(
|
|
this.left,
|
|
this.top,
|
|
container.width - this.right,
|
|
container.height - this.bottom);
|
|
}
|
|
|
|
public bool Equals(RelativeRect other) {
|
|
if (object.ReferenceEquals(null, other)) return false;
|
|
if (object.ReferenceEquals(this, other)) return true;
|
|
return this.left.Equals(other.left)
|
|
&& this.top.Equals(other.top)
|
|
&& this.right.Equals(other.right)
|
|
&& this.bottom.Equals(other.bottom);
|
|
}
|
|
|
|
public override bool Equals(object obj) {
|
|
if (object.ReferenceEquals(null, obj)) return false;
|
|
if (object.ReferenceEquals(this, obj)) return true;
|
|
if (obj.GetType() != this.GetType()) return false;
|
|
return this.Equals((RelativeRect) obj);
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
unchecked {
|
|
var hashCode = this.left.GetHashCode();
|
|
hashCode = (hashCode * 397) ^ this.top.GetHashCode();
|
|
hashCode = (hashCode * 397) ^ this.right.GetHashCode();
|
|
hashCode = (hashCode * 397) ^ this.bottom.GetHashCode();
|
|
return hashCode;
|
|
}
|
|
}
|
|
|
|
public static bool operator ==(RelativeRect a, RelativeRect b) {
|
|
return object.Equals(a, b);
|
|
}
|
|
|
|
public static bool operator !=(RelativeRect a, RelativeRect b) {
|
|
return !(a == b);
|
|
}
|
|
}
|
|
}
|