Files
babaevmm 0f22c7d570 support wrap_content for images
commit_hash:6505a9de3666776451765b988bdae2e99a503d9e
2025-05-21 16:51:39 +03:00

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()
)
}
}