mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
This commit is contained in:
commit
3fee94d82b
@ -1119,8 +1119,8 @@ public final class MessageInputPanelComponent: Component {
|
|||||||
theme: component.theme,
|
theme: component.theme,
|
||||||
strings: component.strings,
|
strings: component.strings,
|
||||||
presentController: component.presentController,
|
presentController: component.presentController,
|
||||||
audioRecorder: component.audioRecorder,
|
audioRecorder: nil,
|
||||||
videoRecordingStatus: component.videoRecordingStatus
|
videoRecordingStatus: nil
|
||||||
)),
|
)),
|
||||||
environment: {},
|
environment: {},
|
||||||
containerSize: CGSize(width: 33.0, height: 33.0)
|
containerSize: CGSize(width: 33.0, height: 33.0)
|
||||||
|
@ -390,6 +390,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
private let scroller: Scroller
|
private let scroller: Scroller
|
||||||
|
|
||||||
let componentContainerView: UIView
|
let componentContainerView: UIView
|
||||||
|
let overlayContainerView: SparseContainerView
|
||||||
let itemsContainerView: UIView
|
let itemsContainerView: UIView
|
||||||
let controlsContainerView: UIView
|
let controlsContainerView: UIView
|
||||||
let controlsClippingView: UIView
|
let controlsClippingView: UIView
|
||||||
@ -474,6 +475,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
self.sendMessageContext = StoryItemSetContainerSendMessage()
|
self.sendMessageContext = StoryItemSetContainerSendMessage()
|
||||||
|
|
||||||
self.componentContainerView = UIView()
|
self.componentContainerView = UIView()
|
||||||
|
self.overlayContainerView = SparseContainerView()
|
||||||
|
|
||||||
self.itemsContainerView = UIView()
|
self.itemsContainerView = UIView()
|
||||||
|
|
||||||
@ -515,6 +517,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
|
|
||||||
self.addSubview(self.componentContainerView)
|
self.addSubview(self.componentContainerView)
|
||||||
|
self.addSubview(self.overlayContainerView)
|
||||||
|
|
||||||
self.itemsContainerView.addSubview(self.scroller)
|
self.itemsContainerView.addSubview(self.scroller)
|
||||||
self.scroller.delegate = self
|
self.scroller.delegate = self
|
||||||
@ -531,7 +534,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
self.componentContainerView.addSubview(self.viewListsContainer)
|
self.componentContainerView.addSubview(self.viewListsContainer)
|
||||||
|
|
||||||
self.closeButton.addSubview(self.closeButtonIconView)
|
self.closeButton.addSubview(self.closeButtonIconView)
|
||||||
self.componentContainerView.addSubview(self.closeButton)
|
self.overlayContainerView.addSubview(self.closeButton)
|
||||||
self.closeButton.addTarget(self, action: #selector(self.closePressed), for: .touchUpInside)
|
self.closeButton.addTarget(self, action: #selector(self.closePressed), for: .touchUpInside)
|
||||||
|
|
||||||
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))
|
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))
|
||||||
@ -557,8 +560,11 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if self.itemsContainerView.frame.contains(point) {
|
if self.itemsContainerView.frame.contains(point) {
|
||||||
if !self.isPointInsideContentArea(point: point) {
|
if self.viewListDisplayState != .hidden {
|
||||||
return []
|
} else {
|
||||||
|
if !self.isPointInsideContentArea(point: point) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2111,6 +2117,12 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
removeOnCompletion: false
|
removeOnCompletion: false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.overlayContainerView.clipsToBounds = true
|
||||||
|
let overlayToFrame = sourceLocalFrame
|
||||||
|
let overlayToBounds = CGRect(origin: CGPoint(x: overlayToFrame.minX, y: overlayToFrame.minY), size: overlayToFrame.size)
|
||||||
|
self.overlayContainerView.layer.animatePosition(from: CGPoint(), to: overlayToFrame.center.offsetBy(dx: -self.overlayContainerView.center.x, dy: -self.overlayContainerView.center.y), duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false, additive: true)
|
||||||
|
self.overlayContainerView.layer.animateBounds(from: self.overlayContainerView.bounds, to: overlayToBounds, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false)
|
||||||
|
|
||||||
if !transitionOut.destinationIsAvatar {
|
if !transitionOut.destinationIsAvatar {
|
||||||
let transitionView = transitionOut.transitionView
|
let transitionView = transitionOut.transitionView
|
||||||
|
|
||||||
@ -2379,6 +2391,10 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
transition.setBounds(view: self.componentContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize))
|
transition.setBounds(view: self.componentContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize))
|
||||||
transition.setScale(view: self.componentContainerView, scale: dismissPanScale)
|
transition.setScale(view: self.componentContainerView, scale: dismissPanScale)
|
||||||
|
|
||||||
|
transition.setPosition(view: self.overlayContainerView, position: CGPoint(x: availableSize.width * 0.5, y: availableSize.height * 0.5 + dismissPanOffset))
|
||||||
|
transition.setBounds(view: self.overlayContainerView, bounds: CGRect(origin: CGPoint(), size: availableSize))
|
||||||
|
transition.setScale(view: self.overlayContainerView, scale: dismissPanScale)
|
||||||
|
|
||||||
var bottomContentInset: CGFloat
|
var bottomContentInset: CGFloat
|
||||||
if !component.safeInsets.bottom.isZero {
|
if !component.safeInsets.bottom.isZero {
|
||||||
bottomContentInset = component.safeInsets.bottom + 1.0
|
bottomContentInset = component.safeInsets.bottom + 1.0
|
||||||
|
@ -838,7 +838,12 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
|
|
||||||
self.videoRecorder.set(.single(nil))
|
self.videoRecorder.set(.single(nil))
|
||||||
|
|
||||||
self.sendMessages(view: view, peer: peer, messages: [updatedMessage])
|
self.performWithPossibleStealthModeConfirmation(view: view, action: { [weak self, weak view] in
|
||||||
|
guard let self, let view else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.sendMessages(view: view, peer: peer, messages: [updatedMessage])
|
||||||
|
})
|
||||||
}, displaySlowmodeTooltip: { [weak self] view, rect in
|
}, displaySlowmodeTooltip: { [weak self] view, rect in
|
||||||
//self?.interfaceInteraction?.displaySlowmodeTooltip(view, rect)
|
//self?.interfaceInteraction?.displaySlowmodeTooltip(view, rect)
|
||||||
let _ = self
|
let _ = self
|
||||||
@ -883,9 +888,14 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
|
|
||||||
let waveformBuffer: Data? = data.waveform
|
let waveformBuffer: Data? = data.waveform
|
||||||
|
|
||||||
self.sendMessages(view: view, peer: peer, messages: [.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: randomId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: Int64(data.compressedData.count), attributes: [.Audio(isVoice: true, duration: Int(data.duration), title: nil, performer: nil, waveform: waveformBuffer)])), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])])
|
self.performWithPossibleStealthModeConfirmation(view: view, action: { [weak self, weak view] in
|
||||||
|
guard let self, let view else {
|
||||||
HapticFeedback().tap()
|
return
|
||||||
|
}
|
||||||
|
self.sendMessages(view: view, peer: peer, messages: [.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: randomId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: Int64(data.compressedData.count), attributes: [.Audio(isVoice: true, duration: Int(data.duration), title: nil, performer: nil, waveform: waveformBuffer)])), replyToMessageId: nil, replyToStoryId: focusedStoryId, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])])
|
||||||
|
|
||||||
|
HapticFeedback().tap()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if let videoRecorderValue = self.videoRecorderValue {
|
} else if let videoRecorderValue = self.videoRecorderValue {
|
||||||
|
@ -419,7 +419,7 @@ public final class StoryFooterPanelComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let minContentX: CGFloat = 16.0
|
let minContentX: CGFloat = 16.0
|
||||||
let maxContentX: CGFloat = floor((availableSize.width - contentWidth) * 0.5)
|
let maxContentX: CGFloat = (availableSize.width - contentWidth) * 0.5
|
||||||
var contentX: CGFloat = minContentX.interpolate(to: maxContentX, amount: component.expandFraction)
|
var contentX: CGFloat = minContentX.interpolate(to: maxContentX, amount: component.expandFraction)
|
||||||
|
|
||||||
let avatarsNodeFrame = CGRect(origin: CGPoint(x: contentX, y: floor((size.height - avatarsSize.height) * 0.5)), size: avatarsSize)
|
let avatarsNodeFrame = CGRect(origin: CGPoint(x: contentX, y: floor((size.height - avatarsSize.height) * 0.5)), size: avatarsSize)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user