#include "backend.h" #if YASL_HAS_WAYLAND #include "yasl/native/wayland.h" #endif #if YASL_HAS_X11 #include "yasl/native/x11.h" #endif #include void *yasl_display_get_native_handle(struct yasl_display *d) { return d && d->ops->display_get_native_handle ? d->ops->display_get_native_handle(d) : NULL; } void *yasl_surface_get_native_handle(struct yasl_surface *s) { return s && s->display->ops->surface_get_native_handle ? s->display->ops->surface_get_native_handle(s) : NULL; } #if YASL_HAS_WAYLAND struct wl_display *yasl_wayland_display_get_wl_display(struct yasl_display *d) { return (d && yasl_display_backend(d) == YASL_BACKEND_WAYLAND) ? (struct wl_display *)yasl_display_get_native_handle(d) : NULL; } struct wl_surface *yasl_wayland_surface_get_wl_surface(struct yasl_surface *s) { return (s && s->display && yasl_display_backend(s->display) == YASL_BACKEND_WAYLAND) ? (struct wl_surface *)yasl_surface_get_native_handle(s) : NULL; } #endif #if YASL_HAS_X11 Display *yasl_x11_display_get_display(struct yasl_display *d) { return (d && yasl_display_backend(d) == YASL_BACKEND_X11) ? (Display *)yasl_display_get_native_handle(d) : NULL; } uintptr_t yasl_x11_surface_get_window(struct yasl_surface *s) { return (s && s->display && yasl_display_backend(s->display) == YASL_BACKEND_X11) ? (uintptr_t)yasl_surface_get_native_handle(s) : 0; } #endif struct yasl_surface *yasl_surface_create_native(struct yasl_display *d, const struct yasl_surface_spec *spec, void *graphics_device) { if (!graphics_device) { errno = EINVAL; return NULL; } return yasl_create_toplevel(d, spec, graphics_device); } bool yasl_surface_get_native_frame(struct yasl_surface *s, const struct yasl_framebuffer *target, struct yasl_native_frame *out) { if (!s || !target || !out || !target->generation || target->generation != s->frame_generation || !s->display->ops->surface_get_native_frame) return false; return s->display->ops->surface_get_native_frame(s, target, out); }