Supports Windows, Linux, Android1 & Web2 (Experimental). Not tested on MacOS3.
1: System themes & map widget not working on Android now. If you interested with compiling for android, look here
2: With Emscripten. System themes & map widget not working now. If you interested with compiling for web, look here
3: All critical processes (like Widget drawing, click handling etc.) should work on MacOS. But themes and screen reader won't work, and could be include MacOS-only bug.
import malisipi.mui as m
fn increase_count(event_details m.EventDetails,mut app &m.Window, mut app_data voidptr){
unsafe {
app.get_object_by_id("count")[0]["text"].str = (app.get_object_by_id("count")[0]["text"].str.int() + 1).str()
}
}
mut app := m.create(title:"Counter - MUI Example", height:100, width:400)
app.label(id:"count", x:"5%x", y:"5%y", width:"45%x", height:"90%y" text:"0")
app.button(id:"count_button", x:"# 5%x", y:"5%y", width:"45%x", height:"90%y", text:"Count", onclick:increase_count)
app.run()
You can find more examples in
./examples/
folder. Also you can visit Gallery that lists applications screenshots uses MUI.You can test MUI easily from here.
To see all created and planned features, look up To-Do List
You can make your MUI applications more powerful with plugins.
Browse MUI plugin list
To install, run
v install https://github.com/malisipi/mui
To remove, run
v remove malisipi.mui
Flags | Description |
---|---|
-d show_fps |
Show FPS of the window |
-d no_emoji |
Disable emoji support and font embedding |
-d emscripten |
Compile for emscripten (use with -os wasm32-emscripten ) |
-d dont_clip |
For debugging purposes, it disables clipping the widgets area. (Not recommend) |
-d power_save |
Enables power save mode. It's recommend if your application require more resource or you're running the application on low-hardware computer. Some drawing lags would be appeared with the flag, please report them. |
-d support_japanese_input |
Support basic japanese input |
./patches
.How to compile demo.v with emscripten:
[~/.vmodules/malisipi/mui/examples]$ v -d emscripten -d no_emoji -gc none -os wasm32-emscripten demo.v -o emscripten_.c
[~/.vmodules/malisipi/mui/examples]$ cat emscripten_.c | sed 's/waitpid(p->pid, &cstatus, 0);/-1;/g' | sed 's/waitpid(p->pid, &cstatus, WNOHANG);/-1;/g' | sed 's/wait(0);/-1;/g' &> emscripten.c
[path/to/dir/v]$ emcc -fPIC -Wimplicit-function-declaration -w thirdparty/stb_image/stbi.c -I/usr/include/gc/ -Ithirdparty/stb_image -Ithirdparty/fontstash -Ithirdparty/sokol -Ithirdparty/sokol/util -DSOKOL_GLES2 -DSOKOL_NO_ENTRY -DNDEBUG -O3 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s ALLOW_MEMORY_GROWTH -s MODULARIZE -s ASSERTIONS=1 ~/.vmodules/malisipi/mui/examples/emscripten.c -o ~/.vmodules/malisipi/mui/examples/app.js --embed-file ~/.vmodules/malisipi/mui/assets/noto.ttf@/noto.ttf --embed-file ~/.vmodules/malisipi/mui/examples/v-logo.png@v-logo.png
You must to compile webview.o for one time before starting to building your applications.
For Windows
%USERPROFILE%\.vmodules\malisipi\mui\webview> build_webview_for_windows.cmd
X:\path\to\example> copy "%USERPROFILE%\.vmodules\malisipi\mui\webview\webview2\runtimes\win-
\native\WebView2Loader.dll"
"X:\path\to\example"
X:\path\to\example> v -cc gcc example.v
For Linux
libgtk-3-dev
and libwebkit2gtk-4.0-dev
package (on Debian-based systems)[~/.vmodules/malisipi/mui/webview/]$ ./build_webview_for_linux.sh
For Windows;
v -cc gcc ...
If you have a problem/question or feature request about MUI, you can create a issue.
You should run processes that required more time than 0.2s as concurrent. If you don't, app couldn't response until finish processes.
//Don't (App never response when call the function)
fn run_dialog(event_details m.EventDetails,mut app &m.Window, app_data voidptr){
app.create_dialog(m.Modal{typ:"messagebox",message:"Hello, "+app.wait_and_get_answer(),title:"Hi!"})
print(app.wait_and_get_answer())
}
//Do fn do_another_process(mut app &m.Window){ app.create_dialog(m.Modal{typ:"messagebox",message:"Hello, "+app.wait_and_get_answer(),title:"Hi!"}) print(app.wait_and_get_answer()) }
fn run_dialog(event_details m.EventDetails,mut app &m.Window, app_data voidptr){ go do_another_process(mut app) }
./tinyfiledialogs/
) (Patched) licensed by Zlib License../noto_emoji_font/
) licensed by OFL License../assets/noto.ttf
) licensed by OFL License../assets/noto_jp.ttf
) licensed by OFL License../examples/v-logo.png
) licensed by MIT License../patches/sokol_android_keyboard.patch
) licensed by Zlib license../webview/webview
) (Patched) licensed by MIT License../webview/webview2
) -> License.You can read documentation from these links.