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