30 lines
1.2 KiB
Java
30 lines
1.2 KiB
Java
package io.gitlab.jfronny.inceptum.gtk.callback;
|
|
|
|
import io.github.jwharm.javagi.Interop;
|
|
import io.github.jwharm.javagi.Ownership;
|
|
import org.gtk.gobject.*;
|
|
import org.jetbrains.annotations.ApiStatus;
|
|
|
|
import java.lang.foreign.*;
|
|
import java.lang.invoke.MethodHandle;
|
|
|
|
public interface GetPropertyCallback {
|
|
void invoke(GObject object, int propertyId, Value value, ParamSpec paramSpec);
|
|
|
|
default void upcall(MemoryAddress object, int propertyId, MemoryAddress value, MemoryAddress pspec) {
|
|
invoke(GObject.fromAddress.marshal(object, Ownership.NONE),
|
|
propertyId,
|
|
Value.fromAddress.marshal(value, Ownership.NONE),
|
|
ParamSpec.fromAddress.marshal(pspec, Ownership.NONE));
|
|
}
|
|
|
|
@ApiStatus.Internal
|
|
FunctionDescriptor DESCRIPTOR = FunctionDescriptor.ofVoid(Interop.valueLayout.ADDRESS, Interop.valueLayout.C_INT, Interop.valueLayout.ADDRESS, Interop.valueLayout.ADDRESS);
|
|
@ApiStatus.Internal
|
|
MethodHandle HANDLE = Interop.getHandle(GetPropertyCallback.class, DESCRIPTOR);
|
|
|
|
default MemoryAddress toCallback() {
|
|
return Linker.nativeLinker().upcallStub(HANDLE.bindTo(this), DESCRIPTOR, Interop.getScope()).address();
|
|
}
|
|
}
|