mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Various fixes
This commit is contained in:
parent
d83734eb46
commit
bde3418ce5
8 changed files with 45 additions and 34 deletions
|
|
@ -42,7 +42,7 @@ private let markdownVoidHTMLTags: Set<String> = [
|
|||
]
|
||||
|
||||
private struct MarkdownSafetyLimits {
|
||||
let maxFileSize = 2_097_152
|
||||
let maxFileSize = 524_288
|
||||
let maxLineLength = 32_768
|
||||
let maxBlockquoteDepth = 64
|
||||
let maxListIndent = 96
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ final class ComposeTodoScreenComponent: Component {
|
|||
for (id, itemView) in self.todoItemsSectionContainer.itemViews {
|
||||
if let view = itemView.contents.view as? ListComposePollOptionComponent.View, !view.isRevealed && !view.currentText.isEmpty {
|
||||
let viewFrame = view.convert(view.bounds, to: self.todoItemsSectionContainer)
|
||||
let iconFrame = CGRect(origin: CGPoint(x: viewFrame.maxX - 40.0, y: viewFrame.minY), size: CGSize(width: viewFrame.height, height: viewFrame.height))
|
||||
let iconFrame = CGRect(origin: CGPoint(x: viewFrame.minX, y: viewFrame.minY), size: CGSize(width: 50.0, height: viewFrame.height))
|
||||
if iconFrame.contains(localPoint) {
|
||||
return (id, itemView.contents)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -345,6 +345,7 @@ public final class GiftItemComponent: Component {
|
|||
private var selectionLayer: SimpleShapeLayer?
|
||||
private var checkLayer: CheckLayer?
|
||||
private var outlineLayer: SimpleLayer?
|
||||
private var outlineRenderState: OutlineRenderState?
|
||||
|
||||
private var animationFile: TelegramMediaFile?
|
||||
|
||||
|
|
@ -361,6 +362,14 @@ public final class GiftItemComponent: Component {
|
|||
|
||||
private var giftAuctionTimer: SwiftSignalKit.Timer?
|
||||
|
||||
private struct OutlineRenderState: Equatable {
|
||||
let size: CGSize
|
||||
let cornerRadius: CGFloat
|
||||
let outline: GiftItemComponent.Outline
|
||||
let hasRibbon: Bool
|
||||
let themeId: ObjectIdentifier
|
||||
}
|
||||
|
||||
public var pattern: UIView? {
|
||||
if let view = self.patternView.view {
|
||||
return view
|
||||
|
|
@ -1537,6 +1546,14 @@ public final class GiftItemComponent: Component {
|
|||
if let outline = component.outline {
|
||||
let lineWidth: CGFloat = 2.0
|
||||
let outlineFrame = backgroundFrame
|
||||
let hasRibbon = self.ribbon.layer.superlayer != nil
|
||||
let outlineRenderState = OutlineRenderState(
|
||||
size: outlineFrame.size,
|
||||
cornerRadius: cornerRadius,
|
||||
outline: outline,
|
||||
hasRibbon: hasRibbon,
|
||||
themeId: ObjectIdentifier(component.theme)
|
||||
)
|
||||
|
||||
let outlineLayer: SimpleLayer
|
||||
if let current = self.outlineLayer {
|
||||
|
|
@ -1544,12 +1561,15 @@ public final class GiftItemComponent: Component {
|
|||
} else {
|
||||
outlineLayer = SimpleLayer()
|
||||
self.outlineLayer = outlineLayer
|
||||
if self.ribbon.layer.superlayer != nil {
|
||||
self.layer.insertSublayer(outlineLayer, below: self.ribbon.layer)
|
||||
} else {
|
||||
self.layer.addSublayer(outlineLayer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if hasRibbon {
|
||||
self.layer.insertSublayer(outlineLayer, below: self.ribbon.layer)
|
||||
} else if outlineLayer.superlayer == nil {
|
||||
self.layer.addSublayer(outlineLayer)
|
||||
}
|
||||
|
||||
if self.outlineRenderState != outlineRenderState {
|
||||
let image = generateImage(outlineFrame.size, rotatedContext: { size, context in
|
||||
context.clear(CGRect(origin: .zero, size: size))
|
||||
|
||||
|
|
@ -1588,11 +1608,13 @@ public final class GiftItemComponent: Component {
|
|||
}
|
||||
})
|
||||
outlineLayer.contents = image?.cgImage
|
||||
|
||||
outlineLayer.frame = outlineFrame
|
||||
self.outlineRenderState = outlineRenderState
|
||||
}
|
||||
|
||||
transition.setFrame(layer: outlineLayer, frame: outlineFrame)
|
||||
} else if let outlineLayer = self.outlineLayer {
|
||||
self.outlineLayer = nil
|
||||
self.outlineRenderState = nil
|
||||
outlineLayer.removeFromSuperlayer()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -698,13 +698,13 @@ final class ChatbotSetupScreenComponent: Component {
|
|||
let iconSize = self.icon.update(
|
||||
transition: .immediate,
|
||||
component: AnyComponent(LottieComponent(
|
||||
content: LottieComponent.AppBundleContent(name: "BotEmoji"),
|
||||
content: LottieComponent.AppBundleContent(name: "ChatAutomation"),
|
||||
loop: false
|
||||
)),
|
||||
environment: {},
|
||||
containerSize: CGSize(width: 100.0, height: 100.0)
|
||||
containerSize: CGSize(width: 140.0, height: 140.0)
|
||||
)
|
||||
let iconFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - iconSize.width) * 0.5), y: contentHeight - 30.0), size: iconSize)
|
||||
let iconFrame = CGRect(origin: CGPoint(x: floor((availableSize.width - iconSize.width) * 0.5), y: contentHeight - 50.0), size: iconSize)
|
||||
if let iconView = self.icon.view as? LottieComponent.View {
|
||||
if iconView.superview == nil {
|
||||
self.scrollView.addSubview(iconView)
|
||||
|
|
|
|||
Binary file not shown.
BIN
submodules/TelegramUI/Resources/Animations/ChatAutomation.tgs
Normal file
BIN
submodules/TelegramUI/Resources/Animations/ChatAutomation.tgs
Normal file
Binary file not shown.
|
|
@ -46,12 +46,12 @@ func leftNavigationButtonForChatInterfaceState(_ presentationInterfaceState: Cha
|
|||
}
|
||||
|
||||
if canClear {
|
||||
let buttonItem = UIBarButtonItem(title: "___clear", style: .plain, target: target, action: selector)
|
||||
let buttonItem = UIBarButtonItem(title: strings.Conversation_ClearAll, style: .plain, target: target, action: selector)
|
||||
buttonItem.accessibilityLabel = title
|
||||
return ChatNavigationButton(action: .clearHistory, buttonItem: buttonItem)
|
||||
} else {
|
||||
title = strings.Conversation_ClearCache
|
||||
let buttonItem = UIBarButtonItem(title: "___clear", style: .plain, target: target, action: selector)
|
||||
let buttonItem = UIBarButtonItem(title: strings.Conversation_ClearCache, style: .plain, target: target, action: selector)
|
||||
buttonItem.accessibilityLabel = title
|
||||
return ChatNavigationButton(action: .clearCache, buttonItem: buttonItem)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -604,20 +604,9 @@ private func refreshTextMentions(text: NSString, initialAttributedText: NSAttrib
|
|||
}
|
||||
}
|
||||
|
||||
private let textUrlEdgeCharacters: CharacterSet = {
|
||||
var set: CharacterSet = .alphanumerics
|
||||
set.formUnion(.symbols)
|
||||
set.formUnion(.punctuationCharacters)
|
||||
set.remove("(")
|
||||
set.remove(")")
|
||||
return set
|
||||
}()
|
||||
|
||||
private let textUrlCharacters: CharacterSet = {
|
||||
var set: CharacterSet = textUrlEdgeCharacters
|
||||
set.formUnion(.whitespacesAndNewlines)
|
||||
return set
|
||||
}()
|
||||
private func isTextUrlInnerCharacter(_ c: UnicodeScalar) -> Bool {
|
||||
return alphanumericCharacters.contains(c) || c == " " as UnicodeScalar
|
||||
}
|
||||
|
||||
private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributedString, attributedText: NSMutableAttributedString, fullRange: NSRange) {
|
||||
var textUrlRanges: [(NSRange, ChatTextInputTextUrlAttribute)] = []
|
||||
|
|
@ -635,7 +624,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||
var validLower = range.lowerBound
|
||||
inner1: for i in range.lowerBound ..< range.upperBound {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if textUrlCharacters.contains(c) {
|
||||
if isTextUrlInnerCharacter(c) {
|
||||
validLower = i
|
||||
break inner1
|
||||
}
|
||||
|
|
@ -646,7 +635,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||
var validUpper = range.upperBound
|
||||
inner2: for i in (validLower ..< range.upperBound).reversed() {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if textUrlCharacters.contains(c) {
|
||||
if isTextUrlInnerCharacter(c) {
|
||||
validUpper = i + 1
|
||||
break inner2
|
||||
}
|
||||
|
|
@ -658,7 +647,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||
let minLower = (i == 0) ? fullRange.lowerBound : textUrlRanges[i - 1].0.upperBound
|
||||
inner3: for i in (minLower ..< validLower).reversed() {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if textUrlEdgeCharacters.contains(c) {
|
||||
if alphanumericCharacters.contains(c) {
|
||||
validLower = i
|
||||
} else {
|
||||
break inner3
|
||||
|
|
@ -671,7 +660,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||
let maxUpper = (i == textUrlRanges.count - 1) ? fullRange.upperBound : textUrlRanges[i + 1].0.lowerBound
|
||||
inner3: for i in validUpper ..< maxUpper {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if textUrlEdgeCharacters.contains(c) {
|
||||
if alphanumericCharacters.contains(c) {
|
||||
validUpper = i + 1
|
||||
} else {
|
||||
break inner3
|
||||
|
|
@ -693,7 +682,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
|||
var combine = true
|
||||
inner: for j in textUrlRanges[i].0.upperBound ..< textUrlRanges[i + 1].0.lowerBound {
|
||||
if let c = UnicodeScalar(text.character(at: j)) {
|
||||
if textUrlCharacters.contains(c) {
|
||||
if isTextUrlInnerCharacter(c) {
|
||||
} else {
|
||||
combine = false
|
||||
break inner
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue