The cimgui project
• dlang and cpp
So I needed a flexible and easy to use intermediate GUI for one of my projects in D. There was a pretty descent library natively written in D called dimgui that I started to use. It made me fall in love with the simple concept of an IMGUI but I was soon wanting more features than this library provided. I started looking around for something similar but more mature. I found IMGUI written in C++ but with a very simple C-like interface. I wrote a c-wrapper cimgui for it and afterwards added bindings for the D programming lanugage in a derelict-like style.
See the original imgui example below in a D application:
This is a screenshot of my user interface written in it:
This (pseudo) code shows the cimgui usage in the D programming language:
import derelict.imgui.imgui;
void main()
{
... load opengl and initialize window ...
DerelictImgui.load(); // initialize dynamic bindings
ImGuiIO* io = ig_GetIO();
// callback that imgui calls to let us render everything for it
// (that makes imgui very platform independent, you can render using opengl, directX ... whatever)
io.RenderDrawListsFn = &renderImgui;
while(true)
{
io.MousePos = ImVec2(123,456);
... fill mouse and keyboard input info into the io variable ...
ig_NewFrame(); // tell imgui that a new frame begins
static float f = 0.0f;
float[3] clear_color = [0.3f, 0.4f, 0.8f];
ig_Text("Hello, world!");
ig_SliderFloat("float", &f, 0.0f, 1.0f);
ig_ColorEdit3("clear color", clear_color);
if (ig_Button("Test Button")) { ... }
// close this frames UI and makes imgui call our render callback
ig_Render();
}
ig_Shutdown(); // shutdown
}
You can find the full example D project on github: imgui_d_test