From e9e76f3535b9974787c67b3efdd80df3a7bea1b2 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Fri, 11 Jul 2025 21:04:05 +0200 Subject: [PATCH] add simple and sidebar window --- .../main/java/de/unixwork/ui/UiObject.java | 8 +++++++ .../java/de/unixwork/ui/UiObjectFuncs.java | 22 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ui-java/src/main/java/de/unixwork/ui/UiObject.java b/ui-java/src/main/java/de/unixwork/ui/UiObject.java index 2ad08fd..fac54c2 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiObject.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiObject.java @@ -37,6 +37,14 @@ public class UiObject extends Context { return UiObjectFuncs.instance.window(title); } + public static UiObject createSidebarWindow(String title) { + return UiObjectFuncs.instance.window(title); + } + + public static UiObject createSimpleWindow(String title) { + return UiObjectFuncs.instance.window(title); + } + public void show() { UiObjectFuncs.instance.show(this); } diff --git a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java index 9a2749f..014e5a4 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java @@ -8,6 +8,8 @@ class UiObjectFuncs { public MethodHandle ui_show; public MethodHandle ui_window; + public MethodHandle ui_sidebar_window; + public MethodHandle ui_simple_window; private UiObjectFuncs(Linker linker, SymbolLookup lib) { // void* func(void*, void*) @@ -17,9 +19,13 @@ class UiObjectFuncs { MemorySegment ui_show_addr = lib.find("ui_show").orElseThrow(); MemorySegment ui_window_addr = lib.find("ui_window").orElseThrow(); + MemorySegment ui_sidebar_window_addr = lib.find("ui_sidebar_window").orElseThrow(); + MemorySegment ui_simple_window_addr = lib.find("ui_simple_window").orElseThrow(); ui_show = linker.downcallHandle(ui_show_addr, sigv_m); ui_window = linker.downcallHandle(ui_window_addr, sigm_mm); + ui_sidebar_window = linker.downcallHandle(ui_sidebar_window_addr, sigm_mm); + ui_simple_window = linker.downcallHandle(ui_simple_window_addr, sigm_mm); } // must be called by the Toolkit constructor @@ -27,7 +33,7 @@ class UiObjectFuncs { UiObjectFuncs.instance = new UiObjectFuncs(linker, lib); } - UiObject window(String title) { + private UiObject createWindow(String title, MethodHandle ctor) { MemorySegment obj = null; Toolkit toolkit = Toolkit.getInstance(); // Automatic object registration MUST be disabled! @@ -37,7 +43,7 @@ class UiObjectFuncs { toolkit.setIsObjRegEnabled(false); try (Arena arena = Arena.ofConfined()) { MemorySegment cstr = arena.allocateFrom(title); - obj = (MemorySegment) ui_window.invoke(cstr, MemorySegment.NULL); + obj = (MemorySegment) ctor.invoke(cstr, MemorySegment.NULL); } catch (Throwable e) { toolkit.setIsObjRegEnabled(true); throw new RuntimeException(e); @@ -47,6 +53,18 @@ class UiObjectFuncs { return new UiObject(obj); } + UiObject window(String title) { + return createWindow(title, ui_window); + } + + UiObject simpleWindow(String title) { + return createWindow(title, ui_simple_window); + } + + UiObject sidebarWindow(String title) { + return createWindow(title, ui_sidebar_window); + } + void show(UiObject obj) { try { ui_show.invoke(obj.ptr); -- 2.47.3