Improvements

This commit is contained in:
Isaac 2024-04-09 17:08:31 +04:00
parent 004f49affe
commit 668ad2906d
5 changed files with 57 additions and 23 deletions

View File

@ -2150,6 +2150,7 @@ public protocol ContextExtractedContentSource: AnyObject {
var initialAppearanceOffset: CGPoint { get } var initialAppearanceOffset: CGPoint { get }
var centerVertically: Bool { get } var centerVertically: Bool { get }
var keepInPlace: Bool { get } var keepInPlace: Bool { get }
var adjustContentForSideInset: Bool { get }
var ignoreContentTouches: Bool { get } var ignoreContentTouches: Bool { get }
var blurBackground: Bool { get } var blurBackground: Bool { get }
var shouldBeDismissed: Signal<Bool, NoError> { get } var shouldBeDismissed: Signal<Bool, NoError> { get }
@ -2169,6 +2170,10 @@ public extension ContextExtractedContentSource {
return false return false
} }
var adjustContentForSideInset: Bool {
return false
}
var actionsHorizontalAlignment: ContextActionsHorizontalAlignment { var actionsHorizontalAlignment: ContextActionsHorizontalAlignment {
return .default return .default
} }

View File

@ -744,7 +744,7 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
} }
} }
let contentParentGlobalFrame: CGRect var contentParentGlobalFrame: CGRect
var contentRect: CGRect var contentRect: CGRect
var isContentResizeableVertically: Bool = false var isContentResizeableVertically: Bool = false
let _ = isContentResizeableVertically let _ = isContentResizeableVertically
@ -825,6 +825,22 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
} }
} }
var contentParentGlobalFrameOffsetX: CGFloat = 0.0
if case let .extracted(extracted) = self.source, extracted.adjustContentForSideInset {
let contentSideInset: CGFloat = actionsSideInset + 6.0
var updatedFrame = contentParentGlobalFrame
if updatedFrame.origin.x + updatedFrame.width > layout.size.width - contentSideInset {
updatedFrame.origin.x = layout.size.width - contentSideInset - updatedFrame.width
}
if updatedFrame.origin.x < contentSideInset {
updatedFrame.origin.x = contentSideInset
}
contentParentGlobalFrameOffsetX = updatedFrame.minX - contentParentGlobalFrame.minX
contentParentGlobalFrame = updatedFrame
}
let keepInPlace: Bool let keepInPlace: Bool
let actionsHorizontalAlignment: ContextActionsHorizontalAlignment let actionsHorizontalAlignment: ContextActionsHorizontalAlignment
switch self.source { switch self.source {
@ -1154,7 +1170,12 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
} else if contentX + contentWidth > layout.size.width / 2.0, actionsSize.height > 0.0 { } else if contentX + contentWidth > layout.size.width / 2.0, actionsSize.height > 0.0 {
let fixedContentX = layout.size.width - (contentX + contentWidth) let fixedContentX = layout.size.width - (contentX + contentWidth)
animationInContentXDistance = fixedContentX - contentX animationInContentXDistance = fixedContentX - contentX
}
} else {
animationInContentXDistance = contentParentGlobalFrameOffsetX
}
if animationInContentXDistance != 0.0 {
contentNode.layer.animateSpring( contentNode.layer.animateSpring(
from: -animationInContentXDistance as NSNumber, to: 0.0 as NSNumber, from: -animationInContentXDistance as NSNumber, to: 0.0 as NSNumber,
keyPath: "position.x", keyPath: "position.x",
@ -1165,7 +1186,6 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
additive: true additive: true
) )
} }
}
contentNode.layer.animateSpring( contentNode.layer.animateSpring(
from: -animationInContentYDistance as NSNumber, to: 0.0 as NSNumber, from: -animationInContentYDistance as NSNumber, to: 0.0 as NSNumber,
@ -1416,7 +1436,12 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
} else if contentX + contentWidth > layout.size.width / 2.0{ } else if contentX + contentWidth > layout.size.width / 2.0{
let fixedContentX = layout.size.width - (contentX + contentWidth) let fixedContentX = layout.size.width - (contentX + contentWidth)
animationInContentXDistance = contentX - fixedContentX animationInContentXDistance = contentX - fixedContentX
}
} else {
animationInContentXDistance = -contentParentGlobalFrameOffsetX
}
if animationInContentXDistance != 0.0 {
contentNode.offsetContainerNode.layer.animate( contentNode.offsetContainerNode.layer.animate(
from: -animationInContentXDistance as NSNumber, from: -animationInContentXDistance as NSNumber,
to: 0.0 as NSNumber, to: 0.0 as NSNumber,
@ -1427,7 +1452,6 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo
additive: true additive: true
) )
} }
}
contentNode.offsetContainerNode.position = contentNode.offsetContainerNode.position.offsetBy(dx: animationInContentXDistance, dy: -animationInContentYDistance) contentNode.offsetContainerNode.position = contentNode.offsetContainerNode.position.offsetBy(dx: animationInContentXDistance, dy: -animationInContentYDistance)
let reactionContextNodeIsAnimatingOut = self.reactionContextNodeIsAnimatingOut let reactionContextNodeIsAnimatingOut = self.reactionContextNodeIsAnimatingOut

View File

@ -4424,7 +4424,11 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
} else if let peer = forwardInfo.source ?? forwardInfo.author { } else if let peer = forwardInfo.source ?? forwardInfo.author {
item.controllerInteraction.openPeer(EnginePeer(peer), peer is TelegramUser ? .info(nil) : .chat(textInputState: nil, subject: nil, peekData: nil), nil, .default) item.controllerInteraction.openPeer(EnginePeer(peer), peer is TelegramUser ? .info(nil) : .chat(textInputState: nil, subject: nil, peekData: nil), nil, .default)
} else if let _ = forwardInfo.authorSignature { } else if let _ = forwardInfo.authorSignature {
item.controllerInteraction.displayMessageTooltip(item.message.id, item.presentationData.strings.Conversation_ForwardAuthorHiddenTooltip, forwardInfoNode, nil) var subRect: CGRect?
if let textNode = forwardInfoNode.textNode {
subRect = textNode.frame
}
item.controllerInteraction.displayMessageTooltip(item.message.id, item.presentationData.strings.Conversation_ForwardAuthorHiddenTooltip, forwardInfoNode, subRect)
} }
} }

View File

@ -73,7 +73,7 @@ public class ChatMessageForwardInfoNode: ASDisplayNode {
} }
} }
private var textNode: TextNode? public private(set) var textNode: TextNode?
private var credibilityIconNode: ASImageNode? private var credibilityIconNode: ASImageNode?
private var infoNode: InfoButtonNode? private var infoNode: InfoButtonNode?
private var expiredStoryIconView: UIImageView? private var expiredStoryIconView: UIImageView?

View File

@ -2892,6 +2892,7 @@ private final class ExtractedContentSourceImpl: ContextExtractedContentSource {
var keepInPlace: Bool var keepInPlace: Bool
let ignoreContentTouches: Bool = true let ignoreContentTouches: Bool = true
let blurBackground: Bool let blurBackground: Bool
let adjustContentForSideInset: Bool = true
private let controller: ViewController private let controller: ViewController
private let sourceNode: ContextExtractedContentContainingNode private let sourceNode: ContextExtractedContentContainingNode