A Cross-Platform UI Library
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/[email protected]
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-
<win_arch>\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.
path\to\winapi-full-for-0.9.27\include\winapi
to C:\winapi
.v -cc tcc run example.v
Probably, it's a issue about your drivers. You will need to ensure that you have downloaded and installed a recent driver for your graphics hardware. If your system does not contain a GPU, or the GPU vendor delivers graphics drivers providing OpenGL support that's so old as to be useless to you, you might want to consider installing the Mesa3D OpenGL library on your system.
V is still beta and MUI require to break support of V's old versions to supporting latest.
or
VTray library is created for this goal. So we don't require an built-in tray library for MUI. If you see any issue about MUI interoperability with this library, please report it to fix it.
//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.