/zig-libui-ng

Zig bindings for libui-ng

Primary LanguageZigMIT LicenseMIT

libui-ng bindings in zig

This repository is a work in progress. Libui-ng is a c library for creating cross-platform applications using the native widget toolkits for each platform. These bindings are a manual cleanup of the cimport of ui.h. Each control type has been made an opaque with the extern functions embedded within in them. Additionally, functions using boolean values have been converted to use bool. Some helper functions have been made for writing event handlers.

This library currently tracks the latest stable zig release 0.12.0.

Example

const std = @import("std");
const ui = @import("ui");

pub fn on_closing(_: *ui.Window, _: ?*void) ui.Window.ClosingAction {
    ui.Quit();
    return .should_close;
}

pub fn main() !void {
    var init_data = ui.InitData{
        .options = .{ .Size = 0 },
    };
    ui.Init(&init_data) catch {
        std.debug.print("Error initializing LibUI: {s}\n", .{init_data.get_error()});
        init_data.free_error();
        return;
    };
    defer ui.Uninit();

    const main_window = try ui.Window.New("Hello, World!", 320, 240, .hide_menubar);

    main_window.as_control().Show();
    main_window.OnClosing(void, on_closing, null);

    main_window.MsgBox("Message Box", "Hello, World!");

    ui.Main();
}

Planned Features

  • Comptime function for defining a Table based on a struct
  • Nicer bindings for event callbacks
  • More examples
  • Project Template