mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 13:35:19 +00:00
837 lines
51 KiB
Swift
837 lines
51 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import TelegramCore
|
|
import SyncCore
|
|
import TelegramUIPreferences
|
|
|
|
private let defaultDarkTintedAccentColor = UIColor(rgb: 0x2ea6ff)
|
|
public let defaultDarkTintedPresentationTheme = makeDefaultDarkTintedPresentationTheme(preview: false)
|
|
|
|
public func customizeDefaultDarkTintedPresentationTheme(theme: PresentationTheme, editing: Bool, title: String?, accentColor: UIColor?, backgroundColors: (UIColor, UIColor?)?, bubbleColors: (UIColor, UIColor?)?, wallpaper forcedWallpaper: TelegramWallpaper? = nil) -> PresentationTheme {
|
|
if (theme.referenceTheme != .nightAccent) {
|
|
return theme
|
|
}
|
|
|
|
var accentColor = accentColor
|
|
if accentColor == PresentationThemeBaseColor.blue.color {
|
|
accentColor = defaultDarkTintedAccentColor
|
|
}
|
|
|
|
var intro = theme.intro
|
|
var passcode = theme.passcode
|
|
var rootController = theme.rootController
|
|
var list = theme.list
|
|
var chatList = theme.chatList
|
|
var chat = theme.chat
|
|
var actionSheet = theme.actionSheet
|
|
var contextMenu = theme.contextMenu
|
|
var inAppNotification = theme.inAppNotification
|
|
var chart = theme.chart
|
|
|
|
var mainBackgroundColor: UIColor?
|
|
var mainSelectionColor: UIColor?
|
|
var additionalBackgroundColor: UIColor?
|
|
var mainSeparatorColor: UIColor?
|
|
var mainForegroundColor: UIColor?
|
|
var mainSecondaryColor: UIColor?
|
|
var mainSecondaryTextColor: UIColor?
|
|
var mainFreeTextColor: UIColor?
|
|
var secondaryBadgeTextColor: UIColor
|
|
var mainInputColor: UIColor?
|
|
var inputBackgroundColor: UIColor?
|
|
var buttonStrokeColor: UIColor?
|
|
|
|
var suggestedWallpaper: TelegramWallpaper?
|
|
|
|
var bubbleColors = bubbleColors
|
|
if bubbleColors == nil, editing {
|
|
if let accentColor = accentColor {
|
|
let color = accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18)
|
|
suggestedWallpaper = .color(color.argb)
|
|
}
|
|
|
|
let accentColor = accentColor ?? defaultDarkTintedAccentColor
|
|
let bottomColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.731, brightness: 0.59)
|
|
let topColor = bottomColor.withMultiplied(hue: 0.966, saturation: 0.61, brightness: 0.98)
|
|
bubbleColors = (topColor, bottomColor)
|
|
}
|
|
|
|
if let initialAccentColor = accentColor {
|
|
let hsb = initialAccentColor.hsb
|
|
accentColor = UIColor(hue: hsb.0, saturation: hsb.1, brightness: max(hsb.2, 0.18), alpha: 1.0)
|
|
|
|
if let lightness = accentColor?.lightness, lightness > 0.7 {
|
|
secondaryBadgeTextColor = UIColor(rgb: 0x000000)
|
|
} else {
|
|
secondaryBadgeTextColor = UIColor(rgb: 0xffffff)
|
|
}
|
|
|
|
mainBackgroundColor = accentColor?.withMultiplied(hue: 1.024, saturation: 0.585, brightness: 0.25)
|
|
mainSelectionColor = accentColor?.withMultiplied(hue: 1.03, saturation: 0.585, brightness: 0.12)
|
|
additionalBackgroundColor = accentColor?.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18)
|
|
mainSeparatorColor = accentColor?.withMultiplied(hue: 1.033, saturation: 0.426, brightness: 0.34)
|
|
mainForegroundColor = accentColor?.withMultiplied(hue: 0.99, saturation: 0.256, brightness: 0.62)
|
|
mainSecondaryColor = accentColor?.withMultiplied(hue: 1.019, saturation: 0.109, brightness: 0.59)
|
|
mainSecondaryTextColor = accentColor?.withMultiplied(hue: 0.956, saturation: 0.17, brightness: 1.0)
|
|
mainFreeTextColor = accentColor?.withMultiplied(hue: 1.019, saturation: 0.097, brightness: 0.56)
|
|
mainInputColor = accentColor?.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.19)
|
|
inputBackgroundColor = accentColor?.withMultiplied(hue: 1.02, saturation: 0.609, brightness: 0.15)
|
|
buttonStrokeColor = accentColor?.withMultiplied(hue: 1.014, saturation: 0.56, brightness: 0.64).withAlphaComponent(0.15)
|
|
|
|
intro = intro.withUpdated(
|
|
accentTextColor: accentColor,
|
|
disabledTextColor: accentColor?.withMultiplied(hue: 1.033, saturation: 0.219, brightness: 0.44),
|
|
startButtonColor: accentColor,
|
|
dotColor: mainSecondaryColor
|
|
)
|
|
passcode = passcode.withUpdated(backgroundColors: passcode.backgroundColors.withUpdated(topColor: accentColor?.withMultiplied(hue: 1.049, saturation: 0.573, brightness: 0.47), bottomColor: additionalBackgroundColor), buttonColor: mainBackgroundColor)
|
|
rootController = rootController.withUpdated(
|
|
tabBar: rootController.tabBar.withUpdated(
|
|
backgroundColor: mainBackgroundColor,
|
|
separatorColor: mainSeparatorColor,
|
|
iconColor: mainForegroundColor,
|
|
selectedIconColor: accentColor,
|
|
textColor: mainForegroundColor,
|
|
selectedTextColor: accentColor
|
|
),
|
|
navigationBar: rootController.navigationBar.withUpdated(
|
|
buttonColor: accentColor,
|
|
disabledButtonColor: accentColor?.withMultiplied(hue: 1.033, saturation: 0.219, brightness: 0.44),
|
|
secondaryTextColor: mainSecondaryColor,
|
|
controlColor: mainSecondaryColor,
|
|
accentTextColor: accentColor,
|
|
backgroundColor: mainBackgroundColor,
|
|
separatorColor: mainSeparatorColor,
|
|
segmentedBackgroundColor: mainInputColor,
|
|
segmentedForegroundColor: mainBackgroundColor,
|
|
segmentedDividerColor: mainSecondaryTextColor?.withAlphaComponent(0.5)
|
|
),
|
|
navigationSearchBar: rootController.navigationSearchBar.withUpdated(
|
|
backgroundColor: mainBackgroundColor,
|
|
accentColor: accentColor,
|
|
inputFillColor: mainInputColor,
|
|
inputPlaceholderTextColor: mainSecondaryColor,
|
|
inputIconColor: mainSecondaryColor,
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
separatorColor: additionalBackgroundColor
|
|
)
|
|
)
|
|
list = list.withUpdated(
|
|
blocksBackgroundColor: additionalBackgroundColor,
|
|
plainBackgroundColor: additionalBackgroundColor,
|
|
itemSecondaryTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
itemDisabledTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
itemAccentColor: accentColor,
|
|
itemPlaceholderTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
itemBlocksBackgroundColor: mainBackgroundColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemBlocksSeparatorColor: mainSeparatorColor,
|
|
itemPlainSeparatorColor: mainSeparatorColor,
|
|
disclosureArrowColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
sectionHeaderTextColor: mainFreeTextColor,
|
|
freeTextColor: mainFreeTextColor,
|
|
freeMonoIconColor: mainFreeTextColor,
|
|
itemSwitchColors: list.itemSwitchColors.withUpdated(
|
|
frameColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
contentColor: accentColor
|
|
),
|
|
itemDisclosureActions: list.itemDisclosureActions.withUpdated(
|
|
neutral1: list.itemDisclosureActions.neutral1.withUpdated(fillColor: accentColor),
|
|
accent: list.itemDisclosureActions.accent.withUpdated(fillColor: accentColor),
|
|
inactive: list.itemDisclosureActions.inactive.withUpdated(fillColor: accentColor?.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.3))
|
|
),
|
|
itemCheckColors: list.itemCheckColors.withUpdated(
|
|
fillColor: accentColor,
|
|
strokeColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
foregroundColor: secondaryBadgeTextColor
|
|
),
|
|
controlSecondaryColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
freeInputField: list.freeInputField.withUpdated(
|
|
backgroundColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
strokeColor: mainSecondaryTextColor?.withAlphaComponent(0.5)
|
|
),
|
|
freePlainInputField: list.freePlainInputField.withUpdated(
|
|
backgroundColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
strokeColor: mainSecondaryTextColor?.withAlphaComponent(0.5)
|
|
),
|
|
mediaPlaceholderColor: UIColor(rgb: 0xffffff).mixedWith(mainBackgroundColor ?? list.itemBlocksBackgroundColor, alpha: 0.9),
|
|
pageIndicatorInactiveColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
itemBarChart: list.itemBarChart.withUpdated(
|
|
color1: accentColor,
|
|
color2: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
color3: accentColor?.withMultiplied(hue: 1.038, saturation: 0.329, brightness: 0.33)
|
|
)
|
|
)
|
|
chatList = chatList.withUpdated(
|
|
backgroundColor: additionalBackgroundColor,
|
|
itemSeparatorColor: mainSeparatorColor,
|
|
itemBackgroundColor: additionalBackgroundColor,
|
|
pinnedItemBackgroundColor: mainBackgroundColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemSelectedBackgroundColor: mainSelectionColor,
|
|
dateTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
messageTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
checkmarkColor: accentColor,
|
|
pendingIndicatorColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
muteIconColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
unreadBadgeActiveBackgroundColor: accentColor,
|
|
unreadBadgeActiveTextColor: secondaryBadgeTextColor,
|
|
unreadBadgeInactiveBackgroundColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
unreadBadgeInactiveTextColor: additionalBackgroundColor,
|
|
pinnedBadgeColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
pinnedSearchBarColor: mainInputColor,
|
|
regularSearchBarColor: accentColor?.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.12),
|
|
sectionHeaderFillColor: mainBackgroundColor,
|
|
sectionHeaderTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
verifiedIconFillColor: accentColor,
|
|
unpinnedArchiveAvatarColor: chatList.unpinnedArchiveAvatarColor.withUpdated(
|
|
backgroundColors: chatList.unpinnedArchiveAvatarColor.backgroundColors.withUpdated(
|
|
topColor: accentColor?.withMultiplied(hue: 0.985, saturation: 0.268, brightness: 0.47),
|
|
bottomColor: accentColor?.withMultiplied(hue: 0.98, saturation: 0.268, brightness: 0.39)
|
|
),
|
|
foregroundColor: additionalBackgroundColor
|
|
)
|
|
)
|
|
actionSheet = actionSheet.withUpdated(
|
|
opaqueItemBackgroundColor: mainBackgroundColor,
|
|
itemBackgroundColor: mainBackgroundColor?.withAlphaComponent(0.8),
|
|
opaqueItemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor?.withAlphaComponent(0.2),
|
|
opaqueItemSeparatorColor: additionalBackgroundColor,
|
|
standardActionTextColor: accentColor,
|
|
controlAccentColor: accentColor,
|
|
inputBackgroundColor: mainInputColor,
|
|
inputHollowBackgroundColor: mainInputColor,
|
|
inputBorderColor: mainInputColor,
|
|
inputPlaceholderColor: mainSecondaryColor,
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
checkContentColor: secondaryBadgeTextColor
|
|
)
|
|
contextMenu = contextMenu.withUpdated(backgroundColor: mainBackgroundColor?.withAlphaComponent(0.78))
|
|
inAppNotification = inAppNotification.withUpdated(
|
|
fillColor: mainBackgroundColor,
|
|
expandedNotification: inAppNotification.expandedNotification.withUpdated(navigationBar: inAppNotification.expandedNotification.navigationBar.withUpdated(
|
|
backgroundColor: mainBackgroundColor,
|
|
controlColor: accentColor,
|
|
separatorColor: mainSeparatorColor)
|
|
)
|
|
)
|
|
}
|
|
|
|
var defaultWallpaper: TelegramWallpaper?
|
|
if let forcedWallpaper = forcedWallpaper {
|
|
defaultWallpaper = forcedWallpaper
|
|
} else if let backgroundColors = backgroundColors {
|
|
if let secondColor = backgroundColors.1 {
|
|
defaultWallpaper = .gradient(backgroundColors.0.argb, secondColor.argb, WallpaperSettings())
|
|
} else {
|
|
defaultWallpaper = .color(backgroundColors.0.argb)
|
|
}
|
|
} else if let forcedWallpaper = suggestedWallpaper {
|
|
defaultWallpaper = forcedWallpaper
|
|
}
|
|
|
|
var outgoingBubbleFillColor: UIColor?
|
|
var outgoingBubbleFillGradientColor: UIColor?
|
|
var outgoingPrimaryTextColor: UIColor?
|
|
var outgoingSecondaryTextColor: UIColor?
|
|
var outgoingLinkTextColor: UIColor?
|
|
var outgoingScamColor: UIColor?
|
|
var outgoingCheckColor: UIColor?
|
|
var highlightedIncomingBubbleColor: UIColor?
|
|
var highlightedOutgoingBubbleColor: UIColor?
|
|
|
|
if let bubbleColors = bubbleColors {
|
|
outgoingBubbleFillColor = bubbleColors.0
|
|
outgoingBubbleFillGradientColor = bubbleColors.1 ?? bubbleColors.0
|
|
|
|
let lightnessColor = bubbleColors.0.mixedWith(bubbleColors.1 ?? bubbleColors.0, alpha: 0.5)
|
|
if lightnessColor.lightness > 0.7 {
|
|
outgoingPrimaryTextColor = UIColor(rgb: 0x000000)
|
|
outgoingSecondaryTextColor = UIColor(rgb: 0x000000, alpha: 0.5)
|
|
outgoingLinkTextColor = UIColor(rgb: 0x000000)
|
|
outgoingScamColor = UIColor(rgb: 0x000000)
|
|
outgoingCheckColor = UIColor(rgb: 0x000000, alpha: 0.5)
|
|
} else {
|
|
outgoingPrimaryTextColor = UIColor(rgb: 0xffffff)
|
|
outgoingSecondaryTextColor = UIColor(rgb: 0xffffff, alpha: 0.5)
|
|
outgoingLinkTextColor = UIColor(rgb: 0xffffff)
|
|
outgoingScamColor = UIColor(rgb: 0xffffff)
|
|
outgoingCheckColor = UIColor(rgb: 0xffffff, alpha: 0.5)
|
|
}
|
|
|
|
highlightedIncomingBubbleColor = accentColor?.withMultiplied(hue: 1.03, saturation: 0.463, brightness: 0.29)
|
|
highlightedOutgoingBubbleColor = outgoingBubbleFillColor?.withMultiplied(hue: 1.019, saturation: 0.609, brightness: 0.63)
|
|
}
|
|
|
|
chat = chat.withUpdated(
|
|
defaultWallpaper: defaultWallpaper,
|
|
message: chat.message.withUpdated(
|
|
incoming: chat.message.incoming.withUpdated(
|
|
bubble: chat.message.incoming.bubble.withUpdated(
|
|
withWallpaper: chat.message.outgoing.bubble.withWallpaper.withUpdated(
|
|
fill: mainBackgroundColor,
|
|
gradientFill: mainBackgroundColor,
|
|
highlightedFill: highlightedIncomingBubbleColor,
|
|
stroke: mainBackgroundColor
|
|
),
|
|
withoutWallpaper: chat.message.outgoing.bubble.withoutWallpaper.withUpdated(
|
|
fill: mainBackgroundColor,
|
|
gradientFill: mainBackgroundColor,
|
|
highlightedFill: highlightedIncomingBubbleColor,
|
|
stroke: mainBackgroundColor
|
|
)
|
|
),
|
|
secondaryTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
linkTextColor: accentColor,
|
|
linkHighlightColor: accentColor?.withAlphaComponent(0.5),
|
|
accentTextColor: accentColor,
|
|
accentControlColor: accentColor,
|
|
mediaActiveControlColor: accentColor,
|
|
mediaInactiveControlColor: accentColor?.withAlphaComponent(0.5),
|
|
mediaControlInnerBackgroundColor: mainBackgroundColor,
|
|
pendingActivityColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
fileTitleColor: accentColor,
|
|
fileDescriptionColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
fileDurationColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
mediaPlaceholderColor: accentColor?.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23),
|
|
polls: chat.message.incoming.polls.withUpdated(
|
|
radioButton: accentColor?.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51),
|
|
radioProgress: accentColor,
|
|
highlight: accentColor?.withAlphaComponent(0.12),
|
|
separator: mainSeparatorColor,
|
|
bar: accentColor
|
|
),
|
|
actionButtonsFillColor: chat.message.incoming.actionButtonsFillColor.withUpdated(
|
|
withWallpaper: additionalBackgroundColor?.withAlphaComponent(0.5),
|
|
withoutWallpaper: additionalBackgroundColor?.withAlphaComponent(0.5)
|
|
),
|
|
actionButtonsStrokeColor: buttonStrokeColor.flatMap { PresentationThemeVariableColor(color: $0) },
|
|
textSelectionColor: accentColor?.withAlphaComponent(0.2),
|
|
textSelectionKnobColor: accentColor
|
|
),
|
|
outgoing: chat.message.outgoing.withUpdated(
|
|
bubble: chat.message.outgoing.bubble.withUpdated(
|
|
withWallpaper: chat.message.outgoing.bubble.withWallpaper.withUpdated(
|
|
fill: outgoingBubbleFillColor,
|
|
gradientFill: outgoingBubbleFillGradientColor,
|
|
highlightedFill: highlightedOutgoingBubbleColor,
|
|
stroke: .clear
|
|
),
|
|
withoutWallpaper: chat.message.outgoing.bubble.withoutWallpaper.withUpdated(
|
|
fill: outgoingBubbleFillColor,
|
|
gradientFill: outgoingBubbleFillGradientColor,
|
|
highlightedFill: highlightedOutgoingBubbleColor,
|
|
stroke: .clear
|
|
)
|
|
),
|
|
primaryTextColor: outgoingPrimaryTextColor,
|
|
secondaryTextColor: outgoingSecondaryTextColor,
|
|
linkTextColor: outgoingLinkTextColor,
|
|
scamColor: outgoingScamColor,
|
|
accentTextColor: outgoingPrimaryTextColor,
|
|
accentControlColor: outgoingPrimaryTextColor,
|
|
mediaActiveControlColor: outgoingPrimaryTextColor,
|
|
mediaInactiveControlColor: outgoingSecondaryTextColor,
|
|
mediaControlInnerBackgroundColor: outgoingBubbleFillColor,
|
|
pendingActivityColor: outgoingSecondaryTextColor,
|
|
fileTitleColor: outgoingPrimaryTextColor,
|
|
fileDescriptionColor: outgoingSecondaryTextColor,
|
|
fileDurationColor: outgoingSecondaryTextColor,
|
|
mediaPlaceholderColor: accentColor?.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51),
|
|
polls: chat.message.outgoing.polls.withUpdated(radioButton: outgoingPrimaryTextColor, radioProgress: outgoingPrimaryTextColor, highlight: outgoingPrimaryTextColor?.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: outgoingPrimaryTextColor),
|
|
actionButtonsFillColor: chat.message.outgoing.actionButtonsFillColor.withUpdated(withWallpaper: additionalBackgroundColor?.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor?.withAlphaComponent(0.5)),
|
|
actionButtonsStrokeColor: buttonStrokeColor.flatMap { PresentationThemeVariableColor(color: $0) }
|
|
),
|
|
freeform: chat.message.freeform.withUpdated(
|
|
withWallpaper: chat.message.freeform.withWallpaper.withUpdated(
|
|
fill: mainBackgroundColor,
|
|
highlightedFill: highlightedIncomingBubbleColor,
|
|
stroke: mainBackgroundColor
|
|
), withoutWallpaper: chat.message.freeform.withoutWallpaper.withUpdated(
|
|
fill: mainBackgroundColor,
|
|
highlightedFill: highlightedIncomingBubbleColor,
|
|
stroke: mainBackgroundColor
|
|
)
|
|
),
|
|
infoLinkTextColor: accentColor,
|
|
outgoingCheckColor: outgoingCheckColor,
|
|
shareButtonFillColor: additionalBackgroundColor.flatMap { PresentationThemeVariableColor(color: $0.withAlphaComponent(0.5)) },
|
|
shareButtonStrokeColor: buttonStrokeColor.flatMap { PresentationThemeVariableColor(color: $0) },
|
|
selectionControlColors: chat.message.selectionControlColors.withUpdated(fillColor: accentColor)
|
|
),
|
|
|
|
serviceMessage: chat.serviceMessage.withUpdated(
|
|
components: chat.serviceMessage.components.withUpdated(
|
|
withDefaultWallpaper: chat.serviceMessage.components.withDefaultWallpaper.withUpdated(
|
|
fill: additionalBackgroundColor,
|
|
dateFillStatic: additionalBackgroundColor?.withAlphaComponent(0.6),
|
|
dateFillFloating: additionalBackgroundColor?.withAlphaComponent(0.2)
|
|
),
|
|
withCustomWallpaper: chat.serviceMessage.components.withCustomWallpaper.withUpdated(
|
|
fill: additionalBackgroundColor,
|
|
dateFillStatic: additionalBackgroundColor?.withAlphaComponent(0.6),
|
|
dateFillFloating: additionalBackgroundColor?.withAlphaComponent(0.2)
|
|
)
|
|
),
|
|
unreadBarFillColor: mainBackgroundColor,
|
|
unreadBarStrokeColor: mainBackgroundColor
|
|
),
|
|
inputPanel: chat.inputPanel.withUpdated(
|
|
panelBackgroundColor: mainBackgroundColor,
|
|
panelSeparatorColor: mainSeparatorColor,
|
|
panelControlAccentColor: accentColor,
|
|
panelControlColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
inputBackgroundColor: inputBackgroundColor,
|
|
inputStrokeColor: accentColor?.withMultiplied(hue: 1.038, saturation: 0.463, brightness: 0.26),
|
|
inputPlaceholderColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
inputControlColor: mainSecondaryTextColor?.withAlphaComponent(0.4),
|
|
actionControlFillColor: accentColor,
|
|
mediaRecordingDotColor: accentColor,
|
|
mediaRecordingControl: chat.inputPanel.mediaRecordingControl.withUpdated(
|
|
buttonColor: accentColor,
|
|
micLevelColor: accentColor?.withAlphaComponent(0.2)
|
|
)
|
|
),
|
|
inputMediaPanel: chat.inputMediaPanel.withUpdated(
|
|
panelSeparatorColor: mainBackgroundColor,
|
|
panelIconColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
panelHighlightedIconBackgroundColor: inputBackgroundColor,
|
|
stickersBackgroundColor: additionalBackgroundColor,
|
|
stickersSectionTextColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
stickersSearchBackgroundColor: accentColor?.withMultiplied(hue: 1.009, saturation: 0.621, brightness: 0.15),
|
|
stickersSearchPlaceholderColor: accentColor?.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59),
|
|
stickersSearchControlColor: accentColor?.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59),
|
|
gifsBackgroundColor: additionalBackgroundColor
|
|
),
|
|
inputButtonPanel: chat.inputButtonPanel.withUpdated(
|
|
panelSeparatorColor: mainBackgroundColor,
|
|
panelBackgroundColor: accentColor?.withMultiplied(hue: 1.048, saturation: 0.378, brightness: 0.13),
|
|
buttonFillColor: accentColor?.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38),
|
|
buttonStrokeColor: accentColor?.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07),
|
|
buttonHighlightedFillColor: accentColor?.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38).withAlphaComponent(0.7),
|
|
buttonHighlightedStrokeColor: accentColor?.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07)
|
|
),
|
|
historyNavigation: chat.historyNavigation.withUpdated(
|
|
fillColor: mainBackgroundColor,
|
|
strokeColor: mainSeparatorColor,
|
|
foregroundColor: mainSecondaryTextColor?.withAlphaComponent(0.5),
|
|
badgeBackgroundColor: accentColor,
|
|
badgeStrokeColor: accentColor
|
|
)
|
|
)
|
|
|
|
chart = chart.withUpdated(
|
|
labelsColor: accentColor?.withMultiplied(hue: 1.033, saturation: 0.211, brightness: 0.882).withAlphaComponent(0.6),
|
|
helperLinesColor: accentColor?.withMultiplied(hue: 1.037, saturation: 0.271, brightness: 0.671).withAlphaComponent(0.35),
|
|
strongLinesColor: accentColor?.withMultiplied(hue: 1.037, saturation: 0.271, brightness: 0.671).withAlphaComponent(0.35),
|
|
barStrongLinesColor: accentColor?.withMultiplied(hue: 1.033, saturation: 0.211, brightness: 0.882).withAlphaComponent(0.45),
|
|
detailsViewColor: accentColor?.withMultiplied(hue: 1.035, saturation: 0.571, brightness: 0.184),
|
|
rangeViewFrameColor: accentColor?.withMultiplied(hue: 1.030, saturation: 0.494, brightness: 0.349)
|
|
)
|
|
|
|
return PresentationTheme(
|
|
name: title.flatMap { .custom($0) } ?? theme.name,
|
|
index: theme.index,
|
|
referenceTheme: theme.referenceTheme,
|
|
overallDarkAppearance: theme.overallDarkAppearance,
|
|
intro: intro,
|
|
passcode: passcode,
|
|
rootController: rootController,
|
|
list: list,
|
|
chatList: chatList,
|
|
chat: chat,
|
|
actionSheet: actionSheet,
|
|
contextMenu: contextMenu,
|
|
inAppNotification: inAppNotification,
|
|
chart: chart,
|
|
preview: theme.preview
|
|
)
|
|
}
|
|
|
|
public func makeDefaultDarkTintedPresentationTheme(extendingThemeReference: PresentationThemeReference? = nil, preview: Bool) -> PresentationTheme {
|
|
let accentColor = defaultDarkTintedAccentColor
|
|
|
|
let secondaryBadgeTextColor: UIColor
|
|
let lightness = accentColor.lightness
|
|
if lightness > 0.7 {
|
|
secondaryBadgeTextColor = .black
|
|
} else {
|
|
secondaryBadgeTextColor = .white
|
|
}
|
|
|
|
let mainBackgroundColor = accentColor.withMultiplied(hue: 1.024, saturation: 0.585, brightness: 0.25)
|
|
let mainSelectionColor = accentColor.withMultiplied(hue: 1.03, saturation: 0.585, brightness: 0.12)
|
|
let additionalBackgroundColor = accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18)
|
|
let mainSeparatorColor = accentColor.withMultiplied(hue: 1.033, saturation: 0.426, brightness: 0.34)
|
|
let mainForegroundColor = accentColor.withMultiplied(hue: 0.99, saturation: 0.256, brightness: 0.62)
|
|
let mainSecondaryColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.109, brightness: 0.59)
|
|
let mainSecondaryTextColor = accentColor.withMultiplied(hue: 0.956, saturation: 0.17, brightness: 1.0)
|
|
let mainFreeTextColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.097, brightness: 0.56)
|
|
|
|
let outgoingBubbleFillGradientColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.731, brightness: 0.59)
|
|
let outgoingBubbleFillColor = outgoingBubbleFillGradientColor.withMultiplied(hue: 0.966, saturation: 0.61, brightness: 0.98)
|
|
let outgoingScamColor = UIColor(rgb: 0xffffff)
|
|
let outgoingPrimaryTextColor = UIColor(rgb: 0xffffff)
|
|
let outgoingSecondaryTextColor = UIColor(rgb: 0xffffff, alpha: 0.5)
|
|
let outgoingLinkTextColor = UIColor(rgb: 0xffffff)
|
|
let outgoingCheckColor = UIColor(rgb: 0xffffff, alpha: 0.5)
|
|
|
|
let highlightedIncomingBubbleColor = accentColor.withMultiplied(hue: 1.03, saturation: 0.463, brightness: 0.29)
|
|
let highlightedOutgoingBubbleColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.609, brightness: 0.63)
|
|
|
|
let mainInputColor = accentColor.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.19)
|
|
let inputBackgroundColor = accentColor.withMultiplied(hue: 1.02, saturation: 0.609, brightness: 0.15)
|
|
|
|
let rootTabBar = PresentationThemeRootTabBar(
|
|
backgroundColor: mainBackgroundColor,
|
|
separatorColor: mainSeparatorColor,
|
|
iconColor: mainForegroundColor,
|
|
selectedIconColor: accentColor,
|
|
textColor: mainForegroundColor,
|
|
selectedTextColor: accentColor,
|
|
badgeBackgroundColor: UIColor(rgb: 0xef5b5b),
|
|
badgeStrokeColor: UIColor(rgb: 0xef5b5b),
|
|
badgeTextColor: UIColor(rgb: 0xffffff)
|
|
)
|
|
|
|
let rootNavigationBar = PresentationThemeRootNavigationBar(
|
|
buttonColor: accentColor,
|
|
disabledButtonColor: accentColor.withMultiplied(hue: 1.033, saturation: 0.219, brightness: 0.44),
|
|
primaryTextColor: .white,
|
|
secondaryTextColor: mainSecondaryColor,
|
|
controlColor: mainSecondaryColor,
|
|
accentTextColor: accentColor,
|
|
backgroundColor: mainBackgroundColor,
|
|
separatorColor: mainSeparatorColor,
|
|
badgeBackgroundColor: UIColor(rgb: 0xef5b5b),
|
|
badgeStrokeColor: UIColor(rgb: 0xef5b5b),
|
|
badgeTextColor: UIColor(rgb: 0xffffff),
|
|
segmentedBackgroundColor: mainInputColor,
|
|
segmentedForegroundColor: mainBackgroundColor,
|
|
segmentedTextColor: UIColor(rgb: 0xffffff),
|
|
segmentedDividerColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
clearButtonBackgroundColor: UIColor(rgb: 0xffffff, alpha: 0.1),
|
|
clearButtonForegroundColor: UIColor(rgb: 0xffffff)
|
|
)
|
|
|
|
let navigationSearchBar = PresentationThemeNavigationSearchBar(
|
|
backgroundColor: mainBackgroundColor,
|
|
accentColor: accentColor,
|
|
inputFillColor: mainInputColor,
|
|
inputTextColor: UIColor(rgb: 0xffffff),
|
|
inputPlaceholderTextColor: mainSecondaryColor,
|
|
inputIconColor: mainSecondaryColor,
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
separatorColor: additionalBackgroundColor
|
|
)
|
|
|
|
let intro = PresentationThemeIntro(
|
|
statusBarStyle: .white,
|
|
primaryTextColor: .white,
|
|
accentTextColor: accentColor,
|
|
disabledTextColor: accentColor.withMultiplied(hue: 1.033, saturation: 0.219, brightness: 0.44),
|
|
startButtonColor: accentColor,
|
|
dotColor: mainSecondaryColor
|
|
)
|
|
|
|
let passcode = PresentationThemePasscode(
|
|
backgroundColors: PresentationThemeGradientColors(topColor: accentColor.withMultiplied(hue: 1.049, saturation: 0.573, brightness: 0.47), bottomColor: additionalBackgroundColor),
|
|
buttonColor: mainBackgroundColor
|
|
)
|
|
|
|
let rootController = PresentationThemeRootController(
|
|
statusBarStyle: .white,
|
|
tabBar: rootTabBar,
|
|
navigationBar: rootNavigationBar,
|
|
navigationSearchBar: navigationSearchBar,
|
|
keyboardColor: .dark
|
|
)
|
|
|
|
let switchColors = PresentationThemeSwitch(
|
|
frameColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
handleColor: UIColor(rgb: 0x121212),
|
|
contentColor: accentColor,
|
|
positiveColor: UIColor(rgb: 0x08a723),
|
|
negativeColor: UIColor(rgb: 0xff6767)
|
|
)
|
|
|
|
let list = PresentationThemeList(
|
|
blocksBackgroundColor: additionalBackgroundColor,
|
|
plainBackgroundColor: additionalBackgroundColor,
|
|
itemPrimaryTextColor: UIColor(rgb: 0xffffff),
|
|
itemSecondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
itemDisabledTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
itemAccentColor: accentColor,
|
|
itemHighlightedColor: UIColor(rgb: 0x28b772),
|
|
itemDestructiveColor: UIColor(rgb: 0xff6767),
|
|
itemPlaceholderTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
itemBlocksBackgroundColor: mainBackgroundColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemBlocksSeparatorColor: mainSeparatorColor,
|
|
itemPlainSeparatorColor: mainSeparatorColor,
|
|
disclosureArrowColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
sectionHeaderTextColor: mainFreeTextColor,
|
|
freeTextColor: mainFreeTextColor,
|
|
freeTextErrorColor: UIColor(rgb: 0xff6767),
|
|
freeTextSuccessColor: UIColor(rgb: 0x30cf30),
|
|
freeMonoIconColor: mainFreeTextColor,
|
|
itemSwitchColors: switchColors,
|
|
itemDisclosureActions: PresentationThemeItemDisclosureActions(
|
|
neutral1: PresentationThemeFillForeground(fillColor: accentColor, foregroundColor: .white),
|
|
neutral2: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0xcd7800), foregroundColor: .white),
|
|
destructive: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0xc70c0c), foregroundColor: .white),
|
|
constructive: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0x08a723), foregroundColor: .white),
|
|
accent: PresentationThemeFillForeground(fillColor: accentColor, foregroundColor: .white),
|
|
warning: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0xcd7800), foregroundColor: .white),
|
|
inactive: PresentationThemeFillForeground(fillColor: accentColor.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.3), foregroundColor: .white)
|
|
),
|
|
itemCheckColors: PresentationThemeFillStrokeForeground(
|
|
fillColor: accentColor,
|
|
strokeColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
foregroundColor: secondaryBadgeTextColor
|
|
),
|
|
controlSecondaryColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
freeInputField: PresentationInputFieldTheme(
|
|
backgroundColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
strokeColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
placeholderColor: UIColor(rgb: 0x4d4d4d),
|
|
primaryColor: .white,
|
|
controlColor: UIColor(rgb: 0x4d4d4d)
|
|
),
|
|
freePlainInputField: PresentationInputFieldTheme(
|
|
backgroundColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
strokeColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
placeholderColor: UIColor(rgb: 0x4d4d4d),
|
|
primaryColor: .white,
|
|
controlColor: UIColor(rgb: 0x4d4d4d)
|
|
),
|
|
mediaPlaceholderColor: UIColor(rgb: 0xffffff).mixedWith(mainBackgroundColor, alpha: 0.9),
|
|
scrollIndicatorColor: UIColor(white: 1.0, alpha: 0.3),
|
|
pageIndicatorInactiveColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
itemBarChart: PresentationThemeItemBarChart(color1: accentColor, color2: mainSecondaryTextColor.withAlphaComponent(0.5), color3: accentColor.withMultiplied(hue: 1.038, saturation: 0.329, brightness: 0.33)),
|
|
itemInputField: PresentationInputFieldTheme(backgroundColor: mainInputColor, strokeColor: mainInputColor, placeholderColor: mainSecondaryColor, primaryColor: UIColor(rgb: 0xffffff), controlColor: mainSecondaryColor)
|
|
)
|
|
|
|
let chatList = PresentationThemeChatList(
|
|
backgroundColor: additionalBackgroundColor,
|
|
itemSeparatorColor: mainSeparatorColor,
|
|
itemBackgroundColor: additionalBackgroundColor,
|
|
pinnedItemBackgroundColor: mainBackgroundColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemSelectedBackgroundColor: mainSelectionColor,
|
|
titleColor: UIColor(rgb: 0xffffff),
|
|
secretTitleColor: UIColor(rgb: 0x89df9e),
|
|
dateTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
authorNameColor: UIColor(rgb: 0xffffff),
|
|
messageTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
messageHighlightedTextColor: UIColor(rgb: 0xffffff),
|
|
messageDraftTextColor: UIColor(rgb: 0xdd4b39),
|
|
checkmarkColor: accentColor,
|
|
pendingIndicatorColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
failedFillColor: UIColor(rgb: 0xff6767),
|
|
failedForegroundColor: .white,
|
|
muteIconColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
unreadBadgeActiveBackgroundColor: accentColor,
|
|
unreadBadgeActiveTextColor: secondaryBadgeTextColor,
|
|
unreadBadgeInactiveBackgroundColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
unreadBadgeInactiveTextColor: additionalBackgroundColor,
|
|
pinnedBadgeColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
pinnedSearchBarColor: mainInputColor,
|
|
regularSearchBarColor: accentColor.withMultiplied(hue: 1.029, saturation: 0.609, brightness: 0.12),
|
|
sectionHeaderFillColor: mainBackgroundColor,
|
|
sectionHeaderTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
verifiedIconFillColor: accentColor,
|
|
verifiedIconForegroundColor: .white,
|
|
secretIconColor: UIColor(rgb: 0x89df9e),
|
|
pinnedArchiveAvatarColor: PresentationThemeArchiveAvatarColors(backgroundColors: PresentationThemeGradientColors(topColor: UIColor(rgb: 0x72d5fd), bottomColor: UIColor(rgb: 0x2a9ef1)), foregroundColor: .white),
|
|
unpinnedArchiveAvatarColor: PresentationThemeArchiveAvatarColors(backgroundColors: PresentationThemeGradientColors(topColor: accentColor.withMultiplied(hue: 0.985, saturation: 0.268, brightness: 0.47), bottomColor: accentColor.withMultiplied(hue: 0.98, saturation: 0.268, brightness: 0.39)), foregroundColor: additionalBackgroundColor),
|
|
onlineDotColor: UIColor(rgb: 0x4cc91f)
|
|
)
|
|
|
|
let buttonStrokeColor = accentColor.withMultiplied(hue: 1.014, saturation: 0.56, brightness: 0.64).withAlphaComponent(0.15)
|
|
|
|
let message = PresentationThemeChatMessage(
|
|
incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor, shadow: nil), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor, shadow: nil)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: UIColor(rgb: 0xff6767), textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, accentControlDisabledColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), mediaControlInnerBackgroundColor: mainBackgroundColor, pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor, barIconForeground: .white, barPositive: UIColor(rgb: 0x00A700), barNegative: UIColor(rgb: 0xFE3824)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
|
|
outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor, shadow: nil), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, gradientFill: outgoingBubbleFillGradientColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleFillColor, shadow: nil)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, accentControlDisabledColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, mediaControlInnerBackgroundColor: outgoingBubbleFillColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: outgoingPrimaryTextColor, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: outgoingPrimaryTextColor, barIconForeground: .clear, barPositive: outgoingPrimaryTextColor, barNegative: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white),
|
|
freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor, shadow: nil), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor, shadow: nil)),
|
|
infoPrimaryTextColor: UIColor(rgb: 0xffffff),
|
|
infoLinkTextColor: accentColor,
|
|
outgoingCheckColor: outgoingCheckColor,
|
|
mediaDateAndStatusFillColor: UIColor(white: 0.0, alpha: 0.5),
|
|
mediaDateAndStatusTextColor: UIColor(rgb: 0xffffff),
|
|
shareButtonFillColor: PresentationThemeVariableColor(color: additionalBackgroundColor.withAlphaComponent(0.5)),
|
|
shareButtonStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor),
|
|
shareButtonForegroundColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2)),
|
|
mediaOverlayControlColors: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0x000000, alpha: 0.6), foregroundColor: .white),
|
|
selectionControlColors: PresentationThemeFillStrokeForeground(fillColor: accentColor, strokeColor: .white, foregroundColor: .white),
|
|
deliveryFailedColors: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0xff6767), foregroundColor: .white),
|
|
mediaHighlightOverlayColor: UIColor(white: 1.0, alpha: 0.6),
|
|
stickerPlaceholderColor: PresentationThemeVariableColor(color: mainBackgroundColor.withAlphaComponent(0.5)),
|
|
stickerPlaceholderShimmerColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff, alpha: 0.05))
|
|
)
|
|
|
|
let serviceMessage = PresentationThemeServiceMessage(
|
|
components: PresentationThemeServiceMessageColor(withDefaultWallpaper: PresentationThemeServiceMessageColorComponents(fill: additionalBackgroundColor, primaryText: .white, linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: UIColor(rgb: 0xff6767), dateFillStatic: additionalBackgroundColor.withAlphaComponent(0.6), dateFillFloating: additionalBackgroundColor.withAlphaComponent(0.2)), withCustomWallpaper: PresentationThemeServiceMessageColorComponents(fill: additionalBackgroundColor, primaryText: .white, linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: UIColor(rgb: 0xff6767), dateFillStatic: additionalBackgroundColor.withAlphaComponent(0.6), dateFillFloating: additionalBackgroundColor.withAlphaComponent(0.2))),
|
|
unreadBarFillColor: mainBackgroundColor,
|
|
unreadBarStrokeColor: mainBackgroundColor,
|
|
unreadBarTextColor: .white,
|
|
dateTextColor: PresentationThemeVariableColor(color: .white)
|
|
)
|
|
|
|
let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl(
|
|
buttonColor: accentColor,
|
|
micLevelColor: accentColor.withAlphaComponent(0.2),
|
|
activeIconColor: .white
|
|
)
|
|
|
|
let inputPanel = PresentationThemeChatInputPanel(
|
|
panelBackgroundColor: mainBackgroundColor,
|
|
panelBackgroundColorNoWallpaper: accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18),
|
|
panelSeparatorColor: mainSeparatorColor,
|
|
panelControlAccentColor: accentColor,
|
|
panelControlColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
panelControlDisabledColor: UIColor(rgb: 0x90979F, alpha: 0.5),
|
|
panelControlDestructiveColor: UIColor(rgb: 0xff6767),
|
|
inputBackgroundColor: inputBackgroundColor,
|
|
inputStrokeColor: accentColor.withMultiplied(hue: 1.038, saturation: 0.463, brightness: 0.26),
|
|
inputPlaceholderColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
inputTextColor: UIColor(rgb: 0xffffff),
|
|
inputControlColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
actionControlFillColor: accentColor,
|
|
actionControlForegroundColor: .white,
|
|
primaryTextColor: UIColor(rgb: 0xffffff),
|
|
secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5),
|
|
mediaRecordingDotColor: accentColor,
|
|
mediaRecordingControl: inputPanelMediaRecordingControl
|
|
)
|
|
|
|
let inputMediaPanel = PresentationThemeInputMediaPanel(
|
|
panelSeparatorColor: mainBackgroundColor,
|
|
panelIconColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
panelHighlightedIconBackgroundColor: inputBackgroundColor,
|
|
stickersBackgroundColor: additionalBackgroundColor,
|
|
stickersSectionTextColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
stickersSearchBackgroundColor: accentColor.withMultiplied(hue: 1.009, saturation: 0.621, brightness: 0.15),
|
|
stickersSearchPlaceholderColor: accentColor.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59),
|
|
stickersSearchPrimaryColor: .white,
|
|
stickersSearchControlColor: accentColor.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59),
|
|
gifsBackgroundColor: additionalBackgroundColor
|
|
)
|
|
|
|
let inputButtonPanel = PresentationThemeInputButtonPanel(
|
|
panelSeparatorColor: mainBackgroundColor,
|
|
panelBackgroundColor: accentColor.withMultiplied(hue: 1.048, saturation: 0.378, brightness: 0.13),
|
|
buttonFillColor: accentColor.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38),
|
|
buttonStrokeColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07),
|
|
buttonHighlightedFillColor: accentColor.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38).withAlphaComponent(0.7),
|
|
buttonHighlightedStrokeColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07),
|
|
buttonTextColor: UIColor(rgb: 0xffffff)
|
|
)
|
|
|
|
let historyNavigation = PresentationThemeChatHistoryNavigation(
|
|
fillColor: mainBackgroundColor,
|
|
strokeColor: mainSeparatorColor,
|
|
foregroundColor: mainSecondaryTextColor.withAlphaComponent(0.5),
|
|
badgeBackgroundColor: accentColor,
|
|
badgeStrokeColor: accentColor,
|
|
badgeTextColor: .white
|
|
)
|
|
|
|
let chat = PresentationThemeChat(
|
|
defaultWallpaper: .color(accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18).argb),
|
|
message: message,
|
|
serviceMessage: serviceMessage,
|
|
inputPanel: inputPanel,
|
|
inputMediaPanel: inputMediaPanel,
|
|
inputButtonPanel: inputButtonPanel,
|
|
historyNavigation: historyNavigation
|
|
)
|
|
|
|
let actionSheet = PresentationThemeActionSheet(
|
|
dimColor: UIColor(white: 0.0, alpha: 0.5),
|
|
backgroundType: .dark,
|
|
opaqueItemBackgroundColor: mainBackgroundColor,
|
|
itemBackgroundColor: mainBackgroundColor.withAlphaComponent(0.8),
|
|
opaqueItemHighlightedBackgroundColor: mainSelectionColor,
|
|
itemHighlightedBackgroundColor: mainSelectionColor.withAlphaComponent(0.2),
|
|
opaqueItemSeparatorColor: additionalBackgroundColor,
|
|
standardActionTextColor: accentColor,
|
|
destructiveActionTextColor: UIColor(rgb: 0xff6767),
|
|
disabledActionTextColor: UIColor(white: 1.0, alpha: 0.5),
|
|
primaryTextColor: .white,
|
|
secondaryTextColor: UIColor(white: 1.0, alpha: 0.5),
|
|
controlAccentColor: accentColor,
|
|
inputBackgroundColor: mainInputColor,
|
|
inputHollowBackgroundColor: mainInputColor,
|
|
inputBorderColor: mainInputColor,
|
|
inputPlaceholderColor: mainSecondaryColor,
|
|
inputTextColor: .white,
|
|
inputClearButtonColor: mainSecondaryColor,
|
|
checkContentColor: secondaryBadgeTextColor
|
|
)
|
|
|
|
let contextMenu = PresentationThemeContextMenu(
|
|
dimColor: UIColor(rgb: 0x000000, alpha: 0.6),
|
|
backgroundColor: rootNavigationBar.backgroundColor.withAlphaComponent(0.78),
|
|
itemSeparatorColor: UIColor(rgb: 0xffffff, alpha: 0.15),
|
|
sectionSeparatorColor: UIColor(rgb: 0x000000, alpha: 0.2),
|
|
itemBackgroundColor: UIColor(rgb: 0x000000, alpha: 0.0),
|
|
itemHighlightedBackgroundColor: UIColor(rgb: 0xffffff, alpha: 0.15),
|
|
primaryColor: UIColor(rgb: 0xffffff, alpha: 1.0),
|
|
secondaryColor: UIColor(rgb: 0xffffff, alpha: 0.8),
|
|
destructiveColor: UIColor(rgb: 0xff6767),
|
|
badgeFillColor: accentColor,
|
|
badgeForegroundColor: secondaryBadgeTextColor,
|
|
badgeInactiveFillColor: mainSecondaryTextColor.withAlphaComponent(0.4),
|
|
badgeInactiveForegroundColor: secondaryBadgeTextColor,
|
|
extractedContentTintColor: UIColor(rgb: 0xffffff, alpha: 1.0)
|
|
)
|
|
|
|
let inAppNotification = PresentationThemeInAppNotification(
|
|
fillColor: mainBackgroundColor,
|
|
primaryTextColor: .white,
|
|
expandedNotification: PresentationThemeExpandedNotification(
|
|
backgroundType: .dark,
|
|
navigationBar: PresentationThemeExpandedNotificationNavigationBar(
|
|
backgroundColor: mainBackgroundColor,
|
|
primaryTextColor: UIColor(rgb: 0xffffff),
|
|
controlColor: accentColor,
|
|
separatorColor: mainSeparatorColor
|
|
)
|
|
)
|
|
)
|
|
|
|
let chart = PresentationThemeChart(
|
|
labelsColor: UIColor(rgb: 0xbacce1, alpha: 0.6),
|
|
helperLinesColor: UIColor(rgb: 0xbacce1, alpha: 0.35),
|
|
strongLinesColor: UIColor(rgb: 0xbacce1, alpha: 0.35),
|
|
barStrongLinesColor: UIColor(rgb: 0xbacce1, alpha: 0.45),
|
|
detailsTextColor: UIColor(rgb: 0xffffff),
|
|
detailsArrowColor: UIColor(rgb: 0xffffff),
|
|
detailsViewColor: UIColor(rgb: 0x19232f),
|
|
rangeViewFrameColor: UIColor(rgb: 0x354659),
|
|
rangeViewMarkerColor: UIColor(rgb: 0xffffff)
|
|
)
|
|
|
|
return PresentationTheme(
|
|
name: extendingThemeReference?.name ?? .builtin(.nightAccent),
|
|
index: extendingThemeReference?.index ?? PresentationThemeReference.builtin(.nightAccent).index,
|
|
referenceTheme: .nightAccent,
|
|
overallDarkAppearance: true,
|
|
intro: intro,
|
|
passcode: passcode,
|
|
rootController: rootController,
|
|
list: list,
|
|
chatList: chatList,
|
|
chat: chat,
|
|
actionSheet: actionSheet,
|
|
contextMenu: contextMenu,
|
|
inAppNotification: inAppNotification,
|
|
chart: chart,
|
|
preview: preview
|
|
)
|
|
}
|