ValueSlider
, 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
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
- New
switch
andswitchList
form controls - New
spinner
form control - New
framed
form control to wrap other controls in a configurable container -
radioList
,checkList
,named
andlabeled
form controls now allow a custom renderer and insets for their container - sub-forms now allow custom
Insets
andbehavior
- New
check
form control with arbitrary view as annotation
Doodle is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS. Check out the documentation and tutorials to learn more.
Top comments (0)