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*)
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
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!
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);
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);