Improve media pinch-to-zoom in Instant View

This commit is contained in:
Ilya Laktyushin
2023-03-17 22:52:50 +04:00
parent beedb2ce7e
commit de8aea109f
7 changed files with 48 additions and 27 deletions

View File

@@ -20,6 +20,8 @@ final class InstantPageContentNode : ASDisplayNode {
private let longPressMedia: (InstantPageMedia) -> Void
private let openPeer: (EnginePeer) -> Void
private let openUrl: (InstantPageUrlItem) -> Void
private let activatePinchPreview: ((PinchSourceContainerNode) -> Void)?
private let pinchPreviewFinished: ((InstantPageNode) -> Void)?
var currentLayoutTiles: [InstantPageTile] = []
var currentLayoutItemsWithNodes: [InstantPageItem] = []
@@ -40,7 +42,7 @@ final class InstantPageContentNode : ASDisplayNode {
private var previousVisibleBounds: CGRect?
init(context: AccountContext, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, sourceLocation: InstantPageSourceLocation, theme: InstantPageTheme, items: [InstantPageItem], contentSize: CGSize, inOverlayPanel: Bool = false, openMedia: @escaping (InstantPageMedia) -> Void, longPressMedia: @escaping (InstantPageMedia) -> Void, openPeer: @escaping (EnginePeer) -> Void, openUrl: @escaping (InstantPageUrlItem) -> Void) {
init(context: AccountContext, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, sourceLocation: InstantPageSourceLocation, theme: InstantPageTheme, items: [InstantPageItem], contentSize: CGSize, inOverlayPanel: Bool = false, openMedia: @escaping (InstantPageMedia) -> Void, longPressMedia: @escaping (InstantPageMedia) -> Void, activatePinchPreview: ((PinchSourceContainerNode) -> Void)?, pinchPreviewFinished: ((InstantPageNode) -> Void)?, openPeer: @escaping (EnginePeer) -> Void, openUrl: @escaping (InstantPageUrlItem) -> Void) {
self.context = context
self.strings = strings
self.nameDisplayOrder = nameDisplayOrder
@@ -49,6 +51,8 @@ final class InstantPageContentNode : ASDisplayNode {
self.openMedia = openMedia
self.longPressMedia = longPressMedia
self.activatePinchPreview = activatePinchPreview
self.pinchPreviewFinished = pinchPreviewFinished
self.openPeer = openPeer
self.openUrl = openUrl
@@ -190,19 +194,23 @@ final class InstantPageContentNode : ASDisplayNode {
let detailsIndex = detailsIndex
if let newNode = item.node(context: self.context, strings: self.strings, nameDisplayOrder: self.nameDisplayOrder, theme: theme, sourceLocation: self.sourceLocation, openMedia: { [weak self] media in
self?.openMedia(media)
}, longPressMedia: { [weak self] media in
self?.longPressMedia(media)
},
activatePinchPreview: nil,
pinchPreviewFinished: nil,
openPeer: { [weak self] peerId in
self?.openPeer(peerId)
}, openUrl: { [weak self] url in
self?.openUrl(url)
}, updateWebEmbedHeight: { _ in
}, updateDetailsExpanded: { [weak self] expanded in
self?.updateDetailsExpanded(detailsIndex, expanded)
}, currentExpandedDetails: self.currentExpandedDetails) {
}, longPressMedia: { [weak self] media in
self?.longPressMedia(media)
},
activatePinchPreview: { [weak self] node in
self?.activatePinchPreview?(node)
},
pinchPreviewFinished: { [weak self] node in
self?.pinchPreviewFinished?(node)
},
openPeer: { [weak self] peerId in
self?.openPeer(peerId)
}, openUrl: { [weak self] url in
self?.openUrl(url)
}, updateWebEmbedHeight: { _ in
}, updateDetailsExpanded: { [weak self] expanded in
self?.updateDetailsExpanded(detailsIndex, expanded)
}, currentExpandedDetails: self.currentExpandedDetails) {
newNode.frame = itemFrame
newNode.updateLayout(size: itemFrame.size, transition: transition)
if let topNode = topNode {