mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-29 11:25:38 +00:00
Theming fixes
This commit is contained in:
parent
8e8bbb7112
commit
e34523f254
@ -75,7 +75,7 @@ public final class InstantPageController: ViewController {
|
|||||||
strongSelf.settings = settings
|
strongSelf.settings = settings
|
||||||
strongSelf.themeSettings = themeSettings
|
strongSelf.themeSettings = themeSettings
|
||||||
if strongSelf.isNodeLoaded {
|
if strongSelf.isNodeLoaded {
|
||||||
strongSelf.controllerNode.update(settings: settings, strings: strongSelf.presentationData.strings)
|
strongSelf.controllerNode.update(settings: settings, themeSettings: themeSettings, strings: strongSelf.presentationData.strings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -96,7 +96,7 @@ public final class InstantPageController: ViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override public func loadDisplayNode() {
|
override public func loadDisplayNode() {
|
||||||
self.displayNode = InstantPageControllerNode(context: self.context, settings: self.settings, themeSettings: self.themeSettings, presentationTheme: self.presentationData.theme, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameDisplayOrder: self.presentationData.nameDisplayOrder, statusBar: self.statusBar, sourcePeerType: self.sourcePeerType, getNavigationController: { [weak self] in
|
self.displayNode = InstantPageControllerNode(context: self.context, settings: self.settings, themeSettings: self.themeSettings, presentationTheme: self.presentationData.theme, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameDisplayOrder: self.presentationData.nameDisplayOrder, autoNightModeTriggered: self.presentationData.autoNightModeTriggered, statusBar: self.statusBar, sourcePeerType: self.sourcePeerType, getNavigationController: { [weak self] in
|
||||||
return self?.navigationController as? NavigationController
|
return self?.navigationController as? NavigationController
|
||||||
}, present: { [weak self] c, a in
|
}, present: { [weak self] c, a in
|
||||||
self?.present(c, in: .window(.root), with: a, blockInteraction: true)
|
self?.present(c, in: .window(.root), with: a, blockInteraction: true)
|
||||||
|
|||||||
@ -23,6 +23,7 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
private var presentationTheme: PresentationTheme
|
private var presentationTheme: PresentationTheme
|
||||||
private var strings: PresentationStrings
|
private var strings: PresentationStrings
|
||||||
private var nameDisplayOrder: PresentationPersonNameOrder
|
private var nameDisplayOrder: PresentationPersonNameOrder
|
||||||
|
private let autoNightModeTriggered: Bool
|
||||||
private var dateTimeFormat: PresentationDateTimeFormat
|
private var dateTimeFormat: PresentationDateTimeFormat
|
||||||
private var theme: InstantPageTheme?
|
private var theme: InstantPageTheme?
|
||||||
private let sourcePeerType: MediaAutoDownloadPeerType
|
private let sourcePeerType: MediaAutoDownloadPeerType
|
||||||
@ -87,17 +88,18 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
return InstantPageStoredState(contentOffset: Double(self.scrollNode.view.contentOffset.y), details: details)
|
return InstantPageStoredState(contentOffset: Double(self.scrollNode.view.contentOffset.y), details: details)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(context: AccountContext, settings: InstantPagePresentationSettings?, themeSettings: PresentationThemeSettings?, presentationTheme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, statusBar: StatusBar, sourcePeerType: MediaAutoDownloadPeerType, getNavigationController: @escaping () -> NavigationController?, present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, openPeer: @escaping (PeerId) -> Void, navigateBack: @escaping () -> Void) {
|
init(context: AccountContext, settings: InstantPagePresentationSettings?, themeSettings: PresentationThemeSettings?, presentationTheme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, autoNightModeTriggered: Bool, statusBar: StatusBar, sourcePeerType: MediaAutoDownloadPeerType, getNavigationController: @escaping () -> NavigationController?, present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, openPeer: @escaping (PeerId) -> Void, navigateBack: @escaping () -> Void) {
|
||||||
self.context = context
|
self.context = context
|
||||||
self.presentationTheme = presentationTheme
|
self.presentationTheme = presentationTheme
|
||||||
self.dateTimeFormat = dateTimeFormat
|
self.dateTimeFormat = dateTimeFormat
|
||||||
self.nameDisplayOrder = nameDisplayOrder
|
self.nameDisplayOrder = nameDisplayOrder
|
||||||
|
self.autoNightModeTriggered = autoNightModeTriggered
|
||||||
self.strings = strings
|
self.strings = strings
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
let themeReferenceDate = Date()
|
let themeReferenceDate = Date()
|
||||||
self.themeReferenceDate = themeReferenceDate
|
self.themeReferenceDate = themeReferenceDate
|
||||||
self.theme = settings.flatMap { settings in
|
self.theme = settings.flatMap { settings in
|
||||||
return instantPageThemeForType(instantPageThemeTypeForSettingsAndTime(themeSettings: themeSettings, settings: settings, time: themeReferenceDate).0, settings: settings)
|
return instantPageThemeForType(instantPageThemeTypeForSettingsAndTime(themeSettings: themeSettings, settings: settings, time: themeReferenceDate, forceDarkTheme: autoNightModeTriggered).0, settings: settings)
|
||||||
}
|
}
|
||||||
self.sourcePeerType = sourcePeerType
|
self.sourcePeerType = sourcePeerType
|
||||||
self.statusBar = statusBar
|
self.statusBar = statusBar
|
||||||
@ -162,7 +164,7 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
self.loadProgressDisposable.dispose()
|
self.loadProgressDisposable.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(settings: InstantPagePresentationSettings, strings: PresentationStrings) {
|
func update(settings: InstantPagePresentationSettings, themeSettings: PresentationThemeSettings?, strings: PresentationStrings) {
|
||||||
if self.settings != settings || self.strings !== strings {
|
if self.settings != settings || self.strings !== strings {
|
||||||
let previousSettings = self.settings
|
let previousSettings = self.settings
|
||||||
var updateLayout = previousSettings == nil
|
var updateLayout = previousSettings == nil
|
||||||
@ -174,7 +176,8 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
let themeType = instantPageThemeTypeForSettingsAndTime(themeSettings: self.themeSettings, settings: settings, time: self.themeReferenceDate)
|
self.themeSettings = themeSettings
|
||||||
|
let themeType = instantPageThemeTypeForSettingsAndTime(themeSettings: self.themeSettings, settings: settings, time: self.themeReferenceDate, forceDarkTheme: self.autoNightModeTriggered)
|
||||||
let theme = instantPageThemeForType(themeType.0, settings: settings)
|
let theme = instantPageThemeForType(themeType.0, settings: settings)
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
self.strings = strings
|
self.strings = strings
|
||||||
@ -1335,9 +1338,9 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if self.settingsNode == nil {
|
if self.settingsNode == nil {
|
||||||
let settingsNode = InstantPageSettingsNode(strings: self.strings, settings: settings, currentThemeType: instantPageThemeTypeForSettingsAndTime(themeSettings: self.themeSettings, settings: settings, time: self.themeReferenceDate), applySettings: { [weak self] settings in
|
let settingsNode = InstantPageSettingsNode(strings: self.strings, settings: settings, currentThemeType: instantPageThemeTypeForSettingsAndTime(themeSettings: self.themeSettings, settings: settings, time: self.themeReferenceDate, forceDarkTheme: self.autoNightModeTriggered), applySettings: { [weak self] settings in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.update(settings: settings, strings: strongSelf.strings)
|
strongSelf.update(settings: settings, themeSettings: strongSelf.themeSettings, strings: strongSelf.strings)
|
||||||
let _ = updateInstantPagePresentationSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager, { _ in
|
let _ = updateInstantPagePresentationSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager, { _ in
|
||||||
return settings
|
return settings
|
||||||
}).start()
|
}).start()
|
||||||
|
|||||||
@ -277,7 +277,7 @@ private func fontSizeMultiplierForVariant(_ variant: InstantPagePresentationFont
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func instantPageThemeTypeForSettingsAndTime(themeSettings: PresentationThemeSettings?, settings: InstantPagePresentationSettings, time: Date?) -> (InstantPageThemeType, Bool) {
|
func instantPageThemeTypeForSettingsAndTime(themeSettings: PresentationThemeSettings?, settings: InstantPagePresentationSettings, time: Date?, forceDarkTheme: Bool) -> (InstantPageThemeType, Bool) {
|
||||||
if settings.autoNightMode {
|
if settings.autoNightMode {
|
||||||
switch settings.themeType {
|
switch settings.themeType {
|
||||||
case .light, .sepia, .gray:
|
case .light, .sepia, .gray:
|
||||||
@ -288,7 +288,7 @@ func instantPageThemeTypeForSettingsAndTime(themeSettings: PresentationThemeSett
|
|||||||
if case .explicitNone = themeSettings.automaticThemeSwitchSetting.trigger {
|
if case .explicitNone = themeSettings.automaticThemeSwitchSetting.trigger {
|
||||||
} else {
|
} else {
|
||||||
fallback = false
|
fallback = false
|
||||||
useDarkTheme = automaticThemeShouldSwitchNow(settings: themeSettings.automaticThemeSwitchSetting, systemUserInterfaceStyle: .light)
|
useDarkTheme = forceDarkTheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if fallback, let time = time {
|
if fallback, let time = time {
|
||||||
|
|||||||
@ -342,14 +342,15 @@ final class ThemeAccentColorController: ViewController {
|
|||||||
var defaultPatternWallpaper: TelegramWallpaper?
|
var defaultPatternWallpaper: TelegramWallpaper?
|
||||||
|
|
||||||
for wallpaper in wallpapers {
|
for wallpaper in wallpapers {
|
||||||
if case let .file(file) = wallpaper, file.slug == "JqSUrO0-mFIBAAAAWwTvLzoWGQI" {
|
//JqSUrO0-mFIBAAAAWwTvLzoWGQI, 25
|
||||||
|
if case let .file(file) = wallpaper, file.slug == "-Xc-np9y2VMCAAAARKr0yNNPYW0" {
|
||||||
defaultPatternWallpaper = wallpaper
|
defaultPatternWallpaper = wallpaper
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let defaultPatternWallpaper = defaultPatternWallpaper {
|
if let defaultPatternWallpaper = defaultPatternWallpaper {
|
||||||
wallpaper = defaultPatternWallpaper.withUpdatedSettings(WallpaperSettings(blur: settings.blur, motion: settings.motion, color: 0xd6e2ee, bottomColor: nil, intensity: 25, rotation: nil))
|
wallpaper = defaultPatternWallpaper.withUpdatedSettings(WallpaperSettings(blur: settings.blur, motion: settings.motion, color: 0xd6e2ee, bottomColor: nil, intensity: 40, rotation: nil))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -455,24 +455,40 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
peers[peerId] = TelegramUser(id: peerId, accessHash: nil, firstName: self.presentationData.strings.Appearance_ThemePreview_Chat_2_ReplyName, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
peers[peerId] = TelegramUser(id: peerId, accessHash: nil, firstName: self.presentationData.strings.Appearance_ThemePreview_Chat_2_ReplyName, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
||||||
peers[otherPeerId] = TelegramUser(id: otherPeerId, accessHash: nil, firstName: self.presentationData.strings.Appearance_ThemePreview_Chat_2_ReplyName, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
peers[otherPeerId] = TelegramUser(id: otherPeerId, accessHash: nil, firstName: self.presentationData.strings.Appearance_ThemePreview_Chat_2_ReplyName, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
||||||
|
|
||||||
let replyMessageId = MessageId(peerId: peerId, namespace: 0, id: 3)
|
var sampleMessages: [Message] = []
|
||||||
messages[replyMessageId] = Message(stableId: 3, stableVersion: 0, id: replyMessageId, globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_1_Text, attributes: [], media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: [])
|
|
||||||
|
|
||||||
let message1 = Message(stableId: 4, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 4), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66003, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_3_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
let message1 = Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_4_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message1, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: nil))
|
sampleMessages.append(message1)
|
||||||
|
|
||||||
let message2 = Message(stableId: 3, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 3), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66002, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_2_Text, attributes: [ReplyMessageAttribute(messageId: replyMessageId)], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
let message2 = Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_5_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message2, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: nil))
|
sampleMessages.append(message2)
|
||||||
|
|
||||||
|
let message3 = Message(stableId: 3, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 3), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66002, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_6_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
|
sampleMessages.append(message3)
|
||||||
|
|
||||||
|
let message4 = Message(stableId: 4, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 4), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66003, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_7_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
|
sampleMessages.append(message4)
|
||||||
|
|
||||||
|
let message5 = Message(stableId: 5, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 5), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66004, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_1_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
|
messages[message5.id] = message5
|
||||||
|
sampleMessages.append(message5)
|
||||||
|
|
||||||
let waveformBase64 = "DAAOAAkACQAGAAwADwAMABAADQAPABsAGAALAA0AGAAfABoAHgATABgAGQAYABQADAAVABEAHwANAA0ACQAWABkACQAOAAwACQAfAAAAGQAVAAAAEwATAAAACAAfAAAAHAAAABwAHwAAABcAGQAAABQADgAAABQAHwAAAB8AHwAAAAwADwAAAB8AEwAAABoAFwAAAB8AFAAAAAAAHwAAAAAAHgAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAAAA="
|
let waveformBase64 = "DAAOAAkACQAGAAwADwAMABAADQAPABsAGAALAA0AGAAfABoAHgATABgAGQAYABQADAAVABEAHwANAA0ACQAWABkACQAOAAwACQAfAAAAGQAVAAAAEwATAAAACAAfAAAAHAAAABwAHwAAABcAGQAAABQADgAAABQAHwAAAB8AHwAAAAwADwAAAB8AEwAAABoAFwAAAB8AFAAAAAAAHwAAAAAAHgAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAAAA="
|
||||||
let voiceAttributes: [TelegramMediaFileAttribute] = [.Audio(isVoice: true, duration: 23, title: nil, performer: nil, waveform: MemoryBuffer(data: Data(base64Encoded: waveformBase64)!))]
|
let voiceAttributes: [TelegramMediaFileAttribute] = [.Audio(isVoice: true, duration: 23, title: nil, performer: nil, waveform: MemoryBuffer(data: Data(base64Encoded: waveformBase64)!))]
|
||||||
let voiceMedia = TelegramMediaFile(fileId: MediaId(namespace: 0, id: 0), partialReference: nil, resource: LocalFileMediaResource(fileId: 0), previewRepresentations: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: 0, attributes: voiceAttributes)
|
let voiceMedia = TelegramMediaFile(fileId: MediaId(namespace: 0, id: 0), partialReference: nil, resource: LocalFileMediaResource(fileId: 0), previewRepresentations: [], immediateThumbnailData: nil, mimeType: "audio/ogg", size: 0, attributes: voiceAttributes)
|
||||||
|
|
||||||
let message3 = Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: "", attributes: [], media: [voiceMedia], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
let message6 = Message(stableId: 6, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 6), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66005, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: "", attributes: [], media: [voiceMedia], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message3, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: FileMediaResourceStatus(mediaStatus: .playbackStatus(.paused), fetchStatus: .Local)))
|
sampleMessages.append(message6)
|
||||||
|
|
||||||
let message4 = Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_1_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
let message7 = Message(stableId: 7, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 7), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66006, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_2_Text, attributes: [ReplyMessageAttribute(messageId: message5.id)], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message4, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: nil))
|
sampleMessages.append(message7)
|
||||||
|
|
||||||
|
let message8 = Message(stableId: 8, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 8), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66007, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_3_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
|
||||||
|
sampleMessages.append(message8)
|
||||||
|
|
||||||
|
items = sampleMessages.reversed().map { message in
|
||||||
|
self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: !message.media.isEmpty ? FileMediaResourceStatus(mediaStatus: .playbackStatus(.paused), fetchStatus: .Local) : nil)
|
||||||
|
}
|
||||||
|
|
||||||
let width: CGFloat
|
let width: CGFloat
|
||||||
if case .regular = layout.metrics.widthClass {
|
if case .regular = layout.metrics.widthClass {
|
||||||
|
|||||||
@ -246,7 +246,7 @@ private final class ThemeSettingsAccentColorIconItemNode : ListViewItemNode {
|
|||||||
transition.updateTransformScale(node: self.fillNode, scale: 1.2)
|
transition.updateTransformScale(node: self.fillNode, scale: 1.2)
|
||||||
transition.updateTransformScale(node: self.centerNode, scale: 1.0)
|
transition.updateTransformScale(node: self.centerNode, scale: 1.0)
|
||||||
transition.updateAlpha(node: self.centerNode, alpha: 1.0)
|
transition.updateAlpha(node: self.centerNode, alpha: 1.0)
|
||||||
transition.updateTransformScale(node: self.dotsNode, scale: 0.8)
|
transition.updateTransformScale(node: self.dotsNode, scale: 0.85)
|
||||||
transition.updateAlpha(node: self.dotsNode, alpha: 0.0)
|
transition.updateAlpha(node: self.dotsNode, alpha: 0.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -318,16 +318,16 @@ private enum ThemeSettingsControllerEntry: ItemListNodeEntry {
|
|||||||
colorItems.append(.default)
|
colorItems.append(.default)
|
||||||
defaultColor = nil
|
defaultColor = nil
|
||||||
|
|
||||||
let createPaper: (String, Int32, Int32?, Int32?, Int32?) -> TelegramWallpaper = { slug, topColor, bottomColor, intensity, rotation in
|
let patternWallpaper: (String, Int32, Int32?, Int32?, Int32?) -> TelegramWallpaper = { slug, topColor, bottomColor, intensity, rotation in
|
||||||
return TelegramWallpaper.file(id: 0, accessHash: 0, isCreator: false, isDefault: true, isPattern: true, isDark: false, slug: slug, file: TelegramMediaFile(fileId: MediaId(namespace: 0, id: 0), partialReference: nil, resource: LocalFileMediaResource(fileId: 0), previewRepresentations: [], immediateThumbnailData: nil, mimeType: "", size: nil, attributes: []), settings: WallpaperSettings(blur: false, motion: false, color: topColor, bottomColor: bottomColor, intensity: intensity ?? 50, rotation: rotation))
|
return TelegramWallpaper.file(id: 0, accessHash: 0, isCreator: false, isDefault: true, isPattern: true, isDark: false, slug: slug, file: TelegramMediaFile(fileId: MediaId(namespace: 0, id: 0), partialReference: nil, resource: LocalFileMediaResource(fileId: 0), previewRepresentations: [], immediateThumbnailData: nil, mimeType: "", size: nil, attributes: []), settings: WallpaperSettings(blur: false, motion: false, color: topColor, bottomColor: bottomColor, intensity: intensity ?? 50, rotation: rotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 106, baseColor: .preset, accentColor: 0xf55783, bubbleColors: (0xd6f5ff, nil), wallpaper: createPaper("p-pXcflrmFIBAAAAvXYQk-mCwZU", 0xfce3ec, nil, 40, nil)))) // pink
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 106, baseColor: .preset, accentColor: 0xf55783, bubbleColors: (0xd6f5ff, nil), wallpaper: patternWallpaper("p-pXcflrmFIBAAAAvXYQk-mCwZU", 0xfce3ec, nil, 40, nil)))) // pink
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 101, baseColor: .preset, accentColor: 0x7e5fe5, bubbleColors: (0xf5e2ff, nil), wallpaper: createPaper("nQcFYJe1mFIBAAAAcI95wtIK0fk", 0xfcccf4, 0xae85f0, 54, nil)))) // amethyst dust
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 101, baseColor: .preset, accentColor: 0x7e5fe5, bubbleColors: (0xf5e2ff, nil), wallpaper: patternWallpaper("nQcFYJe1mFIBAAAAcI95wtIK0fk", 0xfcccf4, 0xae85f0, 54, nil)))) // amethyst dust
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 102, baseColor: .preset, accentColor: 0xff5fa9, bubbleColors: (0xfff4d7, nil), wallpaper: createPaper("51nnTjx8mFIBAAAAaFGJsMIvWkk", 0xf6b594, 0xebf6cd, 46, 45)))) // bubbly
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 102, baseColor: .preset, accentColor: 0xff5fa9, bubbleColors: (0xfff4d7, nil), wallpaper: patternWallpaper("51nnTjx8mFIBAAAAaFGJsMIvWkk", 0xf6b594, 0xebf6cd, 46, 45)))) // bubbly
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 103, baseColor: .preset, accentColor: 0x199972, bubbleColors: (0xfffec7, nil), wallpaper: createPaper("fqv01SQemVIBAAAApND8LDRUhRU", 0xc1e7cb, nil, 50, nil)))) // downtown
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 103, baseColor: .preset, accentColor: 0x199972, bubbleColors: (0xfffec7, nil), wallpaper: patternWallpaper("fqv01SQemVIBAAAApND8LDRUhRU", 0xc1e7cb, nil, 50, nil)))) // downtown
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 104, baseColor: .preset, accentColor: 0x5a9e29, bubbleColors: (0xdcf8c6, nil), wallpaper: createPaper("R3j69wKskFIBAAAAoUdXWCKMzCM", 0xede6dd, nil, 50, nil)))) // green
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 104, baseColor: .preset, accentColor: 0x5a9e29, bubbleColors: (0xdcf8c6, nil), wallpaper: patternWallpaper("R3j69wKskFIBAAAAoUdXWCKMzCM", 0xede6dd, nil, 50, nil)))) // green
|
||||||
colorItems.append(.preset(PresentationThemeAccentColor(index: 105, baseColor: .preset, accentColor: 0x009eee, bubbleColors: (0x94fff9, 0xccffc7), wallpaper: createPaper("p-pXcflrmFIBAAAAvXYQk-mCwZU", 0xffbca6, 0xff63bd, 57, 225)))) // blue lolly
|
colorItems.append(.preset(PresentationThemeAccentColor(index: 105, baseColor: .preset, accentColor: 0x009eee, bubbleColors: (0x94fff9, 0xccffc7), wallpaper: patternWallpaper("p-pXcflrmFIBAAAAvXYQk-mCwZU", 0xffbca6, 0xff63bd, 57, 225)))) // blue lolly
|
||||||
}
|
}
|
||||||
if name != .day {
|
if name != .day {
|
||||||
colors = colors.filter { $0 != .black }
|
colors = colors.filter { $0 != .black }
|
||||||
@ -473,7 +473,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
var updateControllersImpl: ((([UIViewController]) -> [UIViewController]) -> Void)?
|
var updateControllersImpl: ((([UIViewController]) -> [UIViewController]) -> Void)?
|
||||||
var presentInGlobalOverlayImpl: ((ViewController, Any?) -> Void)?
|
var presentInGlobalOverlayImpl: ((ViewController, Any?) -> Void)?
|
||||||
var getNavigationControllerImpl: (() -> NavigationController?)?
|
var getNavigationControllerImpl: (() -> NavigationController?)?
|
||||||
var presentCrossfadeControllerImpl: (() -> Void)?
|
var presentCrossfadeControllerImpl: ((Bool) -> Void)?
|
||||||
|
|
||||||
var selectThemeImpl: ((PresentationThemeReference) -> Void)?
|
var selectThemeImpl: ((PresentationThemeReference) -> Void)?
|
||||||
var moreImpl: (() -> Void)?
|
var moreImpl: (() -> Void)?
|
||||||
@ -567,6 +567,8 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
|
|
||||||
return PresentationThemeSettings(theme: current.theme, themeSpecificAccentColors: themeSpecificAccentColors, themeSpecificCustomColors: current.themeSpecificCustomColors, themeSpecificChatWallpapers: themeSpecificChatWallpapers, useSystemFont: current.useSystemFont, fontSize: current.fontSize, automaticThemeSwitchSetting: current.automaticThemeSwitchSetting, largeEmoji: current.largeEmoji, disableAnimations: current.disableAnimations)
|
return PresentationThemeSettings(theme: current.theme, themeSpecificAccentColors: themeSpecificAccentColors, themeSpecificCustomColors: current.themeSpecificCustomColors, themeSpecificChatWallpapers: themeSpecificChatWallpapers, useSystemFont: current.useSystemFont, fontSize: current.fontSize, automaticThemeSwitchSetting: current.automaticThemeSwitchSetting, largeEmoji: current.largeEmoji, disableAnimations: current.disableAnimations)
|
||||||
}).start()
|
}).start()
|
||||||
|
|
||||||
|
presentCrossfadeControllerImpl?(true)
|
||||||
})
|
})
|
||||||
}, openAccentColorPicker: { themeReference, create in
|
}, openAccentColorPicker: { themeReference, create in
|
||||||
let controller = ThemeAccentColorController(context: context, mode: .colors(themeReference: themeReference, create: create))
|
let controller = ThemeAccentColorController(context: context, mode: .colors(themeReference: themeReference, create: create))
|
||||||
@ -899,12 +901,6 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.Appearance_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.Appearance_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
||||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: themeSettingsControllerEntries(presentationData: presentationData, presentationThemeSettings: settings, themeReference: themeReference, availableThemes: availableThemes, availableAppIcons: availableAppIcons, currentAppIconName: currentAppIconName), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: false)
|
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: themeSettingsControllerEntries(presentationData: presentationData, presentationThemeSettings: settings, themeReference: themeReference, availableThemes: availableThemes, availableAppIcons: availableAppIcons, currentAppIconName: currentAppIconName), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: false)
|
||||||
|
|
||||||
let previousThemeIndex = previousThemeReference.swap(themeReference)?.index
|
|
||||||
let previousAccentColor = previousAccentColor.swap(accentColor)
|
|
||||||
if previousThemeIndex != nil && (previousThemeIndex != themeReference.index || previousAccentColor != accentColor) {
|
|
||||||
presentCrossfadeControllerImpl?()
|
|
||||||
}
|
|
||||||
|
|
||||||
return (controllerState, (listState, arguments))
|
return (controllerState, (listState, arguments))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,7 +923,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
getNavigationControllerImpl = { [weak controller] in
|
getNavigationControllerImpl = { [weak controller] in
|
||||||
return controller?.navigationController as? NavigationController
|
return controller?.navigationController as? NavigationController
|
||||||
}
|
}
|
||||||
presentCrossfadeControllerImpl = { [weak controller] in
|
presentCrossfadeControllerImpl = { [weak controller] hasAccentColors in
|
||||||
if let controller = controller, controller.isNodeLoaded, let navigationController = controller.navigationController as? NavigationController, navigationController.topViewController === controller {
|
if let controller = controller, controller.isNodeLoaded, let navigationController = controller.navigationController as? NavigationController, navigationController.topViewController === controller {
|
||||||
var topOffset: CGFloat?
|
var topOffset: CGFloat?
|
||||||
var bottomOffset: CGFloat?
|
var bottomOffset: CGFloat?
|
||||||
@ -944,7 +940,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
if let itemNode = node as? ThemeSettingsThemeItemNode {
|
if let itemNode = node as? ThemeSettingsThemeItemNode {
|
||||||
themeItemNode = itemNode
|
themeItemNode = itemNode
|
||||||
}
|
}
|
||||||
} else if itemTag.isEqual(to: ThemeSettingsEntryTag.accentColor) {
|
} else if itemTag.isEqual(to: ThemeSettingsEntryTag.accentColor) && hasAccentColors {
|
||||||
let frame = node.convert(node.bounds, to: controller.displayNode)
|
let frame = node.convert(node.bounds, to: controller.displayNode)
|
||||||
bottomOffset = frame.maxY
|
bottomOffset = frame.maxY
|
||||||
if let itemNode = node as? ThemeSettingsAccentColorItemNode {
|
if let itemNode = node as? ThemeSettingsAccentColorItemNode {
|
||||||
@ -1014,6 +1010,8 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}).start()
|
}).start()
|
||||||
|
|
||||||
|
presentCrossfadeControllerImpl?(cloudTheme == nil)
|
||||||
}
|
}
|
||||||
moreImpl = {
|
moreImpl = {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
|||||||
@ -65,7 +65,7 @@ public func messageBubbleImage(incoming: Bool, fillColor: UIColor, strokeColor:
|
|||||||
let size = CGSize(width: rawSize.width - inset * 2.0, height: rawSize.height - inset * 2.0)
|
let size = CGSize(width: rawSize.width - inset * 2.0, height: rawSize.height - inset * 2.0)
|
||||||
context.translateBy(x: inset, y: inset)
|
context.translateBy(x: inset, y: inset)
|
||||||
|
|
||||||
let lineWidth: CGFloat = 1.0
|
var lineWidth: CGFloat = 1.0
|
||||||
|
|
||||||
if drawWithClearColor {
|
if drawWithClearColor {
|
||||||
context.setBlendMode(.copy)
|
context.setBlendMode(.copy)
|
||||||
@ -78,6 +78,9 @@ public func messageBubbleImage(incoming: Bool, fillColor: UIColor, strokeColor:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if onlyOutline {
|
if onlyOutline {
|
||||||
|
if knockout {
|
||||||
|
lineWidth = max(UIScreenPixel, 1.0 - 0.5)
|
||||||
|
}
|
||||||
context.setLineWidth(lineWidth)
|
context.setLineWidth(lineWidth)
|
||||||
context.setStrokeColor(strokeColor.cgColor)
|
context.setStrokeColor(strokeColor.cgColor)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,11 @@ public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme
|
|||||||
return theme
|
return theme
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var accentColor = accentColor
|
||||||
|
if accentColor == PresentationThemeBaseColor.blue.color {
|
||||||
|
accentColor = defaultDarkTintedAccentColor
|
||||||
|
}
|
||||||
|
|
||||||
var intro = theme.intro
|
var intro = theme.intro
|
||||||
var passcode = theme.passcode
|
var passcode = theme.passcode
|
||||||
var rootController = theme.rootController
|
var rootController = theme.rootController
|
||||||
@ -51,7 +56,6 @@ public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme
|
|||||||
bubbleColors = (topColor, bottomColor)
|
bubbleColors = (topColor, bottomColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
var accentColor = accentColor
|
|
||||||
if let initialAccentColor = accentColor {
|
if let initialAccentColor = accentColor {
|
||||||
let hsb = initialAccentColor.hsb
|
let hsb = initialAccentColor.hsb
|
||||||
accentColor = UIColor(hue: hsb.0, saturation: hsb.1, brightness: max(hsb.2, 0.18), alpha: 1.0)
|
accentColor = UIColor(hue: hsb.0, saturation: hsb.1, brightness: max(hsb.2, 0.18), alpha: 1.0)
|
||||||
|
|||||||
@ -103,8 +103,9 @@ public func customizeDefaultDayTheme(theme: PresentationTheme, editing: Bool, ac
|
|||||||
var outgoingCheckColor: UIColor?
|
var outgoingCheckColor: UIColor?
|
||||||
|
|
||||||
if !day {
|
if !day {
|
||||||
incomingBubbleStrokeColor = serviceBackgroundColor?.withAlphaComponent(0.4)
|
let bubbleStrokeColor = serviceBackgroundColor?.withMultiplied(hue: 0.999, saturation: 1.667, brightness: 1.1).withAlphaComponent(0.5)
|
||||||
outgoingBubbleStrokeColor = serviceBackgroundColor?.withAlphaComponent(0.4)
|
incomingBubbleStrokeColor = bubbleStrokeColor
|
||||||
|
outgoingBubbleStrokeColor = bubbleStrokeColor
|
||||||
}
|
}
|
||||||
|
|
||||||
if let bubbleColors = bubbleColors {
|
if let bubbleColors = bubbleColors {
|
||||||
@ -461,9 +462,11 @@ public func makeDefaultDayPresentationTheme(serviceBackgroundColor: UIColor?, da
|
|||||||
onlineDotColor: UIColor(rgb: 0x4cc91f)
|
onlineDotColor: UIColor(rgb: 0x4cc91f)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
let bubbleStrokeColor = serviceBackgroundColor.withMultiplied(hue: 0.999, saturation: 1.667, brightness: 1.1).withAlphaComponent(0.5)
|
||||||
|
|
||||||
let message = PresentationThemeChatMessage(
|
let message = PresentationThemeChatMessage(
|
||||||
incoming: PresentationThemePartedColors(
|
incoming: PresentationThemePartedColors(
|
||||||
bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: serviceBackgroundColor.withAlphaComponent(0.4)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: serviceBackgroundColor.withAlphaComponent(0.4))),
|
bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: bubbleStrokeColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: bubbleStrokeColor)),
|
||||||
primaryTextColor: UIColor(rgb: 0x000000),
|
primaryTextColor: UIColor(rgb: 0x000000),
|
||||||
secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6),
|
secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6),
|
||||||
linkTextColor: UIColor(rgb: 0x004bad),
|
linkTextColor: UIColor(rgb: 0x004bad),
|
||||||
@ -484,7 +487,7 @@ public func makeDefaultDayPresentationTheme(serviceBackgroundColor: UIColor?, da
|
|||||||
actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear),
|
actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear),
|
||||||
actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0x007ee5, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0x007ee5)),
|
actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor(rgb: 0x007ee5, alpha: 0.2), textSelectionKnobColor: UIColor(rgb: 0x007ee5)),
|
||||||
outgoing: PresentationThemePartedColors(
|
outgoing: PresentationThemePartedColors(
|
||||||
bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: serviceBackgroundColor.withAlphaComponent(0.4)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: serviceBackgroundColor.withAlphaComponent(0.4))),
|
bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: bubbleStrokeColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: bubbleStrokeColor)),
|
||||||
primaryTextColor: UIColor(rgb: 0x000000),
|
primaryTextColor: UIColor(rgb: 0x000000),
|
||||||
secondaryTextColor: UIColor(rgb: 0x008c09, alpha: 0.8),
|
secondaryTextColor: UIColor(rgb: 0x008c09, alpha: 0.8),
|
||||||
linkTextColor: UIColor(rgb: 0x004bad),
|
linkTextColor: UIColor(rgb: 0x004bad),
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 504 KiB After Width: | Height: | Size: 458 KiB |
Loading…
x
Reference in New Issue
Block a user