mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
86 lines
2.1 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|