mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
73 lines
3.4 KiB
Swift
73 lines
3.4 KiB
Swift
import Foundation
|
|
import AsyncDisplayKit
|
|
import Display
|
|
import TelegramCore
|
|
import Postbox
|
|
import SwiftSignalKit
|
|
|
|
final class SettingsThemeWallpaperNode: ASDisplayNode {
|
|
private var wallpaper: TelegramWallpaper?
|
|
|
|
let buttonNode = HighlightTrackingButtonNode()
|
|
let backgroundNode = ASDisplayNode()
|
|
let imageNode = TransformImageNode()
|
|
|
|
var pressed: (() -> Void)?
|
|
|
|
override init() {
|
|
self.imageNode.contentAnimations = [.subsequentUpdates]
|
|
super.init()
|
|
|
|
self.addSubnode(self.backgroundNode)
|
|
self.addSubnode(self.imageNode)
|
|
self.addSubnode(self.buttonNode)
|
|
|
|
self.buttonNode.addTarget(self, action: #selector(self.buttonPressed), forControlEvents: .touchUpInside)
|
|
}
|
|
|
|
func setWallpaper(account: Account, wallpaper: TelegramWallpaper, size: CGSize) {
|
|
self.buttonNode.frame = CGRect(origin: CGPoint(), size: size)
|
|
self.backgroundNode.frame = CGRect(origin: CGPoint(), size: size)
|
|
self.imageNode.frame = CGRect(origin: CGPoint(), size: size)
|
|
|
|
if self.wallpaper != wallpaper {
|
|
self.wallpaper = wallpaper
|
|
switch wallpaper {
|
|
case .builtin:
|
|
self.imageNode.isHidden = false
|
|
self.backgroundNode.isHidden = true
|
|
self.imageNode.setSignal(settingsBuiltinWallpaperImage(account: account))
|
|
let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: CGSize(), boundingSize: size, intrinsicInsets: UIEdgeInsets()))
|
|
apply()
|
|
case let .color(color):
|
|
self.imageNode.isHidden = true
|
|
self.backgroundNode.isHidden = false
|
|
self.backgroundNode.backgroundColor = UIColor(rgb: UInt32(bitPattern: color))
|
|
case let .image(representations):
|
|
self.imageNode.isHidden = false
|
|
self.backgroundNode.isHidden = true
|
|
|
|
let convertedRepresentations: [(TelegramMediaImageRepresentation, MediaResourceReference)] = representations.map({ ($0, .wallpaper(resource: $0.resource)) })
|
|
self.imageNode.setSignal(chatAvatarGalleryPhoto(account: account, representations: convertedRepresentations, autoFetchFullSize: true))
|
|
let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: largestImageRepresentation(representations)!.dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets()))
|
|
apply()
|
|
}
|
|
} else if let wallpaper = self.wallpaper {
|
|
switch wallpaper {
|
|
case .builtin:
|
|
let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: CGSize(), boundingSize: size, intrinsicInsets: UIEdgeInsets()))
|
|
apply()
|
|
case .color:
|
|
break
|
|
case let .image(representations):
|
|
let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: largestImageRepresentation(representations)!.dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets()))
|
|
apply()
|
|
}
|
|
}
|
|
}
|
|
|
|
@objc func buttonPressed() {
|
|
self.pressed?()
|
|
}
|
|
}
|