This package provides a Julia language wrapper for cimgui: a thin c-api wrapper programmatically generated for the excellent C++ immediate mode gui Dear ImGui. Dear ImGui is mainly for creating content creation tools and visualization / debug tools. You could browse Gallery to get an idea of its use cases.
pkg> add CImGui
demo/demo.jlto test whether the default backend works on your machine.
examples/demo.jland browse demos in the
examplesfolder to learn how to use the API.
- Read documentation or run
? CImGui.xxxto retrieve docs:
help?> CImGui.Begin Begin(name, p_open=C_NULL, flags=0) -> Bool Push window to the stack and start appending to it. Usage ––––––– • you may append multiple times to the same window during the same frame. • passing p_open != C_NULL shows a window-closing widget in the upper-right corner of the window, which clicking will set the boolean to false when clicked. • Begin return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window. │ Note │ │ Always call a matching End for each Begin call, regardless of its return value. This │ is due to legacy reason and is inconsistent with most other functions (such as │ BeginMenu/EndMenu, BeginPopup/EndPopup, etc.) where the EndXXX call should only be │ called if the corresponding BeginXXX function returned true.
The API provided in this package is as close as possible to the original C++ API. When translating C++ code to Julia, please follow the tips below:
using LibCImGuito import all of the
ImGuiXXXtypes into the current namespace;
- Member function calling should be translated in Julia style:
- Prefer to define colors as
- CSyntax.jl provides two useful macros:
@cfor translating C's
&operator on immutables and
@cstatic-block for emulating C's
- pointer arithmetic:
&A[n]should be translated to
pointer(A) + n * sizeof(T)where
ncounts from 0.
As mentioned before, this package aims to provide the same user experience as the original C++ API, so any high-level abstraction should go into a more high-level package.
LibCImGui is a thin wrapper over cimgui. It's one-to-one mapped to the original cimgui APIs. By using CImGui.LibCImGui, all of the ImGui-prefixed types, enums and ig-prefixed functions will be imported into the current namespace. It's mainly for people who prefer to use original cimgui's interface.
The default backend is based on ModernGL and GLFW which are stable and under actively maintained. Other popular backends like SFML and SDL could be added in the future if someone should invest time to make these packages work in post Julia 1.0 era.
Only the Julia code in this repo is released under MIT license. Other assets such as those fonts in the
fonts folder are released under their own license.