Files
divkit/client/ios/DivKit/Extensions/DivBackgroundExtensions.swift
burstein 952816cb15 Supported color_map in radial gradient
commit_hash:607005fa7cb1f725a36c680773f47a32a49353c2
2025-04-04 13:55:08 +03:00

47 lines
1.7 KiB
Swift

import CoreGraphics
import Foundation
import LayoutKit
import VGSL
extension DivBackground {
func makeBlockBackground(
context: DivBlockModelingContext
) -> LayoutKit.Background? {
let expressionResolver = context.expressionResolver
switch self {
case let .divLinearGradient(gradient):
return gradient.makeBlockLinearGradient(context).map { .gradient(.linear($0)) }
case let .divRadialGradient(gradient):
return gradient.makeBlockRadialGradient(context).map { .gradient(.radial($0)) }
case let .divImageBackground(imageBackground):
let image = BackgroundImage(
imageHolder: context.imageHolderFactory.make(
imageBackground.resolveImageUrl(expressionResolver)
),
contentMode: imageBackground.resolveContentMode(context),
alpha: imageBackground.resolveAlpha(expressionResolver),
effects: imageBackground.resolveEffects(expressionResolver)
)
return .image(image)
case let .divSolidBackground(solidBackground):
return solidBackground.resolveColor(expressionResolver).map { .solidColor($0) }
case let .divNinePatchBackground(ninePatchBackground):
let image = NinePatchImage(
imageHolder: context.imageHolderFactory.make(
ninePatchBackground.resolveImageUrl(expressionResolver)
),
insets: ninePatchBackground.insets.resolve(expressionResolver)
)
return .ninePatchImage(image)
}
}
}
extension DivImageBackground: DivImageContentMode {}
extension DivImageBackground {
fileprivate func resolveEffects(_ expressionResolver: ExpressionResolver) -> [ImageEffect] {
filters?.compactMap { $0.resolveEffect(expressionResolver) } ?? []
}
}