From 8dca7642e032ba16d08c16c5d69d8abbe85ef244 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Wed, 16 Jul 2025 19:43:01 +0200 Subject: [PATCH] add labels --- .../de/unixwork/rssreader/MainWindow.kt | 13 +- .../main/java/de/unixwork/ui/Alignment.java | 8 + .../main/java/de/unixwork/ui/ArgFuncs.java | 151 +++++++++++++++ .../src/main/java/de/unixwork/ui/Label.java | 18 ++ .../java/de/unixwork/ui/LabelBuilder.java | 176 ++++++++++++++++++ .../main/java/de/unixwork/ui/LabelFuncs.java | 34 ++++ .../main/java/de/unixwork/ui/LabelStyle.java | 8 + .../java/de/unixwork/ui/ToggleBuilder.java | 2 +- .../kotlin/de/unixwork/ui/kotlin/Toplevel.kt | 6 + 9 files changed, 411 insertions(+), 5 deletions(-) create mode 100644 ui-java/src/main/java/de/unixwork/ui/Alignment.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/Label.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java create mode 100644 ui-java/src/main/java/de/unixwork/ui/LabelStyle.java diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt index 4bab4e9..094bfab 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -11,10 +11,15 @@ class MainWindow { init { window = sidebarWindow("RSS Reader") { sidebar { - sourcelist { elm: Object -> - val item = SubListItem() - item.label = "todo" - item + vbox(fill = true) { + sourcelist { elm: Object -> + val item = SubListItem() + item.label = "todo" + item + } + hbox(margin = 4) { + button(icon = "list-add") + } } } diff --git a/ui-java/src/main/java/de/unixwork/ui/Alignment.java b/ui-java/src/main/java/de/unixwork/ui/Alignment.java new file mode 100644 index 0000000..8f16f28 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/Alignment.java @@ -0,0 +1,8 @@ +package de.unixwork.ui; + +public enum Alignment { + DEFAULT, + LEFT, + RIGHT, + CENTER +} diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java index b3e40e4..ad5b37a 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -105,6 +105,56 @@ class ArgFuncs { MethodHandle sidebar_args_set_spacing; MethodHandle sidebar_args_free; + MethodHandle label_args_new; + MethodHandle label_args_set_fill; + MethodHandle label_args_set_hexpand; + MethodHandle label_args_set_vexpand; + MethodHandle label_args_set_hfill; + MethodHandle label_args_set_vfill; + MethodHandle label_args_set_override_defaults; + MethodHandle label_args_set_colspan; + MethodHandle label_args_set_rowspan; + MethodHandle label_args_set_name; + MethodHandle label_args_set_style_class; + MethodHandle label_args_set_label; + MethodHandle label_args_set_align; + MethodHandle label_args_set_style; + MethodHandle label_args_set_value; + MethodHandle label_args_set_varname; + MethodHandle label_args_free; + + MethodHandle progressbar_args_new; + MethodHandle progressbar_args_set_fill; + MethodHandle progressbar_args_set_hexpand; + MethodHandle progressbar_args_set_vexpand; + MethodHandle progressbar_args_set_hfill; + MethodHandle progressbar_args_set_vfill; + MethodHandle progressbar_args_set_override_defaults; + MethodHandle progressbar_args_set_colspan; + MethodHandle progressbar_args_set_rowspan; + MethodHandle progressbar_args_set_name; + MethodHandle progressbar_args_set_style_class; + MethodHandle progressbar_args_set_min; + MethodHandle progressbar_args_set_max; + MethodHandle progressbar_args_set_value; + MethodHandle progressbar_args_set_varname; + MethodHandle progressbar_args_free; + + MethodHandle progress_spinner_args_new; + MethodHandle progress_spinner_args_set_fill; + MethodHandle progress_spinner_args_set_hexpand; + MethodHandle progress_spinner_args_set_vexpand; + MethodHandle progress_spinner_args_set_hfill; + MethodHandle progress_spinner_args_set_vfill; + MethodHandle progress_spinner_args_set_override_defaults; + MethodHandle progress_spinner_args_set_colspan; + MethodHandle progress_spinner_args_set_rowspan; + MethodHandle progress_spinner_args_set_name; + MethodHandle progress_spinner_args_set_style_class; + MethodHandle progress_spinner_args_set_value; + MethodHandle progress_spinner_args_set_varname; + MethodHandle progress_spinner_args_free; + MethodHandle button_args_new; MethodHandle button_args_set_fill; MethodHandle button_args_set_hexpand; @@ -264,6 +314,7 @@ class ArgFuncs { FunctionDescriptor sigv_mml = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG); FunctionDescriptor sigv_mb = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_BOOLEAN); FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT); + FunctionDescriptor sigv_md = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE); MemorySegment ui_menuitem_args_new_addr = lib.find("ui_menuitem_args_new").orElseThrow(); MemorySegment ui_menuitem_args_set_label_addr = lib.find("ui_menuitem_args_set_label").orElseThrow(); @@ -364,6 +415,56 @@ class ArgFuncs { MemorySegment ui_sidebar_args_set_spacing_addr = lib.find("ui_sidebar_args_set_spacing").orElseThrow(); MemorySegment ui_sidebar_args_free_addr = lib.find("ui_sidebar_args_free").orElseThrow(); + MemorySegment ui_label_args_new_addr = lib.find("ui_label_args_new").orElseThrow(); + MemorySegment ui_label_args_set_fill_addr = lib.find("ui_label_args_set_fill").orElseThrow(); + MemorySegment ui_label_args_set_hexpand_addr = lib.find("ui_label_args_set_hexpand").orElseThrow(); + MemorySegment ui_label_args_set_vexpand_addr = lib.find("ui_label_args_set_vexpand").orElseThrow(); + MemorySegment ui_label_args_set_hfill_addr = lib.find("ui_label_args_set_hfill").orElseThrow(); + MemorySegment ui_label_args_set_vfill_addr = lib.find("ui_label_args_set_vfill").orElseThrow(); + MemorySegment ui_label_args_set_override_defaults_addr = lib.find("ui_label_args_set_override_defaults").orElseThrow(); + MemorySegment ui_label_args_set_colspan_addr = lib.find("ui_label_args_set_colspan").orElseThrow(); + MemorySegment ui_label_args_set_rowspan_addr = lib.find("ui_label_args_set_rowspan").orElseThrow(); + MemorySegment ui_label_args_set_name_addr = lib.find("ui_label_args_set_name").orElseThrow(); + MemorySegment ui_label_args_set_style_class_addr = lib.find("ui_label_args_set_style_class").orElseThrow(); + MemorySegment ui_label_args_set_label_addr = lib.find("ui_label_args_set_label").orElseThrow(); + MemorySegment ui_label_args_set_align_addr = lib.find("ui_label_args_set_align").orElseThrow(); + MemorySegment ui_label_args_set_style_addr = lib.find("ui_label_args_set_style").orElseThrow(); + MemorySegment ui_label_args_set_value_addr = lib.find("ui_label_args_set_value").orElseThrow(); + MemorySegment ui_label_args_set_varname_addr = lib.find("ui_label_args_set_varname").orElseThrow(); + MemorySegment ui_label_args_free_addr = lib.find("ui_label_args_free").orElseThrow(); + + MemorySegment ui_progressbar_args_new_addr = lib.find("ui_progressbar_args_new").orElseThrow(); + MemorySegment ui_progressbar_args_set_fill_addr = lib.find("ui_progressbar_args_set_fill").orElseThrow(); + MemorySegment ui_progressbar_args_set_hexpand_addr = lib.find("ui_progressbar_args_set_hexpand").orElseThrow(); + MemorySegment ui_progressbar_args_set_vexpand_addr = lib.find("ui_progressbar_args_set_vexpand").orElseThrow(); + MemorySegment ui_progressbar_args_set_hfill_addr = lib.find("ui_progressbar_args_set_hfill").orElseThrow(); + MemorySegment ui_progressbar_args_set_vfill_addr = lib.find("ui_progressbar_args_set_vfill").orElseThrow(); + MemorySegment ui_progressbar_args_set_override_defaults_addr = lib.find("ui_progressbar_args_set_override_defaults").orElseThrow(); + MemorySegment ui_progressbar_args_set_colspan_addr = lib.find("ui_progressbar_args_set_colspan").orElseThrow(); + MemorySegment ui_progressbar_args_set_rowspan_addr = lib.find("ui_progressbar_args_set_rowspan").orElseThrow(); + MemorySegment ui_progressbar_args_set_name_addr = lib.find("ui_progressbar_args_set_name").orElseThrow(); + MemorySegment ui_progressbar_args_set_style_class_addr = lib.find("ui_progressbar_args_set_style_class").orElseThrow(); + MemorySegment ui_progressbar_args_set_min_addr = lib.find("ui_progressbar_args_set_min").orElseThrow(); + MemorySegment ui_progressbar_args_set_max_addr = lib.find("ui_progressbar_args_set_max").orElseThrow(); + MemorySegment ui_progressbar_args_set_value_addr = lib.find("ui_progressbar_args_set_value").orElseThrow(); + MemorySegment ui_progressbar_args_set_varname_addr = lib.find("ui_progressbar_args_set_varname").orElseThrow(); + MemorySegment ui_progressbar_args_free_addr = lib.find("ui_progressbar_args_free").orElseThrow(); + + MemorySegment ui_progress_spinner_args_new_addr = lib.find("ui_progress_spinner_args_new").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_fill_addr = lib.find("ui_progress_spinner_args_set_fill").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_hexpand_addr = lib.find("ui_progress_spinner_args_set_hexpand").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_vexpand_addr = lib.find("ui_progress_spinner_args_set_vexpand").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_hfill_addr = lib.find("ui_progress_spinner_args_set_hfill").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_vfill_addr = lib.find("ui_progress_spinner_args_set_vfill").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_override_defaults_addr = lib.find("ui_progress_spinner_args_set_override_defaults").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_colspan_addr = lib.find("ui_progress_spinner_args_set_colspan").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_rowspan_addr = lib.find("ui_progress_spinner_args_set_rowspan").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_name_addr = lib.find("ui_progress_spinner_args_set_name").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_style_class_addr = lib.find("ui_progress_spinner_args_set_style_class").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_value_addr = lib.find("ui_progress_spinner_args_set_value").orElseThrow(); + MemorySegment ui_progress_spinner_args_set_varname_addr = lib.find("ui_progress_spinner_args_set_varname").orElseThrow(); + MemorySegment ui_progress_spinner_args_free_addr = lib.find("ui_progress_spinner_args_free").orElseThrow(); + MemorySegment ui_button_args_new_addr = lib.find("ui_button_args_new").orElseThrow(); MemorySegment ui_button_args_set_fill_addr = lib.find("ui_button_args_set_fill").orElseThrow(); MemorySegment ui_button_args_set_hexpand_addr = lib.find("ui_button_args_set_hexpand").orElseThrow(); @@ -615,6 +716,56 @@ class ArgFuncs { sidebar_args_set_spacing = linker.downcallHandle(ui_sidebar_args_set_spacing_addr, sigv_mi); sidebar_args_free = linker.downcallHandle(ui_sidebar_args_free_addr, sigv_m); + label_args_new = linker.downcallHandle(ui_label_args_new_addr, sigm); + label_args_set_fill = linker.downcallHandle(ui_label_args_set_fill_addr, sigv_mb); + label_args_set_name = linker.downcallHandle(ui_label_args_set_name_addr, sigv_mm); + label_args_set_style_class = linker.downcallHandle(ui_label_args_set_style_class_addr, sigv_mm); + label_args_set_hexpand = linker.downcallHandle(ui_label_args_set_hexpand_addr, sigv_mb); + label_args_set_vexpand = linker.downcallHandle(ui_label_args_set_vexpand_addr, sigv_mb); + label_args_set_hfill = linker.downcallHandle(ui_label_args_set_hfill_addr, sigv_mb); + label_args_set_vfill = linker.downcallHandle(ui_label_args_set_vfill_addr, sigv_mb); + label_args_set_override_defaults = linker.downcallHandle(ui_label_args_set_override_defaults_addr, sigv_mb); + label_args_set_colspan = linker.downcallHandle(ui_label_args_set_colspan_addr, sigv_mi); + label_args_set_rowspan = linker.downcallHandle(ui_label_args_set_rowspan_addr, sigv_mi); + label_args_set_label = linker.downcallHandle(ui_label_args_set_label_addr, sigv_mm); + label_args_set_align = linker.downcallHandle(ui_label_args_set_align_addr, sigv_mi); + label_args_set_style = linker.downcallHandle(ui_label_args_set_style_addr, sigv_mi); + label_args_set_value = linker.downcallHandle(ui_label_args_set_value_addr, sigv_mm); + label_args_set_varname = linker.downcallHandle(ui_label_args_set_varname_addr, sigv_mm); + label_args_free = linker.downcallHandle(ui_label_args_free_addr, sigv_m); + + progressbar_args_new = linker.downcallHandle(ui_progressbar_args_new_addr, sigm); + progressbar_args_set_fill = linker.downcallHandle(ui_progressbar_args_set_fill_addr, sigv_mb); + progressbar_args_set_hexpand = linker.downcallHandle(ui_progressbar_args_set_hexpand_addr, sigv_mb); + progressbar_args_set_vexpand = linker.downcallHandle(ui_progressbar_args_set_vexpand_addr, sigv_mb); + progressbar_args_set_hfill = linker.downcallHandle(ui_progressbar_args_set_hfill_addr, sigv_mb); + progressbar_args_set_vfill = linker.downcallHandle(ui_progressbar_args_set_vfill_addr, sigv_mb); + progressbar_args_set_override_defaults = linker.downcallHandle(ui_progressbar_args_set_override_defaults_addr, sigv_mb); + progressbar_args_set_colspan = linker.downcallHandle(ui_progressbar_args_set_colspan_addr, sigv_mi); + progressbar_args_set_rowspan = linker.downcallHandle(ui_progressbar_args_set_rowspan_addr, sigv_mi); + progressbar_args_set_name = linker.downcallHandle(ui_progressbar_args_set_name_addr, sigv_mm); + progressbar_args_set_style_class = linker.downcallHandle(ui_progressbar_args_set_style_class_addr, sigv_mm); + progressbar_args_set_min = linker.downcallHandle(ui_progressbar_args_set_min_addr, sigv_md); + progressbar_args_set_max = linker.downcallHandle(ui_progressbar_args_set_max_addr, sigv_md); + progressbar_args_set_value = linker.downcallHandle(ui_progressbar_args_set_value_addr, sigv_mm); + progressbar_args_set_varname = linker.downcallHandle(ui_progressbar_args_set_varname_addr, sigv_mm); + progressbar_args_free = linker.downcallHandle(ui_progressbar_args_free_addr, sigv_m); + + progress_spinner_args_new = linker.downcallHandle(ui_progress_spinner_args_new_addr, sigm); + progress_spinner_args_set_fill = linker.downcallHandle(ui_progress_spinner_args_set_fill_addr, sigv_mb); + progress_spinner_args_set_hexpand = linker.downcallHandle(ui_progress_spinner_args_set_hexpand_addr, sigv_mb); + progress_spinner_args_set_vexpand = linker.downcallHandle(ui_progress_spinner_args_set_vexpand_addr, sigv_mb); + progress_spinner_args_set_hfill = linker.downcallHandle(ui_progress_spinner_args_set_hfill_addr, sigv_mb); + progress_spinner_args_set_vfill = linker.downcallHandle(ui_progress_spinner_args_set_vfill_addr, sigv_mb); + progress_spinner_args_set_override_defaults = linker.downcallHandle(ui_progress_spinner_args_set_override_defaults_addr, sigv_mb); + progress_spinner_args_set_colspan = linker.downcallHandle(ui_progress_spinner_args_set_colspan_addr, sigv_mi); + progress_spinner_args_set_rowspan = linker.downcallHandle(ui_progress_spinner_args_set_rowspan_addr, sigv_mi); + progress_spinner_args_set_name = linker.downcallHandle(ui_progress_spinner_args_set_name_addr, sigv_mm); + progress_spinner_args_set_style_class = linker.downcallHandle(ui_progress_spinner_args_set_style_class_addr, sigv_mm); + progress_spinner_args_set_value = linker.downcallHandle(ui_progress_spinner_args_set_value_addr, sigv_mm); + progress_spinner_args_set_varname = linker.downcallHandle(ui_progress_spinner_args_set_varname_addr, sigv_mm); + progress_spinner_args_free = linker.downcallHandle(ui_progress_spinner_args_free_addr, sigv_m); + button_args_new = linker.downcallHandle(ui_button_args_new_addr, sigm); button_args_set_fill = linker.downcallHandle(ui_button_args_set_fill_addr, sigv_mb); button_args_set_hexpand = linker.downcallHandle(ui_button_args_set_hexpand_addr, sigv_mb); diff --git a/ui-java/src/main/java/de/unixwork/ui/Label.java b/ui-java/src/main/java/de/unixwork/ui/Label.java new file mode 100644 index 0000000..a9b1fa8 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/Label.java @@ -0,0 +1,18 @@ +package de.unixwork.ui; + +public class Label { + public static LabelBuilder label(UiObject obj) { + var ui = LabelFuncs.getInstance(); + return new LabelBuilder(obj, ui.label_create); + } + + public static LabelBuilder llabel(UiObject obj) { + var ui = LabelFuncs.getInstance(); + return new LabelBuilder(obj, ui.llabel_create); + } + + public static LabelBuilder rlabel(UiObject obj) { + var ui = LabelFuncs.getInstance(); + return new LabelBuilder(obj, ui.rlabel_create); + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java b/ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java new file mode 100644 index 0000000..827d8ef --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/LabelBuilder.java @@ -0,0 +1,176 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.invoke.MethodHandle; + +public class LabelBuilder extends AbstractWidgetBuilder { + private boolean fill; + private boolean hexpand; + private boolean vexpand; + private boolean hfill; + private boolean vfill; + private boolean overrideDefaults; + private int colspan; + private int rowspan; + private String name; + private String styleClass; + private String label; + private Alignment align; + private LabelStyle style; + private UiString value; + private String varname; + + public LabelBuilder(UiObject obj, MethodHandle widgetConstructor) { + this.obj = obj; + this.widgetConstructor = widgetConstructor; + this.argsFree = ArgFuncs.getInstance().label_args_free; + } + + public LabelBuilder fill(boolean fill) { + this.fill = fill; + return this; + } + + public LabelBuilder hexpand(boolean hexpand) { + this.hexpand = hexpand; + return this; + } + + public LabelBuilder vexpand(boolean vexpand) { + this.vexpand = vexpand; + return this; + } + + public LabelBuilder hfill(boolean hfill) { + this.hfill = hfill; + return this; + } + + public LabelBuilder vfill(boolean vfill) { + this.vfill = vfill; + return this; + } + + public LabelBuilder overrideDefaults(boolean overrideDefaults) { + this.overrideDefaults = overrideDefaults; + return this; + } + + public LabelBuilder colspan(int colspan) { + this.colspan = colspan; + return this; + } + + public LabelBuilder rowspan(int rowspan) { + this.rowspan = rowspan; + return this; + } + + public LabelBuilder name(String name) { + this.name = name; + return this; + } + + public LabelBuilder styleClass(String styleClass) { + this.styleClass = styleClass; + return this; + } + + public LabelBuilder label(String label) { + this.label = label; + return this; + } + + public LabelBuilder align(Alignment align) { + this.align = align; + return this; + } + + public LabelBuilder style(LabelStyle style) { + this.style = style; + return this; + } + + public LabelBuilder varname(String varname) { + this.varname = varname; + return this; + } + + public LabelBuilder value(UiString value) { + this.value = value; + return this; + } + + public MemorySegment createArgs(Arena arena) throws Throwable { + ArgFuncs ui = ArgFuncs.getInstance(); + + args = (MemorySegment)ui.label_args_new.invoke(); + if(fill) { + ui.label_args_set_fill.invoke(args, fill); + } + if(hexpand) { + ui.label_args_set_hexpand.invoke(args, hexpand); + } + if(vexpand) { + ui.label_args_set_vexpand.invoke(args, vexpand); + } + if(hfill) { + ui.label_args_set_hfill.invoke(args, hfill); + } + if(vfill) { + ui.label_args_set_vfill.invoke(args, vfill); + } + if(overrideDefaults) { + ui.label_args_set_override_defaults.invoke(args, overrideDefaults); + } + if(colspan > 0) { + ui.label_args_set_colspan.invoke(args, colspan); + } + if(rowspan > 0) { + ui.label_args_set_rowspan.invoke(args, rowspan); + } + if(name != null) { + MemorySegment cstr = arena.allocateFrom(name); + ui.label_args_set_name.invoke(args, cstr); + } + if(styleClass != null) { + MemorySegment cstr = arena.allocateFrom(styleClass); + ui.label_args_set_style_class.invoke(args, cstr); + } + if(label != null) { + MemorySegment cstr = arena.allocateFrom(label); + ui.label_args_set_label.invoke(args, cstr); + } + if(align != null) { + int alignNum = 0; + switch(align) { + case LEFT: alignNum = 1; break; + case RIGHT: alignNum = 2; break; + case CENTER: alignNum = 3; break; + default: break; + } + ui.label_args_set_align.invoke(args, alignNum); + } + if(style != null) { + int styleNum = 0; + switch(style) { + case TITLE: styleNum = 1; break; + case SUBTITLE: styleNum = 2; break; + case DIM: styleNum = 3; break; + default: break; + } + ui.label_args_set_style.invoke(args, styleNum); + } + + if(varname != null) { + MemorySegment cstr = arena.allocateFrom(varname); + ui.label_args_set_varname.invoke(args, cstr); + } + if(value != null) { + ui.label_args_set_value.invoke(args, value.valuePtr); + } + + return args; + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java b/ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java new file mode 100644 index 0000000..9334f7a --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/LabelFuncs.java @@ -0,0 +1,34 @@ +package de.unixwork.ui; + +import java.lang.foreign.*; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; + +public class LabelFuncs { + static LabelFuncs instance; + + public MethodHandle label_create; + public MethodHandle llabel_create; + public MethodHandle rlabel_create; + + private LabelFuncs(Linker linker, SymbolLookup lib) { + // void* func(void*, void*) + FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); + + MemorySegment ui_label_create_addr = lib.find("ui_label_create").orElseThrow(); + MemorySegment ui_llabel_create_addr = lib.find("ui_llabel_create").orElseThrow(); + MemorySegment ui_rlabel_create_addr = lib.find("ui_rlabel_create").orElseThrow(); + + label_create = linker.downcallHandle(ui_label_create_addr, sigm_mm); + llabel_create = linker.downcallHandle(ui_llabel_create_addr, sigm_mm); + rlabel_create = linker.downcallHandle(ui_rlabel_create_addr, sigm_mm); + } + + static LabelFuncs getInstance() { + if (instance == null) { + Toolkit toolkit = Toolkit.getInstance(); + instance = new LabelFuncs(toolkit.getLinker(), toolkit.getSymbolLookup()); + } + return instance; + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/LabelStyle.java b/ui-java/src/main/java/de/unixwork/ui/LabelStyle.java new file mode 100644 index 0000000..91aa7dd --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/LabelStyle.java @@ -0,0 +1,8 @@ +package de.unixwork.ui; + +public enum LabelStyle { + DEFAULT, + TITLE, + SUBTITLE, + DIM +} diff --git a/ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java b/ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java index 1fc1bdc..59c482d 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToggleBuilder.java @@ -125,7 +125,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder { args = (MemorySegment)ui.toggle_args_new.invoke(); if(fill) { - // TODO + ui.toggle_args_set_fill.invoke(args, fill); } if(hexpand) { ui.toggle_args_set_hexpand.invoke(args, hexpand); diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt index 882c4d4..014de02 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt @@ -427,6 +427,12 @@ class Toplevel(obj: UiObject) { label?.let { button.label(it) } + stockId?.let { + button.stockId(it) + } + icon?.let { + button.icon(it) + } if(fill) { button.fill(fill); } -- 2.47.3