Files
divkit/client/ios/DivKit/Extensions/DivImage/DivImageExtensions.swift
T
morevsavva 52ccd56888 Format files by codestyle.
Прогнал форматтер на всех файлах.
2022-12-22 16:21:24 +03:00

74 lines
2.4 KiB
Swift

import Foundation
import BaseUI
import CommonCore
import LayoutKit
import Networking
extension DivImage: DivBlockModeling, DivImageProtocol {
public func makeBlock(context: DivBlockModelingContext) throws -> Block {
try applyBaseProperties(
to: { try makeBaseBlock(context: context) },
context: context,
actions: makeActions(context: context.actionContext),
actionAnimation: actionAnimation.makeActionAnimation(with: context.expressionResolver),
doubleTapActions: makeDoubleTapActions(context: context.actionContext),
longTapActions: makeLongTapActions(context: context.actionContext)
)
}
private func makeBaseBlock(context: DivBlockModelingContext) throws -> Block {
try checkLayoutTraits(context: context)
let expressionResolver = context.expressionResolver
let highPriority = resolveHighPriorityPreviewShow(expressionResolver)
let imageHolderFactory: ImageHolderFactory
if highPriority, let highPriorityImageHolderFactory = context.highPriorityImageHolderFactory {
imageHolderFactory = highPriorityImageHolderFactory
} else {
imageHolderFactory = context.imageHolderFactory
}
let imageHolder = imageHolderFactory.make(
resolveImageUrl(expressionResolver),
resolvePlaceholder(expressionResolver)
)
return ImageBlock(
imageHolder: imageHolder,
widthTrait: makeContentWidthTrait(with: context),
height: resolveHeight(context),
contentMode: resolveContentMode(expressionResolver),
tintColor: resolveTintColor(expressionResolver),
tintMode: resolveTintMode(expressionResolver).tintMode,
effects: makeEffects(with: expressionResolver),
metalImageRenderingEnabled: context.flagsInfo.metalImageRenderingEnabled,
appearanceAnimation: appearanceAnimation?.makeAppearanceAnimation(with: expressionResolver)
)
}
}
extension DivBlendMode {
fileprivate var tintMode: TintMode {
switch self {
case .sourceIn:
return .sourceIn
case .sourceAtop:
return .sourceAtop
case .darken:
return .darken
case .lighten:
return .lighten
case .multiply:
return .multiply
case .screen:
return .screen
}
}
}
extension DivImage {
fileprivate func makeEffects(with resolver: ExpressionResolver) -> [ImageEffect] {
filters?.compactMap { $0.makeImageEffect(with: resolver) } ?? []
}
}