MicroUI: Thư viện UI nhỏ gọn, di động viết bằng ANSI C
MicroUI là một thư viện giao diện người dùng (UI) immediate-mode cực kỳ nhẹ, chỉ khoảng 1100 dòng mã ANSI C. Nó hoạt động trong vùng nhớ cố định, hỗ trợ nhiều điều khiển cơ bản và được thiết kế để dễ dàng tích hợp vào bất kỳ hệ thống vẽ nào.

MicroUI là một thư viện giao diện người dùng (UI) immediate-mode siêu nhẹ, được viết hoàn toàn bằng ANSI C. Với kích thước chỉ khoảng 1100 dòng mã nguồn (SLOC), đây là giải pháp lý tưởng cho các nhà phát triển cần xây dựng giao diện đồ họa nhưng muốn giữ cho ứng dụng của mình tối giản, di động và chiếm ít tài nguyên.
Minh họa thư viện MicroUI
Các tính năng chính
Điểm mạnh của MicroUI nằm ở thiết kế tập trung vào hiệu quả và tính linh hoạt:
- Nhỏ gọn: Toàn bộ mã nguồn chỉ khoảng 1100 dòng ANSI C.
- Quản lý bộ nhớ tĩnh: Thư viện hoạt động hoàn toàn trong một vùng nhớ có kích thước cố định, không thực hiện bất kỳ việc cấp phát bộ nhớ động nào, giúp tránh rò rỉ bộ nhớ và phù hợp với hệ thống nhúng.
- Các điều khiển tích hợp: Hỗ trợ sẵn các thành phần giao diện phổ biến như cửa sổ (window), bảng cuộn (scrollable panel), nút bấm (button), thanh trượt (slider), hộp văn bản (textbox), nhãn (label), hộp kiểm (checkbox) và văn bản tự động xuống dòng.
- Tương thích rộng: Hoạt động với bất kỳ hệ thống vẽ (rendering system) nào có khả năng vẽ hình chữ nhật và văn bản.
- Dễ dàng mở rộng: Được thiết kế để người dùng có thể thêm các điều khiển tùy chỉnh một cách thuận tiện.
- Bố cục đơn giản: Cung cấp hệ thống layout giúp sắp xếp các thành phần UI trên màn hình dễ dàng.
Ví dụ mã nguồn
Thư viện sử dụng mô hình immediate-mode, nơi giao diện được xây dựng lại ngay trong mỗi khung hình (frame). Dưới đây là đoạn mã mẫu demonstrating việc tạo một cửa sổ đơn giản với các nút bấm và popup:
if (mu_begin_window(ctx, "My Window", mu_rect(10, 10, 140, 86))) {
mu_layout_row(ctx, 2, (int[]) { 60, -1 }, 0);
mu_label(ctx, "First:");
if (mu_button(ctx, "Button1")) {
printf("Button1 pressed\n");
}
mu_label(ctx, "Second:");
if (mu_button(ctx, "Button2")) {
mu_open_popup(ctx, "My Popup");
}
if (mu_begin_popup(ctx, "My Popup")) {
mu_label(ctx, "Hello world!");
mu_end_popup(ctx);
}
mu_end_window(ctx);
}
Lưu ý về kiến trúc
MicroUI hoạt động như một lớp logic xử lý UI. Thư viện mong đợi người dùng cung cấp dữ liệu đầu vào (như bàn phím, chuột) và xử lý các lệnh vẽ kết quả. Nó không thực hiện việc vẽ trực tiếp lên màn hình mà tạo ra các lệnh vẽ để hệ thống kết xuất của bạn thực thi.
Đây là một nền tảng nhẹ nhàng, cung cấp nền tảng vững chắc để xây dựng các công cụ phát triển, game engine hoặc các ứng dụng nhúng cần giao diện tối giản mà không muốn phụ thuộc vào các thư viện đồ sộ. Thư viện được cấp phép theo MIT, cho phép tự do sử dụng và sửa đổi.



