#ifndef PLATFORM #define PLATFORM #include #include #include "utf.h" typedef struct Color { uint8_t r, g, b; } Color; #define WHITE ((Color){255,255,255}) #define BLACK ((Color){0,0,0}) typedef enum Key { Key_backspace, Key_ctrl, Key_enter, Key_h, Key_n, Key_p, Key_y, Count_Key } Key; bool KeyPressed(Key key); bool InputGetNextPrintable(CodePoint const *out_key); typedef struct Cell { CodePoint character; Color foreground; Color background; } Cell; typedef struct Window { int width; int height; Cell *cells; } Window; typedef struct PlatformState { Window *prev; Window *curr; } PlatformState; // Options for the backend. These options don't necessarily apply for all platforms. typedef struct PlatformOpts { float window_width_fraction; // decide the width of the window as a fraction of the total resolution. for gui backends float window_height_fraction; // decide the height of the window as a fraction of the total resolution. for gui backends } PlatformOpts; PlatformOpts WindowCreateOptsDefault(); Window *WindowCreate(PlatformOpts opts); void WindowClear(Window *window, Color color); void WindowFlip(Window *window); void PlatformInit(PlatformOpts opts); int PlatformGetWidth(); int PlatformGetHeight(); // TODO: the platform layer would really update the keys being pressed, and // receive a diff in the form of actions. print this line from here and change // colors at these points. #endif /* PLATFORM */