Themeing improvements

- Add Tertiary color
- Add theme display from Tachiyomi
- Show color changes in theme display
This commit is contained in:
Syer10
2022-11-10 13:16:10 -05:00
parent 38334cbedd
commit f3e455b007
10 changed files with 428 additions and 84 deletions

View File

@@ -0,0 +1,21 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.jui.uicore.components
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.ui.unit.dp
private val horizontal = 16.dp
private val vertical = 8.dp
val horizontalPadding = horizontal
val verticalPadding = vertical
val topPaddingValues = PaddingValues(top = vertical)
const val ReadItemAlpha = .38f
const val SecondaryItemAlpha = .78f

View File

@@ -11,6 +11,7 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.MaterialTheme
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.alpha
fun Modifier.selectedBackground(isSelected: Boolean): Modifier = composed {
if (isSelected) {
@@ -20,3 +21,5 @@ fun Modifier.selectedBackground(isSelected: Boolean): Modifier = composed {
this
}
}
fun Modifier.secondaryItemAlpha(): Modifier = this.alpha(SecondaryItemAlpha)

View File

@@ -0,0 +1,62 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ca.gosyer.jui.uicore.theme
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.runtime.structuralEqualityPolicy
import androidx.compose.ui.graphics.Color
@Stable
class ExtraColors(
tertiary: Color,
onTertiary: Color,
) {
var tertiary by mutableStateOf(tertiary, structuralEqualityPolicy())
internal set
var onTertiary by mutableStateOf(onTertiary, structuralEqualityPolicy())
internal set
fun copy(
tertiary: Color = this.tertiary,
onTertiary: Color = this.onTertiary,
): ExtraColors = ExtraColors(
tertiary,
onTertiary,
)
override fun toString(): String {
return "ExtraColors(" +
"tertiary=$tertiary, " +
"onTertiary=$onTertiary, " +
")"
}
companion object {
@Composable
fun WithExtraColors(extraColors: ExtraColors, content: @Composable () -> Unit) {
CompositionLocalProvider(
LocalExtraColors provides extraColors,
content = content
)
}
}
}
val MaterialTheme.extraColors: ExtraColors
@Composable
get() = LocalExtraColors.current
private val LocalExtraColors = staticCompositionLocalOf<ExtraColors> {
error("The AppColors composable must be called before usage")
}

View File

@@ -10,21 +10,92 @@ import androidx.compose.material.Colors
import androidx.compose.material.darkColors
import androidx.compose.material.lightColors
import androidx.compose.ui.graphics.Color
import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource
data class Theme(
val id: Int,
val colors: Colors
val titleRes: StringResource,
val colors: Colors,
val extraColors: ExtraColors
)
fun tachiyomiLightColors(
primary: Color = Color(0xFF0057CE),
primaryVariant: Color = Color(0xFF001947),
secondary: Color = Color(0xFF0057CE),
secondaryVariant: Color = Color(0xFF018786),
background: Color = Color(0xFFFDFBFF),
surface: Color = Color(0xFFFDFBFF),
error: Color = Color(0xFFB00020),
onPrimary: Color = Color.White,
onSecondary: Color = Color.White,
onBackground: Color = Color(0xFF1B1B1E),
onSurface: Color = Color(0xFF1B1B1E),
onError: Color = Color.White
) = lightColors(
primary = primary,
primaryVariant = primaryVariant,
secondary = secondary,
secondaryVariant = secondaryVariant,
background = background,
surface = surface,
error = error,
onPrimary = onPrimary,
onSecondary = onSecondary,
onBackground = onBackground,
onSurface = onSurface,
onError = onError
)
fun tachiyomiDarkColors(
primary: Color = Color(0xFFAEC6FF),
primaryVariant: Color = Color(0xFF00419E),
secondary: Color = Color(0xFFAEC6FF),
secondaryVariant: Color = Color(0xFF00419E),
background: Color = Color(0xFF1B1B1E),
surface: Color = Color(0xFF1B1B1E),
error: Color = Color(0xFFCF6679),
onPrimary: Color = Color(0xFF002C71),
onSecondary: Color = Color(0xFF002C71),
onBackground: Color = Color(0xFFE4E2E6),
onSurface: Color = Color(0xFFE4E2E6),
onError: Color = Color.White
) = darkColors(
primary = primary,
primaryVariant = primaryVariant,
secondary = secondary,
secondaryVariant = secondaryVariant,
background = background,
surface = surface,
error = error,
onPrimary = onPrimary,
onSecondary = onSecondary,
onBackground = onBackground,
onSurface = onSurface,
onError = onError
)
fun extraColors(
tertiary: Color = Color(0xFF006E17),
onTertiary: Color = Color.White,
) = ExtraColors(
tertiary = tertiary,
onTertiary = onTertiary
)
val themes = listOf(
// Pure white
Theme(
1,
lightColors()
),
// Tachiyomi 0.x default colors
Theme(
1,
MR.strings.theme_default,
tachiyomiLightColors(),
extraColors()
),
// Tachiyomi 0.x legacy blue theme
Theme(
2,
MR.strings.theme_legacy_blue,
lightColors(
primary = Color(0xFF2979FF),
primaryVariant = Color(0xFF2979FF),
@@ -32,20 +103,29 @@ val themes = listOf(
secondary = Color(0xFF2979FF),
secondaryVariant = Color(0xFF2979FF),
onSecondary = Color.White
)
),
extraColors()
),
// Tachiyomi 0.x dark theme
Theme(
3,
darkColors()
MR.strings.theme_default,
tachiyomiDarkColors(),
extraColors(
tertiary = Color(0xFF7ADC77),
onTertiary = Color(0xFF003907)
)
),
// AMOLED theme
Theme(
4,
darkColors(
MR.strings.theme_amoled,
tachiyomiDarkColors(
primary = Color.Black,
onPrimary = Color.White,
background = Color.Black
)
background = Color.Black,
surface = Color.Black
),
extraColors()
)
)