diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
index 4f6b93bd2e..9aa8eeed13 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
@@ -1,5 +1,6 @@
-// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
package org.yuzu.yuzu_emu.features.settings.model
@@ -91,6 +92,7 @@ object Settings {
const val PREF_THEME = "Theme"
const val PREF_THEME_MODE = "ThemeMode"
const val PREF_BLACK_BACKGROUNDS = "BlackBackgrounds"
+ const val PREF_STATIC_THEME_COLOR = "StaticThemeColor"
enum class EmulationOrientation(val int: Int) {
Unspecified(0),
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 3ea5f50081..7fa22b272f 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -1,11 +1,12 @@
-// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.features.settings.ui
import android.annotation.SuppressLint
import android.os.Build
import android.widget.Toast
+import androidx.preference.PreferenceManager
import org.yuzu.yuzu_emu.NativeLibrary
import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.YuzuApplication
@@ -27,6 +28,7 @@ import org.yuzu.yuzu_emu.features.settings.model.StringSetting
import org.yuzu.yuzu_emu.features.settings.model.view.*
import org.yuzu.yuzu_emu.utils.InputHandler
import org.yuzu.yuzu_emu.utils.NativeConfig
+import androidx.core.content.edit
class SettingsFragmentPresenter(
private val settingsViewModel: SettingsViewModel,
@@ -916,6 +918,26 @@ class SettingsFragmentPresenter(
}
}
+ val staticThemeColor: AbstractIntSetting = object : AbstractIntSetting {
+ val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
+ override fun getInt(needsGlobal: Boolean): Int =
+ preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0)
+ override fun setInt(value: Int) {
+ preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, value) }
+ settingsViewModel.setShouldRecreate(true)
+ }
+
+ override val key: String = Settings.PREF_STATIC_THEME_COLOR
+ override val isRuntimeModifiable: Boolean = true
+ override fun getValueAsString(needsGlobal: Boolean): String =
+ preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0).toString()
+ override val defaultValue: Any = 0
+ override fun reset() {
+ preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, 0) }
+ settingsViewModel.setShouldRecreate(true)
+ }
+ }
+
add(
SingleChoiceSetting(
themeMode,
@@ -925,6 +947,15 @@ class SettingsFragmentPresenter(
)
)
+ add(
+ SingleChoiceSetting(
+ staticThemeColor,
+ titleId = R.string.static_theme_color,
+ choicesId = R.array.staticThemeNames,
+ valuesId = R.array.staticThemeValues
+ )
+ )
+
val blackBackgrounds: AbstractBooleanSetting = object : AbstractBooleanSetting {
override fun getBoolean(needsGlobal: Boolean): Boolean =
BooleanSetting.BLACK_BACKGROUNDS.getBoolean()
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
index 757463a0b5..a0de1bbd8b 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
@@ -1,5 +1,5 @@
-// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.ui.main
@@ -67,6 +67,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
val splashScreen = installSplashScreen()
splashScreen.setKeepOnScreenCondition { !DirectoryInitialization.areDirectoriesReady }
+ ThemeHelper.ThemeChangeListener(this)
ThemeHelper.setTheme(this)
super.onCreate(savedInstanceState)
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
index 6f7f40e436..89ec3672ca 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
@@ -1,8 +1,9 @@
-// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.utils
+import android.content.SharedPreferences
import android.content.res.Configuration
import android.graphics.Color
import android.os.Build
@@ -16,19 +17,26 @@ import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
import org.yuzu.yuzu_emu.ui.main.ThemeProvider
+import androidx.preference.PreferenceManager
+import org.yuzu.yuzu_emu.YuzuApplication
+import org.yuzu.yuzu_emu.features.settings.model.Settings
object ThemeHelper {
const val SYSTEM_BAR_ALPHA = 0.9f
+ // Listener that detects if the theme keys are being changed from the setting menu and recreates the activity
+ private var listener: SharedPreferences.OnSharedPreferenceChangeListener? = null
+ private val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
+
fun setTheme(activity: AppCompatActivity) {
setThemeMode(activity)
when (Theme.from(IntSetting.THEME.getInt())) {
- Theme.Default -> activity.setTheme(R.style.Theme_Yuzu_Main)
+ Theme.Default -> activity.setTheme(getSelectedStaticThemeColor())
Theme.MaterialYou -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
activity.setTheme(R.style.Theme_Yuzu_Main_MaterialYou)
} else {
- activity.setTheme(R.style.Theme_Yuzu_Main)
+ activity.setTheme(getSelectedStaticThemeColor())
}
}
}
@@ -41,6 +49,22 @@ object ThemeHelper {
}
}
+ private fun getSelectedStaticThemeColor(): Int {
+ val themeIndex = preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0)
+ val themes = arrayOf(
+ R.style.Theme_Yuzu_Main_Violet,
+ R.style.Theme_Yuzu_Main_Blue,
+ R.style.Theme_Yuzu_Main_Cyan,
+ R.style.Theme_Yuzu_Main_Red,
+ R.style.Theme_Yuzu_Main_Green,
+ R.style.Theme_Yuzu_Main_Yellow,
+ R.style.Theme_Yuzu_Main_Orange,
+ R.style.Theme_Yuzu_Main_Pink,
+ R.style.Theme_Yuzu_Main_Gray
+ )
+ return themes[themeIndex]
+ }
+
@ColorInt
fun getColorWithOpacity(@ColorInt color: Int, alphaFactor: Float): Int {
return Color.argb(
@@ -93,6 +117,16 @@ object ThemeHelper {
windowController.isAppearanceLightStatusBars = false
windowController.isAppearanceLightNavigationBars = false
}
+
+ fun ThemeChangeListener(activity: AppCompatActivity) {
+ listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
+ val relevantKeys = listOf(Settings.PREF_STATIC_THEME_COLOR, Settings.PREF_THEME_MODE, Settings.PREF_BLACK_BACKGROUNDS)
+ if (key in relevantKeys) {
+ activity.recreate()
+ }
+ }
+ preferences.registerOnSharedPreferenceChangeListener(listener)
+ }
}
enum class Theme(val int: Int) {
diff --git a/src/android/app/src/main/res/drawable/premium_background.xml b/src/android/app/src/main/res/drawable/premium_background.xml
deleted file mode 100644
index c9c41ddbe0..0000000000
--- a/src/android/app/src/main/res/drawable/premium_background.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/src/android/app/src/main/res/layout/activity_main.xml b/src/android/app/src/main/res/layout/activity_main.xml
index ad426457f6..5f59138607 100644
--- a/src/android/app/src/main/res/layout/activity_main.xml
+++ b/src/android/app/src/main/res/layout/activity_main.xml
@@ -23,6 +23,7 @@
+ app:cardElevation="0dp">
diff --git a/src/android/app/src/main/res/layout/fragment_settings.xml b/src/android/app/src/main/res/layout/fragment_settings.xml
index 110c70eef6..66cfebe96d 100644
--- a/src/android/app/src/main/res/layout/fragment_settings.xml
+++ b/src/android/app/src/main/res/layout/fragment_settings.xml
@@ -19,7 +19,9 @@
style="?attr/collapsingToolbarLayoutMediumStyle"
android:layout_width="match_parent"
android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
- app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
+ app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
+ app:contentScrim="?attr/colorOnSurfaceInverse"
+ app:scrimVisibleHeightTrigger="100dp">
- #A7DDEC
- #003399
- #31323F
- #D1E4FF
- #BAC8DB
- #253140
- #3B4858
- #D6E4F7
- #D6BEE5
- #3A2948
- #524060
- #F2DAFF
+
+ #B7C4FF
+ #002681
+ #0039B5
+ #DCE1FF
+ #C2C5DD
+ #2B3042
+ #424659
+ #DEE1F9
+ #E4BADA
+ #43273F
+ #5C3D56
+ #FFD7F5
+ #1B1B1F
+ #E4E1E6
+ #1B1B1F
+ #E4E1E6
+ #45464F
+ #C6C5D0
+ #90909A
+ #1B1B1F
+ #E4E1E6
+ #154FE2
+ #B7C4FF
+
+
+ #B7FFF7
+ #007D81
+ #00A0B5
+ #DCFFFB
+ #C2DDDB
+ #2B3F42
+ #425659
+ #DEF9F7
+ #BAE1E4
+ #274341
+ #3D5C5C
+ #D7FFFE
+ #1B1F1E
+ #E1E6E5
+ #1B1F1F
+ #E1E6E5
+ #454F4D
+ #C5D0CF
+ #909A98
+ #1B1F1F
+ #E1E6E5
+ #15E2D1
+ #B7C4FF
+
+
+ #FFB7B7
+ #810000
+ #B50000
+ #FFDCDC
+ #DDC2C2
+ #422B2B
+ #594242
+ #F9DEDE
+ #E4BABA
+ #432727
+ #5C3D3D
+ #FFD7D7
+ #1F1B1B
+ #E6E1E1
+ #1F1B1B
+ #E6E1E1
+ #4F4545
+ #D0C5C5
+ #9A9090
+ #1F1B1B
+ #E6E1E1
+ #E21515
+ #FFB7B7
+
+
+ #D0FFB7
+ #368100
+ #1BB500
+ #E5FFDC
+ #CDDDC2
+ #32422B
+ #4B5942
+ #E9F9DE
+ #CAE4BA
+ #2F4327
+ #455C3D
+ #E8FFD7
+ #1C1F1B
+ #E2E6E1
+ #1C1F1B
+ #E2E6E1
+ #494F45
+ #C9D0C5
+ #959A90
+ #1D1F1B
+ #E2E6E1
+ #82E215
+ #CDFFB7
+
+
+ #FFEDB7
+ #817F00
+ #B5A300
+ #FFFDDC
+ #DDDDC2
+ #42422B
+ #595942
+ #F7F9DE
+ #E0E4BA
+ #424327
+ #5C583D
+ #FFFBD7
+ #1F1F1B
+ #E6E6E1
+ #1F1F1B
+ #E6E5E1
+ #4F4E45
+ #D0D0C5
+ #9A9990
+ #1B1B1F
+ #E6E6E1
+ #DBE215
+ #FFFBB7
+
+
+ #FFCBB7
+ #812500
+ #B55400
+ #FFEBDC
+ #DDCDC2
+ #42342B
+ #594A42
+ #F9E6DE
+ #E4CCBA
+ #433127
+ #5C463D
+ #FFEFD7
+ #1F1D1B
+ #E6E3E1
+ #1F1D1B
+ #E6E3E1
+ #4F4A45
+ #D0CAC5
+ #9A9490
+ #1F1D1B
+ #E6E3E1
+ #E26E15
+ #FFD4B7
+
+
+ #DAB7FF
+ #350068
+ #5A00B5
+ #F4DCFF
+ #D2C2DD
+ #342B42
+ #594265
+ #E9DEF9
+ #DACCE4
+ #402743
+ #5C4E5C
+ #FFD7FF
+ #1F1B1F
+ #E6E4E6
+ #1F1B1F
+ #E6E4E6
+ #4F454F
+ #D0C6D0
+ #9A909A
+ #1F1B1F
+ #E6E4E6
+ #B154E2
+ #DAB7FF
+
+
+ #FFB7C5
+ #81001E
+ #B50033
+ #FFDCE6
+ #DDC2C7
+ #422B34
+ #594249
+ #FCF9DEE6
+ #E4BAC4
+ #432730
+ #5C3D49
+ #FFD7DF
+ #1F1B1C
+ #E6E1E2
+ #1F1B1C
+ #E6E1E2
+ #4F4547
+ #D0C5C8
+ #9A9093
+ #1F1B1C
+ #E6E1E2
+ #E21556
+ #FFB7D6
+
+
+ #B7B7B7
+ #2B2B2B
+ #424242
+ #E1E1E1
+ #C2C2C2
+ #424242
+ #656565
+ #EDEDED
+ #DADADA
+ #3F3F3F
+ #565656
+ #F5F5F5
+ #1B1B1B
+ #E4E4E4
+ #1B1B1B
+ #E4E4E4
+ #454545
+ #C6C6C6
+ #909090
+ #1B1B1B
+ #E4E4E4
+ #B7B7B7
+ #B7B7B7
+
+
+ #C6C5D0
#FFB4AB
#93000A
#690005
#FFDAD6
- #1A1C1E
- #E2E2E6
- #1B1B1D
- #E2E2E6
- #26282C
- #C3C7CF
- #8C9199
- #1A1C1E
- #E2E2E6
- #0062A2
#000000
- #9DCAFF
- #42474E
+ #000000
- #840099
- #005AE1
-
-
+
\ No newline at end of file
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 1bd6455b4c..99013e0485 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -275,6 +275,29 @@
- 3
+
+ - Violet (Default)
+ - Blue
+ - Cyan
+ - Red
+ - Green
+ - Yellow
+ - Orange
+ - Pink
+ - Gray
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+ - 7
+ - 8
+
+
- @string/auto
- @string/slider_default
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 02683f37e4..7ff8929a36 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -644,6 +644,9 @@
Black backgrounds
When using the dark theme, apply black backgrounds.
+
+ Theme Color
+
Picture in Picture
Minimize window when placed in the background
diff --git a/src/android/app/src/main/res/values/styles.xml b/src/android/app/src/main/res/values/styles.xml
index 4f5de73609..be49a1b348 100644
--- a/src/android/app/src/main/res/values/styles.xml
+++ b/src/android/app/src/main/res/values/styles.xml
@@ -18,19 +18,148 @@
- gone
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/android/app/src/main/res/values/themes.xml b/src/android/app/src/main/res/values/themes.xml
index 60388b71e2..20b789ec45 100644
--- a/src/android/app/src/main/res/values/themes.xml
+++ b/src/android/app/src/main/res/values/themes.xml
@@ -2,45 +2,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/android/app/src/main/res/values/yuzu_colors.xml b/src/android/app/src/main/res/values/yuzu_colors.xml
index 5b7d189dc9..a45b95f85c 100644
--- a/src/android/app/src/main/res/values/yuzu_colors.xml
+++ b/src/android/app/src/main/res/values/yuzu_colors.xml
@@ -1,37 +1,264 @@
- #990E00
- #FFFFFF
- #EEDEDD
- #400200
- #775650
- #FFFFFF
- #FFDAD4
- #2C1511
- #6F5C2E
- #FFFFFF
- #FAE0A6
- #251A00
+
+ #154FE2
+ #DCE1FF
+ #001551
+ #595D72
+ #DEE1F9
+ #161B2C
+ #75546F
+ #FFD7F5
+ #2C1229
+ #FEFBFF
+ #1B1B1F
+ #FEFBFF
+ #1B1B1F
+ #E2E1EC
+ #45464F
+ #767680
+ #F2F0F4
+ #303034
+ #B7C4FF
+ #154FE2
+
+
+ #E21515
+ #FFDCDC
+ #510000
+ #725959
+ #F9DEDE
+ #2C1616
+ #755454
+ #FFD7D7
+ #2C1212
+ #FFFBFB
+ #1F1B1B
+ #FFFBFB
+ #1F1B1B
+ #ECE1E1
+ #4F4545
+ #807676
+ #F4F0F0
+ #343030
+ #FFB7B7
+ #E21515
+
+
+ #1FAA59
+ #C6F6D5
+ #012D12
+ #4D8066
+ #D4EDE1
+ #1A3328
+ #3D7267
+ #BCECE0
+ #1C4039
+ #FBFFFC
+ #1B1F1B
+ #FBFFFC
+ #1B1F1B
+ #E1ECE1
+ #454F46
+ #768077
+ #F0F4F0
+ #303430
+ #B7FFB8
+ #1FAA59
+
+
+ #15E2D1
+ #DCFFFE
+ #005148
+ #595D72
+ #DEF8F9
+ #162C2C
+ #75546F
+ #D7FCFF
+ #122C2C
+ #FBFFFF
+ #1B1F1F
+ #FBFFFF
+ #1B1F1F
+ #E1ECEB
+ #454F4F
+ #76807F
+ #F0F4F4
+ #303434
+ #B7FFF7
+ #15E2C3
+
+
+ #5DE215
+ #E9FFDC
+ #185100
+ #595D72
+ #E9F9DE
+ #1F2C16
+ #547564
+ #D7FFEA
+ #122C20
+ #FBFFFB
+ #1C1F1B
+ #FBFFFB
+ #1B1F1B
+ #E2ECE1
+ #464F45
+ #778076
+ #F0F4F0
+ #313430
+ #BCFFB7
+ #41E215
+
+
+ #CDE2C015
+ #FEFFDC
+ #4C5100
+ #717259
+ #F8F9DE
+ #2C2C16
+ #757254
+ #FFFDD7
+ #2C2B12
+ #FFFFFB
+ #1F1F1B
+ #FFFFFB
+ #1F1F1B
+ #ECEBE1
+ #4E4F45
+ #7F8076
+ #F4F4F0
+ #343430
+ #FFFEB7
+ #E2CE15
+
+
+ #E26E15
+ #FFECDC
+ #512600
+ #726759
+ #F9EADE
+ #2C1E16
+ #756354
+ #FFF0D7
+ #2C2012
+ #FFFDFB
+ #1F1D1B
+ #FFFDFB
+ #1F1D1B
+ #ECE6E1
+ #4F4A45
+ #807B76
+ #F4F2F0
+ #343230
+ #FFD9B7
+ #E27F15
+
+
+ #DB15E2
+ #FDDCFF
+ #4E0051
+ #6B5972
+ #F6DEF9
+ #26162C
+ #6E5475
+ #F6D7FF
+ #29122C
+ #FEFBFF
+ #1E1B1F
+ #FEFBFF
+ #1D1B1F
+ #E7E1EC
+ #4B454F
+ #7A7680
+ #F2F0F4
+ #323034
+ #E3B7FF
+ #8215E2
+
+
+ #E21556
+ #FF73A4
+ #510023
+ #725962
+ #F9DEE9
+ #2C1620
+ #755463
+ #FFD7E7
+ #2C121A
+ #FF9CB5
+ #1F1B1C
+ #FFFBFC
+ #1F1B1C
+ #ECE1E4
+ #4F4547
+ #807679
+ #F4F0F1
+ #343031
+ #FFB7D0
+ #E21545
+
+
+ #9E9E9E
+ #F5F5F5
+ #1E1E1E
+ #BDBDBD
+ #E0E0E0
+ #424242
+ #757575
+ #BDBDBD
+ #1E1E1E
+ #FAFAFA
+ #1E1E1E
+ #FAFAFA
+ #1E1E1E
+ #E0E0E0
+ #424242
+ #424242
+ #FAFAFA
+ #1E1E1E
+ #BDBDBD
+ #9E9E9E
+
+
+ #C6C5D0
#BA1A1A
#FFDAD6
#FFFFFF
#410002
- #FFFBFF
- #201A19
- #FFFBFF
- #201A19
- #F5DDD9
- #534340
- #857370
- #FBEEEB
- #362F2D
- #FFB4A6
#000000
- #B52612
- #D8C2BE
-
- #99FFE1
- #76C5FF
+ #000000
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF