Glimmer DSL for SWT 4.21 is the quarterly major release that ships with a new version of SWT (released in 2021-09) as well as other big changes like JRuby 9.3.0.0 and JDK 16:
- Upgrade to SWT 4.21
- Upgrade to JDK 16.0.2
- Upgrade to JRuby 9.3.0.0
- Update packaging to rely on JDK 16
jpackage
(instead of older JDK 8javapackager
) - Renamed
Glimmer::RakeTask::Package.javapackager_extra_args
toGlimmer::RakeTask::Package.jpackage_extra_args
to match the name ofjpackage
in JDK 16 - Change
package/[os]
scaffolding placement for packaging icons intoicons/[os]
to accomodate Java 9 Module security for icon retrieval from within a JAR
The biggest difference in this version of SWT is auto-switching to Dark Mode on the Mac.
If you encounter any issues due to the big upgrade from JDK 8 to JDK 16 and jpackage for native-executable packaging, please report in an issue request. There is one annoying message that shows up during packaging with Warbler (unsupported Java version "16", defaulting to 1.7), which seems caused by running JRuby on JDK 16, but I was able to contain its damage and render it harmless (at least as far as I could tell).
In other news, a new Glimmer DSL has been brewing:
Glimmer DSL for LibUI is a prerequisite-free CRuby desktop development GUI library. No need to pre-install any prerequisites. Just install the gem and have platform-independent native GUI that just works!
# From: https://github.com/AndyObtiva/glimmer-dsl-libui#control-gallery
require 'glimmer-dsl-libui'
include Glimmer
menu('File') {
menu_item('Open') {
on_clicked do
file = open_file(MAIN_WINDOW)
puts file unless file.nil?
end
}
menu_item('Save') {
on_clicked do
file = save_file(MAIN_WINDOW)
puts file unless file.nil?
end
}
quit_menu_item {
on_clicked do
puts 'Bye Bye'
end
}
preferences_menu_item # Can optionally contain an on_clicked listener
}
menu('Edit') {
check_menu_item('Checkable Item_')
separator_menu_item
menu_item('Disabled Item_') {
enabled false
}
}
menu('Help') {
menu_item('Help')
about_menu_item # Can optionally contain an on_clicked listener
}
MAIN_WINDOW = window('Control Gallery', 600, 500) {
margined true
on_closing do
puts 'Bye Bye'
end
vertical_box {
horizontal_box {
group('Basic Controls') {
vertical_box {
button('Button') {
stretchy false
on_clicked do
msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
end
}
checkbox('Checkbox') {
stretchy false
on_toggled do |c|
checked = c.checked?
MAIN_WINDOW.title = "Checkbox is #{checked}"
c.text = "I am the checkbox (#{checked})"
end
}
label('Label') { stretchy false }
horizontal_separator { stretchy false }
date_picker { stretchy false }
time_picker { stretchy false }
date_time_picker { stretchy false }
font_button { stretchy false }
color_button { stretchy false }
}
}
vertical_box {
group('Numbers') {
stretchy false
vertical_box {
spinbox(0, 100) {
stretchy false
value 42
on_changed do |s|
puts "New Spinbox value: #{s.value}"
end
}
slider(0, 100) {
stretchy false
on_changed do |s|
v = s.value
puts "New Slider value: #{v}"
@progress_bar.value = v
end
}
@progress_bar = progress_bar { stretchy false }
}
}
group('Lists') {
stretchy false
vertical_box {
combobox {
stretchy false
items 'combobox Item 1', 'combobox Item 2', 'combobox Item 3' # also accepts a single array argument
on_selected do |c|
puts "New combobox selection: #{c.selected}"
end
}
editable_combobox {
stretchy false
items 'Editable Item 1', 'Editable Item 2', 'Editable Item 3' # also accepts a single array argument
}
radio_buttons {
items 'Radio Button 1', 'Radio Button 2', 'Radio Button 3' # also accepts a single array argument
}
}
}
tab {
tab_item('Page 1') {
horizontal_box {
entry {
text 'Please enter your feelings'
on_changed do |e|
puts "Current textbox data: '#{e.text}'"
end
}
}
}
tab_item('Page 2') {
horizontal_box
}
tab_item('Page 3') {
horizontal_box
}
}
}
}
}
}
MAIN_WINDOW.show
Happy Glimmering!
Top comments (0)