]> uap-core.de Git - rssreader.git/commitdiff
add ContainerFuncs class
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 21 Jun 2025 14:42:05 +0000 (16:42 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 21 Jun 2025 14:42:05 +0000 (16:42 +0200)
ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java [new file with mode: 0644]

diff --git a/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java
new file mode 100644 (file)
index 0000000..197eabf
--- /dev/null
@@ -0,0 +1,70 @@
+package de.unixwork.ui;
+
+import java.lang.foreign.*;
+import java.lang.invoke.MethodHandle;
+
+public class ContainerFuncs {
+    static ContainerFuncs instance;
+
+    public MethodHandle vbox_create;
+    public MethodHandle hbox_create;
+    public MethodHandle grid_create;
+    public MethodHandle frame_create;
+    public MethodHandle expander_create;
+    public MethodHandle scrolledwindow_create;
+    public MethodHandle tabview_create;
+    public MethodHandle headerbar_create;
+    public MethodHandle sidebar_create;
+    public MethodHandle itemlist_create;
+    public MethodHandle hsplitpane_create;
+    public MethodHandle vsplitpane_create;
+
+    public MethodHandle container_begin_close;
+    public MethodHandle container_finish;
+
+    private ContainerFuncs(Linker linker, SymbolLookup lib) {
+        FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+        FunctionDescriptor sigm_m = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+        FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+
+        MemorySegment ui_vbox_create_addr = lib.find("ui_vbox_create").orElseThrow();
+        MemorySegment ui_hbox_create_addr = lib.find("ui_hbox_create").orElseThrow();
+        MemorySegment ui_grid_create_addr = lib.find("ui_grid_create").orElseThrow();
+        MemorySegment ui_frame_create_addr = lib.find("ui_frame_create").orElseThrow();
+        MemorySegment ui_expander_create_addr = lib.find("ui_expander_create").orElseThrow();
+        MemorySegment ui_scrolledwindow_create_addr = lib.find("ui_scrolledwindow_create").orElseThrow();
+        MemorySegment ui_tabview_create_addr = lib.find("ui_tabview_create").orElseThrow();
+        MemorySegment ui_headerbar_create_addr = lib.find("ui_headerbar_create").orElseThrow();
+        MemorySegment ui_sidebar_create_addr = lib.find("ui_sidebar_create").orElseThrow();
+        MemorySegment ui_itemlist_create_addr = lib.find("ui_itemlist_create").orElseThrow();
+        MemorySegment ui_hsplitpane_create_addr = lib.find("ui_hslpitpane_create").orElseThrow();
+        MemorySegment ui_vsplitpane_create_addr = lib.find("ui_vsplitpane_create").orElseThrow();
+
+        MemorySegment ui_container_begin_close = lib.find("ui_container_begin_close").orElseThrow();
+        MemorySegment ui_container_finish = lib.find("ui_container_finish").orElseThrow();
+
+        vbox_create = linker.downcallHandle(ui_vbox_create_addr, sigm_mm);
+        hbox_create = linker.downcallHandle(ui_hbox_create_addr, sigm_mm);
+        grid_create = linker.downcallHandle(ui_grid_create_addr, sigm_mm);
+        frame_create =  linker.downcallHandle(ui_frame_create_addr, sigm_mm);
+        expander_create =  linker.downcallHandle(ui_expander_create_addr, sigm_mm);
+        scrolledwindow_create = linker.downcallHandle(ui_scrolledwindow_create_addr, sigm_mm);
+        tabview_create = linker.downcallHandle(ui_tabview_create_addr, sigm_mm);
+        headerbar_create = linker.downcallHandle(ui_headerbar_create_addr, sigm_mm);
+        sidebar_create = linker.downcallHandle(ui_sidebar_create_addr, sigm_mm);
+        itemlist_create = linker.downcallHandle(ui_itemlist_create_addr, sigm_mm);
+        hsplitpane_create = linker.downcallHandle(ui_hsplitpane_create_addr, sigm_mm);
+        vsplitpane_create = linker.downcallHandle(ui_vsplitpane_create_addr, sigm_mm);
+
+        container_begin_close = linker.downcallHandle(ui_container_begin_close, sigm_m);
+        container_finish = linker.downcallHandle(ui_container_finish, sigi_m);
+    }
+
+    static ContainerFuncs getInstance() {
+        if (instance == null) {
+            Toolkit toolkit = Toolkit.getInstance();
+            instance = new ContainerFuncs(toolkit.getLinker(), toolkit.getSymbolLookup());
+        }
+        return instance;
+    }
+}