mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-17 00:31:09 +00:00
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
This commit is contained in:
commit
76132ae4dd
@ -1289,7 +1289,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
|||||||
updatedTheme = generalThemeReference
|
updatedTheme = generalThemeReference
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let theme = makePresentationTheme(mediaBox: context.sharedContext.accountManager.mediaBox, themeReference: generalThemeReference, accentColor: accentColor?.color, wallpaper: presetWallpaper) else {
|
guard let theme = makePresentationTheme(mediaBox: context.sharedContext.accountManager.mediaBox, themeReference: generalThemeReference, accentColor: accentColor?.color, wallpaper: presetWallpaper, wallpaperGradientColors: accentColor?.baseColor.wallpaperGradientColors) else {
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,11 +3,12 @@ import UIKit
|
|||||||
import TelegramCore
|
import TelegramCore
|
||||||
import SyncCore
|
import SyncCore
|
||||||
import TelegramUIPreferences
|
import TelegramUIPreferences
|
||||||
|
import Postbox
|
||||||
|
|
||||||
private let defaultDarkTintedAccentColor = UIColor(rgb: 0x2ea6ff)
|
private let defaultDarkTintedAccentColor = UIColor(rgb: 0x2ea6ff)
|
||||||
public let defaultDarkTintedPresentationTheme = makeDefaultDarkTintedPresentationTheme(preview: false)
|
public let defaultDarkTintedPresentationTheme = makeDefaultDarkTintedPresentationTheme(preview: false)
|
||||||
|
|
||||||
public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme, editing: Bool, title: String?, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: (UIColor, UIColor?)?, wallpaper forcedWallpaper: TelegramWallpaper? = nil) -> PresentationTheme {
|
public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme, editing: Bool, title: String?, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: (UIColor, UIColor?)?, wallpaper forcedWallpaper: TelegramWallpaper? = nil, wallpaperGradientColors: [UInt32]? = nil) -> PresentationTheme {
|
||||||
if (theme.referenceTheme != .nightAccent) {
|
if (theme.referenceTheme != .nightAccent) {
|
||||||
return theme
|
return theme
|
||||||
}
|
}
|
||||||
@ -46,9 +47,13 @@ public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme
|
|||||||
var bubbleColors = bubbleColors
|
var bubbleColors = bubbleColors
|
||||||
if bubbleColors == nil, editing {
|
if bubbleColors == nil, editing {
|
||||||
if let accentColor = accentColor {
|
if let accentColor = accentColor {
|
||||||
|
if let wallpaperGradientColors = wallpaperGradientColors, !wallpaperGradientColors.isEmpty {
|
||||||
|
suggestedWallpaper = .file(id: 0, accessHash: 0, isCreator: false, isDefault: true, isPattern: true, isDark: false, slug: "fqv01SQemVIBAAAApND8LDRUhRU", file: TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: 36542425), partialReference: nil, resource: WallpaperDataResource(slug: "fqv01SQemVIBAAAApND8LDRUhRU"), previewRepresentations: [TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 600, height: 800), resource: WallpaperDataResource(slug: "fqv01SQemVIBAAAApND8LDRUhRU"), progressiveSizes: [], immediateThumbnailData: nil)], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "image/tgv", size: nil, attributes: []), settings: WallpaperSettings(colors: wallpaperGradientColors, intensity: 50))
|
||||||
|
} else {
|
||||||
let color = accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18)
|
let color = accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18)
|
||||||
suggestedWallpaper = .color(color.argb)
|
suggestedWallpaper = .color(color.argb)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let accentColor = accentColor ?? defaultDarkTintedAccentColor
|
let accentColor = accentColor ?? defaultDarkTintedAccentColor
|
||||||
let bottomColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.731, brightness: 0.59)
|
let bottomColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.731, brightness: 0.59)
|
||||||
|
@ -19,7 +19,7 @@ public func makeDefaultPresentationTheme(reference: PresentationBuiltinThemeRefe
|
|||||||
return theme
|
return theme
|
||||||
}
|
}
|
||||||
|
|
||||||
public func customizePresentationTheme(_ theme: PresentationTheme, editing: Bool, title: String? = nil, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: (UIColor, UIColor?)?, wallpaper: TelegramWallpaper? = nil) -> PresentationTheme {
|
public func customizePresentationTheme(_ theme: PresentationTheme, editing: Bool, title: String? = nil, accentColor: UIColor?, backgroundColors: [UInt32], bubbleColors: (UIColor, UIColor?)?, wallpaper: TelegramWallpaper? = nil, wallpaperGradientColors: [UInt32]? = nil) -> PresentationTheme {
|
||||||
if accentColor == nil && bubbleColors == nil && backgroundColors.isEmpty && wallpaper == nil {
|
if accentColor == nil && bubbleColors == nil && backgroundColors.isEmpty && wallpaper == nil {
|
||||||
return theme
|
return theme
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ public func customizePresentationTheme(_ theme: PresentationTheme, editing: Bool
|
|||||||
case .night:
|
case .night:
|
||||||
return customizeDefaultDarkPresentationTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper)
|
return customizeDefaultDarkPresentationTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper)
|
||||||
case .nightAccent:
|
case .nightAccent:
|
||||||
return customizeDefaultDarkTintedPresentationTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper)
|
return customizeDefaultDarkTintedPresentationTheme(theme: theme, editing: editing, title: title, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper, wallpaperGradientColors: wallpaperGradientColors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,12 +38,12 @@ public func makePresentationTheme(settings: TelegramThemeSettings, title: String
|
|||||||
return customizePresentationTheme(defaultTheme, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors.flatMap { (UIColor(argb: $0.top), UIColor(argb: $0.bottom)) }, wallpaper: settings.wallpaper)
|
return customizePresentationTheme(defaultTheme, editing: true, title: title, accentColor: UIColor(argb: settings.accentColor), backgroundColors: [], bubbleColors: settings.messageColors.flatMap { (UIColor(argb: $0.top), UIColor(argb: $0.bottom)) }, wallpaper: settings.wallpaper)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func makePresentationTheme(mediaBox: MediaBox, themeReference: PresentationThemeReference, extendingThemeReference: PresentationThemeReference? = nil, accentColor: UIColor? = nil, backgroundColors: [UInt32] = [], bubbleColors: (UIColor, UIColor?)? = nil, wallpaper: TelegramWallpaper? = nil, serviceBackgroundColor: UIColor? = nil, preview: Bool = false) -> PresentationTheme? {
|
public func makePresentationTheme(mediaBox: MediaBox, themeReference: PresentationThemeReference, extendingThemeReference: PresentationThemeReference? = nil, accentColor: UIColor? = nil, backgroundColors: [UInt32] = [], bubbleColors: (UIColor, UIColor?)? = nil, wallpaper: TelegramWallpaper? = nil, wallpaperGradientColors: [UInt32]? = nil, serviceBackgroundColor: UIColor? = nil, preview: Bool = false) -> PresentationTheme? {
|
||||||
let theme: PresentationTheme
|
let theme: PresentationTheme
|
||||||
switch themeReference {
|
switch themeReference {
|
||||||
case let .builtin(reference):
|
case let .builtin(reference):
|
||||||
let defaultTheme = makeDefaultPresentationTheme(reference: reference, extendingThemeReference: extendingThemeReference, serviceBackgroundColor: serviceBackgroundColor, preview: preview)
|
let defaultTheme = makeDefaultPresentationTheme(reference: reference, extendingThemeReference: extendingThemeReference, serviceBackgroundColor: serviceBackgroundColor, preview: preview)
|
||||||
theme = customizePresentationTheme(defaultTheme, editing: true, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper)
|
theme = customizePresentationTheme(defaultTheme, editing: true, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper, wallpaperGradientColors: wallpaperGradientColors)
|
||||||
case let .local(info):
|
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) {
|
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, wallpaper: wallpaper)
|
theme = customizePresentationTheme(loadedTheme, editing: false, accentColor: accentColor, backgroundColors: backgroundColors, bubbleColors: bubbleColors, wallpaper: wallpaper)
|
||||||
|
@ -292,7 +292,7 @@ public func currentPresentationDataAndSettings(accountManager: AccountManager, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
let effectiveColors = themeSettings.themeSpecificAccentColors[effectiveTheme.index]
|
let effectiveColors = themeSettings.themeSpecificAccentColors[effectiveTheme.index]
|
||||||
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: effectiveTheme, accentColor: effectiveColors?.color, bubbleColors: effectiveColors?.customBubbleColors) ?? defaultPresentationTheme
|
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: effectiveTheme, accentColor: effectiveColors?.color, bubbleColors: effectiveColors?.customBubbleColors, wallpaperGradientColors: effectiveColors?.baseColor.wallpaperGradientColors) ?? defaultPresentationTheme
|
||||||
|
|
||||||
|
|
||||||
let effectiveChatWallpaper: TelegramWallpaper = (themeSettings.themeSpecificChatWallpapers[coloredThemeIndex(reference: effectiveTheme, accentColor: effectiveColors)] ?? themeSettings.themeSpecificChatWallpapers[effectiveTheme.index]) ?? theme.chat.defaultWallpaper
|
let effectiveChatWallpaper: TelegramWallpaper = (themeSettings.themeSpecificChatWallpapers[coloredThemeIndex(reference: effectiveTheme, accentColor: effectiveColors)] ?? themeSettings.themeSpecificChatWallpapers[effectiveTheme.index]) ?? theme.chat.defaultWallpaper
|
||||||
@ -583,7 +583,7 @@ public func updatedPresentationData(accountManager: AccountManager, applicationI
|
|||||||
if let themeSpecificWallpaper = themeSpecificWallpaper {
|
if let themeSpecificWallpaper = themeSpecificWallpaper {
|
||||||
currentWallpaper = themeSpecificWallpaper
|
currentWallpaper = themeSpecificWallpaper
|
||||||
} else {
|
} else {
|
||||||
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: themeSettings.theme, accentColor: currentColors?.color, bubbleColors: currentColors?.customBubbleColors, wallpaper: currentColors?.wallpaper) ?? defaultPresentationTheme
|
let theme = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: themeSettings.theme, accentColor: currentColors?.color, bubbleColors: currentColors?.customBubbleColors, wallpaper: currentColors?.wallpaper, wallpaperGradientColors: currentColors?.baseColor.wallpaperGradientColors) ?? defaultPresentationTheme
|
||||||
currentWallpaper = theme.chat.defaultWallpaper
|
currentWallpaper = theme.chat.defaultWallpaper
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,7 +619,7 @@ public func updatedPresentationData(accountManager: AccountManager, applicationI
|
|||||||
effectiveColors = nil
|
effectiveColors = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
let themeValue = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: effectiveTheme, accentColor: effectiveColors?.color, bubbleColors: effectiveColors?.customBubbleColors, wallpaper: effectiveColors?.wallpaper, serviceBackgroundColor: serviceBackgroundColor) ?? defaultPresentationTheme
|
let themeValue = makePresentationTheme(mediaBox: accountManager.mediaBox, themeReference: effectiveTheme, accentColor: effectiveColors?.color, bubbleColors: effectiveColors?.customBubbleColors, wallpaper: effectiveColors?.wallpaper, wallpaperGradientColors: effectiveColors?.baseColor.wallpaperGradientColors, serviceBackgroundColor: serviceBackgroundColor) ?? defaultPresentationTheme
|
||||||
|
|
||||||
if autoNightModeTriggered && !switchedToNightModeWallpaper {
|
if autoNightModeTriggered && !switchedToNightModeWallpaper {
|
||||||
switch effectiveChatWallpaper {
|
switch effectiveChatWallpaper {
|
||||||
|
@ -404,6 +404,36 @@ public enum PresentationThemeBaseColor: Int32, CaseIterable {
|
|||||||
}
|
}
|
||||||
return UIColor(rgb: value)
|
return UIColor(rgb: value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public var wallpaperGradientColors: [UInt32]? {
|
||||||
|
switch self {
|
||||||
|
case .blue:
|
||||||
|
return [0x1b2836, 0x121a22, 0x1b2836, 0x121a22]
|
||||||
|
case .cyan:
|
||||||
|
return [0x152b32, 0x0c181c, 0x152b32, 0x0c181c]
|
||||||
|
case .green:
|
||||||
|
return [0x142615, 0x0b160c, 0x142615, 0x0b160c]
|
||||||
|
case .pink:
|
||||||
|
return [0x2d1f23, 0x22171a, 0x2d1f23, 0x22171a]
|
||||||
|
case .orange:
|
||||||
|
return [0x2e2213, 0x221b0f, 0x2e2213, 0x221b0f]
|
||||||
|
case .purple:
|
||||||
|
return [0x25212e, 0x1b1822, 0x25212e, 0x1b1822]
|
||||||
|
case .red:
|
||||||
|
return [0x281613, 0x1e110e, 0x281613, 0x1e110e]
|
||||||
|
case .yellow:
|
||||||
|
return [0x2d2813, 0x221d0e, 0x2d2813, 0x221d0e]
|
||||||
|
case .gray:
|
||||||
|
return [0x1b1d21, 0x111315, 0x1b1d21, 0x111315]
|
||||||
|
case .black:
|
||||||
|
return nil
|
||||||
|
case .white:
|
||||||
|
return nil
|
||||||
|
case .custom, .preset, .theme:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct PresentationThemeAccentColor: PostboxCoding, Equatable {
|
public struct PresentationThemeAccentColor: PostboxCoding, Equatable {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user