diff options
Diffstat (limited to 'main.c3')
| -rw-r--r-- | main.c3 | 121 |
1 files changed, 40 insertions, 81 deletions
@@ -1,98 +1,57 @@ module c3term; import std::io; -import libc; -typedef WL_display = void; -typedef WL_registry = void; -typedef WL_compositor = void; - -extern fn WL_display* wl_display_connect(ZString); -extern fn WL_display* wl_display_disconnect(WL_display*); -extern fn CInt wl_display_roundtrip(WL_display*); - -extern fn void* wl_registry_bind(WL_registry*, uint, WL_interface*, uint) @cname("_wl_registry_bind"); -extern fn CInt wl_registry_add_listener(WL_registry*, WL_registry_listener*, void*) @cname("_wl_registry_add_listener"); -extern fn WL_registry* wl_display_get_registry(WL_display*) @cname("_wl_display_get_registry"); - -alias RegistryListenerGlobalCallback = fn void (void*, WL_registry*, uint, ZString, uint); -alias RegistryListenerGlobalRemoveCallback = fn void (void*, WL_registry*, uint); - -struct WL_registry_listener -{ - RegistryListenerGlobalCallback global; - RegistryListenerGlobalRemoveCallback global_remove; -} - -struct WL_message -{ - ZString name; - ZString signature; - WL_interface** types; -} - -struct WL_interface -{ - ZString name; - int version; - int method_count; - WL_message* methods; - int event_count; - WL_message* events; -} - -void* wl_client_lib; -WL_interface wl_compositor_interface; - -fn void? init() -{ - wl_client_lib = libc::dlopen("libwayland-client.so", libc::RTLD_LAZY); - wl_compositor_interface = *(WL_interface*)load_symbol("wl_compositor_interface")!; +struct TPixel { + char r; char g; char b; char a; } -struct State -{ - WL_compositor* compositor; +struct Tigr { + CInt w; CInt h; + CInt cx; CInt cy; CInt cw; CInt ch; + TPixel* pix; + void* handle; + CInt blitMode; } -fn void registry_handle_global(void* data, WL_registry* registry, uint name, ZString nterface, uint version) -{ - io::printf("interface: %s\nversion: %d\nname: %d\n", nterface, version, name); - State* state = data; - if (nterface == wl_compositor_interface.name) - { - state.compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 4); - } +struct TigrGlyph { + CInt code; CInt x; CInt y; CInt w; CInt h; } -fn void registry_handle_global_remove(void* data, WL_registry* registry, uint name) -{ +struct TigrFont { + Tigr* bitmap; + CInt numglyphs; + TigrGlyph* glyphs; } +extern fn Tigr* tigrWindow(CInt, CInt, ZString, CInt); +extern fn CInt tigrClosed(Tigr*); +extern fn void tigrUpdate(Tigr*); +extern fn void tigrClear(Tigr*, TPixel); +extern fn void tigrPrint(Tigr*, TigrFont*, CInt, CInt, TPixel, ZString); +extern TigrFont* tfont; fn int main(String[] args) { - init()!!; - WL_display* display = wl_display_connect(null); - if (!display) { - io::printn("failed to connect display"); - return(1); - }; - - WL_registry* registry = wl_display_get_registry(display); - if (!registry) { - io::printn("failed to get registry"); - return(1); + io::printn(*tfont); + io::printn("init"); + Tigr* screen = tigrWindow(320, 240, "title", 0); + while (!tigrClosed(screen)) { + TPixel p = { + .r = 0x80, + .g = 0x90, + .b = 0xA0, + .a = 0x00, + }; + TPixel w = { + .r = 0xFF, + .g = 0xFF, + .b = 0xFF, + .a = 0xFF, + }; + tigrClear(screen, p); + tigrPrint(screen, tfont, 120, 110, w, "Hello, world."); + tigrUpdate(screen); } - - WL_registry_listener registry_listener; - registry_listener.global = ®istry_handle_global; - registry_listener.global_remove = ®istry_handle_global_remove; - - wl_registry_add_listener(registry, ®istry_listener, null); - - wl_display_roundtrip(display); - - wl_display_disconnect(display); - io::printn("disconnected"); + io::printn("tschuess"); return(0); } |
