Thanks everyone for your patience with this long overdue release!
There has been a good chunk of work done on imgui-rs since the last release. For a complete list, see the CHANGELOG.markdown in the main repository
A few key changes:
Building everything of Ui
The aim is to make the API more consistent and easier to discover functinality by having widgets be created consistently.
For example, previously a button was made by ui.button(...) but a slider made by imgui::Slider::new(...).build(ui) - meaning both appeared in different sections of the docs/auto-completion, so easy to miss. Now a slider is now made via ui.slider(...) also
This means some commonly used widgets like Window change - although a tiny bit tedious, it is hopefully a fairly stight-forward syntax change, which can be done with some search-and-replace (change imgui::Window::new(...) to ui.window(...) and remove the ui argument from build)
This is still somewhat a work-in-progress (some items may still be created via separate builder structs), but the aim is to transition everything to Ui
Docking
The upstream docking branch is now available, enabled via the docking feature. Higher-level, safe Rust bindings for this will come in a future release, for now these can be used via the imgui-sys crate
Various version updates
Dear ImGui is now 1.86 - this isn't the latest release, but it was better to release now and get imgui-rs back to a more regular release cycle
MSRV is now 1.57. We soft-updated to this to Rust 1.54 in the v0.8.0 release (with a feature min-const-generics), which has now been removed (and as such, we resume having no default features). Rust 1.56 is required for the Rust 2021 edition, and 1.57 is required by some dependencies
Upgraded from Dear ImGui 1.84.2 to 1.86. See the 1.85 and the 1.86 release notes
Upgraded winit version to v0.27 for imgu-winit-support
The imgui-winit-support and imgui-glow-renderer re-export winit and glow respectively to make setup easier for simple projects. [PR #676](imgui-rs/imgui-rs#676)
BREAKING: Removed push_style_colors and push_style_vars. Instead, use push_style_color in a loop. This was deprecated in 0.7.0 and should have been removed in 0.8.0. This also removes their associated tokens.
BREAKING: Ui now does not have a lifetime associated with it, but is only ever given to users in the form of &mut Ui. Additionally, the render function has been moved to the Context instead of Ui.
BREAKING: SharedFontAtlas now hides an Rc within its wrapper -- this simplifies the codebase and more accurately reflects how we expect SharedFontAtlas to be used (ie, you're probably going to set it up once, and then give it around, rather than constantly edit it). SharedFontAtlas users, if this change is very bad for you, please let us know with issues!
BREAKING: Id is now a simpler facade, but requires the Ui struct to generate. push_id, equally, has been split into multiple functions for simplicity. New example imgui-examples/examples/id_wrangling.rs shows some of the push_id usage
BREAKING: We now only support glium 0.30. We're in a difficult position supporting arbitrary glium versions in our renderer, since glium is only in a semi-maintained state. glium users, please get in contact in issues to let us know what will work best for your needs!
Added InputScalar and InputScalarN. These are the core Input modules that Dear ImGui uses, and ultimately what InputFloat and InputInt turn into. See deprecation of InputFloat and InputInt as a result. Thank you to @​EmbersArc for implementing this here.
BREAKING: ui.input_int and ui.input_float now return InputScalar<'ui, 'l, f32/i32>, instead of InputFloat/InputInt. This struct has all of the same flags as InputFloat and InputInt did.
DEPRECATED: InputFloat and InputInt have been deprecated. ui.input_float and ui.input_int are not, however, and instead will just call input_scalar as appropriate. Therefore, please switch your code to ui.input_float or ui.input_int.
Added add_polyline method to DrawListMut, which binds to Dear ImGui's AddPolyline and AddConvexPolyFilled
BREAKING: The following structs have had their new method changed and deprecated; they now also take ui in their new, but you should create them on the Ui struct instead.
Window should be made with ui.window - e.g ui.window("My Window").build(|| { ui.text("Contents") });
ChildWindow should be made with ui.child_window
MenuItem should be made with ui.menu_item or ui.menu_item_config.
DragDropSource and DragDropTarget should be made with ui.drag_drop_source_config or ui.drag_drop_target. Both of these methods, and the DragDrop API in general, are likely to change.
Added docking feature which builds against the upstream docking branch. Only basic API is exposed currently, just enough to enable the docking imgui_context.io_mut().config_flags |= imgui::ConfigFlags::DOCKING_ENABLE; - a safe API for programtically docking windows and so on will be added later (until then the internal docking API can be accessed, imgui::sys::igDockBuilderDockWindow and so on)
Fixed dpi related issues when not in HiDpiMode::Default mode. The wrong scale factor was used when converting winit physical size to logical size, causing the imgui display size to be incorrect.
Fixed creation of .crate (published to crates.io) so required files for freetype feature are included
Welcome to the 0.8.0 update. This is one of the largest updates imgui-rs has ever seen; it will generate errors in a 0.7 project, but hopefully it should be both quick to fix, and enjoyable to update. See our release page for more information and a list of contributors to this cycle. Thank you to everyone who uses imgui-rs, files issues, and spend their time and effort to PR new changes into the codebase. Because of all that effort, this is by far the best imgui-rs has looked!
Removed ImStr and ImString from the API. Currently im_str! is deprecated and will be removed in 0.9.0. To change your code:
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Updates the requirements on imgui to permit the latest version.
Release notes
Sourced from imgui's releases.
... (truncated)
Changelog
Sourced from imgui's changelog.
... (truncated)
Commits
6d6cda2
Add docs links to Cargo.toml5f07942
Move imgui-gfx-renderer away from main library crates sectione47f29b
Release process docs: important release crates step9776ebe
Remove authors key from Cargo.toml2eb3f8c
Bump to 0.9.0!b8ddd07
Update unobvious dear-imgui version in README59ce49c
Update headings in changelog7cc7bf9
Minor hackery to keep CI happya7c479c
Update changelog8329cd7
Merge pull request #676 from lovelymono/reexport-glow-winitDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)