Files
divkit/client/ios/DivKit/Extensions/DivSizeExtensions.swift
T
ventywing 9b151d2a54 Fallback match_parent child size on wrap_content constrained
Новый подход с фолбеком размеров с match_parent на wrap_content constrained
2022-10-07 12:44:02 +03:00

85 lines
2.0 KiB
Swift

import CoreGraphics
import CommonCore
import LayoutKit
extension DivSize {
func makeLayoutTrait(with expressionResolver: ExpressionResolver) -> LayoutTrait {
switch self {
case let .divFixedSize(size):
return .fixed(
size.resolveUnit(expressionResolver)
.makeScaledValue(size.resolveValue(expressionResolver) ?? 0)
)
case let .divMatchParentSize(size):
let weight = LayoutTrait.Weight(
rawValue: CGFloat(size.resolveWeight(expressionResolver) ?? 1)
)!
return .weighted(weight)
case let .divWrapContentSize(wrapContent):
let constrained = wrapContent.resolveConstrained(expressionResolver) ?? false
return .intrinsic(constrained: constrained)
}
}
var isIntrinsic: Bool {
switch self {
case .divFixedSize, .divMatchParentSize:
return false
case .divWrapContentSize:
return true
}
}
}
#if !DEBUG
extension DivSize: Equatable {
public static func ==(lhs: DivSize, rhs: DivSize) -> Bool {
switch (lhs, rhs) {
case let (.divFixedSize(l), .divFixedSize(r)):
return l == r
case let (.divMatchParentSize(l), .divMatchParentSize(r)):
return l == r
case let (.divWrapContentSize(l), .divWrapContentSize(r)):
return l == r
default:
return false
}
}
}
extension DivFixedSize: Equatable {
public static func ==(lhs: DivFixedSize, rhs: DivFixedSize) -> Bool {
guard
lhs.unit == rhs.unit,
lhs.value == rhs.value
else {
return false
}
return true
}
}
extension DivMatchParentSize: Equatable {
public static func ==(lhs: DivMatchParentSize, rhs: DivMatchParentSize) -> Bool {
guard
lhs.weight == rhs.weight
else {
return false
}
return true
}
}
extension DivWrapContentSize: Equatable {
public static func ==(lhs: DivWrapContentSize, rhs: DivWrapContentSize) -> Bool {
guard
lhs.constrained == rhs.constrained
else {
return false
}
return true
}
}
#endif