#include #include #include #include "window.h" #include "log.h" #include "draw.h" #include "connect.h" #include "state.h" #define EVEN(n) ((int)(n) - ((int)(n) % 2 != 0)) static gboolean mainloop_quit(gpointer data) { g_main_loop_quit(data); return G_SOURCE_CONTINUE; } static gboolean mainloop_draw(gpointer data) { State *state = data; draw_paint(state->draw, state->win); return G_SOURCE_REMOVE; } static void log_handler(const char *log_domain, GLogLevelFlags level, const char *message, gpointer log_level) { GLogLevelFlags message_level = level & G_LOG_LEVEL_MASK; if ((GLogLevelFlags)log_level < message_level) return; if (message_level <= G_LOG_LEVEL_WARNING) g_printerr("%s\n", message); else g_print("%s\n", message); } int main(int argc, char **argv) { g_log_set_default_handler(log_handler, (gpointer)G_LOG_LEVEL_DEBUG); GMainLoop *mainloop = g_main_loop_new(NULL, FALSE); Connection *con = connect_create(); Window *win = window_create(con); int screen_width = con->screen_size->width; int screen_height = con->screen_size->height; int height = EVEN(round(screen_height * 0.021)); int x_padding = EVEN(round(screen_width * 0.005)); int y_padding = EVEN(round(screen_height * 0.004)); log_debug("Calculated dimensions [height=%d, x_pad=%d, y_pad=%d]", height, x_padding, y_padding); Drawable *draw = draw_create("Hack 13 Bold", height, x_padding, x_padding, y_padding, 1); State *state = state_create(win, draw); for (int i = 0; i < 9; ++i) { char text[] = { '1' + i, '\0' }; Button *btn = button_create(text, true); state_add_button(state, btn); } Button *btn = button_create("long button", false); state_add_button(state, btn); draw_set_buttons(draw, state->btns); connect_attach_state(con, state); connect_attach_source(con); guint source_term = g_unix_signal_add(SIGTERM, mainloop_quit, mainloop); guint source_int = g_unix_signal_add(SIGINT, mainloop_quit, mainloop); guint id = g_timeout_add(100, mainloop_draw, state); log_debug("Starting main loop"); g_main_loop_run(mainloop); log_debug("Cleaning main loop"); g_clear_pointer(&mainloop, g_main_loop_unref); g_source_remove(source_term); g_source_remove(source_int); state_destroy(state); draw_destroy(draw); window_destroy(win); return 0; } // vim: ts=4 sw=4 et