Various improvements

This commit is contained in:
Ilya Laktyushin
2023-11-22 03:24:33 +04:00
parent 31eb1081df
commit 90f09a13e4
134 changed files with 8488 additions and 3171 deletions

View File

@@ -18,6 +18,7 @@ import DirectMediaImageCache
private let deletedIcon = UIImage(bundleImageName: "Avatar/DeletedIcon")?.precomposed()
private let phoneIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/PhoneIcon"), color: .white)
public let savedMessagesIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/SavedMessagesIcon"), color: .white)
public let repostStoryIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/RepostStoryIcon"), color: .white)
private let archivedChatsIcon = UIImage(bundleImageName: "Avatar/ArchiveAvatarIcon")?.precomposed()
private let repliesIcon = generateTintedImage(image: UIImage(bundleImageName: "Avatar/RepliesMessagesIcon"), color: .white)
@@ -87,6 +88,8 @@ private func calculateColors(context: AccountContext?, explicitColorIndex: Int?,
colors = AvatarNode.grayscaleColors
} else if case .savedMessagesIcon = icon {
colors = AvatarNode.savedMessagesColors
} else if case .repostIcon = icon {
colors = AvatarNode.repostColors
} else if case .repliesIcon = icon {
colors = AvatarNode.savedMessagesColors
} else if case .editAvatarIcon = icon, let theme {
@@ -173,6 +176,7 @@ private enum AvatarNodeIcon: Equatable {
case editAvatarIcon
case deletedIcon
case phoneIcon
case repostIcon
}
public enum AvatarNodeImageOverride: Equatable {
@@ -184,6 +188,7 @@ public enum AvatarNodeImageOverride: Equatable {
case editAvatarIcon(forceNone: Bool)
case deletedIcon
case phoneIcon
case repostIcon
}
public enum AvatarNodeColorOverride {
@@ -254,6 +259,10 @@ public final class AvatarNode: ASDisplayNode {
UIColor(rgb: 0x2a9ef1), UIColor(rgb: 0x72d5fd)
]
static let repostColors: [UIColor] = [
UIColor(rgb: 0x34C76F), UIColor(rgb: 0x3DA1FD)
]
public final class ContentNode: ASDisplayNode {
private struct Params: Equatable {
let peerId: EnginePeer.Id?
@@ -457,6 +466,9 @@ public final class AvatarNode: ASDisplayNode {
case .savedMessagesIcon:
representation = nil
icon = .savedMessagesIcon
case .repostIcon:
representation = nil
icon = .repostIcon
case .repliesIcon:
representation = nil
icon = .repliesIcon
@@ -621,6 +633,9 @@ public final class AvatarNode: ASDisplayNode {
case .savedMessagesIcon:
representation = nil
icon = .savedMessagesIcon
case .repostIcon:
representation = nil
icon = .repostIcon
case .repliesIcon:
representation = nil
icon = .repliesIcon
@@ -781,7 +796,11 @@ public final class AvatarNode: ASDisplayNode {
let colorsArray: NSArray = colors.map(\.cgColor) as NSArray
var iconColor = UIColor.white
var diagonal = false
if let parameters = parameters as? AvatarNodeParameters, parameters.icon != .none {
if case .repostIcon = parameters.icon {
diagonal = true
}
if case let .archivedChatsIcon(hiddenByDefault) = parameters.icon, let theme = parameters.theme {
if hiddenByDefault {
iconColor = theme.chatList.unpinnedArchiveAvatarColor.foregroundColor
@@ -796,7 +815,11 @@ public final class AvatarNode: ASDisplayNode {
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradient(colorsSpace: colorSpace, colors: colorsArray, locations: &locations)!
context.drawLinearGradient(gradient, start: CGPoint(), end: CGPoint(x: 0.0, y: bounds.size.height), options: CGGradientDrawingOptions())
if diagonal {
context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: bounds.size.height), end: CGPoint(x: bounds.size.width, y: 0.0), options: CGGradientDrawingOptions())
} else {
context.drawLinearGradient(gradient, start: CGPoint(), end: CGPoint(x: 0.0, y: bounds.size.height), options: CGGradientDrawingOptions())
}
context.setBlendMode(.normal)
@@ -828,6 +851,15 @@ public final class AvatarNode: ASDisplayNode {
if let savedMessagesIcon = savedMessagesIcon {
context.draw(savedMessagesIcon.cgImage!, in: CGRect(origin: CGPoint(x: floor((bounds.size.width - savedMessagesIcon.size.width) / 2.0), y: floor((bounds.size.height - savedMessagesIcon.size.height) / 2.0)), size: savedMessagesIcon.size))
}
} else if case .repostIcon = parameters.icon {
let factor = bounds.size.width / 60.0
context.translateBy(x: bounds.size.width / 2.0, y: bounds.size.height / 2.0)
context.scaleBy(x: factor, y: -factor)
context.translateBy(x: -bounds.size.width / 2.0, y: -bounds.size.height / 2.0)
if let repostStoryIcon = repostStoryIcon {
context.draw(repostStoryIcon.cgImage!, in: CGRect(origin: CGPoint(x: floor((bounds.size.width - repostStoryIcon.size.width) / 2.0), y: floor((bounds.size.height - repostStoryIcon.size.height) / 2.0)), size: repostStoryIcon.size))
}
} else if case .repliesIcon = parameters.icon {
let factor = bounds.size.width / 60.0
context.translateBy(x: bounds.size.width / 2.0, y: bounds.size.height / 2.0)