mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
0f22c7d570
commit_hash:6505a9de3666776451765b988bdae2e99a503d9e
60 lines
2.1 KiB
Swift
60 lines
2.1 KiB
Swift
import Foundation
|
|
import LayoutKit
|
|
import VGSL
|
|
|
|
extension DivImage: DivBlockModeling, DivImageProtocol {
|
|
public func makeBlock(context: DivBlockModelingContext) throws -> Block {
|
|
let context = modifiedContextParentPath(context)
|
|
return try applyBaseProperties(
|
|
to: { try makeBaseBlock(context: context) },
|
|
context: context,
|
|
actionsHolder: self,
|
|
customAccessibilityParams: CustomAccessibilityParams(defaultTraits: .image)
|
|
)
|
|
}
|
|
|
|
private func makeBaseBlock(context: DivBlockModelingContext) throws -> Block {
|
|
let expressionResolver = context.expressionResolver
|
|
let highPriority = resolveHighPriorityPreviewShow(expressionResolver)
|
|
let widthTrait = resolveContentWidthTrait(context)
|
|
let height = resolveHeight(context)
|
|
return ImageBlock(
|
|
imageHolder: context.imageHolderFactory.make(
|
|
resolveImageUrl(expressionResolver),
|
|
resolvePlaceholder(expressionResolver, highPriority: highPriority)
|
|
),
|
|
widthTrait: widthTrait,
|
|
height: height,
|
|
contentMode: resolveContentMode(context),
|
|
tintColor: resolveTintColor(expressionResolver),
|
|
tintMode: resolveTintMode(expressionResolver).tintMode,
|
|
effects: resolveEffects(expressionResolver),
|
|
appearanceAnimation: appearanceAnimation?.resolve(expressionResolver),
|
|
blurUsingMetal: context.flagsInfo.imageBlurPreferMetal,
|
|
tintUsingMetal: context.flagsInfo.imageTintPreferMetal,
|
|
path: context.path
|
|
)
|
|
}
|
|
}
|
|
|
|
extension DivImage {
|
|
fileprivate func resolveEffects(_ expressionResolver: ExpressionResolver) -> [ImageEffect] {
|
|
filters?.compactMap { $0.resolveEffect(expressionResolver) } ?? []
|
|
}
|
|
}
|
|
|
|
extension DivFadeTransition {
|
|
fileprivate func resolve(
|
|
_ expressionResolver: ExpressionResolver
|
|
) -> TransitioningAnimation {
|
|
TransitioningAnimation(
|
|
kind: .fade,
|
|
start: resolveAlpha(expressionResolver),
|
|
end: 1,
|
|
duration: TimeInterval(milliseconds: resolveDuration(expressionResolver)),
|
|
delay: TimeInterval(milliseconds: resolveStartDelay(expressionResolver)),
|
|
timingFunction: resolveInterpolator(expressionResolver).asTimingFunction()
|
|
)
|
|
}
|
|
}
|