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

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.

Owner
Mitsuba Physically Based Renderer
Mitsuba Physically Based Renderer
Comments
  • Flickering on M1 Max macbook (metal backend only)

    Flickering on M1 Max macbook (metal backend only)

    Hi Wenzel, I've started experiencing sporadic flickering when using the metal backend on my new M1 Max macbook; see the following video.

    I've made the following observations:

    • the behavior is independent of the screen. I can reproduce it on external LDR monitors connected to the laptop and all resolutions / refresh rates.
    • it appears to only affect example1 and tev, whereas for the case of tev it only affects the screen region covered by a canvas. example4 is not affected, even though it involves a canvas -- so nesting the canvas inside of a window appears to work around the problem somehow.

    https://user-images.githubusercontent.com/4923655/148980181-24b7484c-714e-41f1-8f32-b11e05314f79.mov

    Cheers, Thomas

  • 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

  • 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

  • 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.

  • 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.

  • build: Accept libstdc++ when using clang

    build: Accept libstdc++ when using clang

    There really shouldn't be any problem with using libstdc++ with clang. I couldn't find any information about why this check exists in the first place.

  • 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.

  • 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
  • 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
  • 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.

  • 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.

  • gcc 11.2 compilation warning due to snprintf buffer size

    gcc 11.2 compilation warning due to snprintf buffer size

    I believe the condition was present since initially introduced with https://github.com/mitsuba-renderer/nanogui/commit/45406d4b8bcb8ddd309d21c2385e6ddc74c2aeae

    It seems like the buffer is too small for the largest potential output. I believe this is a warning in gcc, but it's only sane to compile with -Werror

    cd /home/chris/cgrt/build/ext/nanogui && /usr/bin/c++ -DNANOGUI_BUILD -DNANOGUI_SHARED -DNANOGUI_USE_OPENGL -DNVG_BUILD -DNVG_SHARED -DNVG_STB_IMAGE_IMPLEMENTATION -D_GLFW_BUILD_DLL -I/home/chris/cgrt/build/ext/nanogui -I/home/chris/cgrt/ext/nanogui/include -I/home/chris/cgrt/ext/nanogui/ext/nanovg/src -I/home/chris/cgrt/ext/nanogui/ext/glfw/include -Wall -Wextra -g -ggdb -Og -Wall -Werror -fpermissive -fPIC -fvisibility=hidden -march=nehalem -MD -MT ext/nanogui/CMakeFiles/nanogui.dir/src/layout.cpp.o -MF CMakeFiles/nanogui.dir/src/layout.cpp.o.d -o CMakeFiles/nanogui.dir/src/layout.cpp.o -c /home/chris/cgrt/ext/nanogui/src/layout.cpp
    In file included from /home/chris/cgrt/ext/nanogui/src/layout.cpp:14:
    /home/chris/cgrt/ext/nanogui/include/nanogui/layout.h: In member function ‘nanogui::AdvancedGridLayout::Anchor::operator std::string() const’:
    /home/chris/cgrt/ext/nanogui/include/nanogui/layout.h:411:77: error: ‘, ’ directive output may be truncated writing 2 bytes into a region of size between 0 and 10 [-Werror=format-truncation=]
      411 |             snprintf(buf, 50, "Format[pos=(%i, %i), size=(%i, %i), align=(%i, %i)]",
          |                                                                             ^~
    /home/chris/cgrt/ext/nanogui/include/nanogui/layout.h:411:31: note: directive argument in the range [0, 255]
      411 |             snprintf(buf, 50, "Format[pos=(%i, %i), size=(%i, %i), align=(%i, %i)]",
          |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/stdio.h:894,
                     from /usr/include/c++/11/cstdio:42,
                     from /usr/include/c++/11/ext/string_conversions.h:43,
                     from /usr/include/c++/11/bits/basic_string.h:6608,
                     from /usr/include/c++/11/string:55,
                     from /home/chris/cgrt/ext/nanogui/include/nanogui/common.h:21,
                     from /home/chris/cgrt/ext/nanogui/include/nanogui/object.h:15,
                     from /home/chris/cgrt/ext/nanogui/include/nanogui/layout.h:18,
                     from /home/chris/cgrt/ext/nanogui/src/layout.cpp:14:
    /usr/include/x86_64-linux-gnu/bits/stdio2.h:71:35: note: ‘__builtin___snprintf_chk’ output between 46 and 58 bytes into a destination of size 50
       71 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       72 |                                    __glibc_objsize (__s), __fmt,
          |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       73 |                                    __va_arg_pack ());
          |                                    ~~~~~~~~~~~~~~~~~
    cc1plus: all warnings being treated as errors
    gmake[3]: *** [ext/nanogui/CMakeFiles/nanogui.dir/build.make:223: ext/nanogui/CMakeFiles/nanogui.dir/src/layout.cpp.o] Error 1
    gmake[3]: Leaving directory '/home/chris/cgrt/build'
    gmake[2]: *** [CMakeFiles/Makefile2:416: ext/nanogui/CMakeFiles/nanogui.dir/all] Error 2
    gmake[2]: Leaving directory '/home/chris/cgrt/build'
    gmake[1]: *** [CMakeFiles/Makefile2:790: src/cgrt-cuda/CMakeFiles/cgrt-cuda.dir/rule] Error 2
    gmake[1]: Leaving directory '/home/chris/cgrt/build'
    gmake: *** [Makefile:377: cgrt-cuda] Error 2
    
  • Widget/password field

    Widget/password field

    Hi,

    First, thanks for your time on this nice project. I Just needed the use of a field for password input. Hence, my proposal below.

    Feel free to merge !

    E.

  • Tweak CMakeLists.txt with necessary OpenGL and GLFW changes to get Linux/Wayland working

    Tweak CMakeLists.txt with necessary OpenGL and GLFW changes to get Linux/Wayland working

    On my Wayland machine, if I supply the GLFW_USE_WAYLAND=ON option to cmake via the command line, this allows me to compile the code and run the resultant binary successfully.

    I'm no cmake wizard, so I had some trouble getting this to work with the prior glfw_objects workflow -- instead, I switched nanogui to just use GLFW the way it recommends. As part of this, I switched the submodule to the main GLFW repository, as as far as I could tell, the custom features provided by the fork were no longer used. This means GLFW will be easier to update in the future.

    I've tested this on Linux/X11 and Linux/Wayland, and I can confirm this works on both, but I don't have a Windows or Mac machine to test whether I broke something there.

    I expect this to fix #103.

  • build error with v0.2.0

    build error with v0.2.0

    Hi all,

    after the update I started getting this build error.

    CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
      Could NOT find Python (missing: Development.Module) (found version
      "2.7.18")
    

    anyone know a solution? would be appreciated.

  • Set GL_DEPTH_BUFFER_BIT when blitting the depth buffer to the screen.

    Set GL_DEPTH_BUFFER_BIT when blitting the depth buffer to the screen.

    Hi, I just had a look through the code and found what looks like a simple copy-paste bug. When blitting to the screen, the stencil bit would be set instead of the depth buffer bit.

Related tags
NanoGUI is a minimalistic cross-platform widget library for OpenGL 3.x/DirectX11[12]/Vulkan
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

Dec 22, 2022
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.
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

Jan 2, 2023
This is a collection of widgets and utilities for the immediate mode GUI (imgui) that I am developing for the critic2 GUI
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

Nov 19, 2022
Python GUI for seeing what's happening inside a fuzzer
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

Nov 17, 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

Jan 8, 2022
A barebones single-header GUI library for Win32 and X11.
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

Dec 30, 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.

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

Dec 30, 2022
Examples, tutorials and applications for the LVGL embedded GUI library
Examples, tutorials and applications for the LVGL embedded GUI library

Examples, tutorials and applications for the LVGL embedded GUI library

Nov 11, 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.

Dec 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++

Nov 17, 2022
Elements C++ GUI library
Elements C++ GUI library

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

Dec 30, 2022
A single-header ANSI C immediate mode cross-platform GUI library
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

Dec 24, 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

Jan 7, 2023
✔️The smallest header-only GUI library(4 KLOC) for all platforms
✔️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

Jan 8, 2023
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

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

Dec 30, 2022
libui-ng: a portable GUI library for C
 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

Jan 7, 2023
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

Jan 3, 2023
Addon widgets for GUI library Dear ImGui.
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

Jan 7, 2023