Skip to content

Commit

Permalink
C Bindings: Add Image and Link support
Browse files Browse the repository at this point in the history
  • Loading branch information
malisipi committed Apr 29, 2023
1 parent 7c31195 commit c2e882a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
3 changes: 3 additions & 0 deletions c_bindings/mui.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ void mui_label(mui_window* window, char* config, void (*onclk)(mui_event_details
void mui_textbox(mui_window* window, char* config, void (*onchg)(mui_event_details, mui_window*, void**));
void mui_textarea(mui_window* window, char* config, void (*onchg)(mui_event_details, mui_window*, void**));
void mui_password(mui_window* window, char* config, void (*onchg)(mui_event_details, mui_window*, void**));
void mui_image(mui_window* window, char* config, void (*onclk)(mui_event_details, mui_window*, void**));
void mui_link(mui_window* window, char* config, void (*onclk)(mui_event_details, mui_window*, void**));
void mui_scrollbar(mui_window* window, char* config, void (*onclk)(mui_event_details, mui_window*, void**), void (*onchg)(mui_event_details, mui_window*, void**), void (*onunclk)(mui_event_details, mui_window*, void**), mui_object*);
void mui_run(mui_window* window);
void mui_change_object_property(mui_window* window, struct mui_object* object, char* config);
Expand All @@ -71,6 +73,7 @@ struct mui_object* mui_get_object_by_id(mui_window* window, char* id);
/*
### Not Implemented Yet ###
void mui_sort_widgets_with_zindex();
void mui_notifypopup();
void mui_openfiledialog();
Expand Down
19 changes: 18 additions & 1 deletion c_bindings/mui.v
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ fn mui_widget(_type string, mut window &mui.Window, pconf &char, onclk mui.OnEve
if jconf["height"].type_name() == "string" { wconf.height = jconf["height"] as string }
if jconf["text"].type_name() == "string" { wconf.text = jconf["text"] as string }
if jconf["vertical"].type_name() == "string" { wconf.vertical = (jconf["vertical"] as string) == "true" }
if jconf["icon"].type_name() == "string" { wconf.icon = (jconf["icon"] as string) == "true" }
if jconf["path"].type_name() == "string" { wconf.path = jconf["path"] as string }
if jconf["link"].type_name() == "string" { wconf.link = jconf["link"] as string }
wconf.onclick = onclk
wconf.onchange = onchg
wconf.onunclick = onucl
Expand All @@ -69,8 +72,12 @@ fn mui_widget(_type string, mut window &mui.Window, pconf &char, onclk mui.OnEve
window.password(wconf)
} "scrollbar" {
window.scrollbar(wconf)
} "image" {
window.image(wconf)
} "link" {
window.link(wconf)
} else {
println(":: Invalid/Unsupported widget type")
println(":: Invalid/Unsupported widget type -> ${_type}")
}
}

Expand Down Expand Up @@ -102,6 +109,16 @@ fn mui_password(mut window &mui.Window, pconf &char, onchg mui.OnEvent){
mui_widget("password", mut window, pconf, mui.empty_fn, onchg, mui.empty_fn, &mui.null_object)
}

[export: "mui_link"]
fn mui_link(mut window &mui.Window, pconf &char, onchg mui.OnEvent){
mui_widget("link", mut window, pconf, mui.empty_fn, onchg, mui.empty_fn, &mui.null_object)
}

[export: "mui_image"]
fn mui_image(mut window &mui.Window, pconf &char, onclk mui.OnEvent){
mui_widget("image", mut window, pconf, onclk, mui.empty_fn, mui.empty_fn, &mui.null_object)
}

[export: "mui_scrollbar"]
fn mui_scrollbar(mut window &mui.Window, pconf &char, onclk mui.OnEvent, onchg mui.OnEvent, onunclk mui.OnEvent, connected_object &map[string]mui.WindowData){
mui_widget("scrollbar", mut window, pconf, mui.empty_fn, onchg, mui.empty_fn, connected_object)
Expand Down
9 changes: 8 additions & 1 deletion c_bindings/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ void button_event_handler(mui_event_details details, mui_window* window, void**
mui_destroy(window);
}

void button2_event_handler(mui_event_details details, mui_window* window, void** app_data){
mui_messagebox("Glitter ✨️", "A little glitter!", MUI_OK, MUI_INFO);
}

void textbox_event_handler(mui_event_details details, mui_window* window, void** app_data){
printf("%d\n",++((struct AppData*)app_data)->count);
struct mui_parsed_event_details parsed_details = mui_parse_event_details(details);
Expand All @@ -29,11 +33,14 @@ int main(int argc, char** argv){
app_data.count = 0;

mui_init(argc, argv);
mui_window* window = mui_create("{\"title\":\"Hello World\", \"width\":450, \"height\":250}", (void*)&app_data);
mui_window* window = mui_create("{\"title\":\"Hello World\", \"width\":450, \"height\":450}", (void*)&app_data);
mui_button(window, "{\"id\":\"button1\", \"x\":\"10%x\", \"y\":\"10\", \"width\":\"80%x\", \"text\": \"Destroy the window\"}", *button_event_handler);
mui_button(window, "{\"id\":\"button2\", \"x\":\"10\", \"y\":\"10\", \"width\":\"20\", \"height\":\"20\", \"icon\":\"true\", \"text\": \"✨️\"}", *button2_event_handler);
mui_label(window, "{\"id\":\"label1\", \"x\":\"10%x\", \"y\":\"50\", \"width\":\"80%x\", \"text\": \"This is a label\"}", *mui_empty_fn);
mui_textbox(window, "{\"id\":\"textbox1\", \"x\":\"10%x\", \"y\":\"90\", \"width\":\"80%x\", \"text\": \"This is a textbox\"}", *textbox_event_handler);
mui_textarea(window, "{\"id\":\"textarea1\", \"x\":\"10%x\", \"y\":\"130\", \"width\":\"80%x -20\", \"height\":\"100\", \"text\": \"This is a textarea\"}", *mui_empty_fn);
mui_image(window, "{\"id\":\"image1\", \"x\":\"10%x\", \"y\":\"250\", \"width\":\"64\", \"height\":\"64\", \"path\": \"../examples/v-logo.png\"}", *mui_empty_fn);
mui_link(window, "{\"id\":\"link1\", \"x\":\"10%x +80\", \"y\":\"250\", \"width\":\"120\", \"link\": \"https://example.com\", \"text\":\"example.com\"}", *mui_empty_fn);
mui_object* textarea1 = mui_get_object_by_id (window, "textarea1");
mui_scrollbar(window, "{\"id\":\"scrollbar1\", \"x\":\"# 10%x\", \"y\":\"130\", \"width\":\"20\", \"height\":\"100\", \"vertical\":\"true\"}", *mui_empty_fn, *mui_empty_fn, *mui_empty_fn, textarea1);
mui_run(window);
Expand Down

0 comments on commit c2e882a

Please sign in to comment.