mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-08-05 19:59:51 +00:00
feat: add hover effect to menu items in System Tray for improved user experience
This commit is contained in:
parent
e5993b8ba1
commit
019bbfae14
@ -217,6 +217,23 @@ class SystemTrayService(
|
|||||||
val loopNone = javax.swing.JRadioButtonMenuItem("Loop: OFF", state.loopState == LoopState.NONE)
|
val loopNone = javax.swing.JRadioButtonMenuItem("Loop: OFF", state.loopState == LoopState.NONE)
|
||||||
val loopOne = javax.swing.JRadioButtonMenuItem("Loop: ONE", state.loopState == LoopState.ONE)
|
val loopOne = javax.swing.JRadioButtonMenuItem("Loop: ONE", state.loopState == LoopState.ONE)
|
||||||
val loopAll = javax.swing.JRadioButtonMenuItem("Loop: ALL", state.loopState == LoopState.ALL)
|
val loopAll = javax.swing.JRadioButtonMenuItem("Loop: ALL", state.loopState == LoopState.ALL)
|
||||||
|
|
||||||
|
val hoverBackground = UIManager.getColor("MenuItem.selectionBackground") ?: Color(75, 110, 175)
|
||||||
|
|
||||||
|
listOf(loopNone, loopOne, loopAll).forEach { item ->
|
||||||
|
item.isOpaque = true
|
||||||
|
val normalBackground = item.background
|
||||||
|
item.addMouseListener(object : MouseAdapter() {
|
||||||
|
override fun mouseEntered(e: MouseEvent) {
|
||||||
|
item.background = hoverBackground
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun mouseExited(e: MouseEvent) {
|
||||||
|
item.background = normalBackground
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
loopGroup.add(loopNone)
|
loopGroup.add(loopNone)
|
||||||
loopGroup.add(loopOne)
|
loopGroup.add(loopOne)
|
||||||
loopGroup.add(loopAll)
|
loopGroup.add(loopAll)
|
||||||
@ -318,15 +335,47 @@ class SystemTrayService(
|
|||||||
private fun createMenuItem(label: String, enabled: Boolean = true, action: () -> Unit): JMenuItem {
|
private fun createMenuItem(label: String, enabled: Boolean = true, action: () -> Unit): JMenuItem {
|
||||||
return JMenuItem(label).apply {
|
return JMenuItem(label).apply {
|
||||||
isEnabled = enabled
|
isEnabled = enabled
|
||||||
|
isOpaque = true
|
||||||
maximumSize = Dimension(Int.MAX_VALUE, preferredSize.height)
|
maximumSize = Dimension(Int.MAX_VALUE, preferredSize.height)
|
||||||
addActionListener { action() }
|
addActionListener { action() }
|
||||||
|
|
||||||
|
val normalBackground = background
|
||||||
|
val hoverBackground = UIManager.getColor("MenuItem.selectionBackground") ?: Color(75, 110, 175)
|
||||||
|
|
||||||
|
addMouseListener(object : MouseAdapter() {
|
||||||
|
override fun mouseEntered(e: MouseEvent) {
|
||||||
|
if (isEnabled) {
|
||||||
|
background = hoverBackground
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun mouseExited(e: MouseEvent) {
|
||||||
|
background = normalBackground
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCheckBoxMenuItem(label: String, selected: Boolean, action: () -> Unit): JCheckBoxMenuItem {
|
private fun createCheckBoxMenuItem(label: String, selected: Boolean, action: () -> Unit): JCheckBoxMenuItem {
|
||||||
return JCheckBoxMenuItem(label, selected).apply {
|
return JCheckBoxMenuItem(label, selected).apply {
|
||||||
|
isOpaque = true
|
||||||
maximumSize = Dimension(Int.MAX_VALUE, preferredSize.height)
|
maximumSize = Dimension(Int.MAX_VALUE, preferredSize.height)
|
||||||
addActionListener { action() }
|
addActionListener { action() }
|
||||||
|
|
||||||
|
val normalBackground = background
|
||||||
|
val hoverBackground = UIManager.getColor("MenuItem.selectionBackground") ?: Color(75, 110, 175)
|
||||||
|
|
||||||
|
addMouseListener(object : MouseAdapter() {
|
||||||
|
override fun mouseEntered(e: MouseEvent) {
|
||||||
|
if (isEnabled) {
|
||||||
|
background = hoverBackground
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun mouseExited(e: MouseEvent) {
|
||||||
|
background = normalBackground
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user