#include #include "timer.h" #include "timer_renderer.h" #include "segment_renderer.h" #include "controller.h" #include "splits.h" #include #if defined(PLATFORM_DESKTOP) #define GLSL_VERSION 330 #else #define GLSL_VERSION 100 #endif #define ERROR "Error: %s\n" #define TXTCOL_LENGTH 64 //global variables int windowWidth = 420; int windowHeight = 640; int remote_state = 0; Font font; //extern this in other files void error(const char *msg) { fprintf(stderr, ERROR, msg); exit(EXIT_FAILURE); } //extern void print_xml(const char *path); //testing control function void control(void) { static int last_state; if (last_state != remote_state) //ctrl_pause(&timer); //printf("%d, %d\n", last_state, remote_state); last_state = remote_state; } int main(int argc, char *argv[]) { if (argc < 2) { error("gimme file"); exit(EXIT_FAILURE); } segment_list segs = open_splits_file(argv[1]); //size of window can be determined by height of all components visible InitWindow(windowWidth, windowHeight, "Ghost"); SetTargetFPS(60); Image blank = GenImageColor(640, 420, BLANK); Texture2D texture = LoadTextureFromImage(blank); Shader shader = LoadShader(0, "shaders/frag.glsl"); UnloadImage(blank); font = LoadFontEx("/usr/share/fonts/CozetteVector.ttf", 400, 0, 0); GenTextureMipmaps(&font.texture); ghost ghost = ghost_new(); ctrl_binder *binder = create_ctrl_binder(ghost, &segs); ctrl_bind_segments(binder, &segs); //make a layout manager for these timer_renderer *tr = create_timer_renderer( ghost, (Vector2){0.0f, windowHeight/8 * 6}, (Vector2){(float)windowWidth, (float)windowHeight/8} ); //segment_renderer *sr = create_segment_renderer(segs, 0.0f, 0.0f); ctrl_bind_timer_renderer(binder, tr); //ctrl_bind_segment_renderer(binder, sr); text_column *seg_names = txtcol_new(segs.count, TXTCOL_LENGTH); text_column *seg_delta = txtcol_new(segs.count, TXTCOL_LENGTH); text_column *seg_times = txtcol_new(segs.count, TXTCOL_LENGTH); char buffer[64]; for (int i = 0; i < segs.count; i++) { time_unparse(buffer, 64, &segs.segments[i].realtime); txtcol_set(seg_names, segs.segments[i].name, i); txtcol_set(seg_delta, " ", i); txtcol_set(seg_times, buffer, i); txt_pos(seg_names->column[i], (Vector2){0, i * font.baseSize/16}); txt_pos(seg_delta->column[i], (Vector2){txtcol_widest(seg_names) + 10, i * font.baseSize/16}); txt_pos(seg_times->column[i], (Vector2){0, i * font.baseSize/16}); } //lol txtcol_adjacent(seg_names, seg_delta, 10); txtcol_adjacent(seg_delta, seg_times, 10); scroller *scr1 = scroll_new(15, seg_names); scroller *scr2 = scroll_new(15, seg_delta); scroller *scr3 = scroll_new(15, seg_times); ctrl_add_scroller(binder, scr1); ctrl_add_scroller(binder, scr2); ctrl_add_scroller(binder, scr3); txtcol_op(seg_times, txt_left); float fontSize = (float)font.baseSize; while (!WindowShouldClose()) { ghost_tick(ghost); if (IsKeyPressed(KEY_P)) { ctrl_start(binder); txtcol_op(seg_times, txt_left); } BeginDrawing(); ClearBackground(BLACK); ctrl_scroller_op(binder, scroll_draw); //yummy render_timer(tr); EndDrawing(); } ghost_delete(ghost); CloseWindow(); }