summaryrefslogtreecommitdiff
path: root/main.c3
diff options
context:
space:
mode:
authorandromeda <andromeda@lenovo>2026-04-24 18:41:05 +0200
committerandromeda <andromeda@lenovo>2026-04-24 18:41:05 +0200
commit1b3c57972570f9e79c21a571b6cd1b3273ea3059 (patch)
tree48ac5ef151f5ed14a39ebf02a958cc0ea53e0098 /main.c3
parent3adf2a7b49a3a62b4c019b745a6c631a2b518b5e (diff)
tigr
Diffstat (limited to 'main.c3')
-rw-r--r--main.c3121
1 files changed, 40 insertions, 81 deletions
diff --git a/main.c3 b/main.c3
index 742616e..f349205 100644
--- a/main.c3
+++ b/main.c3
@@ -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 = &registry_handle_global;
- registry_listener.global_remove = &registry_handle_global_remove;
-
- wl_registry_add_listener(registry, &registry_listener, null);
-
- wl_display_roundtrip(display);
-
- wl_display_disconnect(display);
- io::printn("disconnected");
+ io::printn("tschuess");
return(0);
}