operator + method
dynamic
operator +(
- Object o
)
Implementation
operator +(Object o){
switch(o){
case NamedLine n:
return this + n.expression;
case (double, PxUnit) l:
return this + Expression.literal(l);
case LiteralGetter lg:
return this + Expression.literalGetter(lg);
case double p:
return this + Expression.percent(p);
case PercentGetter pg:
return this + Expression.percentGetter(pg);
case Expression e:
if(literal != null || e.literal != null){
return Expression((Size size)=>percentGetter(size) + e.percentGetter(size), (Size size){
final a = literal?.call(size);
final b = e.literal?.call(size);
/// 单位相同或者只有一个值
if(a?.$2 == b?.$2 || a == null || b == null){
return (((a?.$1 ?? 0) + (b?.$1 ?? 0)), (a?.$2 ?? b?.$2)!);
}else
/// 单位里有 wpc 和 hpc 的统一到[w,h]pc
if(a.$2 == PxUnit.wpc){
return (a.$1 + pxUnitDoubleWidthPercentGetter(b)(size), PxUnit.wpc);
}else
if(a.$2 == PxUnit.hpc){
return (a.$1 + pxUnitDoubleHeightPercentGetter(b)(size), PxUnit.hpc);
}else
if(b.$2 == PxUnit.wpc){
return (pxUnitDoubleWidthPercentGetter(a)(size) + b.$1, PxUnit.wpc);
}else
if(b.$2 == PxUnit.hpc){
return (pxUnitDoubleWidthPercentGetter(a)(size) + b.$1, PxUnit.hpc);
/// 单位里没有 wpc 和 hpc 的统一到 px
}else{
return (pxUnitDoubleGetter(a)(size) + pxUnitDoubleGetter(b)(size), PxUnit.px);
}
});
}else{
return Expression((Size size)=>percentGetter(size) + e.percentGetter(size), null);
}
}
}