diff --git a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift index d089a30758..f8f170e47b 100644 --- a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift +++ b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift @@ -641,6 +641,7 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode super.init() self.view.addSubview(portalView.view) + self.clipsToBounds = true } deinit { @@ -691,10 +692,21 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode private let contentNode: ASDisplayNode private var blurredBackgroundContents: UIImage? - private var blurredBackgroundPortalSourceView: PortalSourceView? - private var blurredBackgroundDimmedNode: GradientBackgroundNode.CloneNode? - private var blurredBackgroundDimmedOverlayView: UIView? - private var blurredBackgroundContentView: UIImageView? + + private var freeBackgroundPortalSourceView: PortalSourceView? + private var freeBackgroundNode: WallpaperBackgroundNodeImpl.BubbleBackgroundNodeImpl? { + didSet { + if self.freeBackgroundNode !== oldValue { + if let oldValue { + oldValue.view.removeFromSuperview() + } + if let freeBackgroundNode = self.freeBackgroundNode, let freeBackgroundPortalSourceView = self.freeBackgroundPortalSourceView { + freeBackgroundPortalSourceView.addSubview(freeBackgroundNode.view) + freeBackgroundNode.frame = CGRect(origin: CGPoint(), size: freeBackgroundPortalSourceView.bounds.size) + } + } + } + } private var incomingBackgroundPortalSourceView: PortalSourceView? private var incomingBackgroundNode: WallpaperBackgroundNodeImpl.BubbleBackgroundNodeImpl? { @@ -855,23 +867,19 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode super.init() if #available(iOS 12.0, *) { - let blurredBackgroundPortalSourceView = PortalSourceView() - self.blurredBackgroundPortalSourceView = blurredBackgroundPortalSourceView - blurredBackgroundPortalSourceView.alpha = 0.0001 - self.view.addSubview(blurredBackgroundPortalSourceView) - - let blurredBackgroundContentView = UIImageView() - self.blurredBackgroundContentView = blurredBackgroundContentView - blurredBackgroundPortalSourceView.addSubview(blurredBackgroundContentView) + let freeBackgroundPortalSourceView = PortalSourceView() + self.freeBackgroundPortalSourceView = freeBackgroundPortalSourceView + freeBackgroundPortalSourceView.alpha = 0.0 + self.view.addSubview(freeBackgroundPortalSourceView) let incomingBackgroundPortalSourceView = PortalSourceView() self.incomingBackgroundPortalSourceView = incomingBackgroundPortalSourceView - incomingBackgroundPortalSourceView.alpha = 0.00001 + incomingBackgroundPortalSourceView.alpha = 0.0 self.view.addSubview(incomingBackgroundPortalSourceView) let outgoingBackgroundPortalSourceView = PortalSourceView() self.outgoingBackgroundPortalSourceView = outgoingBackgroundPortalSourceView - outgoingBackgroundPortalSourceView.alpha = 0.00001 + outgoingBackgroundPortalSourceView.alpha = 0.0 self.view.addSubview(outgoingBackgroundPortalSourceView) } @@ -925,28 +933,11 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode scheduleLoopingEvent = true } } - if let gradientBackgroundNode = self.gradientBackgroundNode { - if self.blurredBackgroundDimmedNode == nil { - let blurredBackgroundDimmedNode = GradientBackgroundNode.CloneNode(parentNode: gradientBackgroundNode) - self.blurredBackgroundDimmedNode = blurredBackgroundDimmedNode - self.blurredBackgroundPortalSourceView?.addSubnode(blurredBackgroundDimmedNode) - } - if self.blurredBackgroundDimmedOverlayView == nil { - let blurredBackgroundDimmedOverlayView = UIView() - self.blurredBackgroundDimmedOverlayView = blurredBackgroundDimmedOverlayView - self.blurredBackgroundPortalSourceView?.addSubview(blurredBackgroundDimmedOverlayView) - } - } self.gradientBackgroundNode?.updateColors(colors: mappedColors) - - if let bubbleTheme = self.bubbleTheme { - self.blurredBackgroundDimmedOverlayView?.backgroundColor = selectDateFillStaticColor(theme: bubbleTheme, wallpaper: wallpaper) - } self.contentNode.backgroundColor = nil self.contentNode.contents = nil self.blurredBackgroundContents = nil - self.blurredBackgroundContentView?.image = self.blurredBackgroundContents self.motionEnabled = false self.wallpaperDisposable.set(nil) } else { @@ -956,14 +947,6 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode gradientBackgroundNode.setPatternOverlay(layer: nil) self.layer.insertSublayer(self.patternImageLayer, above: self.contentNode.layer) } - if let blurredBackgroundDimmedNode = self.blurredBackgroundDimmedNode { - self.blurredBackgroundDimmedNode = nil - blurredBackgroundDimmedNode.removeFromSupernode() - } - if let blurredBackgroundDimmedOverlayView = self.blurredBackgroundDimmedOverlayView { - self.blurredBackgroundDimmedOverlayView = nil - blurredBackgroundDimmedOverlayView.removeFromSuperview() - } self.motionEnabled = wallpaper.settings?.motion ?? false @@ -984,28 +967,24 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode }) self.contentNode.contents = image?.cgImage self.blurredBackgroundContents = image - self.blurredBackgroundContentView?.image = self.blurredBackgroundContents self.wallpaperDisposable.set(nil) } else if gradientColors.count >= 1 { self.contentNode.backgroundColor = UIColor(rgb: gradientColors[0]) self.contentNode.contents = nil self.blurredBackgroundContents = nil - self.blurredBackgroundContentView?.image = self.blurredBackgroundContents self.wallpaperDisposable.set(nil) } else { 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, dimColor: nil) - self.blurredBackgroundContentView?.image = self.blurredBackgroundContents + 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, dimColor: nil) - self.blurredBackgroundContentView?.image = self.blurredBackgroundContents + self.blurredBackgroundContents = generateBlurredContents(image: image, dimColor: wallpaperDimColor) self.wallpaperDisposable.set(nil) Queue.mainQueue().justDispatch { self._isReady.set(true) @@ -1022,7 +1001,6 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode } else { strongSelf.blurredBackgroundContents = nil } - strongSelf.blurredBackgroundContentView?.image = strongSelf.blurredBackgroundContents strongSelf._isReady.set(true) })) } @@ -1030,6 +1008,12 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode } } + if self.hasBubbleBackground(for: .free) { + self.freeBackgroundNode = WallpaperBackgroundNodeImpl.BubbleBackgroundNodeImpl(backgroundNode: self, bubbleType: .free) + } else { + self.freeBackgroundNode = nil + } + if self.hasBubbleBackground(for: .incoming) { self.incomingBackgroundNode = WallpaperBackgroundNodeImpl.BubbleBackgroundNodeImpl(backgroundNode: self, bubbleType: .incoming) } else { @@ -1283,17 +1267,8 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode let isFirstLayout = self.validLayout == nil self.validLayout = (size, displayMode) - if let blurredBackgroundPortalSourceView = self.blurredBackgroundPortalSourceView { - transition.updateFrame(view: blurredBackgroundPortalSourceView, frame: CGRect(origin: CGPoint(), size: size)) - } - if let blurredBackgroundContentView = self.blurredBackgroundContentView { - transition.updateFrame(view: blurredBackgroundContentView, frame: CGRect(origin: CGPoint(), size: size)) - } - if let blurredBackgroundDimmedNode = self.blurredBackgroundDimmedNode { - transition.updateFrame(view: blurredBackgroundDimmedNode.view, frame: CGRect(origin: CGPoint(), size: size)) - } - if let blurredBackgroundDimmedOverlayView = self.blurredBackgroundDimmedOverlayView { - transition.updateFrame(view: blurredBackgroundDimmedOverlayView, frame: CGRect(origin: CGPoint(), size: size)) + if let freeBackgroundPortalSourceView = self.freeBackgroundPortalSourceView { + transition.updateFrame(view: freeBackgroundPortalSourceView, frame: CGRect(origin: CGPoint(), size: size)) } if let incomingBackgroundPortalSourceView = self.incomingBackgroundPortalSourceView { @@ -1317,6 +1292,11 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode outgoingBubbleGradientBackgroundNode.updateLayout(size: size, transition: transition, extendAnimation: false, backwards: false, completion: {}) } + if let freeBackgroundNode = self.freeBackgroundNode { + transition.updateFrame(node: freeBackgroundNode, frame: CGRect(origin: CGPoint(), size: size)) + freeBackgroundNode.update(rect: CGRect(origin: CGPoint(), size: size), within: size, transition: transition) + } + if let incomingBackgroundNode = self.incomingBackgroundNode { transition.updateFrame(node: incomingBackgroundNode, frame: CGRect(origin: CGPoint(), size: size)) incomingBackgroundNode.update(rect: CGRect(origin: CGPoint(), size: size), within: size, transition: transition) @@ -1388,8 +1368,10 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode self.outgoingBubbleGradientBackgroundNode = nil } - if let wallpaper = self.wallpaper { - self.blurredBackgroundDimmedOverlayView?.backgroundColor = selectDateFillStaticColor(theme: bubbleTheme, wallpaper: wallpaper) + if self.hasBubbleBackground(for: .free) { + self.freeBackgroundNode = WallpaperBackgroundNodeImpl.BubbleBackgroundNodeImpl(backgroundNode: self, bubbleType: .free) + } else { + self.freeBackgroundNode = nil } if self.hasBubbleBackground(for: .incoming) { @@ -1464,11 +1446,11 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode return nil } - #if DEBUG && false + #if false var sourceView: PortalSourceView? switch type { case .free: - sourceView = self.blurredBackgroundPortalSourceView + sourceView = self.freeBackgroundPortalSourceView case .incoming: sourceView = self.incomingBackgroundPortalSourceView case .outgoing: @@ -1491,14 +1473,16 @@ final class WallpaperBackgroundNodeImpl: ASDisplayNode, WallpaperBackgroundNode } func makeFreeBackground() -> PortalView? { - guard let blurredBackgroundPortalSourceView = self.blurredBackgroundPortalSourceView else { + if !self.hasBubbleBackground(for: .free) { return nil } - guard let portalView = PortalView(matchPosition: true) else { + + if let sourceView = self.freeBackgroundPortalSourceView, let portalView = PortalView(matchPosition: true) { + sourceView.addPortal(view: portalView) + return portalView + } else { return nil } - blurredBackgroundPortalSourceView.addPortal(view: portalView) - return portalView } func hasExtraBubbleBackground() -> Bool {