From: Olaf Wintermann Date: Sat, 21 Jun 2025 14:42:05 +0000 (+0200) Subject: add ContainerFuncs class X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=8d492668006197c68408e897d844559dd87b1cb6;p=rssreader.git add ContainerFuncs class --- 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 index 0000000..197eabf --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ContainerFuncs.java @@ -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; + } +}