From 7ed12611930c3f43deb819564291e7b916b70e93 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Tue, 23 Sep 2025 21:59:54 +0800 Subject: [PATCH] Various improvements --- submodules/Display/Source/SwitchNode.swift | 1 - submodules/Display/Source/ToolbarNode.swift | 2 +- .../TabBarUI/Sources/TabBarContollerNode.swift | 12 ++++++++---- .../ChatMessageAnimatedStickerItemNode.swift | 2 +- .../Sources/ChatMessageBubbleItemNode.swift | 2 +- .../ChatMessageInstantVideoItemNode.swift | 4 ++-- .../Sources/ChatMessageItemCommon.swift | 10 +++++----- .../Sources/ChatMessageDateHeader.swift | 18 +++++++++--------- .../Sources/ChatMessageStickerItemNode.swift | 2 +- .../Sources/TabBarComponent.swift | 2 ++ .../Sources/ChatHistoryNavigationButtons.swift | 2 +- 11 files changed, 31 insertions(+), 26 deletions(-) diff --git a/submodules/Display/Source/SwitchNode.swift b/submodules/Display/Source/SwitchNode.swift index e8790656af..3dc327c0d2 100644 --- a/submodules/Display/Source/SwitchNode.swift +++ b/submodules/Display/Source/SwitchNode.swift @@ -67,7 +67,6 @@ open class SwitchNode: ASDisplayNode { (self.view as! UISwitch).backgroundColor = self.backgroundColor (self.view as! UISwitch).tintColor = self.frameColor - //(self.view as! UISwitch).thumbTintColor = self.handleColor (self.view as! UISwitch).onTintColor = self.contentColor (self.view as! UISwitch).setOn(self._isOn, animated: false) diff --git a/submodules/Display/Source/ToolbarNode.swift b/submodules/Display/Source/ToolbarNode.swift index 37b5c757fb..35259142a5 100644 --- a/submodules/Display/Source/ToolbarNode.swift +++ b/submodules/Display/Source/ToolbarNode.swift @@ -130,7 +130,7 @@ public final class ToolbarNode: ASDisplayNode { self.backgroundNode.update(size: size, transition: transition) transition.updateFrame(node: self.separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: size.width, height: UIScreenPixel))) - var sideInset: CGFloat = 16.0 + var sideInset: CGFloat = 16.0 + 8.0 self.leftTitle.attributedText = NSAttributedString(string: toolbar.leftAction?.title ?? "", font: Font.regular(17.0), textColor: (toolbar.leftAction?.isEnabled ?? false) ? self.theme.barSelectedTextColor : self.theme.barTextColor) self.leftButton.accessibilityLabel = toolbar.leftAction?.title diff --git a/submodules/TabBarUI/Sources/TabBarContollerNode.swift b/submodules/TabBarUI/Sources/TabBarContollerNode.swift index 10f5d42a24..3f997a491e 100644 --- a/submodules/TabBarUI/Sources/TabBarContollerNode.swift +++ b/submodules/TabBarUI/Sources/TabBarContollerNode.swift @@ -239,14 +239,18 @@ final class TabBarControllerNode: ASDisplayNode { self.view.addSubview(tabBarComponentView) } transition.updateFrame(view: tabBarComponentView, frame: tabBarFrame) + transition.updateAlpha(layer: tabBarComponentView.layer, alpha: params.toolbar == nil ? 1.0 : 0.0) } transition.updateFrame(node: self.disabledOverlayNode, frame: tabBarFrame) + let toolbarHeight = 50.0 + params.layout.insets(options: options).bottom + let toolbarFrame = CGRect(origin: CGPoint(x: 0.0, y: params.layout.size.height - toolbarHeight), size: CGSize(width: params.layout.size.width, height: toolbarHeight)) + if let toolbar = params.toolbar { if let toolbarNode = self.toolbarNode { - transition.updateFrame(node: toolbarNode, frame: tabBarFrame) - toolbarNode.updateLayout(size: tabBarFrame.size, leftInset: params.layout.safeInsets.left, rightInset: params.layout.safeInsets.right, additionalSideInsets: params.layout.additionalInsets, bottomInset: bottomInset, toolbar: toolbar, transition: transition) + transition.updateFrame(node: toolbarNode, frame: toolbarFrame) + toolbarNode.updateLayout(size: toolbarFrame.size, leftInset: params.layout.safeInsets.left, rightInset: params.layout.safeInsets.right, additionalSideInsets: params.layout.additionalInsets, bottomInset: bottomInset, toolbar: toolbar, transition: transition) } else { let toolbarNode = ToolbarNode(theme: ToolbarTheme(theme: self.theme), displaySeparator: true, left: { [weak self] in self?.toolbarActionSelected(.left) @@ -255,8 +259,8 @@ final class TabBarControllerNode: ASDisplayNode { }, middle: { [weak self] in self?.toolbarActionSelected(.middle) }) - toolbarNode.frame = tabBarFrame - toolbarNode.updateLayout(size: tabBarFrame.size, leftInset: params.layout.safeInsets.left, rightInset: params.layout.safeInsets.right, additionalSideInsets: params.layout.additionalInsets, bottomInset: bottomInset, toolbar: toolbar, transition: .immediate) + toolbarNode.frame = toolbarFrame + toolbarNode.updateLayout(size: toolbarFrame.size, leftInset: params.layout.safeInsets.left, rightInset: params.layout.safeInsets.right, additionalSideInsets: params.layout.additionalInsets, bottomInset: bottomInset, toolbar: toolbar, transition: .immediate) self.addSubnode(toolbarNode) self.toolbarNode = toolbarNode if transition.isAnimated { diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift index cd45e7dade..da828f78b5 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -893,7 +893,7 @@ public class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } if hasAvatar { - avatarInset = layoutConstants.avatarDiameter + avatarInset = layoutConstants.avatarInset } else { avatarInset = 0.0 } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift index 547b785ab5..3afaf1f793 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift @@ -1713,7 +1713,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI } } - avatarInset = hasAvatar ? layoutConstants.avatarDiameter : 0.0 + avatarInset = hasAvatar ? layoutConstants.avatarInset : 0.0 if isSidePanelOpen { avatarInset = 0.0 } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageInstantVideoItemNode/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageInstantVideoItemNode/Sources/ChatMessageInstantVideoItemNode.swift index 105ae1fc04..f5bdcefb0d 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageInstantVideoItemNode/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageInstantVideoItemNode/Sources/ChatMessageInstantVideoItemNode.swift @@ -331,7 +331,7 @@ public class ChatMessageInstantVideoItemNode: ChatMessageItemView, ASGestureReco } if hasAvatar { - avatarInset = layoutConstants.avatarDiameter + avatarInset = layoutConstants.avatarInset } else { avatarInset = 0.0 } @@ -1343,7 +1343,7 @@ public class ChatMessageInstantVideoItemNode: ChatMessageItemView, ASGestureReco let avatarInset: CGFloat if self.appliedHasAvatar { - avatarInset = layoutConstants.avatarDiameter + avatarInset = layoutConstants.avatarInset } else { avatarInset = 0.0 } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageItemCommon/Sources/ChatMessageItemCommon.swift b/submodules/TelegramUI/Components/Chat/ChatMessageItemCommon/Sources/ChatMessageItemCommon.swift index 0eab89f7bb..3b701f3940 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageItemCommon/Sources/ChatMessageItemCommon.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageItemCommon/Sources/ChatMessageItemCommon.swift @@ -106,7 +106,7 @@ public struct ChatMessageItemWallpaperLayoutConstants { } public struct ChatMessageItemLayoutConstants { - public var avatarDiameter: CGFloat + public var avatarInset: CGFloat public var timestampHeaderHeight: CGFloat public var timestampDateAndTopicHeaderHeight: CGFloat @@ -118,8 +118,8 @@ public struct ChatMessageItemLayoutConstants { public var instantVideo: ChatMessageItemInstantVideoConstants public var wallpapers: ChatMessageItemWallpaperLayoutConstants - public init(avatarDiameter: CGFloat, timestampHeaderHeight: CGFloat, timestampDateAndTopicHeaderHeight: CGFloat, bubble: ChatMessageItemBubbleLayoutConstants, image: ChatMessageItemImageLayoutConstants, video: ChatMessageItemVideoLayoutConstants, text: ChatMessageItemTextLayoutConstants, file: ChatMessageItemFileLayoutConstants, instantVideo: ChatMessageItemInstantVideoConstants, wallpapers: ChatMessageItemWallpaperLayoutConstants) { - self.avatarDiameter = avatarDiameter + public init(avatarInset: CGFloat, timestampHeaderHeight: CGFloat, timestampDateAndTopicHeaderHeight: CGFloat, bubble: ChatMessageItemBubbleLayoutConstants, image: ChatMessageItemImageLayoutConstants, video: ChatMessageItemVideoLayoutConstants, text: ChatMessageItemTextLayoutConstants, file: ChatMessageItemFileLayoutConstants, instantVideo: ChatMessageItemInstantVideoConstants, wallpapers: ChatMessageItemWallpaperLayoutConstants) { + self.avatarInset = avatarInset self.timestampHeaderHeight = timestampHeaderHeight self.timestampDateAndTopicHeaderHeight = timestampDateAndTopicHeaderHeight self.bubble = bubble @@ -144,7 +144,7 @@ public struct ChatMessageItemLayoutConstants { let instantVideo = ChatMessageItemInstantVideoConstants(insets: UIEdgeInsets(top: 4.0, left: 0.0, bottom: 4.0, right: 0.0), dimensions: CGSize(width: 212.0, height: 212.0)) let wallpapers = ChatMessageItemWallpaperLayoutConstants(maxTextWidth: 180.0) - return ChatMessageItemLayoutConstants(avatarDiameter: 37.0, timestampHeaderHeight: 34.0, timestampDateAndTopicHeaderHeight: 7.0 * 2.0 + 20.0 * 2.0 + 7.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers) + return ChatMessageItemLayoutConstants(avatarInset: 44.0, timestampHeaderHeight: 34.0, timestampDateAndTopicHeaderHeight: 7.0 * 2.0 + 20.0 * 2.0 + 7.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers) } public static var regular: ChatMessageItemLayoutConstants { @@ -156,7 +156,7 @@ public struct ChatMessageItemLayoutConstants { let instantVideo = ChatMessageItemInstantVideoConstants(insets: UIEdgeInsets(top: 4.0, left: 0.0, bottom: 4.0, right: 0.0), dimensions: CGSize(width: 240.0, height: 240.0)) let wallpapers = ChatMessageItemWallpaperLayoutConstants(maxTextWidth: 180.0) - return ChatMessageItemLayoutConstants(avatarDiameter: 37.0, timestampHeaderHeight: 34.0, timestampDateAndTopicHeaderHeight: 7.0 * 2.0 + 20.0 * 2.0 + 7.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers) + return ChatMessageItemLayoutConstants(avatarInset: 44.0, timestampHeaderHeight: 34.0, timestampDateAndTopicHeaderHeight: 7.0 * 2.0 + 20.0 * 2.0 + 7.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers) } } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageItemImpl/Sources/ChatMessageDateHeader.swift b/submodules/TelegramUI/Components/Chat/ChatMessageItemImpl/Sources/ChatMessageDateHeader.swift index c0770c076b..aeac8f0823 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageItemImpl/Sources/ChatMessageDateHeader.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageItemImpl/Sources/ChatMessageDateHeader.swift @@ -923,7 +923,7 @@ public final class ChatMessageAvatarHeader: ListViewItemHeader { public let stickDirection: ListViewItemHeaderStickDirection public let stickOverInsets: Bool = false - public let height: CGFloat = 38.0 + public let height: CGFloat = 40.0 public func combinesWith(other: ListViewItemHeader) -> Bool { if let other = other as? ChatMessageAvatarHeader, other.id == self.id { @@ -1053,9 +1053,9 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat if let previousPeer = self.peer, previousPeer.nameColor != peer.nameColor { self.peer = peer if peer.smallProfileImage != nil { - self.avatarNode.setPeerV2(context: self.context, theme: self.presentationData.theme.theme, peer: EnginePeer(peer), authorOfMessage: self.messageReference, overrideImage: nil, emptyColor: .black, synchronousLoad: false, displayDimensions: CGSize(width: 38.0, height: 38.0)) + self.avatarNode.setPeerV2(context: self.context, theme: self.presentationData.theme.theme, peer: EnginePeer(peer), authorOfMessage: self.messageReference, overrideImage: nil, emptyColor: .black, synchronousLoad: false, displayDimensions: CGSize(width: 40.0, height: 40.0)) } else { - self.avatarNode.setPeer(context: self.context, theme: self.presentationData.theme.theme, peer: EnginePeer(peer), authorOfMessage: self.messageReference, overrideImage: nil, emptyColor: .black, synchronousLoad: false, displayDimensions: CGSize(width: 38.0, height: 38.0)) + self.avatarNode.setPeer(context: self.context, theme: self.presentationData.theme.theme, peer: EnginePeer(peer), authorOfMessage: self.messageReference, overrideImage: nil, emptyColor: .black, synchronousLoad: false, displayDimensions: CGSize(width: 40.0, height: 40.0)) } } } @@ -1072,9 +1072,9 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat overrideImage = .deletedIcon } if peer.smallProfileImage != nil { - self.avatarNode.setPeerV2(context: context, theme: theme, peer: EnginePeer(peer), authorOfMessage: authorOfMessage, overrideImage: overrideImage, emptyColor: emptyColor, synchronousLoad: synchronousLoad, displayDimensions: CGSize(width: 38.0, height: 38.0)) + self.avatarNode.setPeerV2(context: context, theme: theme, peer: EnginePeer(peer), authorOfMessage: authorOfMessage, overrideImage: overrideImage, emptyColor: emptyColor, synchronousLoad: synchronousLoad, displayDimensions: CGSize(width: 40.0, height: 40.0)) } else { - self.avatarNode.setPeer(context: context, theme: theme, peer: EnginePeer(peer), authorOfMessage: authorOfMessage, overrideImage: overrideImage, emptyColor: emptyColor, synchronousLoad: synchronousLoad, displayDimensions: CGSize(width: 38.0, height: 38.0)) + self.avatarNode.setPeer(context: context, theme: theme, peer: EnginePeer(peer), authorOfMessage: authorOfMessage, overrideImage: overrideImage, emptyColor: emptyColor, synchronousLoad: synchronousLoad, displayDimensions: CGSize(width: 40.0, height: 40.0)) } if peer.isPremium && context.sharedContext.energyUsageSettings.autoplayVideo { @@ -1111,7 +1111,7 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat strongSelf.avatarNode.contentNode.addSubnode(videoNode) strongSelf.avatarVideoNode = videoNode } - videoNode.update(peer: EnginePeer(peer), photo: photo, size: CGSize(width: 38.0, height: 38.0)) + videoNode.update(peer: EnginePeer(peer), photo: photo, size: CGSize(width: 40.0, height: 40.0)) if strongSelf.hierarchyTrackingLayer == nil { let hierarchyTrackingLayer = HierarchyTrackingLayer() @@ -1220,8 +1220,8 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat } override public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { - transition.updateFrame(node: self.containerNode, frame: CGRect(origin: CGPoint(x: leftInset + 3.0, y: 0.0), size: CGSize(width: 38.0, height: 38.0))) - let avatarFrame = CGRect(origin: CGPoint(), size: CGSize(width: 38.0, height: 38.0)) + transition.updateFrame(node: self.containerNode, frame: CGRect(origin: CGPoint(x: leftInset + 8.0, y: 0.0), size: CGSize(width: 40.0, height: 40.0))) + let avatarFrame = CGRect(origin: CGPoint(), size: CGSize(width: 40.0, height: 40.0)) self.avatarNode.position = avatarFrame.center self.avatarNode.bounds = CGRect(origin: CGPoint(), size: avatarFrame.size) self.avatarNode.updateSize(size: avatarFrame.size) @@ -1265,7 +1265,7 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat var avatarTransform: CATransform3D = CATransform3DIdentity if isHidden { let scale: CGFloat = isHidden ? 0.001 : 1.0 - avatarTransform = CATransform3DTranslate(avatarTransform, -38.0 * 0.5, 38.0 * 0.5, 0.0) + avatarTransform = CATransform3DTranslate(avatarTransform, -40.0 * 0.5, 40.0 * 0.5, 0.0) avatarTransform = CATransform3DScale(avatarTransform, scale, scale, 1.0) } transition.updateTransform(node: self.avatarNode, transform: avatarTransform) diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift index fc2bd7bbab..734c5113a7 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift @@ -514,7 +514,7 @@ public class ChatMessageStickerItemNode: ChatMessageItemView { } if hasAvatar { - avatarInset = layoutConstants.avatarDiameter + avatarInset = layoutConstants.avatarInset } else { avatarInset = 0.0 } diff --git a/submodules/TelegramUI/Components/TabBarComponent/Sources/TabBarComponent.swift b/submodules/TelegramUI/Components/TabBarComponent/Sources/TabBarComponent.swift index 05314e4fd4..e836ccbc63 100644 --- a/submodules/TelegramUI/Components/TabBarComponent/Sources/TabBarComponent.swift +++ b/submodules/TelegramUI/Components/TabBarComponent/Sources/TabBarComponent.swift @@ -311,6 +311,8 @@ public final class TabBarComponent: Component { func update(component: TabBarComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: ComponentTransition) -> CGSize { let innerInset: CGFloat = 3.0 + let availableSize = CGSize(width: min(500.0, availableSize.width), height: availableSize.height) + let previousComponent = self.component self.component = component self.state = state diff --git a/submodules/TelegramUI/Sources/ChatHistoryNavigationButtons.swift b/submodules/TelegramUI/Sources/ChatHistoryNavigationButtons.swift index 190d7b524b..628150a818 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryNavigationButtons.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryNavigationButtons.swift @@ -192,7 +192,7 @@ final class ChatHistoryNavigationButtons: ASDisplayNode { transition.updateAlpha(node: self.downButton, alpha: 1.0) transition.updateTransformScale(node: self.downButton, scale: 1.0) } else { - transition.updateAlpha(node: self.downButton, alpha: 0.0, completion: { [weak self] completed in + transition.updateAlpha(node: self.downButton, alpha: 0.1, completion: { [weak self] completed in guard let strongSelf = self, completed else { return }