Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL

Related tags

GUI nanogui
Overview

NanoGUI

Docs Travis Build Status Appveyor Build Status

NanoGUI is a minimalistic cross-platform widget library for OpenGL 3+, GLES 2/3, and Metal. It supports automatic layout generation, stateful C++ lambdas callbacks, a variety of useful widget types and Retina-capable rendering on Apple devices thanks to NanoVG by Mikko Mononen. Python bindings of all functionality are provided using pybind11.

Note: This repository contains an improved port of the original NanoGUI. The most visible change to developers is that it no longer relies on Eigen or Enoki and ships with its own (absolutely minimal) vector library. Additionally, the the repository here incorporates the following changes:

  1. A different set of naming conventions is used for function and variable names that feels more natural in a mixed C++ & Python environment. (specifically, underscore_case for methods and variables rather than camelCase).

  2. GUI Rendering now provides backends for OpenGL 3+, GLES 2/3, and Metal. GLES 2 support allows NanoGUI to run on ARM devices including the Raspberry Pi and in browsers via WebGL. The Metal backend supports modern Macs, iPhones, etc.

    NanoGUI includes generic wrappers around shaders and textures that work for all of these frameworks.

  3. The event loop is much more conservative by default and only issues redraw calls when explicitly requested by an event callback.

  4. Python integration: the library comes with a pip-compatible setup.py installation script.

  5. WebAssembly code generation works out of the box (requires Emscripten), enabling powerful UI development for the web. See Tekari for an example of such an application.

  6. Significantly revamped tab widget (supports right-click context menus, draggable, and closeable tabs) and image view widget.

  7. The Entypo icon font has been replaced by FontAwesome (v5.10.1).

Example screenshot

Screenshot of Example 1.

Description

NanoGUI builds on GLFW for cross-platform context creation and event handling, GLAD to access OpenGL functionality on Windows, and NanoVG/MetalNanoVG to draw 2D primitives.

Note that the dependency library NanoVG already includes some basic example code to draw good-looking static widgets; what NanoGUI does is to flesh it out into a complete GUI toolkit with event handling, layout generation, etc.

NanoGUI currently works on Mac OS X (Clang) Linux (GCC or Clang) and Windows (Visual Studio ≥ 2017); it requires a recent C++17 capable compiler. All dependencies are jointly built using a CMake-based build system.

Creating widgets

NanoGUI makes it easy to instantiate widgets, set layout constraints, and register event callbacks using high-level C++17 code. For instance, the following two lines from the included example application add a new button to an existing window window and register an event callback.

Button *b = new Button(window, "Plain button");
b->set_callback([] { cout << "pushed!" << endl; });

The following lines from the example application create the coupled slider and text box on the bottom of the second window (see the screenshot).

/* Create an empty panel with a horizontal layout */
Widget *panel = new Widget(window);
panel->set_layout(new BoxLayout(BoxLayout::Horizontal, BoxLayout::Middle, 0, 20));

/* Add a slider and set defaults */
Slider *slider = new Slider(panel);
slider->set_value(0.5f);
slider->set_fixed_width(80);

/* Add a textbox and set defaults */
TextBox *tb = new TextBox(panel);
tb->set_fixed_size(Vector2i(60, 25));
tb->set_value("50");
tb->set_units("%");

/* Propagate slider changes to the text box */
slider->set_callback([tb](float value) {
    tb->set_value(std::to_string((int) (value * 100)));
});

The Python version of this same piece of code looks like this:

# Create an empty panel with a horizontal layout
panel = Widget(window)
panel.set_layout(BoxLayout(BoxLayout.Horizontal, BoxLayout.Middle, 0, 20))

# Add a slider and set defaults
slider = Slider(panel)
slider.set_value(0.5)
slider.set_fixed_width(80)

# Add a textbox and set defaults
tb = TextBox(panel)
tb.set_fixed_size(Vector2i(60, 25))
tb.set_value("50")
tb.set_units("%")

# Propagate slider changes to the text box
def cb(value):
    tb.set_value("%i" % int(value * 100))
slider.set_callback(cb)

"Simple mode"

Christian Schüller contributed a convenience class that makes it possible to create AntTweakBar-style variable manipulators using just a few lines of code. For instance, the source code below was used to create the following example application.

Screenshot

/// dvar, bar, strvar, etc. are double/bool/string/.. variables

FormHelper *gui = new FormHelper(screen);
ref<Window> window = gui->add_window(Vector2i(10, 10), "Form helper example");
gui->add_group("Basic types");
gui->add_variable("bool", bvar);
gui->add_variable("string", strvar);

gui->add_group("Validating fields");
gui->add_variable("int", ivar);
gui->add_variable("float", fvar);
gui->add_variable("double", dvar);

gui->add_group("Complex types");
gui->add_variable("Enumeration", enumval, enabled)
   ->setItems({"Item 1", "Item 2", "Item 3"});
gui->add_variable("Color", colval);

gui->add_group("Other widgets");
gui->add_button("A button", [](){ std::cout << "Button pressed." << std::endl; });

screen->set_visible(true);
screen->perform_layout();
window->center();

Compiling

Clone the repository and all dependencies (with git clone --recursive), run CMake to generate Makefiles or CMake/Visual Studio project files, and the rest should just work automatically.

On Debian/Ubuntu, make sure that you have installed the following packages

$ apt-get install cmake xorg-dev libglu1-mesa-dev

To also get the Python bindings, you'll need to run

$ apt-get install python-dev

On RedHat/Fedora, make sure that you have installed the following packages

$ sudo dnf install cmake mesa-libGLU-devel libXi-devel libXcursor-devel libXinerama-devel libXrandr-devel xorg-x11-server-devel

To also get the Python bindings, you'll need to run

$ sudo dnf install python3-devel

License

NanoGUI is provided under a BSD-style license that can be found in the LICENSE file. By using, distributing, or contributing to this project, you agree to the terms and conditions of this license.

Note that NanoGUI ships with several fonts that use different (though similarly unencumbered) licenses, in particular Roboto, Inconsolata, and the free version of the Font Awesome icon font (v5.10.1). The latter two are distributed under the SIL Open Font License Version 1.1, while Roboto is distributed under the Apache 2.0 license.

Issues
  • Build issue -

    Build issue - "string sub-command REPLACE requires at least four arguments."

    When building using make -j 4 as per the documentation a problem occurs while running bin2c

    Scanning dependencies of target glfw_objects
    [  2%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/init.c.o
    [  2%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/context.c.o
    [  3%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/input.c.o
    [  4%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/monitor.c.o
    [  6%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/vulkan.c.o
    [  7%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/window.c.o
    [  8%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/x11_init.c.o
    [  9%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/x11_monitor.c.o
    [ 10%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/x11_window.c.o
    [ 12%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/xkb_unicode.c.o
    [ 13%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/posix_time.c.o
    [ 14%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/posix_thread.c.o
    [ 15%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/glx_context.c.o
    [ 17%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/egl_context.c.o
    [ 18%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/osmesa_context.c.o
    [ 19%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/linux_joystick.c.o
    [ 19%] Built target glfw_objects
    [ 20%] Running bin2c
    CMake Error at /home/minabsapi/nanogui/resources/bin2c.cmake:12 (string):
      string sub-command REPLACE requires at least four arguments.
    
    
    make[2]: *** [CMakeFiles/nanogui.dir/build.make:62 : nanogui_resources.cpp] Erreur 1
    make[2]: *** Suppression du fichier « nanogui_resources.cpp »
    make[1]: *** [CMakeFiles/Makefile2:329 : CMakeFiles/nanogui.dir/all] Erreur 2
    make: *** [Makefile:130 : all] Erreur 2
    

    I checked the file bin2c.cmake, and I suppose it might be due to the ${INPUT_FILES} variable being empty. However I'm unable to trace the whole building process to know why this variable is empty and if the error is on my end or not

    opened by Minabsapi 7
  • Precompiled wheels?

    Precompiled wheels?

    Hi,

    This library looks awesome. I wanted to try it out from Python, but get denied by the installer.

    Would it be possible to add pre-compiled packages to PyPi, the way numpy / scipy etc do it?

    This way the lay Python user doesn't have to set up a C++ environment to use nanogui, essentially making it on-par with any other Python toolkit.

    Thanks, Eli

    opened by EliYk 5
  • libnanogui.a Linker errors on Linux

    libnanogui.a Linker errors on Linux

    @wjakob @cyclopsian When I try building my project with the latest nanogui from this repo. I get the following when I link

    usr/bin/ld: deps/nanogui/libnanogui.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection' //usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status CMakeFiles/Filt.dir/build.make:254: recipe for target 'Filt' failed make[2]: *** [Filt] Error 1 CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/Filt.dir/all' failed make[1]: *** [CMakeFiles/Filt.dir/all] Error 2 Makefile:129: recipe for target 'all' failed make: *** [all] Error 2

    I looked at this commit commit and noticed you took out

    list(APPEND NANOGUI_EXTRA_LIBS Xxf86vm Xrandr Xinerama Xcursor Xi X11 pthread)

    on linux builds. I put it back on my local repo and it works.

    opened by mik30s 5
  • Allow uploading texture sub regions & defer mipmapping to shader bind

    Allow uploading texture sub regions & defer mipmapping to shader bind

    • Adds the ability to upload texture sub-regions (also exposed to python)
    • Adds the ability to lazily re-compute mipmaps whenever the texture is assigned to a shader via set_texture or by manually calling Texture::update_mipmap (off by default & not exposed to python for now)

    Used in tev to allow remote control of the content that is being displayed.

    opened by Tom94 4
  • NANOGUI_NATIVE_FLAGS_DEFAULT needs to be an option() instead of set()

    NANOGUI_NATIVE_FLAGS_DEFAULT needs to be an option() instead of set()

    CMakeLists.txt:87: set(NANOGUI_NATIVE_FLAGS_DEFAULT "-march=nehalem")

    Cannot successfully override this from the cmake command line.

    RUN cd nanogui && mkdir build && cd build && cmake -DNANOGUI_INSTALL=OFF -DNANOGUI_NATIVE_FLAGS_DEFAULT="-march=armv8.5-a" .. && make

    [  1%] Building C object ext/glfw/src/CMakeFiles/glfw_objects.dir/context.c.o
    cc1: error: unknown value ‘nehalem’ for ‘-march’
    cc1: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a armv8.5-a armv8.6-a native
    make[2]: *** [ext/glfw/src/CMakeFiles/glfw_objects.dir/build.make:82: ext/glfw/src/CMakeFiles/glfw_objects.dir/context.c.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:403: ext/glfw/src/CMakeFiles/glfw_objects.dir/all] Error 2
    make: *** [Makefile:103: all] Error 2
    
    

    Will have to use grep to tweak CMakeLists.txt for now. Other than that and the couple of other issues I reported, this will build in a docker container for arm64. At least it looks like it will.

    opened by RolandHughes 3
  • Dynamic content scaling

    Dynamic content scaling

    Additions:

    • Linux: Makes static content scaling work on GNOME. (Previously only worked in KDE. Unfortunately I could not test whether it still works in KDE, so feedback from somebody using it would be appreciated.)
    • Windows & macOS (Metal): Makes dynamic content scaling work (see https://github.com/Tom94/tev/issues/135)

    Overall, the code actually got simpler due to GLFW's recent additions. :)

    Known to be still broken:

    • No dynamic content scaling on GNOME (only uses scaling from startup). KDE TBD
    opened by Tom94 3
  • Incorrect Canvas rendering behaviour on Linux

    Incorrect Canvas rendering behaviour on Linux

    It seems like the library uses a wrong offset to render the Canvas widget inside a Window. This happens when compiling example4 that is part of the official source code. The wrong offset (in comparison to the window) grows with increasing Window coordinates. This works fine on Windows.

    image

    Steps to reproduce:

    1. Compile nanogui on Kubuntu 19.10
    2. Run example 4
    opened by KonstantinRr 3
  • Fixes build issues in VS2019

    Fixes build issues in VS2019

    example1 failed to build due to missing STB_IMAGE defines (they're present in the previous example1 but were removed in this fork?

    vector.cpp failed to compile due to Size not being passed to the lamba functions.

    opened by musshorn 3
  • Screen::draw_widgets() eats GB of memory in example3 on Apple M1 Max

    Screen::draw_widgets() eats GB of memory in example3 on Apple M1 Max

    Repro steps:

    1. Clone the repo (recursivly)
    2. "cd nanogui && mkdir build && cd build && cmake -G Xcode .. && open nanogui.xcodeproj"
    3. Run example3. Happens on both release and debug builds.

    It's somewhere in nanovg or metal code. renderFlush, renderCommandEncoderWithColorTexture and MTLRenderCommandEncoder are possible suspects.

    OSX: 12.0.1 (Monteray) Macbook Pro 16 M1 Max 64GB RAM

    Screenshot 2021-12-16 at 02 41 10

    Comment out screen->draw_widgets(); and everything works fine.

            // Draw nanogui
            //screen->draw_setup();
            //screen->clear(); // glClear
            screen->draw_contents();
            //screen->draw_widgets();
            screen->draw_teardown();
    
    Screenshot 2021-12-16 at 02 46 25
    opened by piotrkundu 2
  • Significant memory leak (~1mb/second) when using the Metal backend

    Significant memory leak (~1mb/second) when using the Metal backend

    When using the Metal backend on macOS, drawing the screen leaks memory. ( Causes https://github.com/Tom94/tev/issues/146 )

    Reproduction

    All the examples exhibit this problem. example1 and example4 are best for reproduction due to their consistent 60fps refresh cycle. Observe the memory usage climbing steadily. Minimizing/hiding the window (Cmd+H) can accelerate the leak further.

    In example2 and example3, redraws can be made to happen by dragging the widget around, resulting in a leak of similar magnitude.

    What I tracked down so far

    • The OpenGL backend is unaffected
    • EDR vs. LDR does not make a difference
    • The leak disappears when commenting out Widget::draw(NVGContext*) and inherited methods, e.g. by making Screen::draw_widgets() a no-op. However it's hard to say whether this implicates nanovg_metal or is just a symptom.
      • I tried bringing nanovg_metal up to date, but the leak persists.
    opened by Tom94 2
  • Example3.py crush -  python3 on Ubuntu 18.04

    Example3.py crush - python3 on Ubuntu 18.04

    I run example3.py on Ubuntu 18.04 and I get this error:

    $ python3 example3.py
    Launching detached mainloop
    *** longjmp causes uninitialized stack frame ***: python3 terminated
    Fatal Python error: Aborted
    
    Current thread 0x00007fa010ee3740 (most recent call first):
      File "example3.py", line 47 in <module>
    Aborted (core dumped)
    

    But replacing the source code of the сoro with the latest version from http://cvs.schmorp.de/libcoro/ and rebuilding the libraries and installing them, everything works without problems. Maybe this will help someone.

    opened by profyelec 2
  • Error while compiling: Install Targets given no Library Destionation for shared library target

    Error while compiling: Install Targets given no Library Destionation for shared library target

    I cannot compile the current version of nanogui.

    After I ran the cmake command, this came out:

    [email protected]:~/nanogui# cmake ./
    -- NanoGUI v0.1.4
    -- The CXX compiler identification is GNU 8.3.0
    -- The C compiler identification is GNU 8.3.0
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Setting build type to 'Release' as none was specified.
    -- NanoGUI: using OpenGL backend.
    -- NanoGUI: building shared library.
    -- Looking for pthread.h
    -- Looking for pthread.h - found
    -- Looking for pthread_create
    -- Looking for pthread_create - not found
    -- Looking for pthread_create in pthreads
    -- Looking for pthread_create in pthreads - not found
    -- Looking for pthread_create in pthread
    -- Looking for pthread_create in pthread - found
    -- Found Threads: TRUE
    -- Using X11 for window creation
    -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
    -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
    -- Looking for gethostbyname
    -- Looking for gethostbyname - found
    -- Looking for connect
    -- Looking for connect - found
    -- Looking for remove
    -- Looking for remove - found
    -- Looking for shmat
    -- Looking for shmat - found
    -- Looking for IceConnectionNumber in ICE
    -- Looking for IceConnectionNumber in ICE - found
    -- Found X11: /usr/lib/x86_64-linux-gnu/libX11.so
    CMake Error at CMakeLists.txt:521 (install):
      install TARGETS given no LIBRARY DESTINATION for shared library target
      "nanogui".
    
    
    CMake Error at /usr/share/cmake-3.13/Modules/WriteBasicConfigVersionFile.cmake:30 (message):
      Unknown keywords given to WRITE_BASIC_CONFIG_VERSION_FILE():
      "ARCH_INDEPENDENT"
    Call Stack (most recent call first):
      /usr/share/cmake-3.13/Modules/CMakePackageConfigHelpers.cmake:211 (write_basic_config_version_file)
      CMakeLists.txt:529 (write_basic_package_version_file)
    
    
    -- Configuring incomplete, errors occurred!
    See also "/root/nanogui/CMakeFiles/CMakeOutput.log".
    See also "/root/nanogui/CMakeFiles/CMakeError.log".
    [email protected]:~/nanogui#
    

    It seems like an error in CMakeList.txt? Im not familiar with cmake, so I have no clue to solving this myself.

    Running this on Debian 4.19.208-1 / x86_64.

    opened by Gandalf1783 1
  • Example 1 - Question Box comes us with Warning Icon

    Example 1 - Question Box comes us with Warning Icon

    This needs a quick fix:

    example1.cpp - line 135:

    auto dlg = new MessageDialog(this, MessageDialog::Type::Warning, "Title", "This is a question message", "Yes", "No", true);

    to

    auto dlg = new MessageDialog(this, MessageDialog::Type::Question, "Title", "This is a question message", "Yes", "No", true);

    opened by xemjeff 0
  • TextBox - box is not wide enough for the string value argument

    TextBox - box is not wide enough for the string value argument

    When I pass in the default text to the TextBox constructor, I end up with a TextBox that is too short for the text. I did not see a way to override the width. Is there some setting I am missing, or is nanogui miscalculating the string width based on font?

    Looks like I can mess with the TextBox::preferred_size method, but I would like hear if this is known problem before I dig in.

            Window* window = new Window(screen, "Matrix Settings");
            window->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Middle, 6, 6));
            new Label(window, "Rows", "sans");
    
            TextBox* editRows = new TextBox(window, "32");
            editRows->set_editable(true);
    
            new Label(window, "Cols", "sans");
            
            TextBox* editCols = new TextBox(window, "64");
            editCols->set_editable(true);;
    
            TextBox* editDisplayText = new TextBox(window, "Default text to edit");
            editDisplayText->set_editable(true);
    

    WindowCapture

    Details: Windows 10, VS2019, clang-cl git: master branch, last commit was Feb 5,2022 : c6505300bb3036ec87ac68f5f1699c434c3d7fc6

    opened by xemjeff 3
  • Compile for WebAssembly with Python binding

    Compile for WebAssembly with Python binding

    Is it possible to compile NanoGUI to WebAssembly when using it with Python bindings in Python code? The Python code not related to the gui with be compatible Pyodide (https://pyodide.org/en/stable/).

    opened by g3blv 0
  • Enable input of non ascii characters for TextBox

    Enable input of non ascii characters for TextBox

    Enable input of non-ascii unicode characters for TextBox. Enable input from Input Method (like mozc for Japanese) for TextBox.

    I could not find a way to distinguish "Enter key solely pressed" and "Enter key when committing conversion in the Input Method". To enable input from an Input Method, I changed that text in TextBox is not committed at ENTER. Now text is committed only when mouse left button is pressed on other the the TextBox. I hope this specification change is accepted, or someone let me know the way to distinguish the two ENTER.

    opened by oikumene 0
Owner
Mitsuba Physically Based Renderer
Mitsuba Physically Based Renderer
NanoGUI is a minimalistic cross-platform widget library for OpenGL 3.x/DirectX11[12]/Vulkan

NanoGUI NanoGUI is a minimalistic cross-platform widget library for OpenGL 3.x/DirectX11[12]/Vulkan. It supports automatic layout generation, stateful

dalerank 68 Jul 15, 2022
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.

libui: a portable GUI library for C This README is being written. Status It has come to my attention that I have not been particularly clear about how

Pietro Gagliardi 10.3k Aug 2, 2022
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI

ImGui Goodies This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI. Currently, th

null 95 Jun 22, 2022
Python GUI for seeing what's happening inside a fuzzer

Fuzzwatch Fuzzwatch is a Python GUI made to show what's going on inside of a fuzzer. It is currently integrated with Manul, which is a coverage-guided

null 10 Jun 4, 2022
AttoUI – minimalistic C UI toolkit for Wayland

AttoUI – minimalistic UI toolkit for Wayland AttoUI is library that makes creating GUI programs for Wayland in C as simple and bloatless as it can. Th

MasFlam 5 Jan 8, 2022
A barebones single-header GUI library for Win32 and X11.

luigi A barebones single-header GUI library for Win32 and X11. Building example Windows Update luigi_example.c to #define UI_WINDOWS at the top of the

Nakst 182 Jul 24, 2022
raygui is a simple and easy-to-use immediate-mode-gui library.

raygui is a simple and easy-to-use immediate-mode-gui library.

Ray 1.8k Aug 3, 2022
Examples, tutorials and applications for the LVGL embedded GUI library

Examples, tutorials and applications for the LVGL embedded GUI library

LVGL 434 Jul 28, 2022
FlatUI is a immediate mode C++ GUI library for games and graphical applications.

FlatUI is a immediate mode C++ GUI library for games and graphical applications. Go to our landing page to browse our documentation.

Google 604 Jul 23, 2022
HastyBadger is a branch of the excellent widget and GUI library Turbo Badger.

Branch Notice - HastyBadger Hasty is not Turbo. HastyBadger is a branch of the excellent widget and GUI library Turbo Badger. Notabe additions are c++

Michael Tesch 36 Oct 21, 2021
Elements C++ GUI library

Elements C++ GUI library Introduction Elements is a lightweight, fine-grained, resolution independent, modular GUI library. Elements is designed with

Cycfi Research 2.3k Aug 5, 2022
A single-header ANSI C immediate mode cross-platform GUI library

Nuklear This is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed a

Immediate Mode UIs, Nuklear, etc. 5.9k Aug 4, 2022
A library for creating native cross-platform GUI apps

Yue A library for creating native cross-platform GUI apps. Getting started Documentations FAQ Development Examples Sample apps (with screenshots) Muba

Yue 2.8k Jul 27, 2022
✔️The smallest header-only GUI library(4 KLOC) for all platforms

Welcome to GUI-lite The smallest header-only GUI library (4 KLOC) for all platforms. 中文 Lightweight ✂️ Small: 4,000+ lines of C++ code, zero dependenc

null 6.3k Jul 31, 2022
Cross-platform GUI library

Harbour Nuklear backend This backend provides support for Nuklear. It works on on all supported platforms with an OpenGL backend, including iOS and An

Rafał Jopek 2 Jan 19, 2022
Fishui - CutefishOS GUI library, based on Qt Quick.

FishUI FishUI is a GUI library based on QQC2 (Qt Quick Controls 2), every Cutefish application uses it. Features Light and Dark Mode Borderless window

CutefishOS 195 Aug 7, 2022
libui-ng: a portable GUI library for C

libui-ng: a portable GUI library for C Fork of andlabs/libui. This README is being written. Status See CHANGELOG.md Old announcements can be found in

null 212 Aug 9, 2022
Nana is a C++ standard-like GUI library

Nana C++ Library Linux (gcc 8.3.0 and 9.2) including (nana-demos) Windows (Microsoft (R) Build Engine version 15.9.21) Nana is a C++ standard-like GUI

Jinhao 2k Aug 5, 2022
Addon widgets for GUI library Dear ImGui.

ImGui-Addons Addon widgets for GUI library Dear ImGui. File Dialog A simple cross-platform file dialog that uses dirent interface for reading director

null 252 Aug 8, 2022