Nick
12/12/2021, 2:00 PMValueSlider
, Slider
and CircularSlider
were previously tied to a Double
. This meant it was not easy to force use cases where integer values would be more appropriate. This is now fixed, as these controls are now strongly typed to a numeric value instead of only supporting Double.
val slider = Slider(10 .. 20)
slider.value = 11.2 // will not compile since slider has a type of Int
More Flexible Layouts
Layouts are generally triggered whenever their container's size
changes or a child of the container has a bounds
change. But there are cases when this default behavior does not work as well. A good example is a Layout that depends on a child's idealSize
. Such a Layout won't be invoked when the idealSizes
change, and will be out of date in some cases.
This is now fixed by giving Layouts a chance to act when min/ideal-size changes for children of a Container. There are actually 3 new APIs that provide a lot of flexibility in how Layouts behave.
public fun requiresLayout(container: PositionableContainer, old: Size, new: Size): Boolean = true
public fun requiresLayout(child: Positionable, of: PositionableContainer, old: Rectangle, new: Rectangle): Boolean = false
public fun requiresLayout(child: Positionable, of: PositionableContainer, old: SizePreferences, new: SizePreferences): Boolean = false
Form Controls
• New switch
and switchList
form controls
• New spinner
form control
• New framed
form control to wrap other controls in a configurable container
• New check
form control with arbitrary view as annotation
• radioList
, checkList
, named
and labeled
form controls now allow a custom renderer and insets for their container
• sub-forms now allow custom Insets
and behavior