mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix legacy wallpaper dim
This commit is contained in:
parent
534276883b
commit
a300543891
@ -18,7 +18,7 @@ import HierarchyTrackingLayer
|
||||
|
||||
private let motionAmount: CGFloat = 32.0
|
||||
|
||||
private func generateBlurredContents(image: UIImage) -> UIImage? {
|
||||
private func generateBlurredContents(image: UIImage, dimColor: UIColor?) -> UIImage? {
|
||||
let size = image.size.aspectFitted(CGSize(width: 64.0, height: 64.0))
|
||||
guard let context = DrawingContext(size: size, scale: 1.0, opaque: true, clear: false) else {
|
||||
return nil
|
||||
@ -31,6 +31,13 @@ private func generateBlurredContents(image: UIImage) -> UIImage? {
|
||||
telegramFastBlurMore(Int32(context.size.width), Int32(context.size.height), Int32(context.bytesPerRow), context.bytes)
|
||||
|
||||
adjustSaturationInContext(context: context, saturation: 1.7)
|
||||
|
||||
if let dimColor {
|
||||
context.withFlippedContext { c in
|
||||
c.setFillColor(dimColor.cgColor)
|
||||
c.fill(CGRect(origin: CGPoint(), size: size))
|
||||
}
|
||||
}
|
||||
|
||||
return context.generateImage()
|
||||
}
|
||||
@ -323,6 +330,7 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
|
||||
private var cleanWallpaperNode: ASDisplayNode?
|
||||
private var gradientWallpaperNode: GradientBackgroundNode.CloneNode?
|
||||
private var overlayNode: ASDisplayNode?
|
||||
private weak var backgroundNode: WallpaperBackgroundNodeImpl?
|
||||
private var index: SparseBag<BubbleBackgroundNodeImpl>.Index?
|
||||
|
||||
@ -369,11 +377,14 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
guard let backgroundNode = self.backgroundNode else {
|
||||
return
|
||||
}
|
||||
|
||||
var overlayColor: UIColor?
|
||||
|
||||
if let bubbleTheme = backgroundNode.bubbleTheme, let bubbleCorners = backgroundNode.bubbleCorners {
|
||||
let wallpaper = backgroundNode.wallpaper ?? bubbleTheme.chat.defaultWallpaper
|
||||
|
||||
let graphics = PresentationResourcesChat.principalGraphics(theme: bubbleTheme, wallpaper: wallpaper, bubbleCorners: bubbleCorners)
|
||||
|
||||
var needsCleanBackground = false
|
||||
switch self.bubbleType {
|
||||
case .incoming:
|
||||
@ -401,6 +412,10 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
self.contentNode.image = nil
|
||||
self.contentNode.backgroundColor = nil
|
||||
needsCleanBackground = true
|
||||
|
||||
if wallpaper.isBuiltin {
|
||||
overlayColor = selectDateFillStaticColor(theme: bubbleTheme, wallpaper: wallpaper)
|
||||
}
|
||||
}
|
||||
|
||||
var isInvertedGradient = false
|
||||
@ -490,6 +505,21 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
cleanWallpaperNode.removeFromSupernode()
|
||||
}
|
||||
}
|
||||
|
||||
if let overlayColor {
|
||||
let overlayNode: ASDisplayNode
|
||||
if let current = self.overlayNode {
|
||||
overlayNode = current
|
||||
} else {
|
||||
overlayNode = ASDisplayNode()
|
||||
self.overlayNode = overlayNode
|
||||
self.addSubnode(overlayNode)
|
||||
}
|
||||
overlayNode.backgroundColor = overlayColor
|
||||
} else if let overlayNode = self.overlayNode {
|
||||
self.overlayNode = nil
|
||||
overlayNode.removeFromSupernode()
|
||||
}
|
||||
|
||||
if let (rect, containerSize) = self.currentLayout {
|
||||
self.update(rect: rect, within: containerSize)
|
||||
@ -521,6 +551,9 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
gradientWallpaperNode.layer.contentsRect = shiftedContentsRect
|
||||
}
|
||||
}
|
||||
if let overlayNode = self.overlayNode {
|
||||
transition.updateFrame(layer: overlayNode.layer, frame: self.bounds, delay: delay)
|
||||
}
|
||||
}
|
||||
|
||||
func update(rect: CGRect, within containerSize: CGSize, animator: ControlledTransitionAnimator) {
|
||||
@ -538,6 +571,9 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
animator.updateFrame(layer: gradientWallpaperNode.layer, frame: self.bounds, completion: nil)
|
||||
animator.updateContentsRect(layer: gradientWallpaperNode.layer, contentsRect: shiftedContentsRect, completion: nil)
|
||||
}
|
||||
if let overlayNode = self.overlayNode {
|
||||
animator.updateFrame(layer: overlayNode.layer, frame: self.bounds, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
func update(rect: CGRect, within containerSize: CGSize, transition: CombinedTransition) {
|
||||
@ -555,6 +591,9 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
transition.updateFrame(layer: gradientWallpaperNode.layer, frame: self.bounds)
|
||||
gradientWallpaperNode.layer.contentsRect = shiftedContentsRect
|
||||
}
|
||||
if let overlayNode = self.overlayNode {
|
||||
transition.updateFrame(layer: overlayNode.layer, frame: self.bounds)
|
||||
}
|
||||
}
|
||||
|
||||
func offset(value: CGPoint, animationCurve: ContainedViewLayoutTransitionCurve, duration: Double) {
|
||||
@ -864,6 +903,8 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
|
||||
var gradientColors: [UInt32] = []
|
||||
var gradientAngle: Int32 = 0
|
||||
|
||||
let wallpaperDimColor: UIColor? = nil
|
||||
|
||||
if case let .color(color) = wallpaper {
|
||||
gradientColors = [color]
|
||||
@ -936,14 +977,14 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
self.contentNode.backgroundColor = .white
|
||||
if let image = chatControllerBackgroundImage(theme: nil, wallpaper: wallpaper, mediaBox: self.context.sharedContext.accountManager.mediaBox, knockoutMode: false) {
|
||||
self.contentNode.contents = image.cgImage
|
||||
self.blurredBackgroundContents = generateBlurredContents(image: image)
|
||||
self.blurredBackgroundContents = generateBlurredContents(image: image, dimColor: wallpaperDimColor)
|
||||
self.wallpaperDisposable.set(nil)
|
||||
Queue.mainQueue().justDispatch {
|
||||
self._isReady.set(true)
|
||||
}
|
||||
} else if let image = chatControllerBackgroundImage(theme: nil, wallpaper: wallpaper, mediaBox: self.context.account.postbox.mediaBox, knockoutMode: false) {
|
||||
self.contentNode.contents = image.cgImage
|
||||
self.blurredBackgroundContents = generateBlurredContents(image: image)
|
||||
self.blurredBackgroundContents = generateBlurredContents(image: image, dimColor: wallpaperDimColor)
|
||||
self.wallpaperDisposable.set(nil)
|
||||
Queue.mainQueue().justDispatch {
|
||||
self._isReady.set(true)
|
||||
@ -956,7 +997,7 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
}
|
||||
strongSelf.contentNode.contents = image?.0?.cgImage
|
||||
if let image = image?.0 {
|
||||
strongSelf.blurredBackgroundContents = generateBlurredContents(image: image)
|
||||
strongSelf.blurredBackgroundContents = generateBlurredContents(image: image, dimColor: wallpaperDimColor)
|
||||
} else {
|
||||
strongSelf.blurredBackgroundContents = nil
|
||||
}
|
||||
@ -1432,6 +1473,10 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode
|
||||
}
|
||||
|
||||
func makeFreeBackground() -> PortalView? {
|
||||
if !self.hasBubbleBackground(for: .free) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if let sourceView = self.freeBackgroundPortalSourceView, let portalView = PortalView(matchPosition: true) {
|
||||
sourceView.addPortal(view: portalView)
|
||||
return portalView
|
||||
|
Loading…
x
Reference in New Issue
Block a user