From 98ac977cb3af66bb4630c933ccb8094ef5c41b58 Mon Sep 17 00:00:00 2001 From: another-simple-pixel Date: Mon, 6 Jul 2026 16:49:32 -0700 Subject: [PATCH] Recolor the built-in chat wallpaper schemes (light, dark, black) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the six presets' light/dark/black colors with the new oklch-based scheme: incoming and outgoing bubbles are made clearly distinct — incoming get maximum contrast for readability, outgoing carry the theme's color (deeper and more saturated on dark and black). Preset colors are now Color values instead of hex strings, so they render in Display P3; user theme overrides and theme export are unchanged (still hex). Second of two commits for the new wallpaper schemes, paired with the pattern commit — the colors are tuned to those patterns. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../chat/simplex/common/ui/theme/Theme.kt | 52 ++- .../common/views/helpers/ChatWallpaper.kt | 346 +++++++++--------- 2 files changed, 220 insertions(+), 178 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt index 20e0280acd..f694286d8f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt @@ -219,6 +219,14 @@ data class ThemeColors( } } +/** Resolved preset colors — Color objects, not strings. Used for presets defined in code. */ +data class ThemeColorsP3( + val sentMessage: Color? = null, + val sentQuote: Color? = null, + val receivedMessage: Color? = null, + val receivedQuote: Color? = null, +) + // Spec: spec/services/theme.md#ThemeWallpaper @Serializable data class ThemeWallpaper ( @@ -299,6 +307,20 @@ data class ThemesFile( val themes: List = emptyList() ) +// Theme color priority: per-chat → per-user → this override's own colors → +// preset-wallpaper-derived theme → base palette. Used by toColors / toAppColors +// for every non-bubble field; bubble colors have wallpaper-aware logic that +// can't share this chain. +private fun resolveColor( + perChatColor: String?, + perUserColor: String?, + ownColor: String?, + baseColor: Color, +): Color = perChatColor?.colorFromReadableHex() + ?: perUserColor?.colorFromReadableHex() + ?: ownColor?.colorFromReadableHex() + ?: baseColor + // Spec: spec/services/theme.md#ThemeOverrides @Serializable data class ThemeOverrides ( @@ -340,7 +362,7 @@ data class ThemeOverrides ( ) } - fun toColors(base: DefaultTheme, perChatTheme: ThemeColors?, perUserTheme: ThemeColors?, presetWallpaperTheme: ThemeColors?): Colors { + fun toColors(base: DefaultTheme, perChatTheme: ThemeColors?, perUserTheme: ThemeColors?, presetWallpaperTheme: ThemeColorsP3?): Colors { val baseColors = when (base) { DefaultTheme.LIGHT -> LightColorPalette DefaultTheme.DARK -> DarkColorPalette @@ -348,16 +370,16 @@ data class ThemeOverrides ( DefaultTheme.BLACK -> BlackColorPalette } return baseColors.copy( - primary = perChatTheme?.primary?.colorFromReadableHex() ?: perUserTheme?.primary?.colorFromReadableHex() ?: colors.primary?.colorFromReadableHex() ?: presetWallpaperTheme?.primary?.colorFromReadableHex() ?: baseColors.primary, - primaryVariant = perChatTheme?.primaryVariant?.colorFromReadableHex() ?: perUserTheme?.primaryVariant?.colorFromReadableHex() ?: colors.primaryVariant?.colorFromReadableHex() ?: presetWallpaperTheme?.primaryVariant?.colorFromReadableHex() ?: baseColors.primaryVariant, - secondary = perChatTheme?.secondary?.colorFromReadableHex() ?: perUserTheme?.secondary?.colorFromReadableHex() ?: colors.secondary?.colorFromReadableHex() ?: presetWallpaperTheme?.secondary?.colorFromReadableHex() ?: baseColors.secondary, - secondaryVariant = perChatTheme?.secondaryVariant?.colorFromReadableHex() ?: perUserTheme?.secondaryVariant?.colorFromReadableHex() ?: colors.secondaryVariant?.colorFromReadableHex() ?: presetWallpaperTheme?.secondaryVariant?.colorFromReadableHex() ?: baseColors.secondaryVariant, - background = perChatTheme?.background?.colorFromReadableHex() ?: perUserTheme?.background?.colorFromReadableHex() ?: colors.background?.colorFromReadableHex() ?: presetWallpaperTheme?.background?.colorFromReadableHex() ?: baseColors.background, - surface = perChatTheme?.surface?.colorFromReadableHex() ?: perUserTheme?.surface?.colorFromReadableHex() ?: colors.surface?.colorFromReadableHex() ?: presetWallpaperTheme?.surface?.colorFromReadableHex() ?: baseColors.surface, + primary = resolveColor(perChatTheme?.primary, perUserTheme?.primary, colors.primary, baseColors.primary), + primaryVariant = resolveColor(perChatTheme?.primaryVariant, perUserTheme?.primaryVariant, colors.primaryVariant, baseColors.primaryVariant), + secondary = resolveColor(perChatTheme?.secondary, perUserTheme?.secondary, colors.secondary, baseColors.secondary), + secondaryVariant = resolveColor(perChatTheme?.secondaryVariant, perUserTheme?.secondaryVariant, colors.secondaryVariant, baseColors.secondaryVariant), + background = resolveColor(perChatTheme?.background, perUserTheme?.background, colors.background, baseColors.background), + surface = resolveColor(perChatTheme?.surface, perUserTheme?.surface, colors.surface, baseColors.surface), ) } - fun toAppColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColors?): AppColors { + fun toAppColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColorsP3?): AppColors { val baseColors = when (base) { DefaultTheme.LIGHT -> LightColorPaletteApp DefaultTheme.DARK -> DarkColorPaletteApp @@ -365,13 +387,13 @@ data class ThemeOverrides ( DefaultTheme.BLACK -> BlackColorPaletteApp } - val sentMessageFallback = colors.sentMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.sentMessage?.colorFromReadableHex() ?: baseColors.sentMessage - val sentQuoteFallback = colors.sentQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.sentQuote?.colorFromReadableHex() ?: baseColors.sentQuote - val receivedMessageFallback = colors.receivedMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedMessage?.colorFromReadableHex() ?: baseColors.receivedMessage - val receivedQuoteFallback = colors.receivedQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedQuote?.colorFromReadableHex() ?: baseColors.receivedQuote + val sentMessageFallback = colors.sentMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.sentMessage ?: baseColors.sentMessage + val sentQuoteFallback = colors.sentQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.sentQuote ?: baseColors.sentQuote + val receivedMessageFallback = colors.receivedMessage?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedMessage ?: baseColors.receivedMessage + val receivedQuoteFallback = colors.receivedQuote?.colorFromReadableHex() ?: presetWallpaperTheme?.receivedQuote ?: baseColors.receivedQuote return baseColors.copy( - title = perChatTheme?.title?.colorFromReadableHex() ?: perUserTheme?.title?.colorFromReadableHex() ?: colors.title?.colorFromReadableHex() ?: presetWallpaperTheme?.title?.colorFromReadableHex() ?: baseColors.title, - primaryVariant2 = perChatTheme?.primaryVariant2?.colorFromReadableHex() ?: perUserTheme?.primaryVariant2?.colorFromReadableHex() ?: colors.primaryVariant2?.colorFromReadableHex() ?: presetWallpaperTheme?.primaryVariant2?.colorFromReadableHex() ?: baseColors.primaryVariant2, + title = resolveColor(perChatTheme?.title, perUserTheme?.title, colors.title, baseColors.title), + primaryVariant2 = resolveColor(perChatTheme?.primaryVariant2, perUserTheme?.primaryVariant2, colors.primaryVariant2, baseColors.primaryVariant2), sentMessage = if (perChatTheme?.sentMessage != null) perChatTheme.sentMessage.colorFromReadableHex() else if (perUserTheme != null && (perChatWallpaperType == null || perUserWallpaperType == null || perChatWallpaperType.sameType(perUserWallpaperType))) perUserTheme.sentMessage?.colorFromReadableHex() ?: sentMessageFallback else sentMessageFallback, @@ -416,7 +438,7 @@ data class ThemeOverrides ( ) } - fun withFilledColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColors?): ThemeColors { + fun withFilledColors(base: DefaultTheme, perChatTheme: ThemeColors?, perChatWallpaperType: WallpaperType?, perUserTheme: ThemeColors?, perUserWallpaperType: WallpaperType?, presetWallpaperTheme: ThemeColorsP3?): ThemeColors { val c = toColors(base, perChatTheme, perUserTheme, presetWallpaperTheme) val ac = toAppColors(base, perChatTheme, perChatWallpaperType, perUserTheme, perUserWallpaperType, presetWallpaperTheme) return ThemeColors( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt index 07f4d7ba46..1f5c6aa9a9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt @@ -13,7 +13,6 @@ import androidx.compose.ui.unit.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* -import chat.simplex.common.ui.theme.ThemeManager.colorFromReadableHex import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource @@ -30,215 +29,233 @@ enum class PresetWallpaper( val scaleDesktop: Float, val background: Map, val tint: Map, - val colors: Map, + val colors: Map, ) { - CATS(MR.images.wallpaper_cats, MR.images.wallpaper_cats_desktop, "cats", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#ffF8F6EA"), + CATS(res = MR.images.wallpaper_cats, resDesktop = MR.images.wallpaper_cats_desktop, filename = "cats", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.9838867f, 0.021334622f, 95.39152f), + dark = oklch(0.1800f, 0.0250f, 77f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#ffefdca6".colorFromReadableHex(), - DefaultTheme.DARK to "#ff4b3b0e".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff51400f".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff4b3b0e".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.92822266f, 0.05571678f, 95.39152f), + DefaultTheme.DARK to oklch(0.2940f, 0.0567f, 77f), + DefaultTheme.SIMPLEX to oklch(0.3797781f, 0.06842897f, 88.88896f), // #ff51400f + DefaultTheme.BLACK to oklch(0.36010742f, 0.07737845f, 64.32541f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#fffffaed", - sentQuote = "#fffaf0d6", - receivedMessage = "#ffF8F7F4", - receivedQuote = "#ffefede9", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.95458984f, 0.05769427f, 95.39152f), + sentQuote = oklch(0.9350586f, 0.081934035f, 95.39152f), + receivedMessage = oklch(0.9941406f, 0.009641647f, 95.39152f), + receivedQuote = oklch(0.9741211f, 0.033454504f, 95.39152f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff2f2919", - sentQuote = "#ff473a1d", - receivedMessage = "#ff272624", - receivedQuote = "#ff373633", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.3130f, 0.0630f, 77f), + sentQuote = oklch(0.3700f, 0.0725f, 77f), + receivedMessage = oklch(0.2560f, 0.0278f, 77f), + receivedQuote = oklch(0.2940f, 0.0320f, 77f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff41371b", - sentQuote = "#ff654f1c", - receivedMessage = "#ff272624", - receivedQuote = "#ff373633", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.3402031f, 0.04537511f, 90.2498f), // #ff41371b + sentQuote = oklch(0.4398707f, 0.0737883f, 85.23908f), // #ff654f1c + receivedMessage = oklch(0.2689313f, 0.003935312f, 84.58291f), // #ff272624 + receivedQuote = oklch(0.332832f, 0.005361989f, 91.54412f), // #ff373633 ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff41371b", - sentQuote = "#ff654f1c", - receivedMessage = "#ff1f1e1b", - receivedQuote = "#ff2f2d27", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.24145508f, 0.054447953f, 64.32541f), + sentQuote = oklch(0.33200073f, 0.07415811f, 64.32541f), + receivedMessage = oklch(0.12072754f, 0.0f, 64.32541f), + receivedQuote = oklch(0.22133382f, 0.0f, 64.32541f), ), ) ), - FLOWERS(MR.images.wallpaper_flowers, MR.images.wallpaper_flowers_desktop, "flowers", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#ffE2FFE4"), + FLOWERS(res = MR.images.wallpaper_flowers, resDesktop = MR.images.wallpaper_flowers_desktop, filename = "flowers", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.9838867f, 0.02136218f, 130.21953f), + dark = oklch(0.1800f, 0.0250f, 130f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#ff9CEA59".colorFromReadableHex(), - DefaultTheme.DARK to "#ff31560D".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff36600f".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff31560D".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.91506225f, 0.054591343f, 130.21953f), + DefaultTheme.DARK to oklch(0.3130f, 0.0567f, 130f), + DefaultTheme.SIMPLEX to oklch(0.4415422f, 0.1170956f, 133.8571f), // #ff36600f + DefaultTheme.BLACK to oklch(0.36254883f, 0.10072228f, 132.04506f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#fff1ffe5", - sentQuote = "#ffdcf9c4", - receivedMessage = "#ffF4F8F2", - receivedQuote = "#ffe7ece7", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.9542969f, 0.067714185f, 130.21953f), + sentQuote = oklch(0.9345703f, 0.09861551f, 130.21953f), + receivedMessage = oklch(0.9951172f, 0.010222077f, 130.21953f), + receivedQuote = oklch(0.97402346f, 0.036812846f, 130.21953f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff163521", - sentQuote = "#ff1B5330", - receivedMessage = "#ff242523", - receivedQuote = "#ff353733", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.3130f, 0.0630f, 130f), + sentQuote = oklch(0.3700f, 0.0725f, 130f), + receivedMessage = oklch(0.2560f, 0.0278f, 130f), + receivedQuote = oklch(0.2940f, 0.0320f, 130f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff184739", - sentQuote = "#ff1F6F4B", - receivedMessage = "#ff242523", - receivedQuote = "#ff353733", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.3611755f, 0.05678164f, 170.3752f), // #ff184739 + sentQuote = oklch(0.484029f, 0.09629127f, 159.5568f), // #ff1F6F4B + receivedMessage = oklch(0.2626721f, 0.003936427f, 128.6285f), // #ff242523 + receivedQuote = oklch(0.3334174f, 0.007411477f, 128.7105f), // #ff353733 ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff184739", - sentQuote = "#ff1F6F4B", - receivedMessage = "#ff1c1f1a", - receivedQuote = "#ff282b25", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.24267578f, 0.06739509f, 132.04506f), + sentQuote = oklch(0.3336792f, 0.091792114f, 132.04506f), + receivedMessage = oklch(0.12133789f, 0.0f, 132.04506f), + receivedQuote = oklch(0.2224528f, 0.0f, 132.04506f), ), ) ), - HEARTS(MR.images.wallpaper_hearts, MR.images.wallpaper_hearts_desktop, "hearts", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#ffFDECEC"), + HEARTS(res = MR.images.wallpaper_hearts, resDesktop = MR.images.wallpaper_hearts_desktop, filename = "hearts", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.9780521f, 0.010869741f, 10.569774f), + dark = oklch(0.1800f, 0.0250f, 5f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#fffde0e0".colorFromReadableHex(), - DefaultTheme.DARK to "#ff3c0f0f".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff411010".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff3C0F0F".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.9399476f, 0.030744314f, 10.569774f), + DefaultTheme.DARK to oklch(0.2940f, 0.0567f, 5f), + DefaultTheme.SIMPLEX to oklch(0.2574974f, 0.07614605f, 24.19117f), // #ff411010 + DefaultTheme.BLACK to oklch(0.30926332f, 0.12386322f, 7.8465395f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#fffff4f4", - sentQuote = "#ffffdfdf", - receivedMessage = "#fff8f6f6", - receivedQuote = "#ffefebeb", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.95283204f, 0.023875237f, 10.569774f), + sentQuote = oklch(0.9364258f, 0.032649755f, 10.569774f), + receivedMessage = oklch(0.99121094f, 0.004304409f, 10.569774f), + receivedQuote = oklch(0.9665039f, 0.016754389f, 10.569774f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff301515", - sentQuote = "#ff4C1818", - receivedMessage = "#ff242121", - receivedQuote = "#ff3b3535", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.3130f, 0.0630f, 5f), + sentQuote = oklch(0.3700f, 0.0725f, 5f), + receivedMessage = oklch(0.2560f, 0.0278f, 5f), + receivedQuote = oklch(0.2940f, 0.0320f, 5f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff491A28", - sentQuote = "#ff761F29", - receivedMessage = "#ff242121", - receivedQuote = "#ff3b3535", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.2941874f, 0.07322977f, 4.102547f), // #ff491A28 + sentQuote = oklch(0.3831088f, 0.1201278f, 18.61089f), // #ff761F29 + receivedMessage = oklch(0.2510736f, 0.004554155f, 17.46058f), // #ff242121 + receivedQuote = oklch(0.3352158f, 0.008515606f, 17.58481f), // #ff3b3535 ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff491A28", - sentQuote = "#ff761F29", - receivedMessage = "#ff1f1b1b", - receivedQuote = "#ff2e2626", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.24780273f, 0.085917726f, 7.8465395f), + sentQuote = oklch(0.34072876f, 0.117019944f, 7.8465395f), + receivedMessage = oklch(0.12390137f, 0.0f, 7.8465395f), + receivedQuote = oklch(0.22715251f, 0.0f, 7.8465395f), ), ) ), - KIDS(MR.images.wallpaper_kids, MR.images.wallpaper_kids_desktop, "kids", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#ffdbfdfb"), + KIDS(res = MR.images.wallpaper_kids, resDesktop = MR.images.wallpaper_kids_desktop, filename = "kids", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.98472977f, 0.01831758f, 200.66322f), + dark = oklch(0.18017578f, 0.025585549f, 199.76416f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#ffadeffc".colorFromReadableHex(), - DefaultTheme.DARK to "#ff16404B".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff184753".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff16404B".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.9382386f, 0.035245255f, 200.66322f), + DefaultTheme.DARK to oklch(0.2585798f, 0.043961763f, 199.76416f), + DefaultTheme.SIMPLEX to oklch(0.3716418f, 0.05389406f, 217.7104f), // #ff184753 + DefaultTheme.BLACK to oklch(0.2880891f, 0.049433947f, 192.22177f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#ffeafeff", - sentQuote = "#ffcbf4f7", - receivedMessage = "#fff3fafa", - receivedQuote = "#ffe4efef", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.9599414f, 0.029920436f, 200.66322f), + sentQuote = oklch(0.9388867f, 0.038093355f, 200.66322f), + receivedMessage = oklch(0.9941406f, 0.007004261f, 200.66322f), + receivedQuote = oklch(0.97333986f, 0.024719488f, 200.66322f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff16302F", - sentQuote = "#ff1a4a49", - receivedMessage = "#ff252626", - receivedQuote = "#ff373A39", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.3173828f, 0.05395502f, 199.76416f), + sentQuote = oklch(0.37618583f, 0.062117502f, 199.76416f), + receivedMessage = oklch(0.2585798f, 0.028428389f, 199.76416f), + receivedQuote = oklch(0.29778183f, 0.032692645f, 199.76416f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff1a4745", - sentQuote = "#ff1d6b69", - receivedMessage = "#ff252626", - receivedQuote = "#ff373a39", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.3662882f, 0.04909204f, 191.2229f), // #ff1a4745 + sentQuote = oklch(0.4817563f, 0.07299667f, 192.4874f), // #ff1d6b69 + receivedMessage = oklch(0.2675764f, 0.001466786f, 197.0692f), // #ff252626 + receivedQuote = oklch(0.3451987f, 0.004436687f, 174.2088f), // #ff373a39 ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff1a4745", - sentQuote = "#ff1d6b69", - receivedMessage = "#ff1e1f1f", - receivedQuote = "#ff262b29", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.24645996f, 0.042290688f, 192.22177f), + sentQuote = oklch(0.33888245f, 0.057626568f, 192.22177f), + receivedMessage = oklch(0.12322998f, 0.0f, 192.22177f), + receivedQuote = oklch(0.22592163f, 0.0f, 192.22177f), ), ) ), - SCHOOL(MR.images.wallpaper_school, MR.images.wallpaper_school_desktop, "school", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#ffE7F5FF"), + SCHOOL(res = MR.images.wallpaper_school, resDesktop = MR.images.wallpaper_school_desktop, filename = "school", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.9837532f, 0.010169387f, 225.85442f), + dark = oklch(0.17883301f, 0.024886385f, 251.75946f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#ffCEEBFF".colorFromReadableHex(), - DefaultTheme.DARK to "#ff0F293B".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff112f43".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff0F293B".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.94544077f, 0.029549051f, 225.85442f), + DefaultTheme.DARK to oklch(0.2515276f, 0.05627329f, 251.75946f), + DefaultTheme.SIMPLEX to oklch(0.2929108f, 0.05102392f, 240.8139f), // #ff112f43 + DefaultTheme.BLACK to oklch(0.27668023f, 0.09167254f, 255.17474f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#ffeef9ff", - sentQuote = "#ffD6EDFA", - receivedMessage = "#ffF3F5F9", - receivedQuote = "#ffe4e8ee", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.95765626f, 0.026757836f, 225.85442f), + sentQuote = oklch(0.93779296f, 0.038093355f, 225.85442f), + receivedMessage = oklch(0.9941406f, 0.0036548972f, 225.85442f), + receivedQuote = oklch(0.9731055f, 0.016901612f, 225.85442f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff172833", - sentQuote = "#ff1C3E4F", - receivedMessage = "#ff26282c", - receivedQuote = "#ff393c40", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.31274414f, 0.06245613f, 251.75946f), + sentQuote = oklch(0.37013462f, 0.07182455f, 251.75946f), + receivedMessage = oklch(0.25535366f, 0.02765154f, 251.75946f), + receivedQuote = oklch(0.29361397f, 0.031799268f, 251.75946f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff1A3C5D", - sentQuote = "#ff235b80", - receivedMessage = "#ff26282c", - receivedQuote = "#ff393c40", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.3481476f, 0.07023843f, 249.9258f), // #ff1A3C5D + sentQuote = oklch(0.4520089f, 0.08394515f, 241.1934f), // #ff235b80 + receivedMessage = oklch(0.2764251f, 0.007910611f, 264.4375f), // #ff26282c + receivedQuote = oklch(0.3548081f, 0.00803458f, 255.5451f), // #ff393c40 ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff1A3C5D", - sentQuote = "#ff235b80", - receivedMessage = "#ff1d1e22", - receivedQuote = "#ff292b2f", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.24328613f, 0.08060831f, 255.17474f), + sentQuote = oklch(0.33451843f, 0.10981243f, 255.17474f), + receivedMessage = oklch(0.12164307f, 0.0f, 255.17474f), + receivedQuote = oklch(0.22301228f, 0.0f, 255.17474f), ), ) ), - TRAVEL(MR.images.wallpaper_travel, MR.images.wallpaper_travel_desktop, "travel", 0.5f, 0.8f, - wallpaperBackgrounds(light = "#fff9eeff"), + TRAVEL(res = MR.images.wallpaper_travel, resDesktop = MR.images.wallpaper_travel_desktop, filename = "travel", scale = 0.5f, scaleDesktop = 0.8f, + wallpaperBackgrounds( + light = oklch(0.9835678f, 0.01424849f, 325.37686f), + dark = oklch(0.17980957f, 0.025278661f, 316.56534f), + ), tint = mapOf( - DefaultTheme.LIGHT to "#ffeedbfe".colorFromReadableHex(), - DefaultTheme.DARK to "#ff311E48".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff35204e".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff311E48".colorFromReadableHex() + DefaultTheme.LIGHT to oklch(0.9464822f, 0.035007913f, 325.37686f), + DefaultTheme.DARK to oklch(0.27441406f, 0.0701345f, 316.56534f), + DefaultTheme.SIMPLEX to oklch(0.2948376f, 0.08277514f, 302.7197f), // #ff35204e + DefaultTheme.BLACK to oklch(0.2714336f, 0.1344262f, 313.97916f) ), mapOf( - DefaultTheme.LIGHT to ThemeColors( - sentMessage = "#fffcf6ff", - sentQuote = "#fff2e0fc", - receivedMessage = "#ffF6F4F7", - receivedQuote = "#ffede9ee", + DefaultTheme.LIGHT to ThemeColorsP3( + sentMessage = oklch(0.9571094f, 0.032885246f, 325.37686f), + sentQuote = oklch(0.9408496f, 0.043789558f, 325.37686f), + receivedMessage = oklch(0.9921875f, 0.0067495108f, 325.37686f), + receivedQuote = oklch(0.9701172f, 0.024161799f, 325.37686f), ), - DefaultTheme.DARK to ThemeColors( - sentMessage = "#ff33263B", - sentQuote = "#ff53385E", - receivedMessage = "#ff272528", - receivedQuote = "#ff3B373E", + DefaultTheme.DARK to ThemeColorsP3( + sentMessage = oklch(0.31201172f, 0.066930376f, 316.56534f), + sentQuote = oklch(0.36866978f, 0.07696993f, 316.56534f), + receivedMessage = oklch(0.25535366f, 0.028087402f, 316.56534f), + receivedQuote = oklch(0.2931257f, 0.03230051f, 316.56534f), ), - DefaultTheme.SIMPLEX to ThemeColors( - sentMessage = "#ff3C255D", - sentQuote = "#ff623485", - receivedMessage = "#ff26273B", - receivedQuote = "#ff3A394F", + DefaultTheme.SIMPLEX to ThemeColorsP3( + sentMessage = oklch(0.3234681f, 0.09690244f, 299.9634f), // #ff3C255D + sentQuote = oklch(0.4226042f, 0.1341495f, 307.8573f), // #ff623485 + receivedMessage = oklch(0.2812692f, 0.03669397f, 281.5485f), // #ff26273B + receivedQuote = oklch(0.355058f, 0.03791292f, 286.3773f), // #ff3A394F ), - DefaultTheme.BLACK to ThemeColors( - sentMessage = "#ff3C255D", - sentQuote = "#ff623485", - receivedMessage = "#ff231f23", - receivedQuote = "#ff2c2931", + DefaultTheme.BLACK to ThemeColorsP3( + sentMessage = oklch(0.2446289f, 0.09382912f, 313.97916f), + sentQuote = oklch(0.33636475f, 0.12779526f, 313.97916f), + receivedMessage = oklch(0.12231445f, 0.0f, 313.97916f), + receivedQuote = oklch(0.22424316f, 0.0f, 313.97916f), ), ) ); @@ -255,12 +272,15 @@ enum class PresetWallpaper( } } -fun wallpaperBackgrounds(light: String): Map = +fun wallpaperBackgrounds( + light: Color, + dark: Color, +): Map = mapOf( - DefaultTheme.LIGHT to light.colorFromReadableHex(), - DefaultTheme.DARK to "#ff121212".colorFromReadableHex(), - DefaultTheme.SIMPLEX to "#ff111528".colorFromReadableHex(), - DefaultTheme.BLACK to "#ff070707".colorFromReadableHex() + DefaultTheme.LIGHT to light, + DefaultTheme.DARK to dark, + DefaultTheme.SIMPLEX to oklch(0.2024453f, 0.03849037f, 273.4875f), // #ff111528 + DefaultTheme.BLACK to oklch(0f, 0f, 0f) // #ff000000 — pure black for hyper-contrast theme ) @Serializable