Fast, lightweight and easy to use UIToolkit for building user interfaces.
Written in C++17
Its goal is less dependency and mini
| Platform | CI Status |
|---|---|
| Linux | CI TODO |
| Windows |
Create a button on window
#include <Btk/context.hpp> //< For UIContext
#include <Btk/comctl.hpp> //< Base widget & comctl
using namespace BTK_NAMESPACE; //< The namespace is configurable, default in Btk
class App : public Widget {
public:
App() {
set_window_title("My Window");
btn.set_text("Hello,click to close the window");
btn.signal_clicked().connect(&App::on_button_clicked, this);
// Also it can connect to lambda function or a callable
}
void on_button_clicked() {
close();
}
private:
// Add some widget on the root
Button btn{this};
// Or new like this
// new Button(this);
};
int main() {
#if 0
auto your_graphics_driver = new YourDriver();
UIContext ctxt(your_graphics_driver);
#else
UIContext ctxt;
#endif
App app;
app.show();
return ctxt.run();
}
- Utf8 support
- Cross platform
- Template based signal system
- HI-DPI Support
- No external dependencies on windows
In XMake
add_repositories("btk-project https://github.com/Btk-Project/xmake-repo")
add_requires("btk")
add_packages("btk")| Name | Platform | Description |
|---|---|---|
| Direct2D | Windows | Native painter on windows |
| Cairo | X11 (Xlib) | Unix painter |
| Nanovg | OpenGL | Cross platform painter (imcompeleted) |
| Name | Platform | Description |
|---|---|---|
| DWrite | Windows | Native font backend on windows |
| Freetype | Any | In Progress |
| Name | Platform | Description |
|---|---|---|
| Win32 | Windows | |
| SDL2 | Any |
| Name | Done | TODO / Description |
|---|---|---|
| Button | ||
| RadioButton | ||
| ComboBox | ||
| TextEdit | Half | Single line, need multi support |
| Slider | ||
| ScrollBar | ||
| ProgressBar | ||
| Label | ||
| ImageView | Can play gif | |
| PopupWidget | ||
| PopupMenu | ||
| FileDialog | ||
| Menu | ||
| MenuBar | ||
| MainWindow | ||
| TabWidget | ||
| TabBar | ||
| StackedWidget | ||
| GLWidget | For use OpenGL | |
| ListBox | Display string items | |
| VideoWidget | Video output for MediaPlayer (multimedia plugin) | |
| WebView | CoreWebView2 on Win32 (webview plugin) |
- IME disappearence when has Win32 child window (SDL backend)
- Focus does gained for once mouse click when has Win32 child window (SDL backend)
- Render Wrong on clip, maybe matrix or paint backend has bug?
- Compelete PainterEffect, refactorying it
- Compelete Nanovg Painter
- Improve Style
- Focus Conflict for System Window System & Logical Widget System (We used a dirty way to handle it)
- Linux
$ apt install libcairo2-dev libpango1.0-dev libsdl2-devMIT License
