GPU-drawn interface toolkit

Kinogaki UI

A from-scratch, retained-mode UI toolkit in pure C++ on top of Kinogaki Platform: an immediate-mode 2-D drawer over the render hardware interface, a themeable widget framework with docking, and an event-driven loop that repaints only what changed.

A GPU-drawn interface toolkit

Kinogaki UI is a from-scratch, retained-mode user-interface toolkit for building native applications. It draws the Kinogaki Editor and the example apps, and it is what you reach for when you want a native interface with the same control as the document model underneath it, building on Kinogaki Platform alone.

It is pure C++ on top of Kinogaki Platform, in two layers: a 2-D drawing layer that talks to the GPU, and a widget framework that lays out and routes events. A stack for building software needs an interface layer as controllable as everything else in it: Kinogaki UI links one library, runs as native code, and keeps the whole widget tree under your control.

What's in it

The shape of it

#include "kinogaki/ui/Build.h"
using namespace kinogaki::ui;

auto panel = column(
    title("Inspector"),
    field("Amount", slider(0.4f, [&](float v){ amount = v; })),
    field("Name",   textField("ball")),
    button("Apply", [&]{ apply(); }));

A panel is one expression: containers take their children directly, leaves configure up front, and the factories handle ownership and conversion for you. That parsimony is a deliberate house style: the toolkit is a joy to assemble and hard to misuse.

Why build it

Kinogaki UI is modelled on the parts of mature desktop UI architecture that matter for responsiveness: per-region offscreen buffers so panning one panel repaints only that panel, event compression, and navigation that never re-evaluates the document. It carries this in pure C++ on Kinogaki Platform, and it is fast: the interface layer you want under a tool that has to stay fluid while a document (and an agent) change underneath it.

Start with the Quickstart to put a window on screen, then read the app loop for how it stays idle-cheap.