Various improvements

This commit is contained in:
Ilya Laktyushin
2025-01-10 05:15:00 +04:00
parent 2bf24b2bd9
commit b0511f146e
32 changed files with 720 additions and 393 deletions

View File

@@ -88,6 +88,7 @@ public final class DrawingMessageRenderer {
private let isOverlay: Bool
private let isLink: Bool
private let isGift: Bool
private let wallpaperColor: UIColor?
private let messagesContainerNode: ASDisplayNode
private var avatarHeaderNode: ListViewItemHeaderNode?
@@ -99,7 +100,8 @@ public final class DrawingMessageRenderer {
isNight: Bool = false,
isOverlay: Bool = false,
isLink: Bool = false,
isGift: Bool = false
isGift: Bool = false,
wallpaperColor: UIColor? = nil
) {
self.context = context
self.messages = messages
@@ -107,6 +109,7 @@ public final class DrawingMessageRenderer {
self.isOverlay = isOverlay
self.isLink = isLink
self.isGift = isGift
self.wallpaperColor = wallpaperColor
self.messagesContainerNode = ASDisplayNode()
self.messagesContainerNode.clipsToBounds = true
@@ -169,14 +172,19 @@ public final class DrawingMessageRenderer {
}
}
}
var borderColor: UIColor?
if self.isGift && !self.isOverlay, let wallpaperColor = self.wallpaperColor {
borderColor = wallpaperColor.withMultiplied(hue: 1.0, saturation: 1.5, brightness: self.isNight ? 1.6 : 0.7).withAlphaComponent(0.6)
}
self.generate(size: size) { image in
self.generate(size: size, borderColor: borderColor) { image in
completion(size, image, mediaRect)
}
})
}
private func generate(size: CGSize, completion: @escaping (UIImage) -> Void) {
private func generate(size: CGSize, borderColor: UIColor? = nil, completion: @escaping (UIImage) -> Void) {
UIGraphicsBeginImageContextWithOptions(size, false, 3.0)
self.view.drawHierarchy(in: CGRect(origin: CGPoint(), size: size), afterScreenUpdates: true)
let img = UIGraphicsGetImageFromCurrentImageContext()
@@ -184,6 +192,11 @@ public final class DrawingMessageRenderer {
let finalImage = generateImage(CGSize(width: size.width * 3.0, height: size.height * 3.0), contextGenerator: { size, context in
context.clear(CGRect(origin: .zero, size: size))
if let borderColor {
context.addPath(CGPath(roundedRect: CGRect(origin: CGPoint(x: 6.0, y: 12.0), size: CGSize(width: size.width - 6.0, height: size.height - 13.0)), cornerWidth: 70.0, cornerHeight: 70.0, transform: nil))
context.setFillColor(borderColor.cgColor)
context.fillPath()
}
if let cgImage = img?.cgImage {
context.draw(cgImage, in: CGRect(origin: .zero, size: size), byTiling: false)
}
@@ -351,14 +364,16 @@ public final class DrawingMessageRenderer {
messages: [Message],
parentView: UIView,
isLink: Bool = false,
isGift: Bool = false
isGift: Bool = false,
wallpaperDayColor: UIColor? = nil,
wallpaperNightColor: UIColor? = nil
) {
self.context = context
self.messages = messages
self.dayContainerNode = ContainerNode(context: context, messages: messages, isLink: isLink, isGift: isGift)
self.nightContainerNode = ContainerNode(context: context, messages: messages, isNight: true, isLink: isLink, isGift: isGift)
self.overlayContainerNode = ContainerNode(context: context, messages: messages, isOverlay: true, isLink: isLink, isGift: isGift)
self.dayContainerNode = ContainerNode(context: context, messages: messages, isLink: isLink, isGift: isGift, wallpaperColor: wallpaperDayColor)
self.nightContainerNode = ContainerNode(context: context, messages: messages, isNight: true, isLink: isLink, isGift: isGift, wallpaperColor: wallpaperNightColor)
self.overlayContainerNode = ContainerNode(context: context, messages: messages, isOverlay: true, isLink: isLink, isGift: isGift, wallpaperColor: nil)
parentView.addSubview(self.dayContainerNode.view)
parentView.addSubview(self.nightContainerNode.view)