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