Files
divkit/client/ios/DivKit/Extensions/DivImage/DivImageContentMode.swift
T
pkurchatov 6d4e785be4 Applied Swift 5.9 format
7efc9a489061fda48036f567437a3d692591ff4a
2024-02-27 10:59:51 +03:00

86 lines
2.1 KiB
Swift

import CommonCorePublic
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
}
}
}