From 6d606941df16f8e8e3297f1f952fcef8a0e69f8e Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 7 Jun 2025 08:24:20 +0200 Subject: [PATCH] add bindings for some arg functions --- .../main/java/de/unixwork/ui/ArgFuncs.java | 42 +++++++++++++++++++ .../src/main/java/de/unixwork/ui/Toolkit.java | 10 ++++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java new file mode 100644 index 0000000..b1b18f8 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -0,0 +1,42 @@ +package de.unixwork.ui; + +import java.lang.foreign.*; +import java.lang.invoke.MethodHandle; + +class ArgFuncs { + static ArgFuncs instance; + + MethodHandle menuitem_args_new; + MethodHandle menuitem_args_set_label; + MethodHandle menuitem_args_set_stockid; + MethodHandle menuitem_args_set_icon; + MethodHandle menuitem_args_free; + + private ArgFuncs(Linker linker, SymbolLookup lib) { + FunctionDescriptor sigm = FunctionDescriptor.of(ValueLayout.ADDRESS); + FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS); + FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS); + + 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(); + MemorySegment ui_menuitem_args_set_stockid_addr = lib.find("ui_menuitem_args_set_stockid").orElseThrow(); + MemorySegment ui_menuitem_args_set_icon_addr = lib.find("ui_menuitem_args_set_icon").orElseThrow(); + MemorySegment ui_menuitem_args_set_onclick_addr = lib.find("ui_menuitem_args_set_onclick").orElseThrow(); + MemorySegment ui_menuitem_args_set_onclickdata_addr = lib.find("ui_menuitem_args_set_onclickdata").orElseThrow(); + MemorySegment ui_menuitem_args_free_addr = lib.find("ui_menuitem_args_free").orElseThrow(); + + menuitem_args_new = linker.downcallHandle(ui_menuitem_args_new_addr, sigm); + menuitem_args_set_label = linker.downcallHandle(ui_menuitem_args_set_label_addr, sigv_mm); + menuitem_args_set_stockid = linker.downcallHandle(ui_menuitem_args_set_stockid_addr, sigv_mm); + menuitem_args_set_icon = linker.downcallHandle(ui_menuitem_args_set_icon_addr, sigv_mm); + menuitem_args_free = linker.downcallHandle(ui_menuitem_args_free_addr, sigv_m); + } + + static ArgFuncs getInstance() { + if (instance == null) { + Toolkit toolkit = Toolkit.getInstance(); + instance = new ArgFuncs(toolkit.getLinker(), toolkit.getSymbolLookup()); + } + return instance; + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java index 38925da..4e8b05f 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -51,12 +51,20 @@ public class Toolkit { mainFunc = linker.downcallHandle(ui_main_addr, sigv_v); } - private static Toolkit getInstance() { + static Toolkit getInstance() { if(Toolkit.instance == null) { Toolkit.init("app1"); } return Toolkit.instance; } + + SymbolLookup getSymbolLookup() { + return lib; + } + + Linker getLinker() { + return linker; + } public static void init(String appName) { if(Toolkit.instance != null) { -- 2.47.3