module; #include "util.h" #include export module LunarWM.wl.Subsurface; import std; namespace LunarWM { namespace wl { export struct Subsurface { Subsurface() = delete; static Subsurface *make(wl_client *client, uint32_t version, uint32_t id); static void destroy(wl_resource *res); struct wl_resource *resource; }; void set_position(wl_client *client, wl_resource *resource, int32_t x, int32_t y) { // TODO: Implement. } void place_above(wl_client *client, wl_resource *resource, wl_resource *sibling_resource) { // TODO: Implement. } void place_below(wl_client *client, wl_resource *resource, wl_resource *sibling_resource) { // TODO: Implement. } void set_sync(wl_client *client, wl_resource *resource) { // TODO: Implement. } void set_desync(wl_client *client, wl_resource *resource) { // TODO: Implement. } struct wl_subsurface_interface const subsurface_impl{ .destroy = resource_destroy, .set_position = set_position, .place_above = place_above, .place_below = place_below, .set_sync = set_sync, .set_desync = set_desync, }; void Subsurface::destroy(wl_resource *res) { free(wl_resource_get_user_data(res)); } Subsurface *Subsurface::make(wl_client *client, uint32_t version, uint32_t id) { Subsurface *subsurface = reinterpret_cast(malloc(sizeof(Subsurface))); subsurface->resource = wl_resource_create(client, &wl_subsurface_interface, version, id); if (!subsurface->resource) { free(subsurface); throw std::runtime_error("wl_resource_create(subsurface) failed"); } wl_resource_set_implementation(subsurface->resource, &subsurface_impl, subsurface, &Subsurface::destroy); return subsurface; } } // namespace wl } // namespace LunarWM