diff --git a/submodules/DirectMediaImageCache/Sources/DirectMediaImageCache.swift b/submodules/DirectMediaImageCache/Sources/DirectMediaImageCache.swift index 8cc41a6eef..e27b4c49ce 100644 --- a/submodules/DirectMediaImageCache/Sources/DirectMediaImageCache.swift +++ b/submodules/DirectMediaImageCache/Sources/DirectMediaImageCache.swift @@ -345,14 +345,16 @@ public final class DirectMediaImageCache { return nil } - var resultImage: UIImage? + var blurredImage: UIImage? + if includeBlurred, let data = immediateThumbnailData.flatMap(decodeTinyThumbnail), let image = loadImage(data: data), let blurredImageValue = generateBlurredThumbnail(image: image, adjustSaturation: true) { + blurredImage = blurredImageValue + } + + var resultImage: UIImage? for otherWidth in possibleWidths.reversed() { if otherWidth == width { if let data = try? Data(contentsOf: URL(fileURLWithPath: self.getCachePath(resourceId: resource.resource.resource.id, imageType: .square(width: otherWidth)))), let image = loadImage(data: data) { - if blurredImage == nil, includeBlurred, let data = immediateThumbnailData.flatMap(decodeTinyThumbnail), let image = loadImage(data: data), let blurredImageValue = generateBlurredThumbnail(image: image, adjustSaturation: true) { - blurredImage = blurredImageValue - } return GetMediaResult(image: image, blurredImage: blurredImage, loadSignal: nil) } } else { @@ -369,16 +371,9 @@ public final class DirectMediaImageCache { if let blurredImageValue = generateBlurredThumbnail(image: image) { resultImage = blurredImageValue } - if includeBlurred, let blurredImageValue = generateBlurredThumbnail(image: image, adjustSaturation: true) { - blurredImage = blurredImageValue - } } } - if blurredImage == nil, includeBlurred, let data = immediateThumbnailData.flatMap(decodeTinyThumbnail), let image = loadImage(data: data), let blurredImageValue = generateBlurredThumbnail(image: image, adjustSaturation: true) { - blurredImage = blurredImageValue - } - return GetMediaResult(image: resultImage, blurredImage: blurredImage, loadSignal: self.getLoadSignal(width: width, userLocation: userLocation, userContentType: .image, resource: resource.resource, resourceSizeLimit: resource.size)) } @@ -386,7 +381,17 @@ public final class DirectMediaImageCache { if synchronous { return self.getImageSynchronous(message: message, userLocation: .peer(message.id.peerId), media: media, width: width, possibleWidths: possibleWidths, includeBlurred: includeBlurred) } else { - return GetMediaResult(image: nil, blurredImage: nil, loadSignal: Signal { subscriber in + var immediateThumbnailData: Data? + if let image = media as? TelegramMediaImage { + immediateThumbnailData = image.immediateThumbnailData + } else if let file = media as? TelegramMediaFile { + immediateThumbnailData = file.immediateThumbnailData + } + var blurredImage: UIImage? + if includeBlurred, let data = immediateThumbnailData.flatMap(decodeTinyThumbnail), let image = loadImage(data: data), let blurredImageValue = generateBlurredThumbnail(image: image, adjustSaturation: true) { + blurredImage = blurredImageValue + } + return GetMediaResult(image: nil, blurredImage: blurredImage, loadSignal: Signal { subscriber in let result = self.getImageSynchronous(message: message, userLocation: .peer(message.id.peerId), media: media, width: width, possibleWidths: possibleWidths, includeBlurred: includeBlurred) guard let result = result else { subscriber.putNext(nil) diff --git a/submodules/DrawingUI/Sources/DrawingNeonTool.swift b/submodules/DrawingUI/Sources/DrawingNeonTool.swift index 53f7f44d93..78d4790eae 100644 --- a/submodules/DrawingUI/Sources/DrawingNeonTool.swift +++ b/submodules/DrawingUI/Sources/DrawingNeonTool.swift @@ -228,26 +228,6 @@ final class NeonTool: DrawingElement { self.activePath = bezierPath return true - -// if self.points.isEmpty { -// self.points[self.ctr] = point -// return -// } -// self.ctr += 1 -// self.points[self.ctr] = point -// -// if self.ctr == 4 { -// self.points[3] = CGPoint(x: (self.points[2]!.x + self.points[4]!.x) / 2.0, y: (self.points[2]!.y + self.points[4]!.y) / 2.0) -// -// self.path.move(to: self.points[0]!) -// self.path.addCurve(to: self.points[3]!, controlPoint1: self.points[1]!, controlPoint2: self.points[2]!) -// -// self.points[0] = self.points[3]! -// self.points[1] = self.points[4]! -// -// self.ctr = 1 -// self.addedSegments += 1 -// } } private func currentBezierPath(_ ctr: Int) -> UIBezierPath? { diff --git a/submodules/DrawingUI/Sources/DrawingPenTool.swift b/submodules/DrawingUI/Sources/DrawingPenTool.swift index 1e3f80e6d2..ca380146f7 100644 --- a/submodules/DrawingUI/Sources/DrawingPenTool.swift +++ b/submodules/DrawingUI/Sources/DrawingPenTool.swift @@ -228,7 +228,7 @@ final class PenTool: DrawingElement { func setupRenderLayer() -> DrawingRenderLayer? { return nil } - + func updatePath(_ point: DrawingPoint, state: DrawingGesturePipeline.DrawingGestureState) { let result = self.addPoint(point, state: state) let resetActiveRect = result?.0 ?? false diff --git a/submodules/DrawingUI/Sources/DrawingView.swift b/submodules/DrawingUI/Sources/DrawingView.swift index 868724d478..e62c049c83 100644 --- a/submodules/DrawingUI/Sources/DrawingView.swift +++ b/submodules/DrawingUI/Sources/DrawingView.swift @@ -129,6 +129,8 @@ public final class DrawingView: UIView, UIGestureRecognizerDelegate, TGPhotoDraw public var screenSize: CGSize + private var previousPointTimestamp: Double? + init(size: CGSize) { self.imageSize = size self.screenSize = size @@ -202,11 +204,13 @@ public final class DrawingView: UIView, UIGestureRecognizerDelegate, TGPhotoDraw guard let strongSelf = self else { return } + let currentTimestamp = CACurrentMediaTime() switch state { case .began: strongSelf.isDrawing = true strongSelf.previousStrokePoint = nil - strongSelf.drawingGestureStartTimestamp = CACurrentMediaTime() + strongSelf.drawingGestureStartTimestamp = currentTimestamp + strongSelf.previousPointTimestamp = currentTimestamp if strongSelf.uncommitedElement != nil { strongSelf.finishDrawing(rect: CGRect(origin: .zero, size: strongSelf.imageSize), synchronous: true) @@ -267,6 +271,10 @@ public final class DrawingView: UIView, UIGestureRecognizerDelegate, TGPhotoDraw strongSelf.uncommitedElement = newElement strongSelf.updateInternalState() case .changed: + if let previousPointTimestamp = strongSelf.previousPointTimestamp, currentTimestamp - previousPointTimestamp < 0.016 { + return + } + strongSelf.previousPointTimestamp = currentTimestamp strongSelf.uncommitedElement?.updatePath(point, state: state) // if case let .direct(point) = path, let lastPoint = line.points.last { @@ -409,7 +417,7 @@ public final class DrawingView: UIView, UIGestureRecognizerDelegate, TGPhotoDraw public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } - + private var longPressTimer: SwiftSignalKit.Timer? private var fillCircleLayer: CALayer? @objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer) { diff --git a/submodules/SparseItemGrid/Sources/SparseItemGrid.swift b/submodules/SparseItemGrid/Sources/SparseItemGrid.swift index 406b1cd4e3..0623f9b134 100644 --- a/submodules/SparseItemGrid/Sources/SparseItemGrid.swift +++ b/submodules/SparseItemGrid/Sources/SparseItemGrid.swift @@ -1159,10 +1159,18 @@ public final class SparseItemGrid: ASDisplayNode { self.coveringOffsetUpdated = coveringOffsetUpdated super.init() + + self.fromViewport.allowsGroupOpacity = true + self.toViewport.allowsGroupOpacity = true self.addSubnode(fromViewport) self.addSubnode(toViewport) } + + deinit { + self.fromViewport.allowsGroupOpacity = false + self.toViewport.allowsGroupOpacity = false + } func update(progress: CGFloat, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { guard var fromAnchorFrame = self.fromViewport.frameForItem(at: self.anchorItemIndex) else { diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift index b4e51c0256..4de4199ce4 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift @@ -287,7 +287,6 @@ private class ExtendedMediaOverlayNode: ASDisplayNode { self.dustNode.revealed = { [weak self] in self?.isRevealed = true self?.blurredImageNode.removeFromSupernode() - self?.isUserInteractionEnabled = false } self.dustNode.tapped = { [weak self] in self?.isRevealed = true @@ -295,7 +294,7 @@ private class ExtendedMediaOverlayNode: ASDisplayNode { } } else { self.blurredImageNode.isHidden = true - self.isUserInteractionEnabled = false + self.isRevealed = true } self.blurredImageNode.frame = imageFrame @@ -1941,7 +1940,7 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio var tappable = false switch state { case .play, .pause, .download, .none: - tappable = false + tappable = true default: break }