Files
denlvovich e001d74afe Update to VGSL6.0
4f8b5f480ade3f347d5f0a2d01a1618069bcb846
2024-07-12 20:33:42 +03:00

86 lines
2.1 KiB
Swift

import VGSL
protocol DivImageContentMode {
func resolveScale(_ expressionResolver: ExpressionResolver) -> DivImageScale
func resolveContentAlignmentHorizontal(
_ expressionResolver: ExpressionResolver
) -> DivAlignmentHorizontal
func resolveContentAlignmentVertical(
_ expressionResolver: ExpressionResolver
) -> DivAlignmentVertical
}
extension DivImageContentMode {
func resolveContentMode(_ context: DivBlockModelingContext) -> ImageContentMode {
let expressionResolver = context.expressionResolver
return ImageContentMode(
scale: resolveScale(expressionResolver).contentModeScale,
verticalAlignment: resolveContentAlignmentVertical(expressionResolver).contentModeAlignment,
horizontalAlignment: resolveContentAlignmentHorizontal(expressionResolver)
.makeContentModeAlignment(uiLayoutDirection: context.layoutDirection)
)
}
}
extension DivImageScale {
fileprivate var contentModeScale: ImageContentMode.Scale {
switch self {
case .fill:
.aspectFill
case .fit:
.aspectFit
case .stretch:
.resize
case .noScale:
.noScale
}
}
}
extension DivAlignmentVertical {
fileprivate var contentModeAlignment: ImageContentMode.VerticalAlignment {
switch self {
case .top:
return .top
case .center:
return .center
case .bottom:
return .bottom
case .baseline:
DivKitLogger.warning("Baseline alignment not supported.")
return .top
}
}
}
extension DivAlignmentHorizontal {
fileprivate var contentModeAlignment: ImageContentMode.HorizontalAlignment {
switch self {
case .left, .start:
.left
case .center:
.center
case .right, .end:
.right
}
}
func makeContentModeAlignment(uiLayoutDirection: UserInterfaceLayoutDirection) -> ImageContentMode
.HorizontalAlignment {
switch self {
case .left:
.left
case .center:
.center
case .right:
.right
case .start:
uiLayoutDirection == .leftToRight ? .left : .right
case .end:
uiLayoutDirection == .leftToRight ? .right : .left
}
}
}