]> uap-core.de Git - rssreader.git/commitdiff
add bindings for some arg functions
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 7 Jun 2025 06:24:20 +0000 (08:24 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 7 Jun 2025 06:24:20 +0000 (08:24 +0200)
ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/Toolkit.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 (file)
index 0000000..b1b18f8
--- /dev/null
@@ -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;
+    }
+}
index 38925dadab8b29fcb83f57660050a33beddb33ba..4e8b05f6eb68d5a3ef0287076d637f75461a7850 100644 (file)
@@ -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) {