URI: 
       test.c - ltk - GUI toolkit for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/ltk.git (encrypted, but very slow)
  HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       test.c (4901B)
       ---
            1 #include <stdio.h>
            2 
            3 #include <ltk/ltk.h>
            4 #include <ltk/label.h>
            5 #include <ltk/button.h>
            6 #include <ltk/image.h>
            7 #include <ltk/image_widget.h>
            8 #include <ltk/grid.h>
            9 #include <ltk/entry.h>
           10 #include <ltk/menu.h>
           11 #include <ltk/box.h>
           12 #include <ltk/checkbutton.h>
           13 #include <ltk/radiobutton.h>
           14 #include <ltk/combobox.h>
           15 
           16 int
           17 quit(ltk_widget *self, ltk_callback_arglist args, ltk_callback_arg data) {
           18         (void)self;
           19         (void)args;
           20         (void)data;
           21         ltk_mainloop_quit();
           22         return 1;
           23 }
           24 
           25 int
           26 printstuff(ltk_widget *self, ltk_callback_arglist args, ltk_callback_arg data) {
           27         (void)self;
           28         (void)args;
           29         printf("%d\n", LTK_CAST_ARG_INT(data));
           30         return 1;
           31 }
           32 
           33 int
           34 printstate(ltk_widget *self, ltk_callback_arglist args, ltk_callback_arg data) {
           35         (void)self;
           36         (void)data;
           37         int state = LTK_GET_ARG_INT(args, 0);
           38         printf("%d\n", state);
           39         return 0;
           40 }
           41 
           42 int
           43 main(int argc, char *argv[]) {
           44         (void)argc;
           45         (void)argv;
           46         ltk_init();
           47 
           48         ltk_window *window = ltk_window_create("Hi", 0, 0, 500, 500);
           49         ltk_grid *grid = ltk_grid_create(window, 5, 2);
           50         ltk_grid_set_column_weight(grid, 0, 1);
           51         ltk_grid_set_column_weight(grid, 1, 1);
           52         ltk_grid_set_row_weight(grid, 4, 1);
           53         ltk_button *button = ltk_button_create(window, "I'm a button!");
           54         ltk_button *button1 = ltk_button_create(window, "I'm also a button!");
           55         ltk_label *label = ltk_label_create(window, "I'm a label!");
           56         ltk_image *img = ltk_image_create_from_path("test.jpg");
           57         if (!img) {
           58                 fprintf(stderr, "Unable to load image.\n");
           59                 return 1;
           60         }
           61         ltk_image_widget *iw = ltk_image_widget_create(window, img);
           62         ltk_entry *entry = ltk_entry_create(window, "");
           63         ltk_menu *menu = ltk_menu_create(window);
           64         ltk_menuentry *e1 = ltk_menuentry_create(window, "Hi");
           65         ltk_menuentry *e2 = ltk_menuentry_create(window, "I'm a submenu");
           66         ltk_menu_add_entry(menu, e1);
           67         ltk_menu_add_entry(menu, e2);
           68         ltk_menu *submenu = ltk_submenu_create(window);
           69         ltk_menuentry *e3 = ltk_menuentry_create(window, "Menu Entry 1");
           70         ltk_menuentry *e4 = ltk_menuentry_create(window, "Quit");
           71         ltk_menu_add_entry(submenu, e3);
           72         ltk_menu_add_entry(submenu, e4);
           73         ltk_menuentry_attach_submenu(e2, submenu);
           74 
           75         ltk_box *box = ltk_box_create(window, LTK_VERTICAL);
           76         ltk_button *btn1 = ltk_button_create(window, "Bla1");
           77         ltk_button *btn2 = ltk_button_create(window, "Bla2");
           78         ltk_button *btn3 = ltk_button_create(window, "Bla3");
           79         ltk_button *btn4 = ltk_button_create(window, "Bla4");
           80         ltk_button *btn5 = ltk_button_create(window, "Bla5");
           81         ltk_box_add(box, LTK_CAST_WIDGET(btn1), LTK_STICKY_LEFT);
           82         ltk_box_add(box, LTK_CAST_WIDGET(btn2), LTK_STICKY_LEFT);
           83         ltk_box_add(box, LTK_CAST_WIDGET(btn3), LTK_STICKY_LEFT);
           84         ltk_box_add(box, LTK_CAST_WIDGET(btn4), LTK_STICKY_LEFT);
           85         ltk_box_add(box, LTK_CAST_WIDGET(btn5), LTK_STICKY_LEFT);
           86 
           87         ltk_checkbutton *cbtn1 = ltk_checkbutton_create(window, "Checkbutton1", 0);
           88         ltk_checkbutton *cbtn2 = ltk_checkbutton_create(window, "Checkbutton2", 1);
           89         ltk_box_add(box, LTK_CAST_WIDGET(cbtn1), LTK_STICKY_LEFT);
           90         ltk_box_add(box, LTK_CAST_WIDGET(cbtn2), LTK_STICKY_LEFT);
           91 
           92         ltk_radiobutton *rbtn1 = ltk_radiobutton_create(window, "Radiobutton1", 0, NULL);
           93         ltk_radiobutton *rbtn2 = ltk_radiobutton_create(window, "Radiobutton2", 1, rbtn1);
           94         ltk_box_add(box, LTK_CAST_WIDGET(rbtn1), LTK_STICKY_LEFT);
           95         ltk_box_add(box, LTK_CAST_WIDGET(rbtn2), LTK_STICKY_LEFT);
           96 
           97         ltk_combobox *combo = ltk_combobox_create(window);
           98         ltk_combobox_add_option(combo, "Option 1");
           99         ltk_combobox_add_option(combo, "Option 2");
          100         ltk_combobox_add_option(combo, "Option 3");
          101         ltk_combobox_add_option(combo, "Option 4");
          102 
          103         ltk_grid_add(grid, LTK_CAST_WIDGET(menu), 0, 0, 1, 1, LTK_STICKY_LEFT|LTK_STICKY_RIGHT);
          104         ltk_grid_add(grid, LTK_CAST_WIDGET(combo), 0, 1, 1, 1, LTK_STICKY_LEFT);
          105         ltk_grid_add(grid, LTK_CAST_WIDGET(button), 1, 0, 1, 1, LTK_STICKY_LEFT);
          106         ltk_grid_add(grid, LTK_CAST_WIDGET(button1), 1, 1, 1, 1, LTK_STICKY_RIGHT);
          107         ltk_grid_add(grid, LTK_CAST_WIDGET(label), 2, 0, 1, 1, LTK_STICKY_RIGHT);
          108         ltk_grid_add(grid, LTK_CAST_WIDGET(iw), 2, 1, 1, 1, LTK_STICKY_LEFT|LTK_STICKY_RIGHT|LTK_STICKY_PRESERVE_ASPECT_RATIO);
          109         ltk_grid_add(grid, LTK_CAST_WIDGET(entry), 3, 0, 1, 1, LTK_STICKY_LEFT|LTK_STICKY_RIGHT);
          110         ltk_grid_add(grid, LTK_CAST_WIDGET(box), 4, 0, 1, 2, LTK_STICKY_LEFT|LTK_STICKY_RIGHT|LTK_STICKY_TOP|LTK_STICKY_BOTTOM);
          111         ltk_window_set_root_widget(window, LTK_CAST_WIDGET(grid));
          112         ltk_widget_register_signal_handler(LTK_CAST_WIDGET(button), LTK_BUTTON_SIGNAL_PRESSED, &quit, LTK_ARG_VOID);
          113         ltk_widget_register_signal_handler(LTK_CAST_WIDGET(e4), LTK_MENUENTRY_SIGNAL_PRESSED, &quit, LTK_ARG_VOID);
          114         ltk_widget_register_signal_handler(LTK_CAST_WIDGET(button1), LTK_BUTTON_SIGNAL_PRESSED, &printstuff, LTK_MAKE_ARG_INT(5));
          115         ltk_widget_register_signal_handler(LTK_CAST_WIDGET(window), LTK_WINDOW_SIGNAL_CLOSE, &quit, LTK_ARG_VOID);
          116         ltk_widget_register_signal_handler(LTK_CAST_WIDGET(button1), LTK_WIDGET_SIGNAL_CHANGE_STATE, &printstate, LTK_ARG_VOID);
          117 
          118         ltk_mainloop();
          119         return 0;
          120 }