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

97 行
3.8 KiB

using System;
using Unity.UIWidgets.ui;
using UnityEngine;
namespace Unity.UIWidgets.painting {
public enum BoxFit {
fill,
contain,
cover,
fitWidth,
fitHeight,
none,
scaleDown,
}
public class FittedSizes {
public FittedSizes(Size source, Size destination) {
this.source = source;
this.destination = destination;
}
public readonly Size source;
public readonly Size destination;
public static FittedSizes applyBoxFit(BoxFit fit, Size inputSize, Size outputSize) {
if (inputSize.height <= 0.0
|| inputSize.width <= 0.0
|| outputSize.height <= 0.0
|| outputSize.width <= 0.0) {
return new FittedSizes(Size.zero, Size.zero);
}
Size sourceSize = null;
Size destinationSize = null;
switch (fit) {
case BoxFit.fill:
sourceSize = inputSize;
destinationSize = outputSize;
break;
case BoxFit.contain:
sourceSize = inputSize;
if (outputSize.width / outputSize.height > sourceSize.width / sourceSize.height) {
destinationSize = new Size(sourceSize.width * outputSize.height / sourceSize.height,
outputSize.height);
}
else {
destinationSize = new Size(outputSize.width,
sourceSize.height * outputSize.width / sourceSize.width);
}
break;
case BoxFit.cover:
if (outputSize.width / outputSize.height > inputSize.width / inputSize.height) {
sourceSize = new Size(inputSize.width, inputSize.width * outputSize.height / outputSize.width);
}
else {
sourceSize = new Size(inputSize.height * outputSize.width / outputSize.height,
inputSize.height);
}
destinationSize = outputSize;
break;
case BoxFit.fitWidth:
sourceSize = new Size(inputSize.width, inputSize.width * outputSize.height / outputSize.width);
destinationSize = new Size(outputSize.width,
sourceSize.height * outputSize.width / sourceSize.width);
break;
case BoxFit.fitHeight:
sourceSize = new Size(inputSize.height * outputSize.width / outputSize.height, inputSize.height);
destinationSize = new Size(sourceSize.width * outputSize.height / sourceSize.height,
outputSize.height);
break;
case BoxFit.none:
sourceSize = new Size(Mathf.Min(inputSize.width, outputSize.width),
Mathf.Min(inputSize.height, outputSize.height));
destinationSize = sourceSize;
break;
case BoxFit.scaleDown:
sourceSize = inputSize;
destinationSize = inputSize;
float aspectRatio = inputSize.width / inputSize.height;
if (destinationSize.height > outputSize.height) {
destinationSize = new Size(outputSize.height * aspectRatio,
outputSize.height);
}
if (destinationSize.width > outputSize.width) {
destinationSize = new Size(outputSize.width, outputSize.width / aspectRatio);
}
break;
}
return new FittedSizes(sourceSize, destinationSize);
}
}
}