diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml
index babc5c94c..eb7c07d92 100644
--- a/java/res/values/strings-uix.xml
+++ b/java/res/values/strings-uix.xml
@@ -36,6 +36,7 @@
Steel Gray
Sunflower
Cotton Candy
+ Hot Dog
Dynamic Auto
Dynamic Light
diff --git a/java/src/org/futo/inputmethod/latin/uix/ActionBar.kt b/java/src/org/futo/inputmethod/latin/uix/ActionBar.kt
index b73143fa8..b639ab20b 100644
--- a/java/src/org/futo/inputmethod/latin/uix/ActionBar.kt
+++ b/java/src/org/futo/inputmethod/latin/uix/ActionBar.kt
@@ -409,6 +409,7 @@ fun LazyItemScope.ActionItem(idx: Int, action: Action, onSelect: (Action) -> Uni
@Composable
fun ActionItemSmall(action: Action, onSelect: (Action) -> Unit, onLongSelect: (Action) -> Unit) {
val bgCol = LocalKeyboardScheme.current.backgroundContainer
+ val fgCol = LocalKeyboardScheme.current.onBackgroundContainer
val circleRadius = with(LocalDensity.current) {
16.dp.toPx()
@@ -430,11 +431,12 @@ fun ActionItemSmall(action: Action, onSelect: (Action) -> Unit, onLongSelect: (A
action
)
},
- contentAlignment = Alignment.Center) {
+ contentAlignment = Center
+ ) {
Icon(
painter = painterResource(id = action.icon),
contentDescription = stringResource(action.name),
- tint = contentColorFor(backgroundColor = bgCol),
+ tint = fgCol,
modifier = Modifier.size(16.dp)
)
}
@@ -539,8 +541,7 @@ fun ActionItems(onSelect: (Action) -> Unit, onLongSelect: (Action) -> Unit) {
@Composable
fun ExpandActionsButton(isActionsOpen: Boolean, onClick: () -> Unit) {
val bgCol = LocalKeyboardScheme.current.backgroundContainer
-
- val actionsContent = MaterialTheme.colorScheme.onSurface
+ val fgCol = LocalKeyboardScheme.current.onBackgroundContainer
val circleRadius = with(LocalDensity.current) {
16.dp.toPx()
@@ -566,7 +567,7 @@ fun ExpandActionsButton(isActionsOpen: Boolean, onClick: () -> Unit) {
)
},
- colors = IconButtonDefaults.iconButtonColors(contentColor = actionsContent)
+ colors = IconButtonDefaults.iconButtonColors(contentColor = fgCol)
) {
Icon(
painter = painterResource(id = R.drawable.chevron_right),
diff --git a/java/src/org/futo/inputmethod/latin/uix/BasicThemeProvider.kt b/java/src/org/futo/inputmethod/latin/uix/BasicThemeProvider.kt
index 4a20f4436..22c5f5440 100644
--- a/java/src/org/futo/inputmethod/latin/uix/BasicThemeProvider.kt
+++ b/java/src/org/futo/inputmethod/latin/uix/BasicThemeProvider.kt
@@ -182,7 +182,6 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
colorScheme.surface.toArgb()
}
- val ratio = 1.5f
val keyColor = if(keyBorders) {
colorScheme.backgroundContainer.toArgb()
} else {
@@ -197,29 +196,38 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
transparent
}
+ val onKeyColor = if(keyBorders) {
+ colorScheme.onBackgroundContainer.toArgb()
+ } else {
+ onBackground
+ }
+
+ val onKeyColorHalf = Color(onKeyColor).copy(alpha = 0.5f).toArgb()
+ val onKeyColorThird = Color(onKeyColor).copy(alpha = 0.33f).toArgb()
+
val enterKeyBackground = if(expertMode) { functionalKeyColor } else { primary }
val enterKeyForeground = if(expertMode) { onBackgroundThird } else { onPrimary }
- colors[R.styleable.Keyboard_Key_keyTextColor] = onBackground
- colors[R.styleable.Keyboard_Key_keyTextInactivatedColor] = onBackgroundHalf
+ colors[R.styleable.Keyboard_Key_keyTextColor] = onKeyColor
+ colors[R.styleable.Keyboard_Key_keyTextInactivatedColor] = onKeyColorHalf
colors[R.styleable.Keyboard_Key_keyPressedTextColor] = onPrimary
colors[R.styleable.Keyboard_Key_keyTextShadowColor] = 0
colors[R.styleable.Keyboard_Key_actionKeyTextColor] = enterKeyForeground
- colors[R.styleable.Keyboard_Key_functionalTextColor] = onBackground
- colors[R.styleable.Keyboard_Key_keyHintLetterColor] = onBackgroundHalf
- colors[R.styleable.Keyboard_Key_keyHintLabelColor] = onBackgroundHalf
- colors[R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor] = onBackgroundHalf
- colors[R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor] = onBackgroundHalf
+ colors[R.styleable.Keyboard_Key_functionalTextColor] = onKeyColor
+ colors[R.styleable.Keyboard_Key_keyHintLetterColor] = onKeyColorHalf
+ colors[R.styleable.Keyboard_Key_keyHintLabelColor] = onKeyColorHalf
+ colors[R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor] = onKeyColorHalf
+ colors[R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor] = onKeyColorHalf
colors[R.styleable.Keyboard_Key_keyPreviewTextColor] = onSecondary
- colors[R.styleable.MainKeyboardView_languageOnSpacebarTextColor] = onBackgroundHalf
+ colors[R.styleable.MainKeyboardView_languageOnSpacebarTextColor] = onKeyColorHalf
colors[R.styleable.MainKeyboardView_gestureTrailColor] = primary
colors[R.styleable.MainKeyboardView_slidingKeyInputPreviewColor] = primary
- addIcon(KeyboardIconsSet.NAME_SHIFT_KEY, R.drawable.shift, onBackground)
- addIcon(KeyboardIconsSet.NAME_SHIFT_KEY_SHIFTED, R.drawable.shiftshifted, onBackground)
- addIcon(KeyboardIconsSet.NAME_DELETE_KEY, R.drawable.delete, onBackground)
- addIcon(KeyboardIconsSet.NAME_SETTINGS_KEY, R.drawable.settings, onBackground)
- addIcon(KeyboardIconsSet.NAME_SPACE_KEY, null, onBackground)
+ addIcon(KeyboardIconsSet.NAME_SHIFT_KEY, R.drawable.shift, onKeyColor)
+ addIcon(KeyboardIconsSet.NAME_SHIFT_KEY_SHIFTED, R.drawable.shiftshifted, onKeyColor)
+ addIcon(KeyboardIconsSet.NAME_DELETE_KEY, R.drawable.delete, onKeyColor)
+ addIcon(KeyboardIconsSet.NAME_SETTINGS_KEY, R.drawable.settings, onKeyColor)
+ addIcon(KeyboardIconsSet.NAME_SPACE_KEY, null, onKeyColor)
addIcon(KeyboardIconsSet.NAME_ENTER_KEY, R.drawable.sym_keyboard_return_lxx_light, enterKeyForeground)
addIcon(KeyboardIconsSet.NAME_GO_KEY, R.drawable.sym_keyboard_go_lxx_light, enterKeyForeground)
addIcon(KeyboardIconsSet.NAME_SEARCH_KEY, R.drawable.sym_keyboard_search_lxx_light, enterKeyForeground)
@@ -227,21 +235,21 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
addIcon(KeyboardIconsSet.NAME_NEXT_KEY, R.drawable.sym_keyboard_next_lxx_light, enterKeyForeground)
addIcon(KeyboardIconsSet.NAME_DONE_KEY, R.drawable.sym_keyboard_done_lxx_light, enterKeyForeground)
addIcon(KeyboardIconsSet.NAME_PREVIOUS_KEY, R.drawable.sym_keyboard_previous_lxx_light, enterKeyForeground)
- addIcon(KeyboardIconsSet.NAME_TAB_KEY, R.drawable.sym_keyboard_tab_holo_dark, onBackground) // TODO: Correct tint
- addIcon(KeyboardIconsSet.NAME_ZWNJ_KEY, R.drawable.sym_keyboard_zwnj_lxx_dark, onBackground)
+ addIcon(KeyboardIconsSet.NAME_TAB_KEY, R.drawable.sym_keyboard_tab_holo_dark, onKeyColor) // TODO: Correct tint
+ addIcon(KeyboardIconsSet.NAME_ZWNJ_KEY, R.drawable.sym_keyboard_zwnj_lxx_dark, onKeyColor)
addIcon(KeyboardIconsSet.NAME_ZWJ_KEY, R.drawable.sym_keyboard_zwj_lxx_dark, onPrimary)
addIcon(KeyboardIconsSet.NAME_EMOJI_ACTION_KEY, R.drawable.smile, onPrimary)
- addIcon(KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY, R.drawable.smile, onBackground)
+ addIcon(KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY, R.drawable.smile, onKeyColor)
// Add by name (action_emoji)
AllActionsMap.forEach { (i, it) ->
- addIcon("action_${i}", it.icon, onBackground)
+ addIcon("action_${i}", it.icon, onKeyColor)
}
// Add by id (action_0)
AllActions.forEachIndexed { i, it ->
- addIcon("action_${i}", it.icon, onBackground)
+ addIcon("action_${i}", it.icon, onKeyColor)
}
if(!showKeyHints) {
@@ -257,7 +265,7 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
// Note: We don't fully hide some things, but fade them away as they may be important landmarks
- colors[R.styleable.Keyboard_Key_functionalTextColor] = onBackgroundThird
+ colors[R.styleable.Keyboard_Key_functionalTextColor] = onKeyColorThird
}
keyboardBackground = coloredRectangle(primaryKeyboardColor)
diff --git a/java/src/org/futo/inputmethod/latin/uix/ColorScheme.kt b/java/src/org/futo/inputmethod/latin/uix/ColorScheme.kt
index aeee3f613..2e0cd425d 100644
--- a/java/src/org/futo/inputmethod/latin/uix/ColorScheme.kt
+++ b/java/src/org/futo/inputmethod/latin/uix/ColorScheme.kt
@@ -11,7 +11,7 @@ val LocalKeyboardScheme = staticCompositionLocalOf {
wrapColorScheme(lightColorScheme())
}
-class ExtraColors(
+data class ExtraColors(
val backgroundContainer: Color,
val backgroundContainerDim: Color,
val onBackgroundContainer: Color,
diff --git a/java/src/org/futo/inputmethod/latin/uix/theme/ThemeOptions.kt b/java/src/org/futo/inputmethod/latin/uix/theme/ThemeOptions.kt
index 1200044bd..cc7e3bda8 100644
--- a/java/src/org/futo/inputmethod/latin/uix/theme/ThemeOptions.kt
+++ b/java/src/org/futo/inputmethod/latin/uix/theme/ThemeOptions.kt
@@ -13,6 +13,7 @@ import org.futo.inputmethod.latin.uix.theme.presets.DynamicDarkTheme
import org.futo.inputmethod.latin.uix.theme.presets.DynamicLightTheme
import org.futo.inputmethod.latin.uix.theme.presets.DynamicSystemTheme
import org.futo.inputmethod.latin.uix.theme.presets.Emerald
+import org.futo.inputmethod.latin.uix.theme.presets.HotDog
import org.futo.inputmethod.latin.uix.theme.presets.Snowfall
import org.futo.inputmethod.latin.uix.theme.presets.SteelGray
import org.futo.inputmethod.latin.uix.theme.presets.Sunflower
@@ -46,6 +47,7 @@ val ThemeOptions = mapOf(
DeepSeaLight.key to DeepSeaLight,
DeepSeaDark.key to DeepSeaDark,
+ HotDog.key to HotDog
)
val ThemeOptionKeys = ThemeOptions.keys
\ No newline at end of file
diff --git a/java/src/org/futo/inputmethod/latin/uix/theme/presets/HotDog.kt b/java/src/org/futo/inputmethod/latin/uix/theme/presets/HotDog.kt
new file mode 100644
index 000000000..a7911bc02
--- /dev/null
+++ b/java/src/org/futo/inputmethod/latin/uix/theme/presets/HotDog.kt
@@ -0,0 +1,103 @@
+package org.futo.inputmethod.latin.uix.theme.presets
+
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import org.futo.inputmethod.latin.R
+import org.futo.inputmethod.latin.uix.theme.ThemeOption
+import org.futo.inputmethod.latin.uix.theme.selector.ThemePreview
+import org.futo.inputmethod.latin.uix.wrapColorScheme
+
+private val primaryLight = Color(0xFFC4FF00)
+private val onPrimaryLight = Color(0xFF000000)
+private val primaryContainerLight = Color(0xFFC0C016)
+private val onPrimaryContainerLight = Color(0xFF1A3300)
+private val secondaryLight = primaryLight
+private val onSecondaryLight = onPrimaryLight
+private val secondaryContainerLight = primaryContainerLight
+private val onSecondaryContainerLight = onPrimaryContainerLight
+private val tertiaryLight = primaryLight
+private val onTertiaryLight = onPrimaryLight
+private val tertiaryContainerLight = primaryContainerLight
+private val onTertiaryContainerLight = onPrimaryContainerLight
+private val errorLight = Color(0xFFFF0000)
+private val onErrorLight = Color(0xFFFFFFFF)
+private val errorContainerLight = Color(0xFFFFDAD6)
+private val onErrorContainerLight = Color(0xFF410002)
+private val backgroundLight = Color(0xFFFF0000)
+private val onBackgroundLight = Color(0xFFFFFFFF)
+private val surfaceLight = backgroundLight
+private val onSurfaceLight = onBackgroundLight
+private val surfaceVariantLight = surfaceLight
+private val onSurfaceVariantLight = onSurfaceLight
+private val outlineLight = Color(0xFFFFFF00)
+private val outlineVariantLight = Color(0xFFFFFF00)
+private val scrimLight = Color(0xFF000000)
+private val inverseSurfaceLight = Color(0xFF000000)
+private val inverseOnSurfaceLight = Color(0xFFFFFFFF)
+private val inversePrimaryLight = Color(0xFFFFFFFF)
+private val backgroundContainerLight = Color(0xFFFFEB3B)
+private val backgroundContainerDimLight = Color(0xFFFFC107)
+private val onBackgroundContainerLight = Color(0xFF000000)
+
+
+private val lightScheme = lightColorScheme(
+ primary = primaryLight,
+ onPrimary = onPrimaryLight,
+ primaryContainer = primaryContainerLight,
+ onPrimaryContainer = onPrimaryContainerLight,
+ secondary = secondaryLight,
+ onSecondary = onSecondaryLight,
+ secondaryContainer = secondaryContainerLight,
+ onSecondaryContainer = onSecondaryContainerLight,
+ tertiary = tertiaryLight,
+ onTertiary = onTertiaryLight,
+ tertiaryContainer = tertiaryContainerLight,
+ onTertiaryContainer = onTertiaryContainerLight,
+ error = errorLight,
+ onError = onErrorLight,
+ errorContainer = errorContainerLight,
+ onErrorContainer = onErrorContainerLight,
+ background = backgroundLight,
+ onBackground = onBackgroundLight,
+ surface = surfaceLight,
+ onSurface = onSurfaceLight,
+ surfaceVariant = surfaceVariantLight,
+ onSurfaceVariant = onSurfaceVariantLight,
+ outline = outlineLight,
+ outlineVariant = outlineVariantLight,
+ scrim = scrimLight,
+ inverseSurface = inverseSurfaceLight,
+ inverseOnSurface = inverseOnSurfaceLight,
+ inversePrimary = inversePrimaryLight,
+)
+
+
+val HotDog = ThemeOption(
+ dynamic = false,
+ key = "HotDog",
+ name = R.string.hot_dog_theme_name,
+ available = { true }
+) {
+ wrapColorScheme(lightScheme).let {
+ it.copy(
+ base = it.base,
+ extended = it.extended.copy(
+ backgroundContainer = backgroundContainerLight,
+ backgroundContainerDim = backgroundContainerDimLight,
+ onBackgroundContainer = onBackgroundContainerLight
+ )
+ )
+ }
+}
+
+@Composable
+@Preview
+private fun PreviewThemeLight() {
+ ThemePreview(HotDog)
+}
+
+
+
+