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
- Run
demo/demo.jl
to test whether the default backend works on your machine. - Run
examples/demo.jl
and browse demos in theexamples
folder to learn how to use the API. - Read documentation or run
? CImGui.xxx
to 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:
- Replace
ImGui::
toCImGui.
; using LibCImGui
to import all of theImGuiXXX
types into the current namespace;- Member function calling should be translated in Julia style:
fonts.AddFont(cfg)
=>CImGui.AddFont(fonts, cfg)
; - Prefer to define colors as
Vector{Cfloat}
instead ofCImGui.ImVec4
; - CSyntax.jl provides two useful macros:
@c
for translating C's&
operator on immutables and@cstatic
-block for emulating C'sstatic
keyword; - pointer arithmetic:
&A[n]
should be translated topointer(A) + n * sizeof(T)
wheren
counts 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.