Game GUI is a skin-able GL based Widget Class for Games
C C++ Objective-C Makefile
Switch branches/tags
Nothing to show
Clone or download
sp4cerat bugfixes / updates
-mousewheel scrollspeed fixed
-textedit supports passwords now
-textedit now is cleared when activated for faster edit
Latest commit 1f6479d Apr 22, 2016
Permalink
Failed to load latest commit information.
bin32 bugfixes / updates Apr 22, 2016
bin64 bugfixes / updates Apr 22, 2016
bin64QT progress bar sample added Jul 27, 2015
data few bug fixes Sep 10, 2015
ext Simple 3D Viewer Added to the GLUT Sample Jul 19, 2015
lib32 Initial commit Jul 16, 2015
lib64 Initial commit Jul 16, 2015
shader Initial commit Jul 16, 2015
src bugfixes / updates Apr 22, 2016
srcQT progress bar sample added Jul 27, 2015
GameGui.sdf bugfixes / updates Apr 22, 2016
GameGui.sln QT5 Sample Added Jul 17, 2015
LICENSE MIT Jul 20, 2015
README.md Update README.md Jul 27, 2015

README.md

Game GUI - A Simple GUI with skin-support for OpenGL Games

License : MIT

http://opensource.org/licenses/MIT

Summary

After trying several gui's more or less suited for games (LibRocket, Qt, NVWidgets, CEgui, etc), I found that none of them was really light weight, easy to use and fully skinable at the same time. This was the reason I started to write my own GUI / C++. The project was completed in about one month.

Screenshot1

Features

  • Advanced skin scaling: define how the inner and borders of a texture shall be scaled ( simple scale, repeating inner pattern or constant outer frame )
  • UTF8 Support
  • TTF Support
  • Easy skinning support
  • Alpha support (RGBA), so you can have transparent windows/widgets etc
  • direct access to all controls and their members
  • Non-blocking visualization
  • Callback support
  • No need to mess with inheritance and virtual functions
  • Different from most GUIs, Widgets and windows are stored completely inside the GUI, so no need to define any window or widget variables in your code.
  • Directory: Controls are stored and accessed by a tree structure that is rendered every time like a scene graph
  • No event loop, show function or update function
  • No need to have a timer that calls an update function
  • Lightweight: Only Depends on GL and libFreetype and DevIL
  • Can easily be used in SDL, Qt and other environments. Just plug in the keyboard and mouse events and call the gui's draw function from your main render loop.
  • Config file support for default variables (font,padding etc) and skin textures+scaling parameters
  • Only 2000 lines of code for the entire Gui class including all widgets. Therefore easy to modify and extend.
  • Comes with a simple file-browser (See screenshot1)
  • MIT license
  • Multi-screen support (same as multiple Desktops). You can have a title screen, loading screen, ingame screen etc. Simply create them at the beginning and the switch between by setting gui.active_screen=number;
  • Window manager
  • Context menu
  • Custom mouse pointer
  • Widget Classes : Window, Menu, Label, Button, CheckBox, Tab, Combo, Textedit, Radio
  • Controls have support for custom user variables like control.var.string["myvar"]="hello"

Most important is the access by the directory structure and using simple assigns '=' to create a new instance of a widget or window.

The usage is basically as follows:

Create (and instantly show) a window:

gui.window["id1"]=Gui::Window("Title",100,100,250,350);

Adding a button :

gui.window["id1"].button["load"] = Gui::Button("Load",20,20,50,30); 

Adding a simple callback

gui.window["id1"].button["load"].callback_pressed=
    [](Gui::Window *window,Gui::Button* control,int index)
    {
        window->close();
    };

Setting a custom skin:

gui.window["id1"].button["load"].skin=Skin("normal.png","hover.png","pressed.png");

Also you have direct access to a skin's texture to use it as output of a FBO e.g. The 3D viewer of the screenshot below uses that.

gui.window["id1"].button["load"].skin.texture_normal=fbo.texture_id;

Duplicating a window is easy: The duplicate is instantaneously visible (works also for controls)

gui.window["id2"] = gui.window["id1"]

The GUI is not fully optimized, yet you have like 700 fps with 20 simple windows on the screen on a notebook PC. Controls are stored in a std vector as share ptr. For rendering, it is not necessary to evaluate the string keys.

Mathlib included from http://sourceforge.net/projects/nebuladevice/

(C) by Sven Forstmann in 2015

Screenshot1
Screenshot2

Screenshot3