Skip to content

Commit 2d1d741

Browse files
committed
feat(ui): Add disabled pointer icon for non-selectable items
1 parent ea742f8 commit 2d1d741

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

composeApp/src/androidMain/kotlin/com/jankinwu/fntv/client/utils/PointerUtils.android.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ package com.jankinwu.fntv.client.utils
33
import androidx.compose.ui.input.pointer.PointerIcon
44

55
actual val HiddenPointerIcon: PointerIcon = PointerIcon.Default
6+
actual val DisabledPointerIcon: PointerIcon = PointerIcon.Default

composeApp/src/commonMain/kotlin/com/jankinwu/fntv/client/ui/component/common/FileTreePicker.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp
4242
import androidx.compose.ui.unit.sp
4343
import com.jankinwu.fntv.client.data.network.impl.FnOfficialApiImpl
4444
import com.jankinwu.fntv.client.ui.component.common.DirectoryContentFetcher.fetchDirectoryContents
45+
import com.jankinwu.fntv.client.utils.DisabledPointerIcon
4546
import com.jankinwu.fntv.client.ui.customSelectedCheckBoxColors
4647
import fntv_client_multiplatform.composeapp.generated.resources.Res
4748
import fntv_client_multiplatform.composeapp.generated.resources.empty_folder
@@ -551,7 +552,7 @@ private fun FileNodeItem(
551552
CheckBoxDefaults.defaultCheckBoxColors()
552553
},
553554
modifier = Modifier
554-
.pointerHoverIcon(if (isSelectable) PointerIcon.Hand else PointerIcon.Default)
555+
.pointerHoverIcon(if (isSelectable) PointerIcon.Hand else DisabledPointerIcon)
555556
.size(15.dp)
556557
)
557558
}

composeApp/src/commonMain/kotlin/com/jankinwu/fntv/client/utils/PointerUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ package com.jankinwu.fntv.client.utils
33
import androidx.compose.ui.input.pointer.PointerIcon
44

55
expect val HiddenPointerIcon: PointerIcon
6+
expect val DisabledPointerIcon: PointerIcon

composeApp/src/jvmMain/kotlin/com/jankinwu/fntv/client/utils/PointerUtils.jvm.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.jankinwu.fntv.client.utils
22

33
import androidx.compose.ui.input.pointer.PointerIcon
4+
import java.awt.BasicStroke
5+
import java.awt.Color
46
import java.awt.Point
7+
import java.awt.RenderingHints
58
import java.awt.Toolkit
69
import java.awt.image.BufferedImage
710

@@ -12,3 +15,29 @@ actual val HiddenPointerIcon: PointerIcon = PointerIcon(
1215
"Hidden"
1316
)
1417
)
18+
19+
actual val DisabledPointerIcon: PointerIcon = PointerIcon(
20+
Toolkit.getDefaultToolkit().createCustomCursor(
21+
run {
22+
val size = 32
23+
val image = BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB)
24+
val g = image.createGraphics()
25+
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
26+
27+
// Draw forbidden icon (red circle with slash)
28+
g.color = Color.RED
29+
g.stroke = BasicStroke(2f)
30+
val padding = 7
31+
g.drawOval(padding, padding, size - 2 * padding, size - 2 * padding)
32+
33+
val innerPadding = 10
34+
// Diagonal line from top-left to bottom-right
35+
g.drawLine(innerPadding, innerPadding, size - innerPadding, size - innerPadding)
36+
37+
g.dispose()
38+
image
39+
},
40+
Point(16, 16),
41+
"Disabled"
42+
)
43+
)

0 commit comments

Comments
 (0)