Doodle <https://github.com/nacular/doodle/releases...
# doodle
n
Doodle 0.7.0 released. New Date controls
MonthPanel
 is a customizable control that shows the days of a given month in a year. The panel allows full customization of the rendering for each day as well as selection handling via an 
ItemVisualizer
. This control is a building block that can be used to create calendars and date selectors. Days in the month are rendered using the 
ItemVisualizer
. This can be set directly when creating the panel, or it can be provided via an installed 
MonthPanelBehavior
. Selection of days within the panel is controlled by the 
SelectionModel
 installed when the panel is created.
Copy code
val today = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date

val panel = MonthPanel(today, /*itemVisualizer, selectionModel*/)
This release also contains BasicMonthPanelBehavior, which provides a simple day visualizer. You can also install it into a 
Theme
using 
basicMonthPanelBehavior(...)
. There is also a new 
DaysOfTheWeekPanel
 control for displaying days of the week intended for use along with 
MonthPanel
. It allows fully customizable display for each day (via an 
ItemVisualizer
) as well as control over how the days are sorted. New behaviors in 
BasicTheme
 for 
MonthPanel
 via 
basicMonthPanelBehavior(...)
 and 
DaysOfTheWeekPanel
 via 
basicDaysOfTheWeekPanelBehavior(...)
Range Sliders New 
RangeSlider
 and 
CircularRangeSlider
 controls that allow the selection of a range of strongly-typed values. These are analogs to 
Slider
 and 
CiruclarSlider
. Both also have new behaviors in Basic Theme. You can create these sliders in a similar fashion to the value sliders.
Copy code
val slider         = RangeSlider        (range = 0 .. 100, value = 4 .. 10)
val circularSlider = CircularRangeSlider(range = 0 .. 100, value = 4 .. 10)
Tick Marks For (BasicSliderBehavior and BasicRangeSliderBehavior) The basic behaviors can now display tick marks when a 
Slider
 or 
RangeSlider
 has 
ticks
 set to a value larger than 
1
. This is done via their 
showTicks
 parameter. Ticks can be shown either on the slider's groove, or on both the groove and range. More Flexible Lists
List
 and its variants now have better support for items positioned in an arbitrary way. Previously, the 
List
 class itself assumed a vertical layout and only used the y-component of its viewport to determine which items to render. This has been updated so both the top-left and bottom-right points on the List are now used. There are now two new `ItemPositioner`s to make laying out vertical hand horizontal lists easier. 
VerticalListPositioner
 allows you to specify the number of columns for the list, while 
HorizontalListPositioner
 lets you give a number of rows. These can be used directly with custom `ListBehavior`s or, they can be used with 
BasicListBehavior
 directly, or via the 
basicListBehavior
 and 
basicHorizontalListBehavior
 modules when using a Theme. Vertical + Horizontal List Variants List contents can be positioned using an 
ItemPositioner
, which the List gets from its 
ListBehavior
. But specifying the layout for a single list means installing a behavior on it directly, since any theme used will provide the same behavior to all lists. The new variants allow themes to identify lists that should be explicitly vertical or horizontal for cases when it is less convenient to use explicit behaviors.
Copy code
// ... 
import io.nacular.doodle.theme.basic.list.basicHorizontalListBehavior
import io.nacular.doodle.theme.basic.BasicTheme.Companion.basicHorizontalListBehavior

val manualHorizontalList = List(0..10).apply {
    acceptsThemes = false                                                       // prevent behavior from being swapped if theme present
    behavior      = basicHorizontalListBehavior(itemWidth = 300.0, numRows = 2) // or some other custom behavior
}

// Will be same as above when using BasicTheme.basicHorizontalListBehavior() module
val autoHorizontalList = HorizontalList(0..10, numRows = 2)
New Platform-specific Desktop Artifacts Previously apps would depend on the 
desktop-jvm
 library when targeting desktop. The problem with this approach is skiko is inherently platform-specific and the published library would depend on the build machine. Therefore, apps would only run on the same OS as the library build machine. This release introduces new platform library artifacts to fix this issue. Apps will now depend on the new 
desktop-jvm-{platform}
 library instead.
🔥 1