Microraptor gui
C HTML CSS Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.mm
bin
data
docs
examples
lib
tests
.gitignore
COPYING
Makefile
README.md
configure
mrg-browser
mrg-edit
mrg-host
mrg-terminal

README.md

microraptor gui

Immediate UI framework with cairo. Also a minimal usable graphical user environment built using the framework, including: a shell/host for client programs, a terminal emulator, file browser and text editor written using the library.

Features:

  • cairos drawing/transformation API
  • pointer/keyboard/multi touch events
  • CSS styling/layout
  • Single pass direct XML SVG/XHTML layout/renderer (minimal state/no DOM)
  • SDL/GTK/framebuffer/terminal backends.
  • PNG/JPG image caching

microraptor gui is a C API for creating user interfaces, it can be used as an application writing environment or as an interactive canvas for part of a larger interface.

Micro raptor builds on/integrates with cairos immediate mode vector rendering API

Callbacks registered during the painting of the frame - the cairo transformations in place during registration applies when called. Also works for dragging. Keybindings are also registered in the same callback for building the ui. Thus the mental model is that one - in one call - repaint/recreate the UI drawing and callbacks from data-state and view-state in one call, avoiding much caching and intermediate objects.

Embeddable and stand-alone - as a "canvas" mrg can be used as widgets in Gtk+ applications or full-blown applications.

CSS styled rendering (using a context stack; where the pushing of contexts specifies the "element.class#id" of each now element rendering entered.

Backends / dependencies

MicroRaptor Gui has three independent backends it can use: SDL-1.2, GTK+-3.0 and ANSI/vt100 terminals.

The GTK backend provides both full application hosting, and a widget for use as a canvas in GTK+applications. The terminal backends has mouse support, is utf8 native and for simple text-centric applications you can even build static libraries skipping even the cairo support.

Build/run

Clone both mrg and mmm, and have SDL-1.2 and GTK+-3.0 development packages installed. A

$ make && sudo make install

in first mmm and then mrg shouler permit running:

$ mmm.sdl mrg /home/foo/..path/to/sources/of/mrg/docs/31-hello.c

To start a slide-show of source code that is live compiled and run as interactive demos within the viewer, navigate forward/back with F12 and F11. Prefixing mrg with mmm.sdl uses the mmm SDL host instead of the autodetected GTK+ backend for microraptor, using GTK there is timing/update issues likely related to mainloop integration issues.

$ mrg host

Launches a window manager/compositor host for mmm clients, which mrg applications are.

$ mrg browser mrg:index.html

Launches the mrg XHTML+CSS renderer on a static HTML/CSS data set contained in the mrg binary.

$ mrg edit <textfile>

Launches the editor on the text file.

Luajit ffi

All of the mrg C API maps easily to lua when using luajit ffi, binds easily with luajit ffi. See the ./luajit dir for an example, that also bundles the needed cairo bindings.

Microraptor and GTK

Microraptor can use GTK as a backend or microraptor can be used in GTK+ applications, when used in gtk applications in widgets it is better to rely on native mainloop integration with g_timeout and g_idle instead of similar library functionality provided by microraptor gui.

An immediate mode UI compromise

In terms of programming paradigm, microraptor contains aspects of both traditional retained widget-tree/scene-graph ui's and purist immediate mode uis. Since microraptor doesn't have a retained scenegraph, and some of the freedoms gained with imgui, like being able to paint incrementally directly from data-structures and free form logic to structure things.