From 60a1ef21d8925b9cf8f4be15a2bcba0704d26d43 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Fri, 27 May 2022 20:07:24 +0200 Subject: [PATCH] Added hand icon on hover where it's intended to be --- src/main/kotlin/app/App.kt | 5 ++++- .../kotlin/app/extensions/ModifierExtensions.kt | 10 ++++++++++ src/main/kotlin/app/ui/Blame.kt | 13 +++++++++++-- src/main/kotlin/app/ui/CommitChanges.kt | 2 +- src/main/kotlin/app/ui/Diff.kt | 9 ++++++++- src/main/kotlin/app/ui/Menu.kt | 15 ++++++++++----- src/main/kotlin/app/ui/Remotes.kt | 8 ++++++-- src/main/kotlin/app/ui/UncommitedChanges.kt | 9 +++------ src/main/kotlin/app/ui/components/Expandable.kt | 3 ++- .../app/ui/components/RepositoriesTabPanel.kt | 11 +++++++++-- .../kotlin/app/ui/components/SecondaryButton.kt | 3 ++- src/main/kotlin/app/ui/components/TextLink.kt | 3 ++- .../kotlin/app/ui/dialogs/EditRemotesDialog.kt | 13 ++++++++++--- src/main/kotlin/app/ui/dialogs/ResetDialog.kt | 1 + src/main/kotlin/app/ui/log/Log.kt | 8 ++++++-- 15 files changed, 85 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/app/App.kt b/src/main/kotlin/app/App.kt index 2f98cff..55839ea 100644 --- a/src/main/kotlin/app/App.kt +++ b/src/main/kotlin/app/App.kt @@ -16,6 +16,8 @@ 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 import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp @@ -204,7 +206,8 @@ class App { IconButton( modifier = Modifier .padding(horizontal = 8.dp) - .size(24.dp), + .size(24.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), onClick = onOpenSettings ) { Icon( diff --git a/src/main/kotlin/app/extensions/ModifierExtensions.kt b/src/main/kotlin/app/extensions/ModifierExtensions.kt index fa1f812..66b1a26 100644 --- a/src/main/kotlin/app/extensions/ModifierExtensions.kt +++ b/src/main/kotlin/app/extensions/ModifierExtensions.kt @@ -1,8 +1,12 @@ package app.extensions import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon fun Modifier.backgroundIf(condition: Boolean, color: Color): Modifier { return if (condition) { @@ -10,4 +14,10 @@ fun Modifier.backgroundIf(condition: Boolean, color: Color): Modifier { } else { this } +} + +@OptIn(ExperimentalComposeUiApi::class) +fun Modifier.handMouseClickable(onClick: () -> Unit): Modifier { + return this.clickable { onClick() } + .pointerHoverIcon(PointerIconDefaults.Hand) } \ No newline at end of file diff --git a/src/main/kotlin/app/ui/Blame.kt b/src/main/kotlin/app/ui/Blame.kt index f8f4e47..1223e78 100644 --- a/src/main/kotlin/app/ui/Blame.kt +++ b/src/main/kotlin/app/ui/Blame.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalComposeUiApi::class) + package app.ui import androidx.compose.foundation.Image @@ -10,12 +12,16 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.extensions.handMouseClickable import app.extensions.lineAt import app.theme.primaryTextColor import app.ui.components.PrimaryButton @@ -52,7 +58,7 @@ fun Blame( .width(200.dp) .fillMaxHeight() .background(MaterialTheme.colors.surface) - .clickable { onSelectCommit(commit) }, + .handMouseClickable { onSelectCommit(commit) }, verticalArrangement = Arrangement.Center, ) { Text( @@ -125,6 +131,7 @@ fun MinimizedBlame( IconButton( onClick = onClose, modifier = Modifier.padding(horizontal = 16.dp) + .pointerHoverIcon(PointerIconDefaults.Hand) ) { Image( painter = painterResource("close.svg"), @@ -158,7 +165,9 @@ private fun Header( Spacer(modifier = Modifier.weight(1f)) IconButton( - onClick = onClose + onClick = onClose, + modifier = Modifier + .pointerHoverIcon(PointerIconDefaults.Hand) ) { Image( painter = painterResource("close.svg"), diff --git a/src/main/kotlin/app/ui/CommitChanges.kt b/src/main/kotlin/app/ui/CommitChanges.kt index 21199a6..7660dc9 100644 --- a/src/main/kotlin/app/ui/CommitChanges.kt +++ b/src/main/kotlin/app/ui/CommitChanges.kt @@ -210,7 +210,7 @@ fun CommitLogChanges( modifier = Modifier .height(40.dp) .fillMaxWidth() - .clickable { + .handMouseClickable { onDiffSelected(diffEntry) } .backgroundIf( diff --git a/src/main/kotlin/app/ui/Diff.kt b/src/main/kotlin/app/ui/Diff.kt index 5397bef..ce477e3 100644 --- a/src/main/kotlin/app/ui/Diff.kt +++ b/src/main/kotlin/app/ui/Diff.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalComposeUiApi::class) + package app.ui import androidx.compose.foundation.Image @@ -14,9 +16,12 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.loadImageBitmap import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontFamily @@ -326,7 +331,9 @@ fun DiffHeader( } IconButton( - onClick = onCloseDiffView + onClick = onCloseDiffView, + modifier = Modifier + .pointerHoverIcon(PointerIconDefaults.Hand) ) { Image( painter = painterResource("close.svg"), diff --git a/src/main/kotlin/app/ui/Menu.kt b/src/main/kotlin/app/ui/Menu.kt index 3f73fff..fd3aa81 100644 --- a/src/main/kotlin/app/ui/Menu.kt +++ b/src/main/kotlin/app/ui/Menu.kt @@ -17,9 +17,12 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.extensions.handMouseClickable import app.theme.primaryTextColor import app.ui.context_menu.* import app.viewmodels.MenuViewModel @@ -106,7 +109,8 @@ fun Menu( Box { IconMenuButton( - modifier = Modifier.padding(end = 8.dp), + modifier = Modifier + .padding(end = 8.dp), icon = painterResource("more_vert.svg"), onClick = { showAdditionalOptionsDropDownMenu = true @@ -151,7 +155,7 @@ fun MenuButton( Box( modifier = modifier .padding(horizontal = 2.dp) - .clickable { if (enabled) onClick() } + .handMouseClickable { if (enabled) onClick() } .border(ButtonDefaults.outlinedBorder, RoundedCornerShape(3.dp)) .padding(vertical = 8.dp, horizontal = 16.dp), ) { @@ -196,7 +200,7 @@ fun ExtendedMenuButton( Row(modifier = Modifier.height(IntrinsicSize.Min)) { Box( modifier = modifier - .clickable { if (enabled) onClick() } + .handMouseClickable { if (enabled) onClick() } .border(ButtonDefaults.outlinedBorder, RoundedCornerShape(topStart = 3.dp, bottomStart = 3.dp)) .padding(vertical = 8.dp, horizontal = 16.dp), ) { @@ -226,7 +230,7 @@ fun ExtendedMenuButton( .width(20.dp) .fillMaxHeight() .border(ButtonDefaults.outlinedBorder, RoundedCornerShape(topEnd = 3.dp, bottomEnd = 3.dp)) - .clickable { + .handMouseClickable { showDropDownMenu = true }, contentAlignment = Alignment.Center, @@ -266,7 +270,8 @@ fun IconMenuButton( } IconButton( - modifier = modifier, + modifier = modifier + .pointerHoverIcon(PointerIconDefaults.Hand), enabled = enabled, onClick = onClick, ) { diff --git a/src/main/kotlin/app/ui/Remotes.kt b/src/main/kotlin/app/ui/Remotes.kt index e78fcf0..96f8d34 100644 --- a/src/main/kotlin/app/ui/Remotes.kt +++ b/src/main/kotlin/app/ui/Remotes.kt @@ -1,4 +1,4 @@ -@file:OptIn(ExperimentalFoundationApi::class) +@file:OptIn(ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class) package app.ui @@ -12,7 +12,10 @@ import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.MaterialTheme import androidx.compose.runtime.* +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import app.extensions.simpleName @@ -69,7 +72,8 @@ fun Remotes( onClick = { showEditRemotesDialog = true }, modifier = Modifier .padding(end = 8.dp) - .size(16.dp), + .size(16.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), ) { Icon( painter = painterResource("settings.svg"), diff --git a/src/main/kotlin/app/ui/UncommitedChanges.kt b/src/main/kotlin/app/ui/UncommitedChanges.kt index 86beb6e..59136f6 100644 --- a/src/main/kotlin/app/ui/UncommitedChanges.kt +++ b/src/main/kotlin/app/ui/UncommitedChanges.kt @@ -31,10 +31,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import app.extensions.backgroundIf -import app.extensions.fileName -import app.extensions.isMerging -import app.extensions.parentDirectoryPath +import app.extensions.* import app.git.DiffEntryType import app.git.StatusEntry import app.theme.* @@ -238,7 +235,7 @@ fun UncommitedChangesButtons( .height(40.dp) .clip(MaterialTheme.shapes.small.copy(topStart = CornerSize(0.dp), bottomStart = CornerSize(0.dp))) .background(MaterialTheme.colors.confirmationButton) - .clickable { showDropDownMenu = true } + .handMouseClickable { showDropDownMenu = true } ) { Icon( Icons.Default.ArrowDropDown, @@ -467,7 +464,7 @@ private fun FileEntry( Box( modifier = Modifier - .clickable { onClick() } + .handMouseClickable { onClick() } .fillMaxWidth() .pointerMoveFilter( onEnter = { diff --git a/src/main/kotlin/app/ui/components/Expandable.kt b/src/main/kotlin/app/ui/components/Expandable.kt index 95221b0..b5b2279 100644 --- a/src/main/kotlin/app/ui/components/Expandable.kt +++ b/src/main/kotlin/app/ui/components/Expandable.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import app.extensions.handMouseClickable @OptIn(ExperimentalAnimationApi::class) @Composable @@ -20,7 +21,7 @@ fun VerticalExpandable( ) { Column { Box( - modifier = Modifier.clickable { + modifier = Modifier.handMouseClickable { onExpand() } ) { diff --git a/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt b/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt index 211f894..6ffba32 100644 --- a/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt +++ b/src/main/kotlin/app/ui/components/RepositoriesTabPanel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalComposeUiApi::class) + package app.ui.components import androidx.compose.foundation.background @@ -13,15 +15,19 @@ import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Close import androidx.compose.runtime.* import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import app.AppStateManager import app.di.AppComponent import app.di.DaggerTabComponent +import app.extensions.handMouseClickable import app.theme.primaryTextColor import app.theme.tabColorActive import app.theme.tabColorInactive @@ -113,7 +119,8 @@ fun TabPanel( IconButton( onClick = onNewTabClicked, modifier = Modifier - .size(36.dp), + .size(36.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), ) { Icon( imageVector = Icons.Default.Add, @@ -144,7 +151,7 @@ fun Tab(title: MutableState, selected: Boolean, onClick: () -> Unit, onC .shadow(elevation = elevation) .padding(start = 2.dp, end = 2.dp, top = 2.dp) .clip(RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp)) - .clickable { onClick() } + .handMouseClickable { onClick() } .background(backgroundColor), verticalAlignment = Alignment.CenterVertically, ) { diff --git a/src/main/kotlin/app/ui/components/SecondaryButton.kt b/src/main/kotlin/app/ui/components/SecondaryButton.kt index 9025732..87017c7 100644 --- a/src/main/kotlin/app/ui/components/SecondaryButton.kt +++ b/src/main/kotlin/app/ui/components/SecondaryButton.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import app.extensions.handMouseClickable @Composable fun SecondaryButton( @@ -26,7 +27,7 @@ fun SecondaryButton( .padding(horizontal = 16.dp) .clip(RoundedCornerShape(5.dp)) .background(backgroundButton) - .clickable { onClick() }, + .handMouseClickable { onClick() }, ) { Text( text = text, diff --git a/src/main/kotlin/app/ui/components/TextLink.kt b/src/main/kotlin/app/ui/components/TextLink.kt index 8e5d755..eafcb41 100644 --- a/src/main/kotlin/app/ui/components/TextLink.kt +++ b/src/main/kotlin/app/ui/components/TextLink.kt @@ -10,6 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import app.extensions.handMouseClickable import app.extensions.openUrlInBrowser import app.theme.primaryTextColor @@ -33,7 +34,7 @@ fun TextLink( text = text, modifier = Modifier .hoverable(hoverInteraction) - .clickable { + .handMouseClickable { openUrlInBrowser(url) } .then(modifier), diff --git a/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt b/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt index f7ef9e9..6a573aa 100644 --- a/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/EditRemotesDialog.kt @@ -14,9 +14,12 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.PointerIconDefaults +import androidx.compose.ui.input.pointer.pointerHoverIcon 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 @@ -89,6 +92,8 @@ fun EditRemotesDialog( IconButton( onClick = onDismiss, + modifier = Modifier + .pointerHoverIcon(PointerIconDefaults.Hand) ) { Icon( imageVector = Icons.Default.Clear, @@ -126,7 +131,7 @@ fun EditRemotesDialog( color = MaterialTheme.colors.primaryTextColor, modifier = Modifier .fillMaxWidth() - .clickable { + .handMouseClickable { remotesEditorData = remotesEditorData.copy(selectedRemote = remote) } .background(background) @@ -141,7 +146,8 @@ fun EditRemotesDialog( .background(MaterialTheme.colors.background) ) { IconButton( - modifier = Modifier.size(36.dp), + modifier = Modifier.size(36.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), onClick = { val remotesWithNew = remotesEditorData.listRemotes.toMutableList() val newRemote = RemoteWrapper( @@ -168,7 +174,8 @@ fun EditRemotesDialog( ) } IconButton( - modifier = Modifier.size(36.dp), + modifier = Modifier.size(36.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), enabled = selectedRemote != null, onClick = { if (selectedRemote != null) diff --git a/src/main/kotlin/app/ui/dialogs/ResetDialog.kt b/src/main/kotlin/app/ui/dialogs/ResetDialog.kt index 0cd299f..30b73e6 100644 --- a/src/main/kotlin/app/ui/dialogs/ResetDialog.kt +++ b/src/main/kotlin/app/ui/dialogs/ResetDialog.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.isPrimaryPressed +import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.unit.dp import app.git.ResetType import app.theme.primaryTextColor diff --git a/src/main/kotlin/app/ui/log/Log.kt b/src/main/kotlin/app/ui/log/Log.kt index 493a99a..f09064c 100644 --- a/src/main/kotlin/app/ui/log/Log.kt +++ b/src/main/kotlin/app/ui/log/Log.kt @@ -524,7 +524,8 @@ fun GraphHeader( ) IconButton( - modifier = Modifier.padding(end = 8.dp), + modifier = Modifier.padding(end = 8.dp) + .pointerHoverIcon(PointerIconDefaults.Hand), onClick = onShowSearch ) { Icon( @@ -1022,9 +1023,12 @@ fun RefChip( endingContent: @Composable () -> Unit = {}, ) { Box( - modifier = Modifier.padding(horizontal = 4.dp).clip(RoundedCornerShape(16.dp)) + modifier = Modifier + .padding(horizontal = 4.dp) + .clip(RoundedCornerShape(16.dp)) .border(width = 2.dp, color = color, shape = RoundedCornerShape(16.dp)) .combinedClickable(onDoubleClick = onCheckoutRef, onClick = {}) + .pointerHoverIcon(PointerIconDefaults.Hand) ) { ContextMenuArea( items = contextMenuItemsList