1 unstable release
0.8.0 | Feb 27, 2022 |
---|
#864 in GUI
136 downloads per month
Used in arcdps
2.5MB
48K
SLoC
imgui-rs: Rust bindings for Dear ImGui 1.80 for arcdps addons
This is a fork
Addons for arcdps are restricted to an older version of Dear ImGui. This is a fork of imgui-rs 0.8.0 that is compatible with Dear ImGui 1.80 intended for use by arcdps addons.
Changes
- Allows Ui object creation from context for the arcdps rust wrapper
- Downgrade to Dear ImGui 1.80 (current version used by arcdps)
- APIs that require newer versions of ImGui are removed (mainly the disable API)
- Cherry-picked some important fixes from imgui-rs >0.8.0, mostly related to the
input_text
widget not resizing the buffer correctly and segfaulting. - Text input callback API (character filters) was changed to support 16bit chars, as the arcdps ImGui version does not enable 32bit character support.
Original README
Window::new("Hello world")
.size([300.0, 100.0], Condition::FirstUseEver)
.build(&ui, || {
ui.text("Hello world!");
ui.text("こんにちは世界!");
ui.text("This...is...imgui-rs!");
ui.separator();
let mouse_pos = ui.io().mouse_pos;
ui.text(format!(
"Mouse Position: ({:.1},{:.1})",
mouse_pos[0], mouse_pos[1]
));
});
Main library crates
- imgui: High-level safe API
- imgui-winit-support: Backend platform implementation that uses the
winit
crate (latest by default, but earlier versions are supported via feature flags) - imgui-glow-renderer: Renderer implementation that uses the
imgui
crate - imgui-glium-renderer: Renderer implementation that uses the
glium
crate - imgui-sys: Low-level unsafe API (automatically generated)
Additionally, the following are no longer maintained, but might work still:
- imgui-gfx-renderer: Renderer implementation that uses the
gfx
crate (not the new gfx-hal crate)
Features
- Bindings for Dear ImGui that can be used with safe Rust. Note: API coverage is not 100%, but will keep improving over time.
- Builder structs for use cases where the original C++ library uses optional function parameters
- Easy integration with
glow
/glium
- Easy integration with winit (backend platform)
- Optional support for the freetype font rasterizer
Minimum Support Rust Version (MSRV)
The MSRV for imgui-rs
and all of the backend crates is 1.54. We update our MSRV periodically, and issue a minor bump for it.
Choosing a backend platform and a renderer
Almost every application that uses imgui-rs needs two additional components in
addition to the main imgui
crate: a backend platform, and a renderer.
The backend platform is responsible for integrating imgui-rs with the operating system and its window management. Its responsibilities include the following:
- Handling input events (e.g. keyboard, mouse) and updating imgui-rs state accordingly
- Passing information about the OS window (e.g. size, DPI factor) to imgui-rs
- Updating the OS-side mouse cursor when imgui-rs requests it
The renderer is responsible for taking generic, renderer-agnostic draw lists generated by imgui-rs, and rendering them using some graphics API. Its responsibilities include the following:
- Rendering using vertex/index buffers and command lists
- Handling of DPI factors and scissor rects
- Texture management
The most tested platform/renderer combination is imgui-glium-renderer
+
glium
+ imgui-winit-support
+ winit
, but this is not the only possible
combination. There's also imgui-glow-renderer
, which will increasingly replace
glium
, and you can find additional 3rd party crates that provide a wider
support for more libraries (e.g. raw OpenGL, SDL2). You can also write your own
support code if you have a more advanced use case, because imgui-rs is not tied to any specific graphics / OS API.
Compiling and running the demos
git clone https://github.com/imgui-rs/imgui-rs
cd imgui-rs
git submodule update --init --recursive
Main examples are located in the imgui-examples
directory.
# At the reposity root
cd imgui-examples
cargo test
cargo run --example hello_world
cargo run --example test_window
cargo run --example test_window_impl
Examples for the gfx backend are under the imgui-gfx-examples directory.
cd imgui-gfx-examples
cargo test
cargo run --example gfx_hello_world
cargo run --example gfx_test_window
Note to Windows users: You will need to use the MSVC ABI version of the Rust compiler along with its associated dependencies to build this libary and run the examples.
How to contribute
-
Change or add something
-
Make sure you're using the latest stable Rust
-
Run rustfmt to guarantee code style conformance
rustup component add rustfmt cargo fmt
-
Open a pull request in Github
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Uses Dear ImGui and cimgui.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.