Skip to content

Commit 066ba2a

Browse files
L&F, Renderer fix
1 parent fd6572a commit 066ba2a

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

swingio/src/main/scala/net/bulbyvr/swing/io/SwingProp.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import scala.reflect.TypeTest
1010
import scala.reflect.ClassTag
1111
import java.awt.Window
1212
import wrapper as swingio
13+
import javax.swing.UIManager
1314
sealed class SwingProp[F[_], A] private[io] {
1415
import SwingProp.*
1516
def :=[V](v: V): ConstantModifier[F, A, V] =
@@ -168,6 +169,10 @@ private trait Props[F[_]](using A: Async[F]) extends LowPriorityProps[F] {
168169
given iconPropNone[A, E <: swingio.WithIcon[F]]: Setter[F, E, "icon", Option[Nothing]] =
169170
(e, v) => e.icon.set(v).toResource
170171
lazy val icon = prop["icon"]
172+
173+
given lookAndFeelProp[E <: swingio.MainFrame[F]]: Setter[F, E, "lookAndFeel", String] =
174+
(e, v) => A.delay { UIManager.setLookAndFeel(v) }.evalOn(AwtEventDispatchEC).toResource
175+
lazy val lookAndFeel = prop["lookAndFeel"]
171176
}
172177

173178
private trait LowPriorityProps[F[_]] (using F: Async[F]) {

swingio/src/main/scala/net/bulbyvr/swing/io/wrapper/ListView.scala

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,25 @@ object ListView {
3737
protected def render(isSelected: Boolean, focused: Boolean, a: A, index: Int): Resource[F, Component[F]]
3838
}
3939
trait TextRenderer[F[_]: Async, -A](dispatcher: Dispatcher[F]) extends Renderer[F, A] {
40-
override lazy val peer: ListCellRenderer[? >: A] = new ListCellRenderer[A] {
40+
override lazy val peer: ListCellRenderer[? >: A] = new JLabel with ListCellRenderer[A] {
41+
setOpaque(true)
42+
private val defaults = javax.swing.UIManager.getDefaults()
43+
private val bg = defaults.get("ComboBox.background").asInstanceOf[java.awt.Color]
44+
private val fg = defaults.get("ComboBox.foreground").asInstanceOf[java.awt.Color]
45+
private val selBg = defaults.get("ComboBox.selectionBackground").asInstanceOf[java.awt.Color]
46+
private val selFg = defaults.get("ComboBox.selectionForeground").asInstanceOf[java.awt.Color]
47+
4148
def getListCellRendererComponent(list: JList[? <: A], a: A, index: Int, isSelected: Boolean, focused: Boolean): JComponent = {
42-
JLabel(dispatcher.unsafeRunSync[String](render(isSelected, focused, a, index)))
49+
this.setText(dispatcher.unsafeRunSync[String](render(isSelected, focused, a, index)))
50+
51+
if (isSelected) {
52+
setBackground(selBg)
53+
setForeground(selFg)
54+
} else {
55+
setBackground(bg)
56+
setForeground(fg)
57+
}
58+
this
4359
}
4460
}
4561
protected def render(isSelected: Boolean, focused: Boolean, a: A, index: Int): F[String]

0 commit comments

Comments
 (0)