Browse Source

Add Nord Theme (#10308)

* Add Nord Theme

* update

* update error color

* update comment
Luqman 1 year ago
parent
commit
bce6af62fc

+ 1 - 0
app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt

@@ -9,6 +9,7 @@ enum class AppTheme(val titleRes: StringResource?) {
     GREEN_APPLE(MR.strings.theme_greenapple),
     LAVENDER(MR.strings.theme_lavender),
     MIDNIGHT_DUSK(MR.strings.theme_midnightdusk),
+    NORD(MR.strings.theme_nord),
     STRAWBERRY_DAIQUIRI(MR.strings.theme_strawberrydaiquiri),
     TAKO(MR.strings.theme_tako),
     TEALTURQUOISE(MR.strings.theme_tealturquoise),

+ 2 - 0
app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt

@@ -12,6 +12,7 @@ import eu.kanade.presentation.theme.colorscheme.GreenAppleColorScheme
 import eu.kanade.presentation.theme.colorscheme.LavenderColorScheme
 import eu.kanade.presentation.theme.colorscheme.MidnightDuskColorScheme
 import eu.kanade.presentation.theme.colorscheme.MonetColorScheme
+import eu.kanade.presentation.theme.colorscheme.NordColorScheme
 import eu.kanade.presentation.theme.colorscheme.StrawberryColorScheme
 import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme
 import eu.kanade.presentation.theme.colorscheme.TakoColorScheme
@@ -47,6 +48,7 @@ private fun getThemeColorScheme(
         AppTheme.GREEN_APPLE -> GreenAppleColorScheme
         AppTheme.LAVENDER -> LavenderColorScheme
         AppTheme.MIDNIGHT_DUSK -> MidnightDuskColorScheme
+        AppTheme.NORD -> NordColorScheme
         AppTheme.STRAWBERRY_DAIQUIRI -> StrawberryColorScheme
         AppTheme.TAKO -> TakoColorScheme
         AppTheme.TEALTURQUOISE -> TealTurqoiseColorScheme

+ 72 - 0
app/src/main/java/eu/kanade/presentation/theme/colorscheme/NordColorScheme.kt

@@ -0,0 +1,72 @@
+package eu.kanade.presentation.theme.colorscheme
+
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.ui.graphics.Color
+
+/**
+ * Colors for Nord theme
+ * https://www.nordtheme.com/docs/colors-and-palettes
+ * for the light theme, the primary color is switched with the tertiary for better contrast in some case
+ */
+internal object NordColorScheme : BaseColorScheme() {
+
+    override val darkScheme = darkColorScheme(
+        primary = Color(0xFF88C0D0),
+        onPrimary = Color(0xFF2E3440),
+        primaryContainer = Color(0xFF88C0D0),
+        onPrimaryContainer = Color(0xFF2E3440),
+        inversePrimary = Color(0xFF397E91),
+        secondary = Color(0xFF81A1C1),
+        onSecondary = Color(0xFF2E3440),
+        secondaryContainer = Color(0xFF81A1C1),
+        onSecondaryContainer = Color(0xFF2E3440),
+        tertiary = Color(0xFF5E81AC),
+        onTertiary = Color(0xFF000000),
+        tertiaryContainer = Color(0xFF5E81AC),
+        onTertiaryContainer = Color(0xFF000000),
+        background = Color(0xFF2E3440),
+        onBackground = Color(0xFFECEFF4),
+        surface = Color(0xFF3B4252),
+        onSurface = Color(0xFFECEFF4),
+        surfaceVariant = Color(0xFF2E3440),
+        onSurfaceVariant = Color(0xFFECEFF4),
+        surfaceTint = Color(0xFF88C0D0),
+        inverseSurface = Color(0xFFD8DEE9),
+        inverseOnSurface = Color(0xFF2E3440),
+        outline = Color(0xFF6d717b),
+        outlineVariant = Color(0xFF90939a),
+        onError = Color(0xFF2E3440),
+        errorContainer = Color(0xFFBF616A),
+        onErrorContainer = Color(0xFF000000),
+    )
+
+    override val lightScheme = lightColorScheme(
+        primary = Color(0xFF5E81AC),
+        onPrimary = Color(0xFF000000),
+        primaryContainer = Color(0xFF5E81AC),
+        onPrimaryContainer = Color(0xFF000000),
+        inversePrimary = Color(0xFF8CA8CD),
+        secondary = Color(0xFF81A1C1),
+        onSecondary = Color(0xFF2E3440),
+        secondaryContainer = Color(0xFF81A1C1),
+        onSecondaryContainer = Color(0xFF2E3440),
+        tertiary = Color(0xFF88C0D0),
+        onTertiary = Color(0xFF2E3440),
+        tertiaryContainer = Color(0xFF88C0D0),
+        onTertiaryContainer = Color(0xFF2E3440),
+        background = Color(0xFFECEFF4),
+        onBackground = Color(0xFF2E3440),
+        surface = Color(0xFFE5E9F0),
+        onSurface = Color(0xFF2E3440),
+        surfaceVariant = Color(0xFFffffff),
+        onSurfaceVariant = Color(0xFF2E3440),
+        surfaceTint = Color(0xFF5E81AC),
+        inverseSurface = Color(0xFF3B4252),
+        inverseOnSurface = Color(0xFFECEFF4),
+        outline = Color(0xFF2E3440),
+        onError = Color(0xFFECEFF4),
+        errorContainer = Color(0xFFBF616A),
+        onErrorContainer = Color(0xFF000000),
+    )
+}

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt

@@ -26,6 +26,9 @@ interface ThemingDelegate {
                 AppTheme.MIDNIGHT_DUSK -> {
                     resIds += R.style.Theme_Tachiyomi_MidnightDusk
                 }
+                AppTheme.NORD -> {
+                    resIds += R.style.Theme_Tachiyomi_Nord
+                }
                 AppTheme.STRAWBERRY_DAIQUIRI -> {
                     resIds += R.style.Theme_Tachiyomi_StrawberryDaiquiri
                 }

+ 31 - 0
app/src/main/res/values/themes.xml

@@ -333,6 +333,37 @@
         <item name="colorPrimaryInverse">@color/tidalwave_primaryInverse</item>
     </style>
 
+    <!--== Nord Theme ==-->
+    <style name="Theme.Tachiyomi.Nord">
+        <!-- Theme Colors -->
+        <item name="colorPrimary">@color/nord_primary</item>
+        <item name="colorOnPrimary">@color/nord_onPrimary</item>
+        <item name="colorPrimaryContainer">@color/nord_primaryContainer</item>
+        <item name="colorOnPrimaryContainer">@color/nord_onPrimaryContainer</item>
+        <item name="colorSecondary">@color/nord_secondary</item>
+        <item name="colorOnSecondary">@color/nord_onSecondary</item>
+        <item name="colorSecondaryContainer">@color/nord_secondaryContainer</item>
+        <item name="colorOnSecondaryContainer">@color/nord_onSecondaryContainer</item>
+        <item name="colorTertiary">@color/nord_tertiary</item>
+        <item name="colorOnTertiary">@color/nord_onTertiary</item>
+        <item name="colorTertiaryContainer">@color/nord_tertiaryContainer</item>
+        <item name="colorOnTertiaryContainer">@color/nord_onTertiaryContainer</item>
+        <item name="android:colorBackground">@color/nord_background</item>
+        <item name="colorOnBackground">@color/nord_onBackground</item>
+        <item name="colorSurface">@color/nord_surface</item>
+        <item name="colorOnSurface">@color/nord_onSurface</item>
+        <item name="colorSurfaceVariant">@color/nord_surfaceVariant</item>
+        <item name="colorOnSurfaceVariant">@color/nord_onSurfaceVariant</item>
+        <item name="colorOutline">@color/nord_outline</item>
+        <item name="colorOnSurfaceInverse">@color/nord_inverseOnSurface</item>
+        <item name="colorSurfaceInverse">@color/nord_inverseSurface</item>
+        <item name="colorPrimaryInverse">@color/nord_primaryInverse</item>
+        <item name="colorOnError">@color/nord_onError</item>
+        <item name="colorErrorContainer">@color/nord_errorContainer</item>
+        <item name="colorOnErrorContainer">@color/nord_onErrorContainer</item>
+        <item name="elevationOverlayColor">@color/nord_elevationOverlay</item>
+    </style>
+    
     <!--== AMOLED Mode Overlay ==-->
     <style name="ThemeOverlay.Tachiyomi.Amoled" parent="" />
 

+ 1 - 0
i18n/src/commonMain/resources/MR/base/strings.xml

@@ -225,6 +225,7 @@
     <string name="theme_greenapple">Green Apple</string>
     <string name="theme_lavender">Lavender</string>
     <string name="theme_midnightdusk">Midnight Dusk</string>
+    <string name="theme_nord">Nord</string>
     <string name="theme_strawberrydaiquiri">Strawberry Daiquiri</string>
     <string name="theme_tako">Tako</string>
     <string name="theme_tealturquoise">Teal &amp; Turquoise</string>

+ 30 - 0
presentation-core/src/main/res/values-night/colors_nord.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--https://www.nordtheme.com/docs/colors-and-palettes-->
+<resources>
+    <color name="nord_primary">#88C0D0</color>
+    <color name="nord_onPrimary">#2E3440</color>
+    <color name="nord_primaryContainer">#88C0D0</color>
+    <color name="nord_onPrimaryContainer">#2E3440</color>
+    <color name="nord_secondary">#81A1C1</color>
+    <color name="nord_onSecondary">#2E3440</color>
+    <color name="nord_secondaryContainer">#81A1C1</color>
+    <color name="nord_onSecondaryContainer">#2E3440</color>
+    <color name="nord_tertiary">#5E81AC</color>
+    <color name="nord_onTertiary">#000000</color>
+    <color name="nord_tertiaryContainer">#5E81AC</color>
+    <color name="nord_onTertiaryContainer">#000000</color>
+    <color name="nord_background">#2E3440</color>
+    <color name="nord_onBackground">#ECEFF4</color>
+    <color name="nord_surface">#3B4252</color>
+    <color name="nord_onSurface">#ECEFF4</color>
+    <color name="nord_surfaceVariant">#2E3440</color>
+    <color name="nord_onSurfaceVariant">#ECEFF4</color>
+    <color name="nord_outline">#D8DEE9</color>
+    <color name="nord_inverseOnSurface">#2E3440</color>
+    <color name="nord_inverseSurface">#D8DEE9</color>
+    <color name="nord_primaryInverse">#397E91</color>
+    <color name="nord_elevationOverlay">#434C5E</color>
+    <color name="nord_onError">#2E3440</color>
+    <color name="nord_errorContainer">#BF616A</color>
+    <color name="nord_onErrorContainer">#000000</color>
+</resources>

+ 31 - 0
presentation-core/src/main/res/values/colors_nord.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--https://www.nordtheme.com/docs/colors-and-palettes-->
+<!--for the light theme, the primary color is switched with the tertiary for better contrast in some case-->
+<resources>
+    <color name="nord_primary">#5E81AC</color>
+    <color name="nord_onPrimary">#000000</color>
+    <color name="nord_primaryContainer">#5E81AC</color>
+    <color name="nord_onPrimaryContainer">#000000</color>
+    <color name="nord_secondary">#81A1C1</color>
+    <color name="nord_onSecondary">#2E3440</color>
+    <color name="nord_secondaryContainer">#81A1C1</color>
+    <color name="nord_onSecondaryContainer">#2E3440</color>
+    <color name="nord_tertiary">#88C0D0</color>
+    <color name="nord_onTertiary">#2E3440</color>
+    <color name="nord_tertiaryContainer">#88C0D0</color>
+    <color name="nord_onTertiaryContainer">#2E3440</color>
+    <color name="nord_background">#ECEFF4</color>
+    <color name="nord_onBackground">#2E3440</color>
+    <color name="nord_surface">#E5E9F0</color>
+    <color name="nord_onSurface">#2E3440</color>
+    <color name="nord_surfaceVariant">#ffffff</color>
+    <color name="nord_onSurfaceVariant">#2E3440</color>
+    <color name="nord_outline">#4C566A</color>
+    <color name="nord_inverseOnSurface">#ECEFF4</color>
+    <color name="nord_inverseSurface">#3B4252</color>
+    <color name="nord_primaryInverse">#8CA8CD</color>
+    <color name="nord_elevationOverlay">#D8DEE9</color>
+    <color name="nord_onError">#ECEFF4</color>
+    <color name="nord_errorContainer">#BF616A</color>
+    <color name="nord_onErrorContainer">#000000</color>
+</resources>