From bb44184bd3a25f31cc24eb29a6812684a77887a7 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sat, 20 Jul 2019 00:30:23 +0200 Subject: [PATCH] Fixed chat message menu presentation --- .../Display/Display/NavigationController.swift | 2 +- .../TelegramUI/ChatControllerNode.swift | 12 ++++++++++-- .../ChatMessageActionSheetControllerNode.swift | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/submodules/Display/Display/NavigationController.swift b/submodules/Display/Display/NavigationController.swift index 70b8690ec9..08be727574 100644 --- a/submodules/Display/Display/NavigationController.swift +++ b/submodules/Display/Display/NavigationController.swift @@ -272,7 +272,7 @@ open class NavigationController: UINavigationController, ContainableController, return (CGRect(origin: CGPoint(), size: detailFrame.size), ContainerViewLayout(size: CGSize(width: detailWidth, height: layout.size.height), metrics: LayoutMetrics(widthClass: .regular, heightClass: .regular), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)) } case .single: - return (CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height), metrics: LayoutMetrics(widthClass: .compact, heightClass: .compact), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)) + return (CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height), metrics: LayoutMetrics(widthClass: .compact, heightClass: layout.size.height > 900.0 ? .regular : .compact), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift index 782f0ad96e..157aeed6e1 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift @@ -1815,8 +1815,16 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { }, associatedController: contextMenuController) self.messageActionSheetController = (controller, stableId) self.accessibilityElementsHidden = true - if let sheetActions = sheetActions, !sheetActions.isEmpty { - self.controllerInteraction.presentGlobalOverlayController(controller, nil) + if let sheetActions = sheetActions, !sheetActions.isEmpty, let (layout, _) = self.validLayout { + var isSlideOver = false + if case .compact = layout.metrics.widthClass, case .regular = layout.metrics.heightClass { + isSlideOver = true + } + if isSlideOver { + self.controllerInteraction.presentController(controller, nil) + } else { + self.controllerInteraction.presentGlobalOverlayController(controller, nil) + } } animateIn = true } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift index 2129e36e14..df60074541 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift @@ -170,6 +170,11 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode { horizontalOffset += UIScreenPixel } + var isSlideOver = false + if case .compact = layout.metrics.widthClass, case .regular = layout.metrics.heightClass { + isSlideOver = true + } + transition.updateFrame(node: self.sideDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: max(0.0, horizontalOffset), height: max(0.0, layout.size.height - inputHeight)))) transition.updateFrame(node: self.sideInputDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - inputHeight), size: CGSize(width: max(0.0, horizontalOrigin), height: max(0.0, inputHeight)))) transition.updateFrame(node: self.inputDimNode, frame: CGRect(origin: CGPoint(x: horizontalOrigin, y: layout.size.height - inputHeight), size: CGSize(width: layout.size.width, height: inputHeight))) @@ -185,12 +190,19 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode { itemsHeight += actionNode.bounds.height } - let containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight - inputHeight), size: CGSize(width: containerWidth, height: itemsHeight)) + var containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight), size: CGSize(width: containerWidth, height: itemsHeight)) + if isSlideOver { + containerFrame = containerFrame.offsetBy(dx: 0.0, dy: -inputHeight) + } transition.updateFrame(node: self.itemsContainerNode, frame: containerFrame) transition.updateFrame(node: self.itemsShadowNode, frame: containerFrame.insetBy(dx: -shadowInset, dy: -shadowInset)) height += itemsHeight - height += inputHeight + + if isSlideOver { + height += inputHeight + } + height += 6.0 return height