mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge commit '22b5379d9cc71fc4154432522bc5391242c0bf7e'
This commit is contained in:
commit
3ee7c76820
@ -6605,6 +6605,7 @@ Sorry for the inconvenience.";
|
||||
"Conversation.ForwardOptions.SendMessages" = "Send Messages";
|
||||
|
||||
"Conversation.ForwardOptions.TapForOptions" = "Tap here for forwarding options";
|
||||
"Conversation.ForwardOptions.TapForOptionsShort" = "Tap here for options";
|
||||
|
||||
"Conversation.ForwardOptions.UserMessageForwardVisible" = "%@ will see that it was forwarded";
|
||||
"Conversation.ForwardOptions.UserMessageForwardHidden" = "%@ won't see that it was forwarded";
|
||||
@ -6671,6 +6672,9 @@ Sorry for the inconvenience.";
|
||||
"Notification.YouChangedTheme" = "You changed chat theme to %@";
|
||||
"Notification.YouDisabledTheme" = "You disabled chat theme";
|
||||
|
||||
"Notification.ChannelChangedTheme" = "Channel theme changed to %2$@";
|
||||
"Notification.ChannelDisabledTheme" = "Channel theme disabled";
|
||||
|
||||
"Appstore.Cloud" = "**Cloud-based**\nUnlimited storage for chats,\nmedia and documents.";
|
||||
"Appstore.Cloud.Profile" = "**Jennifer**\n23 y.o. designer from San Francisco.";
|
||||
"Appstore.Creative" = "**Creative**\nColor themes, stickers, GIFs,\nvideo messages and more.";
|
||||
|
@ -367,10 +367,20 @@ public struct ChatTextInputStateText: Codable, Equatable {
|
||||
}
|
||||
|
||||
public enum ChatControllerSubject: Equatable {
|
||||
public struct ForwardOptions: Equatable {
|
||||
public let hideNames: Bool
|
||||
public let hideCaptions: Bool
|
||||
|
||||
public init(hideNames: Bool, hideCaptions: Bool) {
|
||||
self.hideNames = hideNames
|
||||
self.hideCaptions = hideCaptions
|
||||
}
|
||||
}
|
||||
|
||||
case message(id: EngineMessage.Id, highlight: Bool, timecode: Double?)
|
||||
case scheduledMessages
|
||||
case pinnedMessages(id: EngineMessage.Id?)
|
||||
case forwardedMessages(ids: [EngineMessage.Id], hideNames: Signal<Bool, NoError>, hideCaptions: Signal<Bool, NoError>)
|
||||
case forwardedMessages(ids: [EngineMessage.Id], options: Signal<ForwardOptions, NoError>)
|
||||
|
||||
public static func ==(lhs: ChatControllerSubject, rhs: ChatControllerSubject) -> Bool {
|
||||
switch lhs {
|
||||
@ -392,8 +402,8 @@ public enum ChatControllerSubject: Equatable {
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
case let .forwardedMessages(lhsIds, _, _):
|
||||
if case let .forwardedMessages(rhsIds, _, _) = rhs, lhsIds == rhsIds {
|
||||
case let .forwardedMessages(lhsIds, _):
|
||||
if case let .forwardedMessages(rhsIds, _) = rhs, lhsIds == rhsIds {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
|
@ -120,6 +120,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
private let reactionSelected: (ReactionContextItem.Reaction) -> Void
|
||||
private let beganAnimatingOut: () -> Void
|
||||
private let attemptTransitionControllerIntoNavigation: () -> Void
|
||||
fileprivate var dismissedForCancel: (() -> Void)?
|
||||
private let getController: () -> ContextControllerProtocol?
|
||||
private weak var gesture: ContextGesture?
|
||||
private var displayTextSelectionTip: Bool
|
||||
@ -478,6 +479,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi
|
||||
}
|
||||
|
||||
@objc private func dimNodeTapped() {
|
||||
self.dismissedForCancel?()
|
||||
self.beginDismiss(.default)
|
||||
}
|
||||
|
||||
@ -1817,6 +1819,11 @@ public final class ContextController: ViewController, StandalonePresentableContr
|
||||
|
||||
public var reactionSelected: ((ReactionContextItem.Reaction) -> Void)?
|
||||
public var dismissed: (() -> Void)?
|
||||
public var dismissedForCancel: (() -> Void)? {
|
||||
didSet {
|
||||
self.controllerNode.dismissedForCancel = self.dismissedForCancel
|
||||
}
|
||||
}
|
||||
|
||||
public var useComplexItemsTransitionAnimation = false
|
||||
public var immediateItemsTransitionAnimation = false
|
||||
@ -1872,7 +1879,7 @@ public final class ContextController: ViewController, StandalonePresentableContr
|
||||
override public func loadDisplayNode() {
|
||||
self.displayNode = ContextControllerNode(account: self.account, controller: self, presentationData: self.presentationData, source: self.source, items: self.items, reactionItems: self.reactionItems, beginDismiss: { [weak self] result in
|
||||
self?.dismiss(result: result, completion: nil)
|
||||
}, recognizer: self.recognizer, gesture: self.gesture, reactionSelected: { [weak self] value in
|
||||
}, recognizer: self.recognizer, gesture: self.gesture, reactionSelected: { [weak self] value in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
@ -1893,7 +1900,7 @@ public final class ContextController: ViewController, StandalonePresentableContr
|
||||
break
|
||||
}
|
||||
}, displayTextSelectionTip: self.displayTextSelectionTip)
|
||||
|
||||
self.controllerNode.dismissedForCancel = self.dismissedForCancel
|
||||
self.displayNodeDidLoad()
|
||||
|
||||
self._ready.set(combineLatest(queue: .mainQueue(), self.controllerNode.itemsReady.get(), self.controllerNode.contentReady.get())
|
||||
|
@ -4258,7 +4258,7 @@ public final class VoiceChatController: ViewController {
|
||||
childrenSafeInsets.right = childrenSafeInsets.left + (size.width - contentLeftInset)
|
||||
}
|
||||
} else if !self.isLandscape, case .fullscreen = effectiveDisplayMode {
|
||||
childrenInsets.bottom += self.effectiveBottomAreaHeight + fullscreenListHeight + 30.0
|
||||
childrenInsets.bottom += self.effectiveBottomAreaHeight + fullscreenListHeight + 36.0
|
||||
}
|
||||
childrenLayout.safeInsets = childrenSafeInsets
|
||||
childrenLayout.intrinsicInsets = childrenInsets
|
||||
|
@ -389,7 +389,7 @@ class VoiceChatFullscreenParticipantItemNode: ItemListRevealOptionsItemNode {
|
||||
profileNode.frame = CGRect(origin: CGPoint(), size: extractedRect.size)
|
||||
self.profileNode = profileNode
|
||||
self.contextSourceNode.contentNode.addSubnode(profileNode)
|
||||
|
||||
|
||||
profileNode.animateIn(from: self, targetRect: extractedRect, transition: transition)
|
||||
var appearenceTransition = transition
|
||||
if transition.isAnimated {
|
||||
@ -706,20 +706,28 @@ class VoiceChatFullscreenParticipantItemNode: ItemListRevealOptionsItemNode {
|
||||
audioLevelView.layer.mask = playbackMaskLayer
|
||||
|
||||
audioLevelView.setColor(wavesColor)
|
||||
audioLevelView.alpha = strongSelf.isExtracted ? 0.0 : 1.0
|
||||
|
||||
strongSelf.audioLevelView = audioLevelView
|
||||
strongSelf.offsetContainerNode.view.insertSubview(audioLevelView, at: 0)
|
||||
|
||||
if let _ = strongSelf.item, strongSelf.videoNode != nil && !active {
|
||||
audioLevelView.alpha = 0.0
|
||||
}
|
||||
}
|
||||
|
||||
let level = min(1.0, max(0.0, CGFloat(value)))
|
||||
if let audioLevelView = strongSelf.audioLevelView {
|
||||
audioLevelView.updateLevel(CGFloat(value))
|
||||
|
||||
var hasVideo = false
|
||||
if let videoNode = strongSelf.videoNode, videoNode.supernode == strongSelf.videoContainerNode, !videoNode.alpha.isZero {
|
||||
hasVideo = true
|
||||
}
|
||||
|
||||
var audioLevelAlpha: CGFloat = 1.0
|
||||
if strongSelf.isExtracted {
|
||||
audioLevelAlpha = 0.0
|
||||
} else {
|
||||
audioLevelAlpha = hasVideo ? 0.0 : 1.0
|
||||
}
|
||||
audioLevelView.alpha = audioLevelAlpha
|
||||
|
||||
let avatarScale: CGFloat
|
||||
if value > 0.02 {
|
||||
audioLevelView.startAnimating()
|
||||
|
@ -35,7 +35,7 @@ public let defaultServiceBackgroundColor = UIColor(rgb: 0x000000, alpha: 0.2)
|
||||
public let defaultPresentationTheme = makeDefaultDayPresentationTheme(serviceBackgroundColor: defaultServiceBackgroundColor, day: false, preview: false)
|
||||
public let defaultDayAccentColor = UIColor(rgb: 0x007ee5)
|
||||
|
||||
public func customizeDefaultDayTheme(theme: PresentationTheme, editing: Bool, title: String?, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: [UInt32], animateBubbleColors: Bool?, wallpaper forcedWallpaper: TelegramWallpaper? = nil, serviceBackgroundColor: UIColor?) -> PresentationTheme {
|
||||
public func customizeDefaultDayTheme(theme: PresentationTheme, specialMode: Bool = false, editing: Bool, title: String?, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: [UInt32], animateBubbleColors: Bool?, wallpaper forcedWallpaper: TelegramWallpaper? = nil, serviceBackgroundColor: UIColor?) -> PresentationTheme {
|
||||
if (theme.referenceTheme != .day && theme.referenceTheme != .dayClassic) {
|
||||
return theme
|
||||
}
|
||||
@ -52,24 +52,110 @@ public func customizeDefaultDayTheme(theme: PresentationTheme, editing: Bool, ti
|
||||
var suggestedWallpaper: TelegramWallpaper?
|
||||
|
||||
var bubbleColors = bubbleColors
|
||||
if bubbleColors.isEmpty, editing {
|
||||
if day {
|
||||
let accentColor = accentColor ?? defaultDayAccentColor
|
||||
bubbleColors = [accentColor.withMultiplied(hue: 0.966, saturation: 0.61, brightness: 0.98).rgb, accentColor.rgb]
|
||||
} else {
|
||||
if let accentColor = accentColor, !accentColor.alpha.isZero {
|
||||
let hsb = accentColor.hsb
|
||||
bubbleColors = [UIColor(hue: hsb.0, saturation: (hsb.1 > 0.0 && hsb.2 > 0.0) ? 0.14 : 0.0, brightness: 0.79 + hsb.2 * 0.21, alpha: 1.0).rgb]
|
||||
if accentColor.lightness > 0.705 {
|
||||
outgoingAccent = UIColor(hue: hsb.0, saturation: min(1.0, hsb.1 * 1.1), brightness: min(hsb.2, 0.6), alpha: 1.0)
|
||||
} else {
|
||||
outgoingAccent = accentColor
|
||||
if specialMode, bubbleColors.count < 3, let color = bubbleColors.first.flatMap({ UIColor(rgb: $0) }) {
|
||||
let colorHSB = color.hsb
|
||||
if colorHSB.b > 0.9 {
|
||||
let bubbleColor = color.withMultiplied(hue: 0.93, saturation: 1.0, brightness: 1.0)
|
||||
bubbleColors = [bubbleColor.rgb]
|
||||
|
||||
let colorPairs: [(UInt32, UInt32)] = [
|
||||
(0xe8f9d7, 0x6cd516),
|
||||
(0xe7faff, 0x43b6f9),
|
||||
(0xe3f7f5, 0x4ccbb8),
|
||||
(0xfff3cf, 0xe8b816),
|
||||
(0xfffac9, 0xe2c714),
|
||||
(0xc5a61e, 0xd6b534)
|
||||
]
|
||||
|
||||
func generateAccentColor(color: UIColor) -> UIColor {
|
||||
var nearest: (color: (UInt32, UInt32), distance: Int32)?
|
||||
for (sample, accentSample) in colorPairs {
|
||||
let distance = color.distance(to: UIColor(rgb: sample))
|
||||
if let currentNearest = nearest {
|
||||
if distance < currentNearest.distance {
|
||||
nearest = ((sample, accentSample), distance)
|
||||
}
|
||||
} else {
|
||||
nearest = ((sample, accentSample), distance)
|
||||
}
|
||||
}
|
||||
|
||||
if let colors = nearest?.color {
|
||||
let colorHsb = color.hsb
|
||||
let similarColorHsb = UIColor(rgb: colors.0).hsb
|
||||
let complementingColorHsb = UIColor(rgb: colors.1).hsb
|
||||
|
||||
let correction = (similarColorHsb.0 > 0.0 ? colorHsb.0 / similarColorHsb.0 : 1.0, similarColorHsb.1 > 0.0 ? colorHsb.1 / similarColorHsb.1 : 1.0, similarColorHsb.2 > 0.0 ? colorHsb.2 / similarColorHsb.2 : 1.0)
|
||||
let correctedComplementingColor = UIColor(hue: min(1.0, complementingColorHsb.0 * correction.0), saturation: min(1.0, complementingColorHsb.1 * correction.1), brightness: min(1.0, complementingColorHsb.2 * correction.2), alpha: 1.0)
|
||||
return correctedComplementingColor
|
||||
} else {
|
||||
return color
|
||||
}
|
||||
}
|
||||
|
||||
outgoingAccent = generateAccentColor(color: color)
|
||||
// color.withMultiplied(hue: 1.01, saturation: 7.8, brightness: 0.9)
|
||||
} else {
|
||||
let bubbleColor = color.withMultiplied(hue: 1.014, saturation: 0.12, brightness: 1.29)
|
||||
bubbleColors = [bubbleColor.rgb]
|
||||
|
||||
outgoingAccent = color
|
||||
}
|
||||
|
||||
suggestedWallpaper = .gradient(TelegramWallpaper.Gradient(id: nil, colors: defaultBuiltinWallpaperGradientColors.map(\.rgb), settings: WallpaperSettings()))
|
||||
// float[] colorHsv = getTempHsv(5);
|
||||
// Color.colorToHSV(color, colorHsv);
|
||||
//
|
||||
// final float diffH = Math.min(Math.abs(colorHsv[0] - baseHsv[0]), Math.abs(colorHsv[0] - baseHsv[0] - 360f));
|
||||
// if (diffH > 30f) {
|
||||
// return color;
|
||||
// }
|
||||
//
|
||||
// float dist = Math.min(1.5f * colorHsv[1] / baseHsv[1], 1f);
|
||||
//
|
||||
// colorHsv[0] = colorHsv[0] + accentHsv[0] - baseHsv[0];
|
||||
// colorHsv[1] = colorHsv[1] * accentHsv[1] / baseHsv[1];
|
||||
// colorHsv[2] = colorHsv[2] * (1f - dist + dist * accentHsv[2] / baseHsv[2]);
|
||||
//
|
||||
// int newColor = Color.HSVToColor(Color.alpha(color), colorHsv);
|
||||
//
|
||||
// float origBrightness = AndroidUtilities.computePerceivedBrightness(color);
|
||||
// float newBrightness = AndroidUtilities.computePerceivedBrightness(newColor);
|
||||
//
|
||||
// // We need to keep colors lighter in dark themes and darker in light themes
|
||||
// boolean needRevertBrightness = isDarkTheme ? origBrightness > newBrightness : origBrightness < newBrightness;
|
||||
//
|
||||
// if (needRevertBrightness) {
|
||||
// float amountOfNew = 0.6f;
|
||||
// float fallbackAmount = (1f - amountOfNew) * origBrightness / newBrightness + amountOfNew;
|
||||
// newColor = changeBrightness(newColor, fallbackAmount);
|
||||
// }
|
||||
//
|
||||
// return newColor;
|
||||
|
||||
// outgoingAccent = color.withMultiplied(hue: 1.035, saturation: 4.294, brightness: 1.289)
|
||||
//
|
||||
// let bubbleColor = color.withMultiplied(hue: 1.014, saturation: 0.101, brightness: 1.289)
|
||||
// bubbleColors = [bubbleColor.rgb]
|
||||
} else {
|
||||
if bubbleColors.isEmpty, editing {
|
||||
if day {
|
||||
let accentColor = accentColor ?? defaultDayAccentColor
|
||||
bubbleColors = [accentColor.withMultiplied(hue: 0.966, saturation: 0.61, brightness: 0.98).rgb, accentColor.rgb]
|
||||
} else {
|
||||
bubbleColors = [UIColor(rgb: 0xe1ffc7).rgb]
|
||||
suggestedWallpaper = .gradient(TelegramWallpaper.Gradient(id: nil, colors: defaultBuiltinWallpaperGradientColors.map(\.rgb), settings: WallpaperSettings()))
|
||||
if let accentColor = accentColor, !accentColor.alpha.isZero {
|
||||
let hsb = accentColor.hsb
|
||||
bubbleColors = [UIColor(hue: hsb.0, saturation: (hsb.1 > 0.0 && hsb.2 > 0.0) ? 0.14 : 0.0, brightness: 0.79 + hsb.2 * 0.21, alpha: 1.0).rgb]
|
||||
if accentColor.lightness > 0.705 {
|
||||
outgoingAccent = UIColor(hue: hsb.0, saturation: min(1.0, hsb.1 * 1.1), brightness: min(hsb.2, 0.6), alpha: 1.0)
|
||||
} else {
|
||||
outgoingAccent = accentColor
|
||||
}
|
||||
|
||||
suggestedWallpaper = .gradient(TelegramWallpaper.Gradient(id: nil, colors: defaultBuiltinWallpaperGradientColors.map(\.rgb), settings: WallpaperSettings()))
|
||||
} else {
|
||||
bubbleColors = [UIColor(rgb: 0xe1ffc7).rgb]
|
||||
suggestedWallpaper = .gradient(TelegramWallpaper.Gradient(id: nil, colors: defaultBuiltinWallpaperGradientColors.map(\.rgb), settings: WallpaperSettings()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -168,7 +254,7 @@ public func customizeDefaultDayTheme(theme: PresentationTheme, editing: Bool, ti
|
||||
outgoingLinkTextColor = outgoingAccent
|
||||
outgoingScamColor = UIColor(rgb: 0xff3b30)
|
||||
outgoingControlColor = outgoingAccent
|
||||
outgoingInactiveControlColor = outgoingAccent //1111
|
||||
outgoingInactiveControlColor = outgoingAccent
|
||||
outgoingFileTitleColor = outgoingAccent
|
||||
outgoingPollsProgressColor = accentColor
|
||||
outgoingSelectionColor = outgoingAccent.withMultiplied(hue: 1.0, saturation: 1.292, brightness: 0.871)
|
||||
|
@ -19,13 +19,13 @@ public func makeDefaultPresentationTheme(reference: PresentationBuiltinThemeRefe
|
||||
return theme
|
||||
}
|
||||
|
||||
public func customizePresentationTheme(_ theme: PresentationTheme, editing: Bool, title: String? = nil, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: [UInt32], animateBubbleColors: Bool?, wallpaper: TelegramWallpaper? = nil, baseColor: PresentationThemeBaseColor? = nil) -> PresentationTheme {
|
||||
public func customizePresentationTheme(_ theme: PresentationTheme, specialMode: Bool = false, editing: Bool, title: String? = nil, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: [UInt32], animateBubbleColors: Bool?, wallpaper: TelegramWallpaper? = nil, baseColor: PresentationThemeBaseColor? = nil) -> PresentationTheme {
|
||||
if accentColor == nil && bubbleColors.isEmpty && backgroundColors.isEmpty && wallpaper == nil {
|
||||
return theme
|
||||
}
|
||||
switch theme.referenceTheme {
|
||||
case .day, .dayClassic:
|
||||
return customizeDefaultDayTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors ?? false, wallpaper: wallpaper, serviceBackgroundColor: nil)
|
||||
return customizeDefaultDayTheme(theme: theme, specialMode: specialMode, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors ?? false, wallpaper: wallpaper, serviceBackgroundColor: nil)
|
||||
case .night:
|
||||
return customizeDefaultDarkPresentationTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors ?? false, wallpaper: wallpaper, baseColor: baseColor)
|
||||
case .nightAccent:
|
||||
@ -33,17 +33,17 @@ public func customizePresentationTheme(_ theme: PresentationTheme, editing: Bool
|
||||
}
|
||||
}
|
||||
|
||||
public func makePresentationTheme(settings: TelegramThemeSettings, title: String? = nil, serviceBackgroundColor: UIColor? = nil) -> PresentationTheme? {
|
||||
public func makePresentationTheme(settings: TelegramThemeSettings, specialMode: Bool = false, title: String? = nil, serviceBackgroundColor: UIColor? = nil) -> PresentationTheme? {
|
||||
let defaultTheme = makeDefaultPresentationTheme(reference: PresentationBuiltinThemeReference(baseTheme: settings.baseTheme), extendingThemeReference: nil, serviceBackgroundColor: serviceBackgroundColor, preview: false)
|
||||
return customizePresentationTheme(defaultTheme, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, animateBubbleColors: settings.animateMessageColors, wallpaper: settings.wallpaper)
|
||||
return customizePresentationTheme(defaultTheme, specialMode: specialMode, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, animateBubbleColors: settings.animateMessageColors, wallpaper: settings.wallpaper)
|
||||
}
|
||||
|
||||
public func makePresentationTheme(mediaBox: MediaBox, themeReference: PresentationThemeReference, extendingThemeReference: PresentationThemeReference? = nil, accentColor: UIColor? = nil, backgroundColors: [UInt32] = [], bubbleColors: [UInt32] = [], animateBubbleColors: Bool? = nil, wallpaper: TelegramWallpaper? = nil, baseColor: PresentationThemeBaseColor? = nil, serviceBackgroundColor: UIColor? = nil, preview: Bool = false) -> PresentationTheme? {
|
||||
public func makePresentationTheme(mediaBox: MediaBox, themeReference: PresentationThemeReference, extendingThemeReference: PresentationThemeReference? = nil, accentColor: UIColor? = nil, backgroundColors: [UInt32] = [], bubbleColors: [UInt32] = [], animateBubbleColors: Bool? = nil, wallpaper: TelegramWallpaper? = nil, baseColor: PresentationThemeBaseColor? = nil, serviceBackgroundColor: UIColor? = nil, specialMode: Bool = false, preview: Bool = false) -> PresentationTheme? {
|
||||
let theme: PresentationTheme
|
||||
switch themeReference {
|
||||
case let .builtin(reference):
|
||||
let defaultTheme = makeDefaultPresentationTheme(reference: reference, extendingThemeReference: extendingThemeReference, serviceBackgroundColor: serviceBackgroundColor, preview: preview)
|
||||
theme = customizePresentationTheme(defaultTheme, editing: true, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors, wallpaper: wallpaper, baseColor: baseColor)
|
||||
theme = customizePresentationTheme(defaultTheme, specialMode: specialMode, editing: true, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors, wallpaper: wallpaper, baseColor: baseColor)
|
||||
case let .local(info):
|
||||
if let path = mediaBox.completedResourcePath(info.resource), let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead), let loadedTheme = makePresentationTheme(data: data, themeReference: themeReference, resolvedWallpaper: info.resolvedWallpaper) {
|
||||
theme = customizePresentationTheme(loadedTheme, editing: false, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, animateBubbleColors: animateBubbleColors, wallpaper: wallpaper)
|
||||
|
@ -258,7 +258,7 @@ public struct PresentationResourcesChat {
|
||||
|
||||
public static func chatInputMediaPanelSavedStickersIcon(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.chatInputMediaPanelSavedStickersIconImage.rawValue, { theme in
|
||||
return generateImage(CGSize(width: 26.0, height: 26.0), contextGenerator: { size, context in
|
||||
return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
if let image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/SavedStickersTabIcon"), color: theme.chat.inputMediaPanel.panelIconColor) {
|
||||
context.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((size.height - image.size.height) / 2.0)), size: image.size))
|
||||
@ -269,7 +269,7 @@ public struct PresentationResourcesChat {
|
||||
|
||||
public static func chatInputMediaPanelStickersModeIcon(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.chatInputMediaPanelStickersModeIcon.rawValue, { theme in
|
||||
return generateImage(CGSize(width: 26.0, height: 26.0), contextGenerator: { size, context in
|
||||
return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
if let image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/StickersMode"), color: theme.chat.inputMediaPanel.panelIconColor) {
|
||||
context.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((size.height - image.size.height) / 2.0)), size: image.size))
|
||||
@ -280,7 +280,7 @@ public struct PresentationResourcesChat {
|
||||
|
||||
public static func chatInputMediaPanelTrendingGifsIcon(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.chatInputMediaPanelTrendingGifsIcon.rawValue, { theme in
|
||||
return generateImage(CGSize(width: 26.0, height: 26.0), contextGenerator: { size, context in
|
||||
return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
if let image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/TrendingGifs"), color: theme.chat.inputMediaPanel.panelIconColor) {
|
||||
context.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((size.height - image.size.height) / 2.0)), size: image.size))
|
||||
@ -291,7 +291,7 @@ public struct PresentationResourcesChat {
|
||||
|
||||
public static func chatInputMediaPanelRecentStickersIcon(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.chatInputMediaPanelRecentStickersIconImage.rawValue, { theme in
|
||||
return generateImage(CGSize(width: 26.0, height: 26.0), contextGenerator: { size, context in
|
||||
return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
if let image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/RecentTabIcon"), color: theme.chat.inputMediaPanel.panelIconColor) {
|
||||
context.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((size.height - image.size.height) / 2.0)), size: image.size))
|
||||
@ -302,7 +302,7 @@ public struct PresentationResourcesChat {
|
||||
|
||||
public static func chatInputMediaPanelRecentGifsIconImage(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.chatInputMediaPanelRecentGifsIconImage.rawValue, { theme in
|
||||
return generateImage(CGSize(width: 26.0, height: 26.0), contextGenerator: { size, context in
|
||||
return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
if let image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/GifsTabIcon"), color: theme.chat.inputMediaPanel.panelIconColor) {
|
||||
context.draw(image.cgImage!, in: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((size.height - image.size.height) / 2.0)), size: image.size))
|
||||
|
@ -531,7 +531,9 @@ public func universalServiceMessageString(presentationData: (PresentationTheme,
|
||||
attributedString = addAttributesToStringWithRanges(resultTitleString._tuple, body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds))
|
||||
case let .setChatTheme(emoji):
|
||||
if emoji.isEmpty {
|
||||
if message.author?.id == accountPeerId {
|
||||
if message.author?.id.namespace == Namespaces.Peer.CloudChannel {
|
||||
attributedString = NSAttributedString(string: strings.Notification_ChannelDisabledTheme, font: titleFont, textColor: primaryTextColor)
|
||||
} else if message.author?.id == accountPeerId {
|
||||
attributedString = NSAttributedString(string: strings.Notification_YouDisabledTheme, font: titleFont, textColor: primaryTextColor)
|
||||
} else {
|
||||
let attributePeerIds: [(Int, PeerId?)] = [(0, message.author?.id)]
|
||||
@ -539,7 +541,9 @@ public func universalServiceMessageString(presentationData: (PresentationTheme,
|
||||
attributedString = addAttributesToStringWithRanges(resultTitleString._tuple, body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds))
|
||||
}
|
||||
} else {
|
||||
if message.author?.id == accountPeerId {
|
||||
if message.author?.id.namespace == Namespaces.Peer.CloudChannel {
|
||||
attributedString = NSAttributedString(string: strings.Notification_ChannelChangedTheme(emoji).string, font: titleFont, textColor: primaryTextColor)
|
||||
} else if message.author?.id == accountPeerId {
|
||||
attributedString = NSAttributedString(string: strings.Notification_YouChangedTheme(emoji).string, font: titleFont, textColor: primaryTextColor)
|
||||
} else {
|
||||
let resultTitleString = strings.Notification_ChangedTheme(authorName, emoji)
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_input_gifs.pdf",
|
||||
"filename" : "gif_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
249
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/GifsTabIcon.imageset/gif_48.pdf
vendored
Normal file
249
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/GifsTabIcon.imageset/gif_48.pdf
vendored
Normal file
@ -0,0 +1,249 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 30.400024 17.342773 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
-1.328000 2.657227 m
|
||||
-1.328000 1.923792 -0.733434 1.329226 0.000000 1.329226 c
|
||||
0.733434 1.329226 1.328000 1.923792 1.328000 2.657227 c
|
||||
-1.328000 2.657227 l
|
||||
h
|
||||
4.000000 9.329226 m
|
||||
4.733434 9.329226 5.328000 9.923793 5.328000 10.657227 c
|
||||
5.328000 11.390660 4.733434 11.985227 4.000000 11.985227 c
|
||||
4.000000 9.329226 l
|
||||
h
|
||||
1.328000 2.657227 m
|
||||
1.328000 9.377226 l
|
||||
-1.328000 9.377226 l
|
||||
-1.328000 2.657227 l
|
||||
1.328000 2.657227 l
|
||||
h
|
||||
1.280000 9.329226 m
|
||||
4.000000 9.329226 l
|
||||
4.000000 11.985227 l
|
||||
1.280000 11.985227 l
|
||||
1.280000 9.329226 l
|
||||
h
|
||||
1.328000 9.377226 m
|
||||
1.328000 9.492270 1.328034 9.578946 1.329198 9.653058 c
|
||||
1.330364 9.727207 1.332460 9.769691 1.334489 9.794523 c
|
||||
1.338678 9.845800 1.338141 9.750368 1.270451 9.617519 c
|
||||
-1.096062 10.823318 l
|
||||
-1.250946 10.519341 -1.295081 10.226333 -1.312690 10.010806 c
|
||||
-1.329033 9.810783 -1.328000 9.579334 -1.328000 9.377226 c
|
||||
1.328000 9.377226 l
|
||||
h
|
||||
1.280000 11.985227 m
|
||||
1.077892 11.985227 0.846443 11.986259 0.646420 11.969916 c
|
||||
0.430894 11.952308 0.137886 11.908173 -0.166092 11.753288 c
|
||||
1.039707 9.386775 l
|
||||
0.906858 9.319085 0.811426 9.318548 0.862703 9.322738 c
|
||||
0.887536 9.324766 0.930019 9.326862 1.004169 9.328028 c
|
||||
1.078280 9.329193 1.164957 9.329226 1.280000 9.329226 c
|
||||
1.280000 11.985227 l
|
||||
h
|
||||
1.270451 9.617519 m
|
||||
1.219830 9.518170 1.139057 9.437396 1.039707 9.386775 c
|
||||
-0.166092 11.753288 l
|
||||
-0.566501 11.549270 -0.892043 11.223727 -1.096062 10.823318 c
|
||||
1.270451 9.617519 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 30.400024 22.144531 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
0.000000 3.183762 m
|
||||
-0.733434 3.183762 -1.328000 2.589196 -1.328000 1.855762 c
|
||||
-1.328000 1.122328 -0.733434 0.527762 0.000000 0.527762 c
|
||||
0.000000 3.183762 l
|
||||
h
|
||||
4.000000 0.527762 m
|
||||
4.733434 0.527762 5.328000 1.122328 5.328000 1.855762 c
|
||||
5.328000 2.589196 4.733434 3.183762 4.000000 3.183762 c
|
||||
4.000000 0.527762 l
|
||||
h
|
||||
0.000000 0.527762 m
|
||||
4.000000 0.527762 l
|
||||
4.000000 3.183762 l
|
||||
0.000000 3.183762 l
|
||||
0.000000 0.527762 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 24.799927 17.343750 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
2.128000 10.656250 m
|
||||
2.128000 11.389684 1.533434 11.984250 0.800000 11.984250 c
|
||||
0.066566 11.984250 -0.528000 11.389684 -0.528000 10.656250 c
|
||||
2.128000 10.656250 l
|
||||
h
|
||||
-0.528000 2.656250 m
|
||||
-0.528000 1.922815 0.066566 1.328250 0.800000 1.328250 c
|
||||
1.533434 1.328250 2.128000 1.922815 2.128000 2.656250 c
|
||||
-0.528000 2.656250 l
|
||||
h
|
||||
-0.528000 10.656250 m
|
||||
-0.528000 2.656250 l
|
||||
2.128000 2.656250 l
|
||||
2.128000 10.656250 l
|
||||
-0.528000 10.656250 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 13.599976 17.343750 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
5.231635 9.028395 m
|
||||
5.882138 8.689614 6.684110 8.942316 7.022890 9.592818 c
|
||||
7.361670 10.243321 7.108968 11.045293 6.458466 11.384073 c
|
||||
5.231635 9.028395 l
|
||||
h
|
||||
7.584592 5.588284 m
|
||||
8.889243 5.340351 l
|
||||
8.901488 5.404787 l
|
||||
8.907325 5.470116 l
|
||||
7.584592 5.588284 l
|
||||
h
|
||||
5.600000 7.984250 m
|
||||
4.866566 7.984250 4.272000 7.389684 4.272000 6.656250 c
|
||||
4.272000 5.922816 4.866566 5.328250 5.600000 5.328250 c
|
||||
5.600000 7.984250 l
|
||||
h
|
||||
6.458466 11.384073 m
|
||||
5.721497 11.767884 4.884068 11.984250 4.000000 11.984250 c
|
||||
4.000000 9.328250 l
|
||||
4.446894 9.328250 4.864512 9.219591 5.231635 9.028395 c
|
||||
6.458466 11.384073 l
|
||||
h
|
||||
4.000000 11.984250 m
|
||||
1.057427 11.984250 -1.328000 9.598824 -1.328000 6.656250 c
|
||||
1.328000 6.656250 l
|
||||
1.328000 8.131955 2.524295 9.328250 4.000000 9.328250 c
|
||||
4.000000 11.984250 l
|
||||
h
|
||||
-1.328000 6.656250 m
|
||||
-1.328000 3.713677 1.057427 1.328250 4.000000 1.328250 c
|
||||
4.000000 3.984250 l
|
||||
2.524295 3.984250 1.328000 5.180545 1.328000 6.656250 c
|
||||
-1.328000 6.656250 l
|
||||
h
|
||||
4.000000 1.328250 m
|
||||
6.144260 1.328250 8.394547 2.737200 8.889243 5.340351 c
|
||||
6.279942 5.836216 l
|
||||
6.056704 4.661514 5.055740 3.984250 4.000000 3.984250 c
|
||||
4.000000 1.328250 l
|
||||
h
|
||||
8.907325 5.470116 m
|
||||
8.956036 6.015371 l
|
||||
6.310571 6.251707 l
|
||||
6.261860 5.706451 l
|
||||
8.907325 5.470116 l
|
||||
h
|
||||
7.155208 7.984250 m
|
||||
5.600000 7.984250 l
|
||||
5.600000 5.328250 l
|
||||
7.155208 5.328250 l
|
||||
7.155208 7.984250 l
|
||||
h
|
||||
8.956036 6.015371 m
|
||||
9.050537 7.073197 8.217244 7.984250 7.155208 7.984250 c
|
||||
7.155208 5.328250 l
|
||||
6.657084 5.328250 6.266247 5.755558 6.310571 6.251707 c
|
||||
8.956036 6.015371 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 5.599976 2.943848 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
35.472000 21.056055 m
|
||||
35.472000 11.627451 27.828604 3.984055 18.400000 3.984055 c
|
||||
18.400000 1.328056 l
|
||||
29.295473 1.328056 38.127998 10.160582 38.127998 21.056055 c
|
||||
35.472000 21.056055 l
|
||||
h
|
||||
18.400000 3.984055 m
|
||||
8.971395 3.984055 1.328000 11.627451 1.328000 21.056055 c
|
||||
-1.328000 21.056055 l
|
||||
-1.328000 10.160582 7.504526 1.328056 18.400000 1.328056 c
|
||||
18.400000 3.984055 l
|
||||
h
|
||||
1.328000 21.056055 m
|
||||
1.328000 30.484661 8.971395 38.128056 18.400000 38.128056 c
|
||||
18.400000 40.784054 l
|
||||
7.504526 40.784054 -1.328000 31.951529 -1.328000 21.056055 c
|
||||
1.328000 21.056055 l
|
||||
h
|
||||
18.400000 38.128056 m
|
||||
27.828604 38.128056 35.472000 30.484661 35.472000 21.056055 c
|
||||
38.127998 21.056055 l
|
||||
38.127998 31.951529 29.295473 40.784054 18.400000 40.784054 c
|
||||
18.400000 38.128056 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
5025
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000005115 00000 n
|
||||
0000005138 00000 n
|
||||
0000005311 00000 n
|
||||
0000005385 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
5444
|
||||
%%EOF
|
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_input_recent.pdf",
|
||||
"filename" : "recent_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
Binary file not shown.
89
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/RecentTabIcon.imageset/recent_48.pdf
vendored
Normal file
89
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/RecentTabIcon.imageset/recent_48.pdf
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.271973 4.271973 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
2.656000 19.728054 m
|
||||
2.656000 29.156660 10.299395 36.800056 19.728001 36.800056 c
|
||||
29.156605 36.800056 36.799999 29.156660 36.799999 19.728054 c
|
||||
36.799999 10.299450 29.156605 2.656055 19.728001 2.656055 c
|
||||
10.299395 2.656055 2.656000 10.299450 2.656000 19.728054 c
|
||||
h
|
||||
19.728001 39.456055 m
|
||||
8.832526 39.456055 0.000000 30.623528 0.000000 19.728054 c
|
||||
0.000000 8.832581 8.832526 0.000057 19.728001 0.000057 c
|
||||
30.623474 0.000057 39.455997 8.832581 39.455997 19.728054 c
|
||||
39.455997 30.623528 30.623474 39.456055 19.728001 39.456055 c
|
||||
h
|
||||
21.056000 30.928055 m
|
||||
21.056000 31.661489 20.461435 32.256054 19.728001 32.256054 c
|
||||
18.994566 32.256054 18.400002 31.661489 18.400002 30.928055 c
|
||||
18.400002 20.440632 l
|
||||
18.400002 19.610584 18.752302 18.819542 19.369272 18.264267 c
|
||||
26.839615 11.540958 l
|
||||
27.384773 11.050316 28.224453 11.094513 28.715096 11.639668 c
|
||||
29.205738 12.184826 29.161543 13.024506 28.616386 13.515148 c
|
||||
21.146042 20.238457 l
|
||||
21.088728 20.290041 21.056000 20.363525 21.056000 20.440632 c
|
||||
21.056000 30.928055 l
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1137
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001227 00000 n
|
||||
0000001250 00000 n
|
||||
0000001423 00000 n
|
||||
0000001497 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
1556
|
||||
%%EOF
|
@ -1,22 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "StickerKeyboardFavoriteTab@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "StickerKeyboardFavoriteTab@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename" : "fave_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.7 KiB |
247
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/SavedStickersTabIcon.imageset/fave_48.pdf
vendored
Normal file
247
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/SavedStickersTabIcon.imageset/fave_48.pdf
vendored
Normal file
@ -0,0 +1,247 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 5.000000 3.946289 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
8.635828 2.820679 m
|
||||
9.321689 1.681164 l
|
||||
8.635828 2.820679 l
|
||||
h
|
||||
9.731453 16.567810 m
|
||||
10.600920 17.574253 l
|
||||
9.731453 16.567810 l
|
||||
h
|
||||
1.384685 25.091970 m
|
||||
1.496809 23.766705 l
|
||||
1.384685 25.091970 l
|
||||
h
|
||||
1.051567 24.066368 m
|
||||
1.921034 25.072811 l
|
||||
1.051567 24.066368 l
|
||||
h
|
||||
20.038393 37.786930 m
|
||||
18.814356 37.266705 l
|
||||
20.038393 37.786930 l
|
||||
h
|
||||
18.961609 37.786930 m
|
||||
17.737572 38.307156 l
|
||||
18.961609 37.786930 l
|
||||
h
|
||||
26.180216 26.059437 m
|
||||
26.292339 27.384703 l
|
||||
26.180216 26.059437 l
|
||||
h
|
||||
24.508167 27.270023 m
|
||||
23.284132 26.749798 l
|
||||
24.508167 27.270023 l
|
||||
h
|
||||
37.948433 24.066368 m
|
||||
38.817898 23.059925 l
|
||||
37.948433 24.066368 l
|
||||
h
|
||||
37.615314 25.091970 m
|
||||
37.503193 23.766705 l
|
||||
37.615314 25.091970 l
|
||||
h
|
||||
28.628592 14.598795 m
|
||||
27.333555 14.295841 l
|
||||
28.628592 14.598795 l
|
||||
h
|
||||
29.268547 16.567810 m
|
||||
28.399080 17.574253 l
|
||||
29.268547 16.567810 l
|
||||
h
|
||||
30.364174 2.820679 m
|
||||
31.050034 3.960194 l
|
||||
31.050034 3.960194 l
|
||||
30.364174 2.820679 l
|
||||
h
|
||||
31.235470 3.455151 m
|
||||
32.530506 3.758102 l
|
||||
31.235470 3.455151 l
|
||||
h
|
||||
19.801676 9.178118 m
|
||||
19.115814 8.038603 l
|
||||
19.115814 8.038603 l
|
||||
19.801676 9.178118 l
|
||||
h
|
||||
19.115814 8.038603 m
|
||||
29.678312 1.681164 l
|
||||
31.050034 3.960194 l
|
||||
20.487535 10.317635 l
|
||||
19.115814 8.038603 l
|
||||
h
|
||||
32.530506 3.758102 m
|
||||
29.923628 14.901747 l
|
||||
27.333555 14.295841 l
|
||||
29.940432 3.152195 l
|
||||
32.530506 3.758102 l
|
||||
h
|
||||
30.138014 15.561367 m
|
||||
38.817898 23.059925 l
|
||||
37.078964 25.072811 l
|
||||
28.399080 17.574253 l
|
||||
30.138014 15.561367 l
|
||||
h
|
||||
37.727440 26.417236 m
|
||||
26.292339 27.384703 l
|
||||
26.068092 24.734173 l
|
||||
37.503193 23.766705 l
|
||||
37.727440 26.417236 l
|
||||
h
|
||||
25.732204 27.790249 m
|
||||
21.262428 38.307156 l
|
||||
18.814356 37.266705 l
|
||||
23.284132 26.749798 l
|
||||
25.732204 27.790249 l
|
||||
h
|
||||
17.737572 38.307156 m
|
||||
13.267798 27.790249 l
|
||||
15.715871 26.749798 l
|
||||
20.185644 37.266705 l
|
||||
17.737572 38.307156 l
|
||||
h
|
||||
12.707662 27.384703 m
|
||||
1.272561 26.417236 l
|
||||
1.496809 23.766705 l
|
||||
12.931910 24.734173 l
|
||||
12.707662 27.384703 l
|
||||
h
|
||||
0.182100 23.059925 m
|
||||
8.861986 15.561367 l
|
||||
10.600920 17.574253 l
|
||||
1.921034 25.072811 l
|
||||
0.182100 23.059925 l
|
||||
h
|
||||
9.076371 14.901747 m
|
||||
6.469495 3.758102 l
|
||||
9.059568 3.152195 l
|
||||
11.666444 14.295841 l
|
||||
9.076371 14.901747 l
|
||||
h
|
||||
9.321689 1.681164 m
|
||||
19.884186 8.038603 l
|
||||
18.512465 10.317635 l
|
||||
7.949968 3.960194 l
|
||||
9.321689 1.681164 l
|
||||
h
|
||||
6.469495 3.758102 m
|
||||
6.083770 2.109238 7.870839 0.807915 9.321689 1.681164 c
|
||||
7.949968 3.960194 l
|
||||
8.514397 4.299919 9.209628 3.793659 9.059568 3.152195 c
|
||||
6.469495 3.758102 l
|
||||
h
|
||||
8.861986 15.561367 m
|
||||
9.050550 15.398468 9.133131 15.144379 9.076371 14.901747 c
|
||||
11.666444 14.295841 l
|
||||
11.948550 15.501760 11.538106 16.764618 10.600920 17.574253 c
|
||||
8.861986 15.561367 l
|
||||
h
|
||||
1.272561 26.417236 m
|
||||
-0.416872 26.274302 -1.100905 24.168316 0.182100 23.059925 c
|
||||
1.921034 25.072811 l
|
||||
2.420168 24.641609 2.154054 23.822311 1.496809 23.766705 c
|
||||
1.272561 26.417236 l
|
||||
h
|
||||
13.267798 27.790249 m
|
||||
13.170667 27.561710 12.955100 27.405638 12.707662 27.384703 c
|
||||
12.931910 24.734173 l
|
||||
14.161719 24.838221 15.233116 25.613928 15.715871 26.749798 c
|
||||
13.267798 27.790249 l
|
||||
h
|
||||
21.262428 38.307156 m
|
||||
20.601709 39.861759 18.398293 39.861763 17.737572 38.307156 c
|
||||
20.185644 37.266705 l
|
||||
19.928600 36.661911 19.071398 36.661915 18.814356 37.266705 c
|
||||
21.262428 38.307156 l
|
||||
h
|
||||
26.292339 27.384703 m
|
||||
26.044901 27.405638 25.829334 27.561710 25.732204 27.790249 c
|
||||
23.284132 26.749798 l
|
||||
23.766886 25.613926 24.838282 24.838221 26.068092 24.734173 c
|
||||
26.292339 27.384703 l
|
||||
h
|
||||
38.817898 23.059925 m
|
||||
40.100903 24.168312 39.416878 26.274300 37.727440 26.417236 c
|
||||
37.503193 23.766705 l
|
||||
36.845943 23.822311 36.579834 24.641613 37.078964 25.072811 c
|
||||
38.817898 23.059925 l
|
||||
h
|
||||
29.923628 14.901747 m
|
||||
29.866869 15.144379 29.949450 15.398466 30.138014 15.561367 c
|
||||
28.399080 17.574253 l
|
||||
27.461895 16.764618 27.051451 15.501762 27.333555 14.295841 c
|
||||
29.923628 14.901747 l
|
||||
h
|
||||
29.678312 1.681164 m
|
||||
31.129168 0.807911 32.916229 2.109245 32.530506 3.758102 c
|
||||
29.940432 3.152195 l
|
||||
29.790373 3.793655 30.485600 4.299923 31.050034 3.960194 c
|
||||
29.678312 1.681164 l
|
||||
h
|
||||
20.487535 10.317635 m
|
||||
19.879963 10.683325 19.120041 10.683329 18.512465 10.317635 c
|
||||
19.884186 8.038603 l
|
||||
19.647816 7.896336 19.352180 7.896338 19.115814 8.038603 c
|
||||
20.487535 10.317635 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
4135
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000004225 00000 n
|
||||
0000004248 00000 n
|
||||
0000004421 00000 n
|
||||
0000004495 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
4554
|
||||
%%EOF
|
@ -1,22 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "StickerKeyboardSettingsIcon@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "StickerKeyboardSettingsIcon@3x.png",
|
||||
"scale" : "3x"
|
||||
"filename" : "settings_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 859 B |
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
198
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/SettingsIcon.imageset/settings_48.pdf
vendored
Normal file
198
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/SettingsIcon.imageset/settings_48.pdf
vendored
Normal file
@ -0,0 +1,198 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 3.500000 3.500000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
22.000000 39.500000 m
|
||||
22.000000 40.328426 21.328428 41.000000 20.500000 41.000000 c
|
||||
19.671574 41.000000 19.000000 40.328426 19.000000 39.500000 c
|
||||
19.000000 38.338337 l
|
||||
19.000000 37.690460 18.579983 37.117363 17.962181 36.922268 c
|
||||
17.088881 36.646984 l
|
||||
16.504770 36.524204 15.932035 36.370529 15.372461 36.187752 c
|
||||
14.486683 35.991013 l
|
||||
13.854101 35.851067 13.203807 36.137375 12.879869 36.698452 c
|
||||
12.299038 37.704483 l
|
||||
11.884825 38.421921 10.967439 38.667736 10.250000 38.253521 c
|
||||
9.532561 37.839306 9.286749 36.921921 9.700962 36.204483 c
|
||||
10.281794 35.198452 l
|
||||
10.605731 34.637375 10.528535 33.931049 10.091049 33.453190 c
|
||||
9.444299 32.748505 l
|
||||
9.026765 32.371395 8.628606 31.973236 8.251495 31.555702 c
|
||||
7.546809 30.908951 l
|
||||
7.068950 30.471466 6.362623 30.394268 5.801547 30.718206 c
|
||||
4.795517 31.299038 l
|
||||
4.078078 31.713251 3.160693 31.467438 2.746479 30.750000 c
|
||||
2.332266 30.032562 2.578078 29.115175 3.295517 28.700962 c
|
||||
4.301547 28.120131 l
|
||||
4.862623 27.796192 5.148933 27.145899 5.008989 26.513317 c
|
||||
4.812248 25.627539 l
|
||||
4.629469 25.067965 4.475796 24.495230 4.353016 23.911119 c
|
||||
4.077733 23.037819 l
|
||||
3.882637 22.420017 3.309538 22.000000 2.661662 22.000000 c
|
||||
1.500000 22.000000 l
|
||||
0.671573 22.000000 0.000000 21.328426 0.000000 20.500000 c
|
||||
0.000000 19.671572 0.671573 19.000000 1.500000 19.000000 c
|
||||
2.661662 19.000000 l
|
||||
3.309538 19.000000 3.882637 18.579983 4.077733 17.962181 c
|
||||
4.353333 17.087372 l
|
||||
4.475950 16.504307 4.629352 15.932577 4.811759 15.373960 c
|
||||
5.008989 14.486683 l
|
||||
5.148933 13.854101 4.862623 13.203808 4.301547 12.879869 c
|
||||
3.295517 12.299038 l
|
||||
2.578078 11.884825 2.332266 10.967440 2.746479 10.250000 c
|
||||
3.160693 9.532560 4.078078 9.286747 4.795517 9.700962 c
|
||||
5.801547 10.281792 l
|
||||
6.362623 10.605730 7.068950 10.528536 7.546809 10.091049 c
|
||||
8.250140 9.445797 l
|
||||
8.627652 9.027718 9.026265 8.629059 9.444299 8.251495 c
|
||||
10.091049 7.546806 l
|
||||
10.528535 7.068951 10.605731 6.362625 10.281794 5.801548 c
|
||||
9.700962 4.795517 l
|
||||
9.286749 4.078079 9.532561 3.160690 10.250000 2.746479 c
|
||||
10.967439 2.332264 11.884825 2.578079 12.299038 3.295517 c
|
||||
12.879869 4.301548 l
|
||||
13.203807 4.862625 13.854101 5.148933 14.486683 5.008987 c
|
||||
15.384456 4.808334 l
|
||||
15.943589 4.626175 16.515841 4.473072 17.099430 4.350803 c
|
||||
17.962181 4.077732 l
|
||||
18.125601 4.015381 l
|
||||
18.652878 3.777821 19.000000 3.250641 19.000000 2.661663 c
|
||||
19.000000 1.500000 l
|
||||
19.010092 1.325066 l
|
||||
19.096739 0.579060 19.730747 0.000000 20.500000 0.000000 c
|
||||
21.328428 0.000000 22.000000 0.671574 22.000000 1.500000 c
|
||||
22.000000 2.661663 l
|
||||
22.010246 2.836273 l
|
||||
22.078001 3.410614 22.476181 3.900372 23.037819 4.077732 c
|
||||
23.905090 4.351749 l
|
||||
24.486071 4.473644 25.055811 4.626099 25.612547 4.807358 c
|
||||
26.513317 5.008987 l
|
||||
27.145899 5.148933 27.796192 4.862625 28.120131 4.301548 c
|
||||
28.700962 3.295517 l
|
||||
29.115175 2.578079 30.032560 2.332264 30.750000 2.746479 c
|
||||
31.467440 3.160690 31.713253 4.078079 31.299038 4.795517 c
|
||||
30.718208 5.801548 l
|
||||
30.394270 6.362625 30.471464 7.068951 30.908951 7.546806 c
|
||||
31.555702 8.251495 l
|
||||
31.973736 8.629059 32.372349 9.027718 32.749863 9.445797 c
|
||||
33.453194 10.091049 l
|
||||
33.931049 10.528536 34.637375 10.605730 35.198452 10.281792 c
|
||||
36.204483 9.700962 l
|
||||
36.921921 9.286747 37.839310 9.532560 38.253521 10.250000 c
|
||||
38.667736 10.967440 38.421921 11.884825 37.704483 12.299038 c
|
||||
36.698452 12.879869 l
|
||||
36.137375 13.203808 35.851067 13.854101 35.991013 14.486683 c
|
||||
36.192642 15.387453 l
|
||||
36.373901 15.944189 36.526356 16.513929 36.648251 17.094910 c
|
||||
36.922268 17.962181 l
|
||||
37.117363 18.579983 37.690460 19.000000 38.338337 19.000000 c
|
||||
39.500000 19.000000 l
|
||||
40.328426 19.000000 41.000000 19.671572 41.000000 20.500000 c
|
||||
41.000000 21.328426 40.328426 22.000000 39.500000 22.000000 c
|
||||
38.338337 22.000000 l
|
||||
37.690460 22.000000 37.117363 22.420017 36.922268 23.037819 c
|
||||
36.648884 23.902077 l
|
||||
36.526775 24.484623 36.373940 25.055870 36.192154 25.614044 c
|
||||
35.991013 26.513317 l
|
||||
35.851067 27.145899 36.137375 27.796192 36.698452 28.120131 c
|
||||
37.704483 28.700962 l
|
||||
38.421921 29.115175 38.667736 30.032562 38.253521 30.750000 c
|
||||
37.839310 31.467438 36.921921 31.713251 36.204483 31.299038 c
|
||||
35.198452 30.718206 l
|
||||
34.637375 30.394268 33.931049 30.471466 33.453194 30.908951 c
|
||||
32.748505 31.555702 l
|
||||
32.370941 31.973736 31.972282 32.372349 31.554203 32.749859 c
|
||||
30.908951 33.453190 l
|
||||
30.471464 33.931049 30.394270 34.637375 30.718208 35.198452 c
|
||||
31.299038 36.204483 l
|
||||
31.713253 36.921921 31.467440 37.839306 30.750000 38.253521 c
|
||||
30.032560 38.667736 29.115175 38.421921 28.700962 37.704483 c
|
||||
28.120131 36.698452 l
|
||||
27.796192 36.137375 27.145899 35.851067 26.513317 35.991013 c
|
||||
25.626040 36.188240 l
|
||||
25.067423 36.370647 24.495693 36.524048 23.912628 36.646667 c
|
||||
23.037819 36.922268 l
|
||||
22.420017 37.117363 22.000000 37.690460 22.000000 38.338337 c
|
||||
22.000000 39.500000 l
|
||||
h
|
||||
6.999939 20.500244 m
|
||||
6.999939 27.956089 13.044094 34.000244 20.499939 34.000244 c
|
||||
27.955784 34.000244 33.999939 27.956089 33.999939 20.500244 c
|
||||
33.999939 13.044399 27.955784 7.000244 20.499939 7.000244 c
|
||||
13.044094 7.000244 6.999939 13.044399 6.999939 20.500244 c
|
||||
h
|
||||
14.233011 30.086567 m
|
||||
14.833106 30.510162 15.662971 30.367085 16.086567 29.766989 c
|
||||
21.689148 21.830000 l
|
||||
30.500000 21.830000 l
|
||||
31.234539 21.830000 31.830000 21.234539 31.830000 20.500000 c
|
||||
31.830000 19.765461 31.234539 19.170000 30.500000 19.170000 c
|
||||
21.689148 19.170000 l
|
||||
16.086567 11.233011 l
|
||||
15.662971 10.632917 14.833106 10.489836 14.233011 10.913433 c
|
||||
13.632916 11.337029 13.489837 12.166895 13.913433 12.766989 c
|
||||
19.372028 20.500000 l
|
||||
13.913433 28.233011 l
|
||||
13.489837 28.833107 13.632916 29.662971 14.233011 30.086567 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
5648
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000005738 00000 n
|
||||
0000005761 00000 n
|
||||
0000005934 00000 n
|
||||
0000006008 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
6067
|
||||
%%EOF
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_input_stickers.pdf",
|
||||
"filename" : "stickers_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
Binary file not shown.
123
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/StickersMode.imageset/stickers_48.pdf
vendored
Normal file
123
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/StickersMode.imageset/stickers_48.pdf
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.270020 4.152344 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
16.315697 39.500134 m
|
||||
17.465136 39.695385 18.643398 39.519531 19.692223 38.997250 c
|
||||
20.036819 38.810360 l
|
||||
20.329382 38.633312 l
|
||||
22.423059 37.333458 25.297297 34.879963 28.991110 31.253437 c
|
||||
30.068821 30.185352 l
|
||||
30.611883 29.639896 l
|
||||
34.713905 25.501024 37.402637 22.349218 38.705769 20.126995 c
|
||||
39.294643 19.122784 39.547707 17.960588 39.433071 16.802202 c
|
||||
39.381195 16.416437 l
|
||||
39.289803 15.914349 l
|
||||
39.216812 15.566687 l
|
||||
39.100006 15.079699 l
|
||||
36.891888 6.359375 29.005989 0.117638 19.853556 0.117638 c
|
||||
8.888740 0.117638 0.000000 9.006048 0.000000 19.970463 c
|
||||
0.000000 29.125599 6.246058 37.013073 14.970581 39.218063 c
|
||||
15.710625 39.388660 l
|
||||
16.315697 39.500134 l
|
||||
h
|
||||
12.798756 35.489426 m
|
||||
12.631100 35.425148 l
|
||||
12.241472 35.242031 l
|
||||
6.578289 32.429054 2.786009 26.584171 2.786009 19.970726 c
|
||||
2.786009 10.544853 10.427470 2.903671 19.853691 2.903671 c
|
||||
26.466494 2.903671 32.311123 6.694832 35.134140 12.353510 c
|
||||
35.125557 12.358789 l
|
||||
35.308681 12.748402 l
|
||||
35.384480 12.909666 35.423779 13.085659 35.423779 13.263847 c
|
||||
35.423779 13.877327 34.967880 14.384329 34.376385 14.464569 c
|
||||
34.211948 14.475632 l
|
||||
32.160770 14.475632 l
|
||||
22.489969 14.475632 14.620218 22.186560 14.364793 31.795357 c
|
||||
14.358393 32.277351 l
|
||||
14.358393 34.328457 l
|
||||
14.358393 34.506645 14.319095 34.682640 14.243299 34.843903 c
|
||||
13.984495 35.394527 13.364433 35.659653 12.798756 35.489426 c
|
||||
h
|
||||
16.782263 36.753235 m
|
||||
17.411953 36.860195 18.059189 36.741272 18.609720 36.417446 c
|
||||
18.873783 36.257626 l
|
||||
19.147327 36.083416 l
|
||||
21.103546 34.807701 23.928543 32.350906 27.572746 28.738895 c
|
||||
28.098915 28.215038 l
|
||||
29.130342 27.174446 l
|
||||
32.797047 23.440453 35.195877 20.604664 36.302593 18.717381 c
|
||||
36.625195 18.167248 36.743385 17.520950 36.636360 16.892254 c
|
||||
36.563797 16.495956 l
|
||||
35.903824 16.976896 35.090961 17.260666 34.211819 17.260666 c
|
||||
32.160641 17.260666 l
|
||||
31.717884 17.267069 l
|
||||
23.629288 17.501270 17.144138 24.131626 17.144138 32.276615 c
|
||||
17.144138 34.327721 l
|
||||
17.128656 34.679214 l
|
||||
17.087467 35.145836 16.964489 35.602531 16.764452 36.028126 c
|
||||
16.655125 36.260727 16.526255 36.477886 16.380722 36.678566 c
|
||||
16.574390 36.716927 l
|
||||
16.782263 36.753235 l
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2244
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002334 00000 n
|
||||
0000002357 00000 n
|
||||
0000002530 00000 n
|
||||
0000002604 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2663
|
||||
%%EOF
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_input_trending.pdf",
|
||||
"filename" : "trending_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
Binary file not shown.
110
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/TrendingGifs.imageset/trending_48.pdf
vendored
Normal file
110
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/TrendingGifs.imageset/trending_48.pdf
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.170044 0.499023 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
32.698776 36.649349 m
|
||||
33.196007 37.230061 33.128334 38.103909 32.547619 38.601139 c
|
||||
24.752439 45.275715 13.077241 44.850506 5.778737 37.552002 c
|
||||
-1.926246 29.847019 -1.926246 17.354773 5.778737 9.649792 c
|
||||
13.483720 1.944809 25.975967 1.944809 33.680950 9.649792 c
|
||||
35.733494 11.702333 37.280899 14.138113 38.257706 16.806875 c
|
||||
38.402122 17.201443 38.533802 17.600437 38.652599 18.003250 c
|
||||
38.868858 18.736530 38.449730 19.506285 37.716450 19.722542 c
|
||||
36.983170 19.938799 36.213417 19.519670 35.997158 18.786390 c
|
||||
35.895077 18.440252 35.781937 18.097435 35.657864 17.758453 c
|
||||
34.818737 15.465839 33.489719 13.373833 31.723314 11.607428 c
|
||||
25.099504 4.983616 14.360184 4.983616 7.736373 11.607428 c
|
||||
1.112563 18.231237 1.112563 28.970556 7.736373 35.594368 c
|
||||
14.010414 41.868408 24.048201 42.233982 30.746983 36.498192 c
|
||||
31.327696 36.000961 32.201546 36.068634 32.698776 36.649349 c
|
||||
h
|
||||
38.615009 32.391445 m
|
||||
38.529594 33.073990 37.947231 33.602066 37.241535 33.602066 c
|
||||
28.902636 33.602066 l
|
||||
28.728996 33.591278 l
|
||||
28.046450 33.505859 27.518377 32.923504 27.518377 32.217808 c
|
||||
27.529161 32.044167 l
|
||||
27.614580 31.361622 28.196938 30.833549 28.902636 30.833549 c
|
||||
34.177799 30.834362 l
|
||||
25.567074 22.223354 l
|
||||
20.660971 27.129120 l
|
||||
20.471394 27.300470 l
|
||||
19.490988 28.100105 18.044804 28.042988 17.130936 27.129120 c
|
||||
8.744342 18.742527 l
|
||||
8.620458 18.600773 l
|
||||
8.207510 18.058197 8.248805 17.280428 8.744342 16.784891 c
|
||||
8.886098 16.661007 l
|
||||
9.428673 16.248058 10.206441 16.289354 10.701978 16.784891 c
|
||||
18.894285 24.980196 l
|
||||
23.802057 20.072762 l
|
||||
23.991632 19.901411 l
|
||||
24.972040 19.101778 26.418222 19.158894 27.332090 20.072762 c
|
||||
35.857254 28.599537 l
|
||||
35.857281 23.878904 l
|
||||
35.868065 23.705265 l
|
||||
35.953484 23.022720 36.535839 22.494646 37.241535 22.494646 c
|
||||
38.006042 22.494646 38.625793 23.114401 38.625793 23.878904 c
|
||||
38.625793 32.217808 l
|
||||
38.615009 32.391445 l
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1977
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002067 00000 n
|
||||
0000002090 00000 n
|
||||
0000002263 00000 n
|
||||
0000002337 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2396
|
||||
%%EOF
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_input_addstickers.pdf",
|
||||
"filename" : "add_48.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
|
95
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/TrendingIcon.imageset/add_48.pdf
vendored
Normal file
95
submodules/TelegramUI/Images.xcassets/Chat/Input/Media/TrendingIcon.imageset/add_48.pdf
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.272095 4.271973 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
19.728001 36.800056 m
|
||||
10.299395 36.800056 2.656000 29.156660 2.656000 19.728054 c
|
||||
2.656000 10.299450 10.299395 2.656055 19.728001 2.656055 c
|
||||
29.156605 2.656055 36.799999 10.299450 36.799999 19.728054 c
|
||||
36.799999 29.156660 29.156605 36.800056 19.728001 36.800056 c
|
||||
h
|
||||
0.000000 19.728054 m
|
||||
0.000000 30.623528 8.832526 39.456055 19.728001 39.456055 c
|
||||
30.623474 39.456055 39.455997 30.623528 39.455997 19.728054 c
|
||||
39.455997 8.832581 30.623474 0.000057 19.728001 0.000057 c
|
||||
8.832526 0.000057 0.000000 8.832581 0.000000 19.728054 c
|
||||
h
|
||||
19.728001 29.056055 m
|
||||
20.461435 29.056055 21.056002 28.461489 21.056002 27.728054 c
|
||||
21.056002 21.056053 l
|
||||
27.728001 21.056053 l
|
||||
28.461435 21.056053 29.056002 20.461487 29.056002 19.728054 c
|
||||
29.056002 18.994619 28.461435 18.400053 27.728001 18.400053 c
|
||||
21.056002 18.400053 l
|
||||
21.056002 11.728054 l
|
||||
21.056002 10.994619 20.461435 10.400053 19.728001 10.400053 c
|
||||
18.994568 10.400053 18.400002 10.994619 18.400002 11.728054 c
|
||||
18.400002 18.400053 l
|
||||
11.728000 18.400053 l
|
||||
10.994566 18.400053 10.400000 18.994619 10.400000 19.728054 c
|
||||
10.400000 20.461487 10.994566 21.056053 11.728000 21.056053 c
|
||||
18.400002 21.056053 l
|
||||
18.400002 27.728054 l
|
||||
18.400002 28.461489 18.994568 29.056055 19.728001 29.056055 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1349
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 48.000000 48.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001439 00000 n
|
||||
0000001462 00000 n
|
||||
0000001635 00000 n
|
||||
0000001709 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
1768
|
||||
%%EOF
|
Binary file not shown.
@ -3063,7 +3063,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
return message?.totalCount
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
} else if case let .forwardedMessages(messageIds, hideNames, _) = subject {
|
||||
} else if case let .forwardedMessages(messageIds, options) = subject {
|
||||
displayedCountSignal = self.presentationInterfaceStatePromise.get()
|
||||
|> map { state -> Int? in
|
||||
if let selectionState = state.interfaceState.selectionState {
|
||||
@ -3074,19 +3074,19 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|
||||
subtitleTextSignal = combineLatest(self.presentationInterfaceStatePromise.get(), hideNames, displayedCountSignal)
|
||||
|> map { state, hideNames, count in
|
||||
subtitleTextSignal = combineLatest(self.presentationInterfaceStatePromise.get(), options, displayedCountSignal)
|
||||
|> map { state, options, count in
|
||||
if let peer = state.renderedPeer?.chatMainPeer {
|
||||
if let peer = peer as? TelegramUser {
|
||||
let displayName = peer.compactDisplayTitle
|
||||
if count == 1 {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_UserMessageForwardHidden(displayName).string
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_UserMessageForwardVisible(displayName).string
|
||||
}
|
||||
} else {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_UserMessagesForwardHidden(displayName).string
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_UserMessagesForwardVisible(displayName).string
|
||||
@ -3094,13 +3094,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
} else if let peer = peer as? TelegramChannel, case .broadcast = peer.info {
|
||||
if count == 1 {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_ChannelMessageForwardHidden
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_ChannelMessageForwardVisible
|
||||
}
|
||||
} else {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_ChannelMessagesForwardHidden
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_ChannelMessagesForwardVisible
|
||||
@ -3108,13 +3108,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
} else {
|
||||
if count == 1 {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_GroupMessageForwardHidden
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_GroupMessageForwardVisible
|
||||
}
|
||||
} else {
|
||||
if hideNames {
|
||||
if options.hideNames {
|
||||
return state.strings.Conversation_ForwardOptions_GroupMessagesForwardHidden
|
||||
} else {
|
||||
return state.strings.Conversation_ForwardOptions_GroupMessagesForwardVisible
|
||||
@ -3894,7 +3894,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
isDarkAppearance = darkAppearancePreview
|
||||
}
|
||||
let customTheme = isDarkAppearance ? theme.darkTheme : theme.theme
|
||||
if let settings = customTheme.settings, let theme = makePresentationTheme(settings: settings) {
|
||||
if let settings = customTheme.settings, let theme = makePresentationTheme(settings: settings, specialMode: true) {
|
||||
presentationData = presentationData.withUpdated(theme: theme)
|
||||
presentationData = presentationData.withUpdated(chatWallpaper: theme.chat.defaultWallpaper)
|
||||
}
|
||||
@ -4648,7 +4648,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
if let strongSelf = self {
|
||||
let (cachedData, messages) = cachedDataAndMessages
|
||||
|
||||
strongSelf.cachedDataPromise.set(.single(cachedData))
|
||||
if cachedData != nil {
|
||||
strongSelf.cachedDataPromise.set(.single(cachedData))
|
||||
}
|
||||
|
||||
var pinnedMessageId: MessageId?
|
||||
var peerIsBlocked: Bool = false
|
||||
@ -5484,71 +5486,47 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
if let strongSelf = self, case let .peer(peerId) = strongSelf.chatLocation {
|
||||
let presentationData = strongSelf.presentationData
|
||||
|
||||
let hideNames = strongSelf.presentationInterfaceStatePromise.get()
|
||||
|> map { state -> Bool in
|
||||
return state.interfaceState.forwardOptionsState?.hideNames ?? false
|
||||
let forwardOptions: Signal<ChatControllerSubject.ForwardOptions, NoError>
|
||||
if peerId.namespace == Namespaces.Peer.SecretChat {
|
||||
forwardOptions = .single(ChatControllerSubject.ForwardOptions(hideNames: true, hideCaptions: false))
|
||||
} else {
|
||||
forwardOptions = strongSelf.presentationInterfaceStatePromise.get()
|
||||
|> map { state -> ChatControllerSubject.ForwardOptions in
|
||||
return ChatControllerSubject.ForwardOptions(hideNames: state.interfaceState.forwardOptionsState?.hideNames ?? false, hideCaptions: state.interfaceState.forwardOptionsState?.hideCaptions ?? false)
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|
||||
let hideCaptions = strongSelf.presentationInterfaceStatePromise.get()
|
||||
|> map { state -> Bool in
|
||||
return state.interfaceState.forwardOptionsState?.hideCaptions ?? false
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|
||||
let chatController = strongSelf.context.sharedContext.makeChatController(context: strongSelf.context, chatLocation: .peer(peerId), subject: .forwardedMessages(ids: strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? [], hideNames: hideNames, hideCaptions: hideCaptions), botStart: nil, mode: .standard(previewing: true))
|
||||
let chatController = strongSelf.context.sharedContext.makeChatController(context: strongSelf.context, chatLocation: .peer(peerId), subject: .forwardedMessages(ids: strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? [], options: forwardOptions), botStart: nil, mode: .standard(previewing: true))
|
||||
chatController.canReadHistory.set(false)
|
||||
|
||||
let items = combineLatest(strongSelf.presentationInterfaceStatePromise.get(), strongSelf.context.account.postbox.messagesAtIds(strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? []))
|
||||
|> map { presentationInterfaceState, messages -> [ContextMenuItem] in
|
||||
let items = combineLatest(forwardOptions, strongSelf.context.account.postbox.messagesAtIds(strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? []))
|
||||
|> map { forwardOptions, messages -> [ContextMenuItem] in
|
||||
var items: [ContextMenuItem] = []
|
||||
|
||||
var hasCaptions = false
|
||||
loop: for message in messages {
|
||||
var uniquePeerIds = Set<PeerId>()
|
||||
for message in messages {
|
||||
if let author = message.effectiveAuthor, !uniquePeerIds.contains(author.id) {
|
||||
uniquePeerIds.insert(author.id)
|
||||
}
|
||||
if !message.text.isEmpty {
|
||||
for media in message.media {
|
||||
if media is TelegramMediaImage || media is TelegramMediaFile {
|
||||
hasCaptions = true
|
||||
break loop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_ShowSendersNames, icon: { theme in
|
||||
if presentationInterfaceState.interfaceState.forwardOptionsState?.hideNames == true {
|
||||
return nil
|
||||
} else {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
}
|
||||
}, action: { [weak self] _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideNames = false
|
||||
updated.hideCaptions = false
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
let hideNames = forwardOptions.hideNames
|
||||
let hideCaptions = forwardOptions.hideCaptions
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_HideSendersNames, icon: { theme in
|
||||
if presentationInterfaceState.interfaceState.forwardOptionsState?.hideNames == true {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}, action: { _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideNames = true
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
if case let .peer(peerId) = strongSelf.chatLocation, peerId.namespace == Namespaces.Peer.SecretChat {
|
||||
|
||||
if hasCaptions {
|
||||
items.append(.separator)
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_ShowCaption, icon: { theme in
|
||||
if presentationInterfaceState.interfaceState.forwardOptionsState?.hideCaptions == true {
|
||||
} else {
|
||||
items.append(.action(ContextMenuActionItem(text: uniquePeerIds.count == 1 ? presentationData.strings.Conversation_ForwardOptions_ShowSendersName : presentationData.strings.Conversation_ForwardOptions_ShowSendersNames, icon: { theme in
|
||||
if hideNames {
|
||||
return nil
|
||||
} else {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
@ -5556,14 +5534,14 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}, action: { [weak self] _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideNames = false
|
||||
updated.hideCaptions = false
|
||||
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_HideCaption, icon: { theme in
|
||||
if presentationInterfaceState.interfaceState.forwardOptionsState?.hideCaptions == true {
|
||||
items.append(.action(ContextMenuActionItem(text: uniquePeerIds.count == 1 ? presentationData.strings.Conversation_ForwardOptions_HideSendersName : presentationData.strings.Conversation_ForwardOptions_HideSendersNames, icon: { theme in
|
||||
if hideNames {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
@ -5571,14 +5549,47 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}, action: { _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideCaptions = true
|
||||
updated.hideNames = true
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
}
|
||||
|
||||
items.append(.separator)
|
||||
if hasCaptions {
|
||||
items.append(.separator)
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_ShowCaption, icon: { theme in
|
||||
if hideCaptions {
|
||||
return nil
|
||||
} else {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
}
|
||||
}, action: { [weak self] _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideCaptions = false
|
||||
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_HideCaption, icon: { theme in
|
||||
if hideCaptions {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}, action: { _, f in
|
||||
self?.interfaceInteraction?.updateForwardOptionsState({ current in
|
||||
var updated = current
|
||||
updated.hideCaptions = true
|
||||
updated.hideNames = true
|
||||
return updated
|
||||
})
|
||||
})))
|
||||
}
|
||||
|
||||
items.append(.separator)
|
||||
}
|
||||
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_ChangeRecipient, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Forward"), color: theme.contextMenu.primaryColor) }, action: { c, f in
|
||||
self?.interfaceInteraction?.forwardCurrentForwardMessages()
|
||||
@ -5605,6 +5616,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|
||||
let contextController = ContextController(account: strongSelf.context.account, presentationData: strongSelf.presentationData, source: .controller(ContextControllerContentSourceImpl(controller: chatController, sourceNode: sourceNode, passthroughTouches: true)), items: items, reactionItems: [])
|
||||
contextController.dismissedForCancel = { [weak self, weak chatController] in
|
||||
if let selectedMessageIds = (chatController as? ChatControllerImpl)?.selectedMessageIds {
|
||||
var forwardMessageIds = strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? []
|
||||
forwardMessageIds = forwardMessageIds.filter { selectedMessageIds.contains($0) }
|
||||
strongSelf.updateChatPresentationInterfaceState(interactive: false, { $0.updatedInterfaceState({ $0.withUpdatedForwardMessageIds(forwardMessageIds) }) })
|
||||
}
|
||||
}
|
||||
contextController.immediateItemsTransitionAnimation = true
|
||||
strongSelf.presentInGlobalOverlay(contextController)
|
||||
}
|
||||
@ -7423,7 +7441,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
}
|
||||
|
||||
if case let .forwardedMessages(messageIds, _, _) = self.subject, messageIds.count > 1 {
|
||||
if case let .forwardedMessages(messageIds, _) = self.subject, messageIds.count > 1 {
|
||||
self.updateChatPresentationInterfaceState(interactive: false, { state in
|
||||
return state.updatedInterfaceState({ $0.withUpdatedSelectedMessages(messageIds) })
|
||||
})
|
||||
|
@ -252,54 +252,66 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
||||
self.inputContextPanelContainer = ChatControllerTitlePanelNodeContainer()
|
||||
|
||||
var source: ChatHistoryListSource
|
||||
if case let .forwardedMessages(messageIds, hideNames, hideCaptions) = subject {
|
||||
let messages = combineLatest(context.account.postbox.messagesAtIds(messageIds), context.account.postbox.loadedPeerWithId(context.account.peerId))
|
||||
|> mapToSignal { messages, accountPeer -> Signal<([Message], Int32, Bool), NoError> in
|
||||
return combineLatest(hideNames, hideCaptions)
|
||||
|> map { hideNames, hideCaptions -> ([Message], Int32, Bool) in
|
||||
var messages = messages
|
||||
messages.sort(by: { lhsMessage, rhsMessage in
|
||||
return lhsMessage.timestamp > rhsMessage.timestamp
|
||||
if case let .forwardedMessages(messageIds, options) = subject {
|
||||
let messages = combineLatest(context.account.postbox.messagesAtIds(messageIds), context.account.postbox.loadedPeerWithId(context.account.peerId), options)
|
||||
|> map { messages, accountPeer, options -> ([Message], Int32, Bool) in
|
||||
var messages = messages
|
||||
messages.sort(by: { lhsMessage, rhsMessage in
|
||||
return lhsMessage.timestamp > rhsMessage.timestamp
|
||||
})
|
||||
messages = messages.map { message in
|
||||
var flags = message.flags
|
||||
flags.remove(.Incoming)
|
||||
|
||||
var attributes = message.attributes
|
||||
attributes.append(OutgoingScheduleInfoMessageAttribute(scheduleTime: scheduleWhenOnlineTimestamp))
|
||||
attributes = attributes.filter({ attribute in
|
||||
if attribute is EditedMessageAttribute {
|
||||
return false
|
||||
}
|
||||
if attribute is ReplyMessageAttribute {
|
||||
return false
|
||||
}
|
||||
if attribute is ReplyMarkupMessageAttribute {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
messages = messages.map { message in
|
||||
var flags = message.flags
|
||||
flags.remove(.Incoming)
|
||||
|
||||
var attributes = message.attributes
|
||||
attributes.append(OutgoingScheduleInfoMessageAttribute(scheduleTime: scheduleWhenOnlineTimestamp))
|
||||
attributes = attributes.filter({ attribute in
|
||||
if attribute is EditedMessageAttribute {
|
||||
return false
|
||||
}
|
||||
if attribute is ReplyMessageAttribute {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
var messageText = message.text
|
||||
var forwardInfo = message.forwardInfo
|
||||
if forwardInfo == nil {
|
||||
forwardInfo = MessageForwardInfo(author: message.author, source: nil, sourceMessageId: nil, date: 0, authorSignature: nil, psaType: nil, flags: [])
|
||||
}
|
||||
if hideNames {
|
||||
forwardInfo = nil
|
||||
}
|
||||
|
||||
if hideNames && hideCaptions {
|
||||
for media in message.media {
|
||||
|
||||
var messageText = message.text
|
||||
var messageMedia = message.media
|
||||
var hasDice = false
|
||||
if options.hideNames {
|
||||
for media in message.media {
|
||||
if options.hideCaptions {
|
||||
if media is TelegramMediaImage || media is TelegramMediaFile {
|
||||
messageText = ""
|
||||
break
|
||||
}
|
||||
}
|
||||
if let poll = media as? TelegramMediaPoll {
|
||||
var updatedMedia = message.media.filter { !($0 is TelegramMediaPoll) }
|
||||
updatedMedia.append(TelegramMediaPoll(pollId: poll.pollId, publicity: poll.publicity, kind: poll.kind, text: poll.text, options: poll.options, correctAnswers: poll.correctAnswers, results: TelegramMediaPollResults(voters: nil, totalVoters: nil, recentVoters: [], solution: nil), isClosed: false, deadlineTimeout: nil))
|
||||
messageMedia = updatedMedia
|
||||
}
|
||||
if let _ = media as? TelegramMediaDice {
|
||||
hasDice = true
|
||||
}
|
||||
}
|
||||
|
||||
return message.withUpdatedFlags(flags).withUpdatedText(messageText).withUpdatedTimestamp(scheduleWhenOnlineTimestamp).withUpdatedAttributes(attributes).withUpdatedAuthor(accountPeer).withUpdatedForwardInfo(forwardInfo)
|
||||
}
|
||||
|
||||
return (messages, Int32(messages.count), false)
|
||||
var forwardInfo = message.forwardInfo
|
||||
if forwardInfo == nil {
|
||||
forwardInfo = MessageForwardInfo(author: message.author, source: nil, sourceMessageId: nil, date: 0, authorSignature: nil, psaType: nil, flags: [])
|
||||
}
|
||||
if options.hideNames && !hasDice {
|
||||
forwardInfo = nil
|
||||
}
|
||||
|
||||
return message.withUpdatedFlags(flags).withUpdatedText(messageText).withUpdatedMedia(messageMedia).withUpdatedTimestamp(scheduleWhenOnlineTimestamp).withUpdatedAttributes(attributes).withUpdatedAuthor(accountPeer).withUpdatedForwardInfo(forwardInfo)
|
||||
}
|
||||
|
||||
return (messages, Int32(messages.count), false)
|
||||
}
|
||||
source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), loadMore: nil)
|
||||
} else {
|
||||
@ -556,6 +568,15 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
||||
if let _ = strongSelf.chatPresentationInterfaceState.inputTextPanelState.mediaRecordingState {
|
||||
return true
|
||||
}
|
||||
var hasChatThemeScreen = false
|
||||
strongSelf.controller?.window?.forEachController { c in
|
||||
if c is ChatThemeScreen {
|
||||
hasChatThemeScreen = true
|
||||
}
|
||||
}
|
||||
if hasChatThemeScreen {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -2471,7 +2471,14 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
|
||||
updatedToggledMessageIds = state.toggledMessageIds
|
||||
let isSelected = (self.controllerInteraction.selectionState?.selectedIds.contains(message.id) ?? false)
|
||||
if state.selecting != isSelected {
|
||||
let messageIds = messages.map { $0.id }
|
||||
let messageIds = messages.filter { message -> Bool in
|
||||
for media in messages {
|
||||
if media is TelegramMediaAction {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}.map { $0.id }
|
||||
updatedToggledMessageIds.append(messageIds)
|
||||
self.controllerInteraction.toggleMessagesSelection(messageIds, state.selecting)
|
||||
}
|
||||
|
@ -129,6 +129,7 @@ final class ChatMediaInputMetaSectionItemNode: ListViewItemNode {
|
||||
|
||||
self.imageNode = ASImageNode()
|
||||
self.imageNode.isLayerBacked = true
|
||||
self.imageNode.contentMode = .scaleAspectFit
|
||||
|
||||
self.textNodeContainer = ASDisplayNode()
|
||||
self.textNodeContainer.isUserInteractionEnabled = false
|
||||
@ -227,12 +228,6 @@ final class ChatMediaInputMetaSectionItemNode: ListViewItemNode {
|
||||
default:
|
||||
break
|
||||
}
|
||||
// if emoji == "🥳" {
|
||||
// if #available(iOSApplicationExtension 12.1, iOS 12.1, *) {
|
||||
// } else {
|
||||
// emoji = "🎉"
|
||||
// }
|
||||
// }
|
||||
self.imageNode.image = nil
|
||||
|
||||
if let file = file {
|
||||
|
@ -86,6 +86,7 @@ final class ChatMediaInputRecentGifsItemNode: ListViewItemNode {
|
||||
|
||||
self.imageNode = ASImageNode()
|
||||
self.imageNode.isLayerBacked = true
|
||||
self.imageNode.contentMode = .scaleAspectFit
|
||||
|
||||
self.titleNode = ImmediateTextNode()
|
||||
|
||||
|
@ -82,6 +82,7 @@ final class ChatMediaInputSettingsItemNode: ListViewItemNode {
|
||||
|
||||
self.imageNode = ASImageNode()
|
||||
self.imageNode.isLayerBacked = true
|
||||
self.imageNode.contentMode = .scaleAspectFit
|
||||
|
||||
self.titleNode = ImmediateTextNode()
|
||||
|
||||
|
@ -91,6 +91,7 @@ final class ChatMediaInputTrendingItemNode: ListViewItemNode {
|
||||
|
||||
self.imageNode = ASImageNode()
|
||||
self.imageNode.isLayerBacked = true
|
||||
self.imageNode.contentMode = .scaleAspectFit
|
||||
|
||||
self.badgeBackground = ASImageNode()
|
||||
self.badgeBackground.displaysAsynchronously = false
|
||||
|
@ -2411,6 +2411,10 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
||||
}
|
||||
item.controllerInteraction.displayPsa(type, sourceNode)
|
||||
}
|
||||
|
||||
if animation.isAnimated {
|
||||
forwardInfoNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
|
||||
}
|
||||
}
|
||||
let previousForwardInfoNodeFrame = forwardInfoNode.frame
|
||||
forwardInfoNode.frame = CGRect(origin: CGPoint(x: contentOrigin.x + layoutConstants.text.bubbleInsets.left, y: layoutConstants.bubble.contentInsets.top + forwardInfoOriginY), size: CGSize(width: bubbleContentWidth, height: forwardInfoSizeApply.0.height))
|
||||
@ -2420,8 +2424,17 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
||||
}
|
||||
}
|
||||
} else {
|
||||
strongSelf.forwardInfoNode?.removeFromSupernode()
|
||||
strongSelf.forwardInfoNode = nil
|
||||
if animation.isAnimated {
|
||||
if let forwardInfoNode = strongSelf.forwardInfoNode {
|
||||
strongSelf.forwardInfoNode = nil
|
||||
forwardInfoNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.1, removeOnCompletion: false, completion: { [weak forwardInfoNode] _ in
|
||||
forwardInfoNode?.removeFromSupernode()
|
||||
})
|
||||
}
|
||||
} else {
|
||||
strongSelf.forwardInfoNode?.removeFromSupernode()
|
||||
strongSelf.forwardInfoNode = nil
|
||||
}
|
||||
}
|
||||
|
||||
if let replyInfoNode = replyInfoSizeApply.1() {
|
||||
|
@ -440,7 +440,10 @@ final class ChatThemeScreen: ViewController {
|
||||
return
|
||||
}
|
||||
strongSelf.dismiss()
|
||||
strongSelf.completion(emoticon)
|
||||
if strongSelf.initiallySelectedEmoticon == nil && emoticon == nil {
|
||||
} else {
|
||||
strongSelf.completion(emoticon)
|
||||
}
|
||||
}
|
||||
self.controllerNode.dismiss = { [weak self] in
|
||||
self?.presentingViewController?.dismiss(animated: false, completion: nil)
|
||||
@ -456,6 +459,8 @@ final class ChatThemeScreen: ViewController {
|
||||
|
||||
override public func loadView() {
|
||||
super.loadView()
|
||||
|
||||
self.view.disablesInteractiveTransitionGestureRecognizer = true
|
||||
}
|
||||
|
||||
override public func viewDidAppear(_ animated: Bool) {
|
||||
|
@ -161,7 +161,11 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
|
||||
if !authors.isEmpty {
|
||||
authors.append(", ")
|
||||
}
|
||||
authors.append(author.compactDisplayTitle)
|
||||
if author.id == context.account.peerId {
|
||||
authors.append(strongSelf.strings.DialogList_You)
|
||||
} else {
|
||||
authors.append(author.compactDisplayTitle)
|
||||
}
|
||||
}
|
||||
if let peer = message.peers[message.id.peerId] {
|
||||
sourcePeer = (peer.id.namespace == Namespaces.Peer.CloudUser, peer.displayTitle(strings: strongSelf.strings, displayOrder: strongSelf.nameDisplayOrder))
|
||||
@ -201,7 +205,14 @@ final class ForwardAccessoryPanelNode: AccessoryPanelNode {
|
||||
if let strongSelf = self, count < 3 {
|
||||
Queue.mainQueue().after(3.0) {
|
||||
if let snapshotView = strongSelf.textNode.view.snapshotContentTree() {
|
||||
strongSelf.textNode.attributedText = NSAttributedString(string: strongSelf.strings.Conversation_ForwardOptions_TapForOptions, font: Font.regular(15.0), textColor: strongSelf.theme.chat.inputPanel.secondaryTextColor)
|
||||
let text: String
|
||||
if let (size, _) = strongSelf.validLayout, size.width > 320.0 {
|
||||
text = strongSelf.strings.Conversation_ForwardOptions_TapForOptions
|
||||
} else {
|
||||
text = strongSelf.strings.Conversation_ForwardOptions_TapForOptionsShort
|
||||
}
|
||||
|
||||
strongSelf.textNode.attributedText = NSAttributedString(string: text, font: Font.regular(15.0), textColor: strongSelf.theme.chat.inputPanel.secondaryTextColor)
|
||||
|
||||
strongSelf.view.addSubview(snapshotView)
|
||||
|
||||
|
@ -3491,6 +3491,8 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
||||
canChangeColors = peer.hasPermission(.changeInfo)
|
||||
} else if let peer = peer as? TelegramGroup, case .member = peer.role {
|
||||
canChangeColors = !peer.hasBannedPermission(.banChangeInfo)
|
||||
} else if self.data?.encryptionKeyFingerprint != nil {
|
||||
canChangeColors = false
|
||||
}
|
||||
|
||||
if canChangeColors {
|
||||
|
@ -1310,7 +1310,7 @@ public func themeIconImage(account: Account, accountManager: AccountManager<Tele
|
||||
themeSignal = .single(makeDefaultPresentationTheme(reference: theme, serviceBackgroundColor: nil))
|
||||
} else if case let .cloud(theme) = theme, let settings = theme.theme.settings {
|
||||
themeSignal = Signal { subscriber in
|
||||
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: .builtin(PresentationBuiltinThemeReference(baseTheme: settings.baseTheme)), accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, wallpaper: settings.wallpaper, serviceBackgroundColor: nil, preview: false)
|
||||
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: .builtin(PresentationBuiltinThemeReference(baseTheme: settings.baseTheme)), accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors, wallpaper: settings.wallpaper, serviceBackgroundColor: nil, specialMode: emoticon, preview: false)
|
||||
subscriber.putNext(theme)
|
||||
subscriber.putCompletion()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user