GWork is a skinnable, embeddable GUI library with an extensive control set

Overview

GWork

Linux & MacOS status: Build Status Windows: Build status

GWork is a skinnable, embeddable GUI library with an extensive control set. Control rendering is abstracted, and can be implemented by any application wishing to use the library. Gwork (pronounced "gw-orc") is a fork of the GUI library GWEN. It was forked to fix issues with GWEN and add new features.

A number of rendering backends are provided for use, or as an example for your own:

  • Allegro5 (cross-platform).
  • DirectX 11 (Windows 7+).
  • Irrlicht3D (cross-platform).
  • OpenGL2 (cross-platform. Uses GLFW).
  • OpenGL Core Profile (cross-platform. Uses GLM, GLEW, GLFW).
  • SDL2 (cross-platform).
  • SFML2 (cross-platform).
  • Software (cross-platform). Render to texture.

Note that the software renderer can be used on any platform, but, obviously, with the penalty of not having hardware acceleration. For more information see the documentation.

Documentation

Changes

  • See CHANGELOG for changes to Gwork, and the differences from GWEN.

Issues

Please report problems to Github or they'll get lost.

Build

Get source code:

  • From git: git clone https://github.com/billyquith/GWork.git gwork or
  • Download zip & unzip

CMake is used to generate the project files. See cmake -h to see all the generators for your platform. Only have one renderer per build directory. Choose renderer:

  • -DRENDER_ALLEGRO5=ON
  • -DRENDER_DIRECTX11=ON
  • -DRENDER_IRRLICHT=ON
  • -DRENDER_OPENGL=ON
  • -DRENDER_OPENGL_CORE=ON
  • -DRENDER_SDL2=ON
  • -DRENDER_SFML2=ON
  • -DRENDER_SW=ON

For example to build Allegro 5 renderer using Ninja:

cd gwork
mkdir build && cd build                 # put build files in subdirectory
cmake -GNinja -DRENDER_ALLEGRO5=ON ..   # create Ninja project files

Providing the dependencies are present, this will create a sample executable. When run it will demonstrate all of the controls available:

ninja                       # build project
bin/GworkAllegro5Sample     # run sample
Comments
  • Fix ResizableControl::DisableResizing

    Fix ResizableControl::DisableResizing

    I could not get DisableResizing to work properly for the current checkout I have of the gwork-branch. Perhaps I was doing something wrong, I am just beginning to use the lib so I'm not entirely familiar with the ins and outs. My opengl-renderer also doesn't implement scissoring yet so that could possibly be the cause, but from how the issue appears I don't think so.

    I wrote a patch to fix it. You can have a look at http://i.imgur.com/65sJ5fe.png to see the issue I was having, one column with WindowControl with resizing enabled, and another with it disabled. The rows shows how it looks pre- and post-patch.

    Since I can't create a pull-request without having done all the repo-work on github, all I can offer is this diff of my changes: https://gitlab.com/jonas.lindgren/gwork/commit/3555e6000ca5152fb1df7df5dd065747a5f9c8a3.diff

    The code snippet necessary to showcase the problem goes something like this:

    Gwk::Controls::WindowControl* window = new Gwk::Controls::WindowControl(canvas); window->SetTitle("Space survival - Start menu"); window->SetSize(300, 300); window->SetPos( 1280/2 - window->GetSize().x/2, 720/2 - window->GetSize().y/2 ); window->SetDeleteOnClose(true); window->DisableResizing();

    opened by ipo 19
  • Resource management refactoring

    Resource management refactoring

    This issue follows from on the work in PR #83. GWEN had a number of design problems around resource management. Before launching into refactoring 🔨, discuss! 👍

    • Who owns the resources?
    • Fonts aren't tidied up properly.
    • Resource paths may not be cross-plaform.
    • Resource may want to come from different sources. Since the API is embeddable, this needs to be flexible.
    • Any other issues?

    Solution:

    • How can this be made flexible without being overly complicated?
    • Current solution added ResourceLoader and ResourcePaths to allow customisation of per-platform paths, and then where/what they are loaded from and managed.
      • What are the problems with this?
    improve-refactor help wanted! 
    opened by billyquith 12
  • Baking FreeType Into Gwork?

    Baking FreeType Into Gwork?

    I was wondering if you would be open to baking FreeType into the library? DirectX11, Irrlicht3D, OpenGL, SDL2, and Software have no native support for text rendering.

    This seems like something the library should handle directly?

    If you're on-the-fence about this an option could be added during the initial CMake configuration for users to enable or disable it and/or the virtual functions for text rendering could still be overridden by users who are dead set on providing their own means to do so.

    What are your thoughts? I'm willing to do the integration myself if it's something you're open to.

    improve-new feature 
    opened by kklouzal 12
  • CMake fails on Win32 with GLFW

    CMake fails on Win32 with GLFW

    Hi,

    I've been trying to build Gwork using CMake, for Win32 (Windows 7), Code::Blocks with MinGW 5.1.0, using OpenGL renderer with GLFW. Unfortunately, CMake chokes when finding GLFW, both in command line and GUI mode. Of course, I manually provide the required directory paths (include and lib) for GLFW, but with no success. I attach its log, if of any help: CMakeOutput.log.txt

    Here is the CMake GUI reported problem:

    Project version: 0.2.0 Including tests Including sample CMake Error at cmake/Modules/FindGLFW.cmake:233 (if): if given arguments:

    "OR" "OR"
    

    Unknown arguments specified Call Stack (most recent call first): cmake/Config.cmake:105 (find_package) CMakeLists.txt:29 (include)

    Configuring incomplete, errors occurred! See also "C:/Programming/GWork/build/CMakeFiles/CMakeOutput.log".

    Anyway, I tried without any render target (using the Null one), and it succeeds in making the C::B project, but attempting to compile it fails immediately, with this:

    -------------- Clean: all in gwork (compiler: GNU GCC Compiler)---------------

    Cleaned "gwork - all"

    -------------- Build: all in gwork (compiler: GNU GCC Compiler)---------------

    Using makefile: Makefile [ 1%] Building CXX object source/platform/CMakeFiles/GworkNull.dir/renderers/Null/Null.cpp.obj [ 2%] Building CXX object source/platform/CMakeFiles/GworkNull.dir/platforms/NullPlatform.cpp.obj [ 3%] Building CXX object source/platform/CMakeFiles/GworkNull.dir/platforms/PlatformCommon.cpp.obj [ 4%] Building CXX object source/platform/CMakeFiles/GworkNull.dir/platforms/Utility.cpp.obj C:\Programming\GWork\source\platform\platforms\Utility.cpp:26:22: fatal error: iconv.h: No such file or directory compilation terminated. mingw32-make.exe[2]: *** [source/platform/CMakeFiles/GworkNull.dir/platforms/Utility.cpp.obj] Error 1 mingw32-make.exe[1]: *** [source/platform/CMakeFiles/GworkNull.dir/all] Error 2 mingw32-make.exe: *** [all] Error 2 source\platform\CMakeFiles\GworkNull.dir\build.make:137: recipe for target 'source/platform/CMakeFiles/GworkNull.dir/platforms/Utility.cpp.obj' failed CMakeFiles\Makefile2:111: recipe for target 'source/platform/CMakeFiles/GworkNull.dir/all' failed Makefile:126: recipe for target 'all' failed Process terminated with status 2 (0 minute(s), 4 second(s)) 4 error(s), 0 warning(s) (0 minute(s), 4 second(s))

    Could anyone please help me a bit in this regard?

    Many thanks. Virgiliu

    bug documentation 
    opened by VirgiliuC 10
  • MinGW linker errors when building the SFML example on Windows

    MinGW linker errors when building the SFML example on Windows

    I'm running into linker errors when building the SFML example on Windows with MinGW. To me it seems like the platform sources isn't being linked properly and/or exported wrongly.

    Here's the verbose output:

    [ 99%] Linking CXX executable ..\..\..\bin\GworkSFML2Sample.exe
    cd /d GWork\build\source\samples && cmake.exe -E cmake_link_script CMakeFiles\GworkSFML2Sample.dir\link.txt --verbose=1
    cmake.exe -E remove -f CMakeFiles\GworkSFML2Sample.dir/objects.a
    C:\Dev\MinGW64-PosixSEH610r0\bin\ar.exe cr CMakeFiles\GworkSFML2Sample.dir/objects.a @CMakeFiles\GworkSFML2Sample.dir\objects1.rsp
    C:\Dev\MinGW64-PosixSEH610r0\bin\g++.exe  -g   -Wl,--whole-archive CMakeFiles\GworkSFML2Sample.dir/objects.a -Wl,--no-whole-archive  -o ..\..\..\bin\GworkSFML2Sample.exe -Wl,--out-implib,..\..\..\lib\libGworkSFML2Sample.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\GworkSFML2Sample.dir\linklibs.rsp
    libGwork.a(Anim.cpp.obj): In function `Gwk::Anim::TimedAnimation::TimedAnimation(float, float, float)':
    GWork/source/gwork/source/Anim.cpp:105: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(Anim.cpp.obj): In function `Gwk::Anim::TimedAnimation::Think()':
    GWork/source/gwork/source/Anim.cpp:126: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(DragAndDrop.cpp.obj): In function `Gwk::UpdateHoveredControl(Gwk::Controls::Base*, int, int)':
    GWork/source/gwork/source/DragAndDrop.cpp:190: undefined reference to `Gwk::Platform::SetCursor(unsigned char)'
    libGwork.a(DragAndDrop.cpp.obj): In function `Gwk::DragAndDrop::OnMouseMoved(Gwk::Controls::Base*, int, int)':
    GWork/source/gwork/source/DragAndDrop.cpp:229: undefined reference to `Gwk::Platform::SetCursor(unsigned char)'
    libGwork.a(InputHandler.cpp.obj): In function `Gwk::Input::OnCanvasThink(Gwk::Controls::Base*)':
    GWork/source/gwork/source/InputHandler.cpp:137: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    GWork/source/gwork/source/InputHandler.cpp:150: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(InputHandler.cpp.obj): In function `Gwk::Input::OnMouseClicked(Gwk::Controls::Base*, int, bool)':
    GWork/source/gwork/source/InputHandler.cpp:215: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    GWork/source/gwork/source/InputHandler.cpp:222: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(InputHandler.cpp.obj): In function `Gwk::Input::OnKeyEvent(Gwk::Controls::Base*, int, bool)':
    GWork/source/gwork/source/InputHandler.cpp:370: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(Base.cpp.obj): In function `Gwk::Controls::Base::UpdateCursor()':
    GWork/source/gwork/source/Controls/Base.cpp:956: undefined reference to `Gwk::Platform::SetCursor(unsigned char)'
    libGworkTest.a(Test.cpp.obj): In function `TestFrame::Render(Gwk::Skin::Base*)':
    GWork/source/test/source/Test.cpp:33: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    GWork/source/test/source/Test.cpp:36: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(ProgressBar.cpp.obj): In function `ProgressBarThink::Think()':
    GWork/source/gwork/source/Controls/ProgressBar.cpp:27: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    GWork/source/gwork/source/Controls/ProgressBar.cpp:29: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(TextBox.cpp.obj): In function `Gwk::Controls::TextBox::UpdateCaretColor()':
    GWork/source/gwork/source/Controls/TextBox.cpp:94: undefined reference to `Gwk::Platform::GetTimeInSeconds()'
    libGwork.a(TextBox.cpp.obj):GWork/source/gwork/source/Controls/TextBox.cpp:99: more undefined references to `Gwk::Platform::GetTimeInSeconds()' follow
    libGwork.a(TextBox.cpp.obj): In function `Gwk::Controls::TextBox::OnPaste(Gwk::Controls::Base*)':
    GWork/source/gwork/source/Controls/TextBox.cpp:154: undefined reference to `Gwk::Platform::GetClipboardText[abi:cxx11]()'
    libGwork.a(TextBox.cpp.obj): In function `Gwk::Controls::TextBox::OnCopy(Gwk::Controls::Base*)':
    GWork/source/gwork/source/Controls/TextBox.cpp:162: undefined reference to `Gwk::Platform::SetClipboardText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    libGwork.a(TextBox.cpp.obj): In function `Gwk::Controls::TextBox::OnCut(Gwk::Controls::Base*)':
    GWork/source/gwork/source/Controls/TextBox.cpp:170: undefined reference to `Gwk::Platform::SetClipboardText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    

    Here's the content of linklib.rsp file which contain all the libs that are being linked.

     ../../../lib/libGwork.a ../../../lib/libGworkSFML2.a D:/Programming/C++/Contrib/SFML/install/lib/libsfml-system-d.a D:/Programming/C++/Contrib/SFML/install/lib/libsfml-window-d.a D:/Programming/C++/Contrib/SFML/install/lib/libsfml-window.a D:/Programming/C++/Contrib/SFML/install/lib/libsfml-graphics-d.a D:/Programming/C++/Contrib/SFML/install/lib/libsfml-graphics.a D:/Programming/C++/Contrib/SFML/install/lib/libfreetype.a D:/Programming/C++/Contrib/SFML/install/lib/libjpeg.a -lopengl32 -lwinmm -lgdi32 ../../../lib/libGworkTest.a ../../../lib/libGworkSFML2.a ../../../lib/libGwork.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 
    

    As you may notice, that libGworkSFML2 is being linked. Strangely enough they are linked twice though. But since it was linked I don't fully understand why the platform code isn't being found.

    I'll try to play around with CMake a bit, but thought I report it and maybe you'd know something.

    opened by eXpl0it3r 9
  • Trying to build on Mingw64 - ptarget not found

    Trying to build on Mingw64 - ptarget not found

    Hi, I am trying to compile GWork under MinGW-64. I've been getting various errors and had to do the following changes to fix them. Now I'm stuck at error: 'ptarget' was not declared in this scope in WindowsPlatform.cpp:325. Any suggestions? Thanks!

    Index: source/platform/CMakeLists.txt
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    --- source/platform/CMakeLists.txt	(revision 961d2322cca41731cdff3d49c51842fd34392eaf)
    +++ source/platform/CMakeLists.txt	(revision )
    @@ -1,6 +1,7 @@
     # Gwork platform
     
     include_directories(
    +    ${GWK_SOURCE_DIR}/source/gwork/include
         ${GWK_SOURCE_DIR}/source/platform/include
         ${GWK_RENDER_INCLUDES}
     )
    Index: source/platform/platforms/WindowsPlatform.cpp
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    --- source/platform/platforms/WindowsPlatform.cpp	(revision 961d2322cca41731cdff3d49c51842fd34392eaf)
    +++ source/platform/platforms/WindowsPlatform.cpp	(revision )
    @@ -15,7 +15,7 @@
     #endif
     #endif
     
    -#include <Gwork/Macros.h>
    +//#include <Gwork/Macros.h>
     #include <Gwork/Utility.h>
     #include <Gwork/Platform.h>
     #include <Gwork/Input/Windows.h>
    @@ -152,7 +152,7 @@
         {
             memset(FilterBuffer, 0, sizeof(FilterBuffer));
             memcpy(FilterBuffer, Extension.c_str(),
    -               Gwk::Min(Extension.length(), sizeof(FilterBuffer)));
    +               std::min(Extension.length(), sizeof(FilterBuffer)));
     
             for (int i = 0; i < FILTERBUFFER_SIZE; i++)
             {
    @@ -183,7 +183,6 @@
     
         if (GetOpenFileNameA(&opf))
         {
    -        if (handler && fnCallback)
             {
                 filePathOut = opf.lpstrFile;
             }
    @@ -227,7 +226,6 @@
                 if (psi->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &strOut) != S_OK)
                     return bSuccess;
     
    -            if (handler && fnCallback)
                 {
                     filePathOut = Utility::Narrow(strOut); // set result
                 }
    @@ -243,7 +241,7 @@
     }
     
     bool Gwk::Platform::FileSave(const String& Name, const String& StartPath, const String& Extension,
    -                             String& filePathOut);
    +                             String& filePathOut)
     {
         char Filestring[FILESTRING_SIZE];
         String returnstring;
    @@ -251,7 +249,7 @@
         {
             memset(FilterBuffer, 0, sizeof(FilterBuffer));
             memcpy(FilterBuffer, Extension.c_str(),
    -               Gwk::Min(Extension.size(), sizeof(FilterBuffer)));
    +               std::min(Extension.size(), sizeof(FilterBuffer)));
     
             for (int i = 0; i < FILTERBUFFER_SIZE; i++)
             {
    @@ -282,7 +280,6 @@
     
         if (GetSaveFileNameA(&opf))
         {
    -        if (handler && fnCallback)
             {
                 filePathOut = opf.lpstrFile;
             }
    Index: source/platform/renderers/OpenGL/OpenGL.cpp
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    --- source/platform/renderers/OpenGL/OpenGL.cpp	(revision 961d2322cca41731cdff3d49c51842fd34392eaf)
    +++ source/platform/renderers/OpenGL/OpenGL.cpp	(revision )
    @@ -20,6 +20,10 @@
     #define STB_TRUETYPE_IMPLEMENTATION
     #define STBTT_STATIC
     #include "stb_truetype.h"
    +#ifdef _WIN32
    +#include <windows.h>
    +#include "Gwork/WindowProvider.h"
    +#endif
     
     namespace Gwk
     {
    Index: cmake/Config.cmake
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    ===================================================================
    --- cmake/Config.cmake	(revision 961d2322cca41731cdff3d49c51842fd34392eaf)
    +++ cmake/Config.cmake	(revision )
    @@ -19,7 +19,8 @@
         # TODO: option(RENDER_GDIPLUS   "Renderer: GDIPlus" OFF)
         
         # For Windows platform:
    -    # set(GWK_PLATFORM_NAME "Windows")    
    +    set(GWK_PLATFORM_NAME "Windows")
    +    set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -DGWK_PLATFORM_WINDOWS=1)
     endif()
     
     # Cross-platform
    
    opened by ZelimDamian 8
  • Add option to support SFML 2.5 on Windows

    Add option to support SFML 2.5 on Windows

    Changes involve linking Gwork${GWK_RENDER_NAME} with the GWK_RENDER_LIBRARIES, finding OpenGL as SFML 2.5 depends on it (only on Windows) and setting the CONFIG flag when finding SFML with the option 'USE_SFML_CONFIG' enabled. Tested on Windows 10 and Debian Buster/Sid.

    opened by jhlgns 6
  • Code in header files

    Code in header files

    I have not done an exhaustive search, but I noticed there is code inside some of the header files. The ones I saw were the 3 headers related to skins, Texturing, TextureBase, and Simple. This isn't inherently a problem, but it causes undefined reference exceptions when I'm linking my program.

    opened by Nopey 6
  • Fix a couple of warnings

    Fix a couple of warnings

    I had a couple of warnings when using GWork that annoyed me, so I fixed them. I also made a non-const parameter const, minor change. Maybe you want to merge this, maybe not.

    It doesn't seem possible to create a pull-request from a repo outside of a straight github<->github fork, so here's the diff: https://gitlab.com/jonas.lindgren/gwork/commit/587b164541a9e057e7bea2e5b078324618e99194.diff

    opened by ipo 6
  • C++11 override and cbegin/cend fixes

    C++11 override and cbegin/cend fixes

    This adds override, cbegin, cend, a copy constructor, floating point fixes, and a few other things to various parts of GWork. As well, various variables are being shadows; this corrects that.

    Without this fix, both Clang 3.8 and GCC 5.3.0 do not allow GWork to compile.

    opened by ghost 6
  • Fix Windows builds

    Fix Windows builds

    I've been testing on Mac OSX. Cross platforms SDKs SFML2 and Allegro5 tested. Windows needs some work to refactor for the changes.

    (edit) Note: This issue is specific to the Windows APIs, i.e. DirectX

    bug priority-low 
    opened by billyquith 6
  • Segfault when clicking on ImagePanel in GworkAllegro5Sample

    Segfault when clicking on ImagePanel in GworkAllegro5Sample

    Issue: The sample program crashes (segfault) when I click on the ImagePanel section.

    • Operating System (name & version): Ubuntu 18
    • Compiler (name & version): not sure if it used gcc or clang, here are both: gcc 7.4.0; clang 6.0.0
    • Target renderer: ALLEGRO5
    • cmake command-line used: cmake -DRENDER_ALLEGRO5=ON
    opened by fassn 2
  • OpenGL renderer broken

    OpenGL renderer broken

    Due to being busy I did not fully test the resource/renderer refactoring by @topblast.

    The OpenGL renderer is broken. Looks like "last texture" not set after flushing non-textured rects. Also UVs broken?

    If this doesn't get fixed I may just choose to revert the large refactoring, i.e. "Gwork should support rendering a UI using multiple renderers". I can't see that this is common use case.

    • Target renderer: GL (all?)
    bug 
    opened by billyquith 4
  • Error: expression in new-declarator must have integral or enumeration type

    Error: expression in new-declarator must have integral or enumeration type

    https://github.com/billyquith/GWork/blob/f3692f893e9e9585c8b0ef4cb7c1dda4378057b8/source/platform/renderers/OpenGL/OpenGL.cpp#L410

    caused by

    https://github.com/billyquith/GWork/blob/f3692f893e9e9585c8b0ef4cb7c1dda4378057b8/source/platform/include/Gwork/PlatformTypes.h#L299-L300

    opened by BlackPhrase 1
  • Add Font Module

    Add Font Module

    Not all renderers have good support for fonts. Basic support has been added using the STB font code. It would be nice to use something like FontStash to provide a more complete solution.

    This can be shared between renderers if the client renderer supports:

    • Render glyph using DrawTextureRect().
    • Render to texture, so that newly cached glyphs can be cached in a renderer specific way.
    improve-new feature help wanted! 
    opened by billyquith 0
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 Nov 19, 2022
The required packages to build the control GUI for Ohmnibot

ohmni-ros-gui The required packages to build the control GUI for Ohmnibot These packages alow us to perfrom certain tasks on OHmnibot: Prequisite sett

Phoenix Ly 1 Jan 2, 2022
This is a complet GUI between a Raspberry device with a Slave microcontroller to set camera data acquisition

#PYDOME Python Lib for Domes features control, this package allows users to build, evaluate and make tasks based on Raspberry OS Table of Contents Ins

null 1 Nov 2, 2021
U++ is a C++ cross-platform rapid application development framework focused on programmer's productivity. It includes a set of libraries (GUI, SQL, Network etc.), and integrated development environment (TheIDE).

Ultimate++ Ultimate++ is a C++ cross-platform rapid application development framework focused on programmers productivity. It includes a set of librar

Ultimate++ 524 Nov 24, 2022
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.4k Nov 19, 2022
Minimalistic C++/Python GUI library for OpenGL, GLES2/3, Metal, and WebAssembly/WebGL

NanoGUI NanoGUI is a minimalistic cross-platform widget library for OpenGL 3+, GLES 2/3, and Metal. It supports automatic layout generation, stateful

Mitsuba Physically Based Renderer 1.1k Nov 25, 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. 6.2k Nov 22, 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 Nov 25, 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 232 Nov 14, 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.5k Nov 24, 2022
Minimalistic GUI library for OpenGL

NanoGUI NanoGUI is a minimalistic cross-platform widget library for OpenGL 3.x or higher. It supports automatic layout generation, stateful C++11 lamb

Wenzel Jakob 4.2k Nov 19, 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.9k Nov 28, 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 199 Nov 20, 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 242 Nov 22, 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 2.1k Nov 22, 2022
Examples, tutorials and applications for the LVGL embedded GUI library

Examples, tutorials and applications for the LVGL embedded GUI library

LVGL 441 Nov 11, 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 278 Nov 24, 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 610 Nov 19, 2022