diff --git a/src/main/kotlin/app/App.kt b/src/main/kotlin/app/App.kt index 81779c8..b4a4421 100644 --- a/src/main/kotlin/app/App.kt +++ b/src/main/kotlin/app/App.kt @@ -4,17 +4,11 @@ package app import androidx.compose.foundation.background import androidx.compose.foundation.layout.* -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items import androidx.compose.material.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha -import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.PointerIconDefaults import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.painterResource @@ -25,7 +19,6 @@ import androidx.compose.ui.window.Window import androidx.compose.ui.window.WindowPlacement import androidx.compose.ui.window.application import androidx.compose.ui.window.rememberWindowState -import androidx.compose.ui.zIndex import app.di.DaggerAppComponent import app.theme.AppTheme import app.theme.primaryTextColor @@ -75,7 +68,7 @@ class App { ) { var showSettingsDialog by remember { mutableStateOf(false) } - AppTheme(theme = theme) { + AppTheme(selectedTheme = theme) { Box(modifier = Modifier.background(MaterialTheme.colors.background)) { AppTabs( onOpenSettings = { @@ -213,7 +206,7 @@ class App { painter = painterResource("settings.svg"), contentDescription = null, modifier = Modifier.fillMaxSize(), - tint = MaterialTheme.colors.primary, + tint = MaterialTheme.colors.primaryVariant, ) } } diff --git a/src/main/kotlin/app/AppPreferences.kt b/src/main/kotlin/app/AppPreferences.kt index d9cb7ae..14c7b9c 100644 --- a/src/main/kotlin/app/AppPreferences.kt +++ b/src/main/kotlin/app/AppPreferences.kt @@ -46,7 +46,12 @@ class AppPreferences @Inject constructor() { var theme: Themes get() { val lastTheme = preferences.get(PREF_THEME, Themes.DARK.toString()) - return Themes.valueOf(lastTheme) + return try { + Themes.valueOf(lastTheme) + } catch (ex: Exception) { + ex.printStackTrace() + Themes.DARK + } } set(value) { preferences.put(PREF_THEME, value.toString()) diff --git a/src/main/kotlin/app/theme/Color.kt b/src/main/kotlin/app/theme/Color.kt index 7e564cf..18e1cb0 100644 --- a/src/main/kotlin/app/theme/Color.kt +++ b/src/main/kotlin/app/theme/Color.kt @@ -2,38 +2,75 @@ package app.theme import androidx.compose.ui.graphics.Color -val primaryLight = Color(0xFF9FD1FF) -val primary = Color(0xFF0070D8) -val primaryDark = Color(0xFF014F97) -val onPrimary = Color(0xFFFFFFFFF) -val secondaryLight = Color(0xFF9c27b0) -val secondaryDark = Color(0xFFe9c754) -val mainText = Color(0xFF212934) -val mainTextDark = Color(0xFFFFFFFF) -val secondaryText = Color(0xFF595858) -val secondaryTextDark = Color(0xFFCCCBCB) -val borderColorLight = Color(0xFF989898) -val borderColorDark = Color(0xFF989898) -val errorColor = Color(0xFFc93838) -val onErrorColor = Color(0xFFFFFFFF) +val lightTheme = ColorsScheme( + primary = Color(0xFF0070D8), + primaryVariant = Color(0xFF0070D8), + onPrimary = Color(0xFFFFFFFFF), + secondary = Color(0xFF9c27b0), + primaryText = Color(0xFF212934), + secondaryText = Color(0xFF595858), + error = Color(0xFFc93838), + onError = Color(0xFFFFFFFF), + background = Color(0xFFFFFFFF), + backgroundSelected = Color(0xFFcee1f2), + surface = Color(0xFFe9ecf7), + headerBackground = Color(0xFFF4F6FA), + borderColor = Color(0xFF989898), + graphHeaderBackground = Color(0xFFF4F6FA), + addFile = Color(0xFF32A852), + deletedFile = Color(0xFFc93838), + modifiedFile = Color(0xFF0070D8), + conflictingFile = Color(0xFFFFB638), + dialogOverlay = Color(0xAA000000), + normalScrollbar = Color(0xFFCCCCCC), + hoverScrollbar = Color(0xFF0070D8), +) -val backgroundColorLight = Color(0xFFFFFFFF) -val backgroundColorSelectedLight = Color(0xFFcee1f2) -val backgroundColorDark = Color(0xFF0E1621) -val backgroundColorSelectedDark = Color(0xFF2f3640) -val surfaceColorLight = Color(0xFFe9ecf7) -val surfaceColorDark = Color(0xFF182533) -val headerBackgroundLight = Color(0xFFF4F6FA) -val graphHeaderBackgroundDark = Color(0xFF303132) -val headerBackgroundDark = Color(0xFF0a2b4a) -val addFileLight = Color(0xFF32A852) -val deleteFileLight = errorColor -val modifyFileLight = primary -val conflictFileLight = Color(0xFFFFB638) +val darkBlueTheme = ColorsScheme( + primary = Color(0xFF014F97), + primaryVariant = Color(0xFF9FD1FF), + onPrimary = Color(0xFFFFFFFFF), + secondary = Color(0xFFe9c754), + primaryText = Color(0xFFFFFFFF), + secondaryText = Color(0xFFCCCBCB), + error = Color(0xFFc93838), + onError = Color(0xFFFFFFFF), + background = Color(0xFF0E1621), + backgroundSelected = Color(0xFF2f3640), + surface = Color(0xFF182533), + headerBackground = Color(0xFF0a2b4a), + borderColor = Color(0xFF989898), + graphHeaderBackground = Color(0xFF303132), + addFile = Color(0xFF32A852), + deletedFile = Color(0xFFc93838), + modifiedFile = Color(0xFF0070D8), + conflictingFile = Color(0xFFFFB638), + dialogOverlay = Color(0xAA000000), + normalScrollbar = Color(0xFFCCCCCC), + hoverScrollbar = Color(0xFF888888) +) -val dialogBackgroundColor = Color(0xAA000000) -val unhoverScrollbarColorLight = Color.LightGray -val unhoverScrollbarColorDark = Color.Gray -val hoverScrollbarColorLight = primary -val hoverScrollbarColorDark = Color.LightGray \ No newline at end of file +val darkTheme = ColorsScheme( + primary = Color(0xFF014F97), + primaryVariant = Color(0xFFCDEAFF), + onPrimary = Color(0xFFFFFFFFF), + secondary = Color(0xFFe9c754), + primaryText = Color(0xFFFFFFFF), + secondaryText = Color(0xFFCCCBCB), + error = Color(0xFFc93838), + onError = Color(0xFFFFFFFF), + background = Color(0xFF16181F), + backgroundSelected = Color(0xFF2f3640), + surface = Color(0xFF202330), + headerBackground = Color(0xFF131E44), + borderColor = Color(0xFF989898), + graphHeaderBackground = Color(0xFF303132), + addFile = Color(0xFF32A852), + deletedFile = Color(0xFFc93838), + modifiedFile = Color(0xFF0070D8), + conflictingFile = Color(0xFFFFB638), + dialogOverlay = Color(0xAA000000), + normalScrollbar = Color(0xFFCCCCCC), + hoverScrollbar = Color(0xFF888888) +) \ No newline at end of file diff --git a/src/main/kotlin/app/theme/ColorsScheme.kt b/src/main/kotlin/app/theme/ColorsScheme.kt new file mode 100644 index 0000000..a8a7cd1 --- /dev/null +++ b/src/main/kotlin/app/theme/ColorsScheme.kt @@ -0,0 +1,47 @@ +package app.theme + +import androidx.compose.material.Colors +import androidx.compose.ui.graphics.Color + +data class ColorsScheme( + val primary: Color, + val primaryVariant: Color, + val onPrimary: Color, + val secondary: Color, + val primaryText: Color, + val secondaryText: Color, + val error: Color, + val onError: Color, + val background: Color, + val backgroundSelected: Color, + val surface: Color, + val headerBackground: Color, + val onHeader: Color = primaryText, + val borderColor: Color, + val graphHeaderBackground: Color, + val addFile: Color, + val deletedFile: Color, + val modifiedFile: Color, + val conflictingFile: Color, + val dialogOverlay: Color, + val normalScrollbar: Color, + val hoverScrollbar: Color, +) { + fun toComposeColors(): Colors { + return Colors( + primary = this.primary, + primaryVariant = this.primaryVariant, + secondary = this.secondary, + secondaryVariant = this.secondary, + background = this.background, + surface = this.surface, + error = this.error, + onPrimary = this.onPrimary, + onSecondary = this.onPrimary, + onBackground = this.primaryText, + onSurface = this.primaryText, + onError = this.onError, + isLight = true, // todo what is this used for? Hardcoded value for now + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/theme/ComponentsColors.kt b/src/main/kotlin/app/theme/ComponentsColors.kt new file mode 100644 index 0000000..5d66d79 --- /dev/null +++ b/src/main/kotlin/app/theme/ComponentsColors.kt @@ -0,0 +1,29 @@ +package app.theme + +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.MaterialTheme +import androidx.compose.material.TextFieldDefaults +import androidx.compose.runtime.Composable + +@Composable +fun textFieldColors() = TextFieldDefaults.textFieldColors( + cursorColor = MaterialTheme.colors.primaryVariant, + focusedIndicatorColor = MaterialTheme.colors.primaryVariant, + focusedLabelColor = MaterialTheme.colors.primaryVariant, + backgroundColor = MaterialTheme.colors.background, + textColor = MaterialTheme.colors.primaryTextColor, +) + +@Composable +fun outlinedTextFieldColors() = TextFieldDefaults.outlinedTextFieldColors( + cursorColor = MaterialTheme.colors.primaryVariant, + focusedBorderColor = MaterialTheme.colors.primaryVariant, + focusedLabelColor = MaterialTheme.colors.primaryVariant, + backgroundColor = MaterialTheme.colors.background, + textColor = MaterialTheme.colors.primaryTextColor, +) + +@Composable +fun textButtonColors() = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colors.primaryVariant +) \ No newline at end of file diff --git a/src/main/kotlin/app/theme/Theme.kt b/src/main/kotlin/app/theme/Theme.kt index 0583071..fdc5acb 100644 --- a/src/main/kotlin/app/theme/Theme.kt +++ b/src/main/kotlin/app/theme/Theme.kt @@ -1,44 +1,27 @@ +@file:Suppress("unused") + package app.theme import androidx.compose.material.Colors import androidx.compose.material.MaterialTheme -import androidx.compose.material.darkColors -import androidx.compose.material.lightColors import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import app.DropDownOption -private val DarkColorPalette = darkColors( - primary = primaryLight, - primaryVariant = primaryDark, - secondary = secondaryDark, - surface = surfaceColorDark, - background = backgroundColorDark, - error = errorColor, - onError = onErrorColor, - onPrimary = onPrimary, -) - -private val LightColorPalette = lightColors( - primary = primary, - primaryVariant = primaryDark, - secondary = secondaryLight, - background = backgroundColorLight, - surface = surfaceColorLight, - error = errorColor, - onError = onErrorColor, - onPrimary = onPrimary, -) +private var appTheme: ColorsScheme = darkTheme @Composable -fun AppTheme(theme: Themes = Themes.LIGHT, content: @Composable() () -> Unit) { - val colors = when (theme) { - Themes.LIGHT -> LightColorPalette - Themes.DARK -> DarkColorPalette +fun AppTheme(selectedTheme: Themes = Themes.DARK, content: @Composable() () -> Unit) { + val theme = when (selectedTheme) { + Themes.LIGHT -> lightTheme + Themes.DARK -> darkTheme + Themes.DARK_BLUE -> darkBlueTheme } + appTheme = theme + MaterialTheme( - colors = colors, + colors = theme.toComposeColors(), content = content, typography = typography, ) @@ -46,99 +29,71 @@ fun AppTheme(theme: Themes = Themes.LIGHT, content: @Composable() () -> Unit) { @get:Composable val Colors.backgroundSelected: Color - get() = if (isLight) backgroundColorSelectedLight else backgroundColorSelectedDark + get() = appTheme.backgroundSelected @get:Composable val Colors.primaryTextColor: Color - get() = if (isLight) mainText else mainTextDark - -@get:Composable -val Colors.halfPrimary: Color - get() = primary.copy(alpha = 0.8f) - -@get:Composable -val Colors.inversePrimaryTextColor: Color - get() = if (isLight) mainTextDark else mainText + get() = appTheme.primaryText @get:Composable val Colors.secondaryTextColor: Color - get() = if (isLight) secondaryText else secondaryTextDark + get() = appTheme.secondaryText @get:Composable val Colors.borderColor: Color - get() = if (isLight) - borderColorLight - else - borderColorDark + get() = appTheme.borderColor @get:Composable val Colors.headerBackground: Color - get() { - return if (isLight) - headerBackgroundLight - else - headerBackgroundDark - } + get() = appTheme.headerBackground @get:Composable val Colors.graphHeaderBackground: Color - get() { - return if (isLight) - headerBackgroundLight - else - graphHeaderBackgroundDark - } + get() = appTheme.graphHeaderBackground @get:Composable val Colors.addFile: Color - get() = addFileLight + get() = appTheme.addFile @get:Composable val Colors.deleteFile: Color - get() = deleteFileLight + get() = appTheme.deletedFile @get:Composable val Colors.modifyFile: Color - get() = modifyFileLight + get() = appTheme.modifiedFile @get:Composable val Colors.conflictFile: Color - get() = conflictFileLight + get() = appTheme.conflictingFile @get:Composable val Colors.headerText: Color - get() = if (isLight) primary else mainTextDark - - -val Colors.tabColorActive: Color - get() = if (isLight) surfaceColorLight else surfaceColorDark - - -val Colors.tabColorInactive: Color - get() = if (isLight) backgroundColorLight else backgroundColorDark + get() = appTheme.onHeader val Colors.stageButton: Color - get() = if (isLight) primary else primaryDark + get() = appTheme.primary val Colors.unstageButton: Color - get() = error + get() = appTheme.error val Colors.abortButton: Color - get() = error + get() = appTheme.error -val Colors.confirmationButton: Color - get() = if (isLight) primary else primaryDark - -val Colors.scrollbarUnhover: Color - get() = if (isLight) unhoverScrollbarColorLight else unhoverScrollbarColorDark +val Colors.scrollbarNormal: Color + get() = appTheme.normalScrollbar val Colors.scrollbarHover: Color - get() = if (isLight) hoverScrollbarColorLight else hoverScrollbarColorDark + get() = appTheme.hoverScrollbar + +val Colors.dialogOverlay: Color + get() = appTheme.dialogOverlay enum class Themes(val displayName: String) : DropDownOption { LIGHT("Light"), - DARK("Dark"); + DARK("Dark"), + DARK_BLUE("Dark blue"); override val optionName: String get() = displayName @@ -147,4 +102,5 @@ enum class Themes(val displayName: String) : DropDownOption { val themesList = listOf( Themes.LIGHT, Themes.DARK, + Themes.DARK_BLUE, ) \ No newline at end of file diff --git a/src/main/kotlin/app/ui/AppTab.kt b/src/main/kotlin/app/ui/AppTab.kt index 8a77bd2..e7a27d1 100644 --- a/src/main/kotlin/app/ui/AppTab.kt +++ b/src/main/kotlin/app/ui/AppTab.kt @@ -61,7 +61,8 @@ fun AppTab( LinearProgressIndicator( modifier = Modifier .fillMaxWidth() - .alpha(linearProgressAlpha) + .alpha(linearProgressAlpha), + color = MaterialTheme.colors.primaryVariant ) CredentialsDialog(tabViewModel) diff --git a/src/main/kotlin/app/ui/Branches.kt b/src/main/kotlin/app/ui/Branches.kt index f8533e5..b21c6fd 100644 --- a/src/main/kotlin/app/ui/Branches.kt +++ b/src/main/kotlin/app/ui/Branches.kt @@ -114,7 +114,7 @@ private fun BranchLineEntry( painter = painterResource("location.svg"), contentDescription = null, modifier = Modifier.padding(horizontal = 4.dp), - tint = MaterialTheme.colors.primary, + tint = MaterialTheme.colors.primaryVariant, ) } } diff --git a/src/main/kotlin/app/ui/CommitChanges.kt b/src/main/kotlin/app/ui/CommitChanges.kt index 4ac0417..29fbf8b 100644 --- a/src/main/kotlin/app/ui/CommitChanges.kt +++ b/src/main/kotlin/app/ui/CommitChanges.kt @@ -42,7 +42,7 @@ fun CommitChanges( when (val commitChangesStatus = commitChangesStatusState.value) { CommitChangesStatus.Loading -> { - LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) + LinearProgressIndicator(modifier = Modifier.fillMaxWidth(), color = MaterialTheme.colors.primaryVariant) } is CommitChangesStatus.Loaded -> { CommitChangesView( diff --git a/src/main/kotlin/app/ui/Diff.kt b/src/main/kotlin/app/ui/Diff.kt index 36431a4..348d99b 100644 --- a/src/main/kotlin/app/ui/Diff.kt +++ b/src/main/kotlin/app/ui/Diff.kt @@ -97,7 +97,7 @@ fun Diff( } } ViewDiffResult.Loading, ViewDiffResult.None -> { - LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) + LinearProgressIndicator(modifier = Modifier.fillMaxWidth(), color = MaterialTheme.colors.primaryVariant) } } diff --git a/src/main/kotlin/app/ui/Menu.kt b/src/main/kotlin/app/ui/Menu.kt index bc280e1..e68a994 100644 --- a/src/main/kotlin/app/ui/Menu.kt +++ b/src/main/kotlin/app/ui/Menu.kt @@ -146,9 +146,9 @@ fun MenuButton( onClick: () -> Unit ) { val iconColor = if (enabled) { - MaterialTheme.colors.primary + MaterialTheme.colors.primaryVariant } else { - MaterialTheme.colors.secondaryVariant + MaterialTheme.colors.secondaryVariant //todo this color isn't specified anywhere } Box( @@ -189,7 +189,7 @@ fun ExtendedMenuButton( extendedListItems: List, ) { val iconColor = if (enabled) { - MaterialTheme.colors.primary + MaterialTheme.colors.primaryVariant } else { MaterialTheme.colors.secondaryVariant } @@ -263,7 +263,7 @@ fun IconMenuButton( onClick: () -> Unit ) { val iconColor = if (enabled) { - MaterialTheme.colors.primary + MaterialTheme.colors.primaryVariant } else { MaterialTheme.colors.secondaryVariant } diff --git a/src/main/kotlin/app/ui/RebaseInteractive.kt b/src/main/kotlin/app/ui/RebaseInteractive.kt index 2dd5fd0..6d0ea28 100644 --- a/src/main/kotlin/app/ui/RebaseInteractive.kt +++ b/src/main/kotlin/app/ui/RebaseInteractive.kt @@ -11,7 +11,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton import app.ui.components.ScrollableLazyColumn import app.viewmodels.RebaseInteractiveState @@ -88,7 +90,8 @@ fun RebaseStateLoaded( modifier = Modifier.padding(end = 8.dp), onClick = { onCancel() - } + }, + colors = textButtonColors(), ) { Text("Cancel") } @@ -139,7 +142,7 @@ fun RebaseCommit( newMessage = it onMessageChanged(it) }, - colors = TextFieldDefaults.textFieldColors(backgroundColor = MaterialTheme.colors.background), + colors = outlinedTextFieldColors(), textStyle = TextStyle.Default.copy(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), ) diff --git a/src/main/kotlin/app/ui/UncommitedChanges.kt b/src/main/kotlin/app/ui/UncommitedChanges.kt index 4ecdad5..71dff53 100644 --- a/src/main/kotlin/app/ui/UncommitedChanges.kt +++ b/src/main/kotlin/app/ui/UncommitedChanges.kt @@ -83,7 +83,7 @@ fun UncommitedChanges( enter = fadeIn(), exit = fadeOut(), ) { - LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) + LinearProgressIndicator(modifier = Modifier.fillMaxWidth(), color = MaterialTheme.colors.primaryVariant) } EntriesList( @@ -178,7 +178,7 @@ fun UncommitedChanges( statusViewModel.savedCommitMessage = it }, label = { Text("Write your commit message here", fontSize = 14.sp) }, - colors = TextFieldDefaults.textFieldColors(backgroundColor = MaterialTheme.colors.background), + colors = textFieldColors(), textStyle = TextStyle.Default.copy(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), ) @@ -237,7 +237,7 @@ fun UncommitedChangesButtons( modifier = Modifier .height(40.dp) .clip(MaterialTheme.shapes.small.copy(topStart = CornerSize(0.dp), bottomStart = CornerSize(0.dp))) - .background(MaterialTheme.colors.confirmationButton) + .background(MaterialTheme.colors.primary) .handMouseClickable { showDropDownMenu = true } ) { Icon( @@ -367,7 +367,7 @@ fun ConfirmationButton( enabled = enabled, shape = shape, colors = ButtonDefaults.buttonColors( - backgroundColor = MaterialTheme.colors.confirmationButton, + backgroundColor = MaterialTheme.colors.primary, contentColor = Color.White ) ) { diff --git a/src/main/kotlin/app/ui/WelcomePage.kt b/src/main/kotlin/app/ui/WelcomePage.kt index 4d5aba4..7d27f68 100644 --- a/src/main/kotlin/app/ui/WelcomePage.kt +++ b/src/main/kotlin/app/ui/WelcomePage.kt @@ -26,6 +26,7 @@ import app.extensions.dirPath import app.extensions.openUrlInBrowser import app.theme.primaryTextColor import app.theme.secondaryTextColor +import app.theme.textButtonColors import app.ui.dialogs.AppInfoDialog import app.ui.dialogs.CloneDialog import app.updates.Update @@ -225,13 +226,13 @@ fun RecentRepositories(appStateManager: AppStateManager, tabViewModel: TabViewMo TextButton( onClick = { tabViewModel.openRepository(repo) - } + }, + colors = textButtonColors(), ) { Text( text = repoDirName, fontSize = 14.sp, maxLines = 1, - color = MaterialTheme.colors.primary, ) } @@ -270,12 +271,13 @@ fun ButtonTile( .size(24.dp), painter = painter, contentDescription = null, - colorFilter = ColorFilter.tint(MaterialTheme.colors.primary), + colorFilter = ColorFilter.tint(MaterialTheme.colors.primaryVariant), ) Text( text = title, maxLines = 1, + color = MaterialTheme.colors.primaryVariant, ) } } @@ -286,12 +288,13 @@ fun IconTextButton( modifier: Modifier = Modifier, title: String, painter: Painter, - iconColor: Color = MaterialTheme.colors.primary, + iconColor: Color = MaterialTheme.colors.primaryVariant, onClick: () -> Unit, ) { TextButton( onClick = onClick, - modifier = modifier.size(width = 280.dp, height = 40.dp) + modifier = modifier.size(width = 280.dp, height = 40.dp), + colors = textButtonColors(), ) { Row( modifier = Modifier.fillMaxSize(), diff --git a/src/main/kotlin/app/ui/components/PrimaryButton.kt b/src/main/kotlin/app/ui/components/PrimaryButton.kt index 0799db4..496ea3a 100644 --- a/src/main/kotlin/app/ui/components/PrimaryButton.kt +++ b/src/main/kotlin/app/ui/components/PrimaryButton.kt @@ -21,7 +21,7 @@ fun PrimaryButton( modifier = modifier, enabled = enabled, colors = ButtonDefaults.buttonColors( - backgroundColor = MaterialTheme.colors.primaryVariant, + backgroundColor = MaterialTheme.colors.primary, contentColor = textColor ), ) { diff --git a/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt b/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt index b79e3a7..8b506c7 100644 --- a/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt +++ b/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt @@ -28,8 +28,6 @@ import app.di.AppComponent import app.di.DaggerTabComponent import app.extensions.handMouseClickable import app.theme.primaryTextColor -import app.theme.tabColorActive -import app.theme.tabColorInactive import app.viewmodels.TabViewModel import javax.inject.Inject import kotlin.io.path.Path @@ -44,9 +42,7 @@ fun RepositoriesTabPanel( onTabClosed: (Int) -> Unit, newTabContent: (key: Int) -> TabInformation, ) { - var tabsIdentifier by remember { - mutableStateOf(tabs.count()) - } + var tabsIdentifier by remember { mutableStateOf(tabs.count()) } TabPanel( modifier = modifier, @@ -123,7 +119,7 @@ fun TabPanel( Icon( imageVector = Icons.Default.Add, contentDescription = null, - tint = MaterialTheme.colors.primary + tint = MaterialTheme.colors.primaryVariant, ) } } @@ -138,9 +134,9 @@ fun Tab(title: MutableState, selected: Boolean, onClick: () -> Unit, onC 0.dp Box { val backgroundColor = if (selected) - MaterialTheme.colors.tabColorActive + MaterialTheme.colors.surface else - MaterialTheme.colors.tabColorInactive + MaterialTheme.colors.background Row( modifier = Modifier diff --git a/src/main/kotlin/app/ui/components/ScrollableLazyColumn.kt b/src/main/kotlin/app/ui/components/ScrollableLazyColumn.kt index 112bf9d..4878656 100644 --- a/src/main/kotlin/app/ui/components/ScrollableLazyColumn.kt +++ b/src/main/kotlin/app/ui/components/ScrollableLazyColumn.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import app.theme.scrollbarHover -import app.theme.scrollbarUnhover +import app.theme.scrollbarNormal @Composable fun ScrollableLazyColumn( @@ -37,7 +37,7 @@ fun ScrollableLazyColumn( .fillMaxHeight() .padding(end = 4.dp), style = LocalScrollbarStyle.current.copy( - unhoverColor = MaterialTheme.colors.scrollbarUnhover, + unhoverColor = MaterialTheme.colors.scrollbarNormal, hoverColor = MaterialTheme.colors.scrollbarHover, ), adapter = rememberScrollbarAdapter( diff --git a/src/main/kotlin/app/ui/components/SideMenuSubentry.kt b/src/main/kotlin/app/ui/components/SideMenuSubentry.kt index 2dcee39..2ba2729 100644 --- a/src/main/kotlin/app/ui/components/SideMenuSubentry.kt +++ b/src/main/kotlin/app/ui/components/SideMenuSubentry.kt @@ -47,7 +47,7 @@ fun SideMenuSubentry( modifier = Modifier .padding(horizontal = 8.dp) .size(16.dp), - tint = MaterialTheme.colors.primary, + tint = MaterialTheme.colors.primaryVariant, ) Text( diff --git a/src/main/kotlin/app/ui/components/TextLink.kt b/src/main/kotlin/app/ui/components/TextLink.kt index f2e0a19..86505f9 100644 --- a/src/main/kotlin/app/ui/components/TextLink.kt +++ b/src/main/kotlin/app/ui/components/TextLink.kt @@ -26,7 +26,7 @@ fun TextLink( val textColor = if (isHovered == colorsInverted) { MaterialTheme.colors.primaryTextColor } else { - MaterialTheme.colors.primary + MaterialTheme.colors.primaryVariant } Text( diff --git a/src/main/kotlin/app/ui/dialogs/AppInfoDialog.kt b/src/main/kotlin/app/ui/dialogs/AppInfoDialog.kt index b75588e..9d09d6d 100644 --- a/src/main/kotlin/app/ui/dialogs/AppInfoDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/AppInfoDialog.kt @@ -14,6 +14,7 @@ import app.AppConstants import app.AppConstants.openSourceProjects import app.Project import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.ScrollableLazyColumn import app.ui.components.TextLink @@ -64,7 +65,8 @@ fun AppInfoDialog( modifier = Modifier .padding(top = 16.dp, end = 8.dp) .align(Alignment.End), - onClick = onClose + onClick = onClose, + colors = textButtonColors(), ) { Text("Close") } diff --git a/src/main/kotlin/app/ui/dialogs/CloneDialog.kt b/src/main/kotlin/app/ui/dialogs/CloneDialog.kt index 83567ae..54a78c6 100644 --- a/src/main/kotlin/app/ui/dialogs/CloneDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/CloneDialog.kt @@ -18,7 +18,9 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import app.git.CloneStatus +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton import app.viewmodels.CloneViewModel import openDirectoryDialog @@ -106,6 +108,7 @@ private fun CloneInput( textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), maxLines = 1, value = url, + colors = outlinedTextFieldColors(), onValueChange = { cloneViewModel.resetStateIfError() url = it @@ -131,6 +134,7 @@ private fun CloneInput( maxLines = 1, label = { Text("Directory") }, value = directory, + colors = outlinedTextFieldColors(), onValueChange = { cloneViewModel.resetStateIfError() directory = it @@ -190,6 +194,7 @@ private fun CloneInput( previous = cloneButtonFocusRequester next = urlFocusRequester }, + colors = textButtonColors(), onClick = { onClose() } @@ -248,6 +253,7 @@ private fun Cloning(cloneViewModel: CloneViewModel, cloneStatusValue: CloneStatu end = 8.dp ) .align(Alignment.End), + colors = textButtonColors(), onClick = { cloneViewModel.cancelClone() } diff --git a/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt b/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt index 858f439..2ac7282 100644 --- a/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt @@ -19,9 +19,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import app.extensions.handMouseClickable -import app.theme.borderColor -import app.theme.primaryTextColor -import app.theme.secondaryTextColor +import app.theme.* import app.ui.components.PrimaryButton import app.viewmodels.RemotesViewModel import org.eclipse.jgit.transport.RemoteConfig @@ -230,6 +228,7 @@ fun EditRemotesDialog( }, textStyle = TextStyle.Default.copy(color = MaterialTheme.colors.primaryTextColor), maxLines = 1, + colors = outlinedTextFieldColors(), modifier = Modifier .fillMaxWidth() .padding(vertical = 8.dp) @@ -251,6 +250,7 @@ fun EditRemotesDialog( }, textStyle = TextStyle.Default.copy(color = MaterialTheme.colors.primaryTextColor), maxLines = 1, + colors = outlinedTextFieldColors(), modifier = Modifier .fillMaxWidth() .padding(vertical = 8.dp) @@ -271,6 +271,7 @@ fun EditRemotesDialog( }, textStyle = TextStyle.Default.copy(color = MaterialTheme.colors.primaryTextColor), maxLines = 1, + colors = outlinedTextFieldColors(), modifier = Modifier .fillMaxWidth() .padding(vertical = 8.dp) @@ -289,6 +290,7 @@ fun EditRemotesDialog( TextButton( modifier = Modifier.padding(end = 8.dp), enabled = remoteChanged, + colors = textButtonColors(), onClick = { remotesEditorData = remotesEditorData.copy( selectedRemote = selectedRemote.copy( diff --git a/src/main/kotlin/app/ui/dialogs/MaterialDialog.kt b/src/main/kotlin/app/ui/dialogs/MaterialDialog.kt index 0f0c7fa..c471fe4 100644 --- a/src/main/kotlin/app/ui/dialogs/MaterialDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/MaterialDialog.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.* import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupPositionProvider -import app.theme.dialogBackgroundColor +import app.theme.dialogOverlay @Composable fun MaterialDialog( @@ -36,7 +36,7 @@ fun MaterialDialog( Box( modifier = Modifier .fillMaxSize() - .background(dialogBackgroundColor), + .background(MaterialTheme.colors.dialogOverlay), contentAlignment = alignment, ) { Box( diff --git a/src/main/kotlin/app/ui/dialogs/MergeDialog.kt b/src/main/kotlin/app/ui/dialogs/MergeDialog.kt index f91319d..d8c574a 100644 --- a/src/main/kotlin/app/ui/dialogs/MergeDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/MergeDialog.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.input.pointer.isPrimaryPressed import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @OptIn(ExperimentalFoundationApi::class) @@ -89,6 +90,7 @@ fun MergeDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/dialogs/NewBranchDialog.kt b/src/main/kotlin/app/ui/dialogs/NewBranchDialog.kt index 932f444..f5a8c16 100644 --- a/src/main/kotlin/app/ui/dialogs/NewBranchDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/NewBranchDialog.kt @@ -15,7 +15,9 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @OptIn(ExperimentalComposeUiApi::class) @@ -53,6 +55,7 @@ fun NewBranchDialog( singleLine = true, label = { Text("New branch name", fontSize = 14.sp) }, textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), + colors = outlinedTextFieldColors(), onValueChange = { branchField = it }, @@ -64,6 +67,7 @@ fun NewBranchDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/dialogs/NewTagDialog.kt b/src/main/kotlin/app/ui/dialogs/NewTagDialog.kt index 647b86c..c3fdb9d 100644 --- a/src/main/kotlin/app/ui/dialogs/NewTagDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/NewTagDialog.kt @@ -15,7 +15,9 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @OptIn(ExperimentalComposeUiApi::class) @@ -53,6 +55,7 @@ fun NewTagDialog( singleLine = true, label = { Text("New tag name", fontSize = 14.sp) }, textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), + colors = outlinedTextFieldColors(), onValueChange = { tagField = it }, @@ -64,6 +67,7 @@ fun NewTagDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/dialogs/PasswordDialog.kt b/src/main/kotlin/app/ui/dialogs/PasswordDialog.kt index 5b026dd..7bdbe7e 100644 --- a/src/main/kotlin/app/ui/dialogs/PasswordDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/PasswordDialog.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor import app.ui.components.PrimaryButton @@ -61,6 +62,7 @@ fun PasswordDialog( singleLine = true, label = { Text("Password", fontSize = 14.sp) }, textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), + colors = outlinedTextFieldColors(), onValueChange = { passwordField = it }, diff --git a/src/main/kotlin/app/ui/dialogs/RebaseDialog.kt b/src/main/kotlin/app/ui/dialogs/RebaseDialog.kt index ee05da8..6799e0e 100644 --- a/src/main/kotlin/app/ui/dialogs/RebaseDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/RebaseDialog.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @OptIn(ExperimentalFoundationApi::class) @@ -67,6 +68,7 @@ fun RebaseDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/dialogs/ResetDialog.kt b/src/main/kotlin/app/ui/dialogs/ResetDialog.kt index 30b73e6..3a7a4c3 100644 --- a/src/main/kotlin/app/ui/dialogs/ResetDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/ResetDialog.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.unit.dp import app.git.ResetType import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @Composable @@ -60,6 +61,7 @@ fun ResetBranchDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/dialogs/SettingsDialog.kt b/src/main/kotlin/app/ui/dialogs/SettingsDialog.kt index 8807323..7b9e17d 100644 --- a/src/main/kotlin/app/ui/dialogs/SettingsDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/SettingsDialog.kt @@ -12,7 +12,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import app.AppPreferences import app.DropDownOption +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.theme.themesList import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -68,6 +70,7 @@ fun SettingsDialog( modifier = Modifier .padding(end = 8.dp) .align(Alignment.End), + colors = textButtonColors(), onClick = { savePendingSettings( appPreferences = appPreferences, @@ -244,10 +247,7 @@ fun SettingIntInput( } } }, - colors = TextFieldDefaults.textFieldColors( - backgroundColor = MaterialTheme.colors.background, - textColor = MaterialTheme.colors.primaryTextColor, - ), + colors = outlinedTextFieldColors(), maxLines = 1, textStyle = LocalTextStyle.current.copy(textAlign = TextAlign.End), ) diff --git a/src/main/kotlin/app/ui/dialogs/UserPasswordDialog.kt b/src/main/kotlin/app/ui/dialogs/UserPasswordDialog.kt index 83ada7e..260383e 100644 --- a/src/main/kotlin/app/ui/dialogs/UserPasswordDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/UserPasswordDialog.kt @@ -16,7 +16,9 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.theme.outlinedTextFieldColors import app.theme.primaryTextColor +import app.theme.textButtonColors import app.ui.components.PrimaryButton @OptIn(ExperimentalComposeUiApi::class) @@ -64,6 +66,7 @@ fun UserPasswordDialog( }, value = userField, singleLine = true, + colors = outlinedTextFieldColors(), label = { Text("User", fontSize = 14.sp) }, textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), onValueChange = { @@ -89,6 +92,7 @@ fun UserPasswordDialog( singleLine = true, label = { Text("Password", fontSize = 14.sp) }, textStyle = TextStyle(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), + colors = outlinedTextFieldColors(), onValueChange = { passwordField = it }, @@ -102,6 +106,7 @@ fun UserPasswordDialog( ) { TextButton( modifier = Modifier.padding(end = 8.dp), + colors = textButtonColors(), onClick = { onReject() } diff --git a/src/main/kotlin/app/ui/log/Log.kt b/src/main/kotlin/app/ui/log/Log.kt index b5e02f5..6984be8 100644 --- a/src/main/kotlin/app/ui/log/Log.kt +++ b/src/main/kotlin/app/ui/log/Log.kt @@ -33,7 +33,6 @@ import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -193,7 +192,7 @@ fun Log( HorizontalScrollbar( modifier = Modifier.align(Alignment.BottomStart).width(graphWidth) .padding(start = 4.dp, bottom = 4.dp), style = LocalScrollbarStyle.current.copy( - unhoverColor = MaterialTheme.colors.scrollbarUnhover, + unhoverColor = MaterialTheme.colors.scrollbarNormal, hoverColor = MaterialTheme.colors.scrollbarHover, ), adapter = rememberScrollbarAdapter(horizontalScrollState) ) @@ -264,7 +263,7 @@ fun SearchFilter( label = { Text("Search by message, author name or commit ID") }, - colors = TextFieldDefaults.textFieldColors(backgroundColor = MaterialTheme.colors.background), + colors = textFieldColors(), textStyle = TextStyle.Default.copy(fontSize = 14.sp, color = MaterialTheme.colors.primaryTextColor), trailingIcon = { Row( @@ -835,7 +834,10 @@ fun DividerLog(modifier: Modifier, graphWidth: Dp) { .pointerHoverIcon(PointerIcon(Cursor(Cursor.E_RESIZE_CURSOR))) ) { Box( - modifier = Modifier.fillMaxHeight().width(1.dp).background(color = MaterialTheme.colors.primary) + modifier = Modifier + .fillMaxHeight() + .width(1.dp) + .background(color = MaterialTheme.colors.primaryVariant) .align(Alignment.Center) ) } @@ -1004,7 +1006,7 @@ fun BranchChip( painter = painterResource("location.svg"), contentDescription = null, modifier = Modifier.padding(end = 6.dp), - tint = MaterialTheme.colors.primary, + tint = MaterialTheme.colors.primaryVariant, ) } } @@ -1077,7 +1079,7 @@ fun RefChip( modifier = Modifier.padding(6.dp).size(14.dp), painter = painterResource(icon), contentDescription = null, - tint = MaterialTheme.colors.inversePrimaryTextColor, + tint = MaterialTheme.colors.background, ) } Text(