public enum AspectRatio{
Fill,
AspectFill,
AspectFit
}
[SerializeField, HideInInspector] private AspectRatio m_AspectRatioMode = AspectRatio.Fill;
public AspectRatio AspectRatioMode{
get{
return m_AspectRatioMode;
}
set{
if(m_AspectRatioMode != value){
m_AspectRatioMode = value;
MarkAsChanged();
}
}
}
[...]
public override Vector4 drawingDimensions
{
Vector2 size = localSize;
if(mainTexture != null){
switch (m_AspectRatioMode) {
case AspectRatio.Fill:
break;
case AspectRatio.AspectFill:
{
Vector2 maxSize = size;
float xRatio = maxSize.x / mainTexture.width;
float yRatio = maxSize.y / mainTexture.height;
float maxRatio = Mathf.Max(xRatio, yRatio);
size
= new Vector2
(mainTexture
.width * maxRatio, mainTexture
.height * maxRatio
); }
break;
case AspectRatio.AspectFit:
{
Vector2 maxSize = size;
float xRatio = maxSize.x / mainTexture.width;
float yRatio = maxSize.y / mainTexture.height;
float minRatio = Mathf.Min(xRatio, yRatio);
size
= new Vector2
(mainTexture
.width * minRatio, mainTexture
.height * minRatio
); }
break;
default:
throw new System.ArgumentOutOfRangeException(); }
}
[...]