####Immediate mode GUI Library from Omar Cornut.
This is a non-kosher wrapper for use with Cinder (glNext branch).
ImGui is a bloat-free graphical user interface library for C/C++. It is portable, renderer agnostic and carries minimal amount of dependencies (only 3 files are needed). It is based on an "immediate" graphical user interface paradigm which allows you to build simple user interfaces with ease.
ImGui is designed to allow programmers to create "content creation" or "debug" tools (as opposed to tools for the average end-user). It favors simplicity and thus lacks certain features normally found in more high-level libraries, such as string localisation.
https://github.com/ocornut/imgui/
#####Namespace For ease of use I added a namespace alias for ImGui, feel free to not use it
#####Initialization This is the most basic initialization:
void CinderApp::setup()
{
ui::initialize();
}
You can provide an ui::Options object to the initialize method to setup the ui the way you want:
void CinderApp::setup()
{
ui::initialize( ui::Options().font( "font.ttf", 12 ).window( uiWindow ).frameRounding( 0.0f ) );
}
#####UI Creation By default or if you don't specify an empty windowRef, the wrapper will take care of calling ImGui::NewFrame and ImGui::Render, meaning that you don't have to worry about anything else than the actual UI. You can add UI code in any place you want, that's it. The Renderer takes care of setting the matrices and the proper shader to draw the ui through a postDraw signal. (You can disable this behavior through the initialization options).
void CinderApp::draw()
{
ui::Combo( "Blending", &blendMode, blendModes, 3 );
ui::SliderInt( "Circles", &n, 0, 500 );
ui::SliderFloat( "Min Radius", &minRadius, 1, 499 );
ui::Image( mFbo->getColorTexture(), mFbo->getSize() );
}
void SomeFunctionCalledSomewhereElse()
{
ui::Button( "MyButton" );
}
#####Scoped Objects Being a big fan of Cinder's Opengl scoped objects, I decided to experiment with them in this wrapper, we'll see if I keep them or not.
void SomeWindow()
{
ui::ScopedWindow window( "Title" );
ui::ScopedFont font( "Font-Bold" );
ui::Text( "Some Bold Title" );
ui::Image( mFbo->getColorTexture(), mFbo->getSize() );
}
#####Todo
- fix keyboard events handling (modifiers not working for the moment)
- multi-window option
Developed by Omar Cornut. The library was developed with the support of Media Molecule and first used internally on the game Tearaway.
Embeds proggy_clean font by Tristan Grimmer (also MIT license).
Inspiration, feedback, and testing: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Matt Willis. Thanks!
ImGui is licensed under the MIT License, see LICENSE for more information.