public class Event {
private UiObject object;
private Object documemt;
- private Object window;
+ private Object windowData;
private Object eventdata;
private int intval;
+ private int set;
+
+ private MemorySegment windowPtr;
+ private MemorySegment documentPtr;
public Event() {
try {
long objAddress = ((MemorySegment) ui.event_get_obj.invoke(eventPtr)).address();
object = toolkit.getToplevelObject(objAddress);
+ if (object != null) {
+ windowData = object.getWindowData();
+ }
+
+ windowPtr = (MemorySegment) ui.event_get_windowdata.invoke(eventPtr);
+ documentPtr = (MemorySegment) ui.event_get_document.invoke(eventPtr);
+ intval = (int)ui.event_get_int.invoke(eventPtr);
+ set = (int)ui.event_get_set.invoke(eventPtr);
} catch (Throwable e) {
throw new RuntimeException(e);
}
return documemt;
}
- public Object getWindow() {
- return window;
+ public Object getWindowData() {
+ return windowData;
}
public Object getEventdata() {
return eventdata;
}
- public int getIntval() {
+ public int getIntValue() {
return intval;
}
+
+ public int getSet() { return set; }
+
+ public MemorySegment getWindowPtr() {
+ return windowPtr;
+ }
+
+ public MemorySegment getDocumentPtr() {
+ return documentPtr;
+ }
}
}
public static void eventHandler(MemorySegment event, MemorySegment userdata) {
- System.out.println("event handler");
int eventHandlerIndex = (int)userdata.address();
Event e = new Event(event);
static ToolkitFuncs instance;
public MethodHandle event_get_obj;
+ public MethodHandle event_get_document;
+ public MethodHandle event_get_windowdata;
+ public MethodHandle event_get_eventdata;
+ public MethodHandle event_get_int;
+ public MethodHandle event_get_set;
private ToolkitFuncs(Linker linker, SymbolLookup lib) {
// void* func(void*)
FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS);
MemorySegment event_get_obj_addr = lib.find("ui_event_get_obj").orElseThrow();
+ MemorySegment event_get_document_addr = lib.find("ui_event_get_document").orElseThrow();
+ MemorySegment event_get_windowdata_addr = lib.find("ui_event_get_windowdata").orElseThrow();
+ MemorySegment event_get_eventdata_addr = lib.find("ui_event_get_eventdata").orElseThrow();
+ MemorySegment event_get_int_addr = lib.find("ui_event_get_int").orElseThrow();
+ MemorySegment event_get_set_addr = lib.find("ui_event_get_set").orElseThrow();
event_get_obj = linker.downcallHandle(event_get_obj_addr, sigm_m);
+ event_get_document = linker.downcallHandle(event_get_document_addr, sigm_m);
+ event_get_windowdata = linker.downcallHandle(event_get_windowdata_addr, sigm_m);
+ event_get_eventdata = linker.downcallHandle(event_get_eventdata_addr, sigm_m);
+ event_get_int = linker.downcallHandle(event_get_int_addr, sigi_m);
+ event_get_set = linker.downcallHandle(event_get_set_addr, sigi_m);
}
static ToolkitFuncs getInstance() {
private Arena arena;
+ private Object windowData;
+
public UiObject(MemorySegment ptr) {
this.ptr = ptr;
// TODO: maybe the C toolkit code should also handle toplevel object creation and call a callback
}
return arena;
}
+
+ public void setWindowData(Object windowData) {
+ this.windowData = windowData;
+ }
+
+ public Object getWindowData() {
+ return windowData;
+ }
}