Iced is an experimental cross-platform GUI library for Rust focused on simplicity and type-safety. Inspired by Elm.
This PR marks the end of the 0.1.0
milestone and the launch of a new release!
The library has made some progress since the last 0.1.0-beta
landed, around 4 months ago.
During this time, we have been focusing on implementing basic functionality and new widgets while following the roadmap. The most important new features are:
Custom styling (#146)
A simple, trait-based approach for customizing the appearance of different widgets.
Event subscriptions (#122)
A declarative way to listen to external events asynchronously by leveraging streams.
Canvas widget (#193)
A widget for drawing 2D graphics with an interface inspired by the Web Canvas API and powered by lyon.
PaneGrid widget (#224)
A widget that dynamically organizes layout by splitting panes that can be resized and drag and dropped.
Svg widget (#111)
A widget that renders vector graphics on top of resvg and raqote. Thanks to @Maldela
ProgressBar widget (#141)
A widget to notify progress of asynchronous tasks to your users. Thanks to @Songtronix
Configurable futures executor (#164)
Support for plugging tokio, async-std, wasm-bindgen-futures, or your own custom futures executor to an application.
Compatibility with existing wgpu projects (#183)
A bunch of improvements to the flexibility of iced_wgpu to allow integration in existing codebases.
Text selection for TextInput (#202)
Thanks to @FabianLars
Texture atlas for iced_wgpu (#154)
An atlas on top of guillotiere for batching draw calls. Thanks to @Maldela
Back when I released the first beta, the codebase only had two examples: a simple tour showcasing the different widgets of the library, and a todos tracker inspired by TodoMVC. Since then, and as a consequence of all the new features, the amount of examples has increased considerably:
bezier_tool, a Paint-like tool for drawing Bézier curves using lyon.
clock, an application that uses the Canvas widget to draw a clock and its hands to display the current time.
counter, the classic counter example explained in the README.
custom_widget, a custom widget that draws a circle.
download_progress, a basic application that asynchronously downloads a dummy file of 100 MB and tracks the download progress.
events, a log of native events displayed using a conditional Subscription.
geometry, a custom widget showcasing how to draw geometry with the Mesh2D primitive in iced_wgpu.
integration, an example demonstrating how to integrate Iced in an existing graphical application.
pane_grid, a grid of panes that can be split, resized, and reorganized.
pokedex, an application that displays a random Pokédex entry (sprite included!) by using the PokéAPI.
progress_bar, a simple progress bar that can be filled by using a slider.
styling, an example showcasing custom styling with a light and dark theme.
solar_system, an animated solar system drawn using the Canvas widget and showcasing how to compose different transforms.
stopwatch, a watch with start/stop and reset buttons showcasing how to listen to time.
svg, an application that renders the Ghostscript Tiger by leveraging the Svg widget.
Feel free to try them out and report any issues you may encounter!
Thank you! 🎉
Finally, I want to highlight the work of everyone that has contributed to the library in one way or another:
created iced-pancurses, started a great issue to find a project logo (#143), and worked on a potential website (#115).
contributed a Mesh2D primitive for iced_wgpu (#140) which ended up being the foundations of the Canvas widget.
added customization support for the Checkbox widget (#192).
improved the Node API (#187) and has been working on the Grid widget (#189).
removed the Clone bound on the Message associated type of Application (#155).
contributed text selection for TextInput (#202) on top of @Finnerale
enhanced the scrolling behavior of the Scrollable widget (#95).
introduced missing style attributes in iced_web (#127), removed unnecessary bounds (#128), and built a cool Space Engineers calculator.
added platform-specific settings to iced_winit (#94), implemented the bezier_tool example (#144), and provided feedback related to using the library for building VST plugins (#118).
updated winit to 0.21
(#181) and exposed the Clipboard type in iced_winit (#178).
removed unnecessary lifetimes in the integration example (#240) and contributed other minor code cleanups (#242).
fixed some formatting to comply with cargo fmt (#228).
implemented the Svg widget (#111) and a texture atlas for iced_wgpu (#154).
cleaned up some code and made it more idiomatic (#45).
implemented Ctrl+Backspace behavior for TextInput (#249).
added support for displaying already-decoded images (#211).
made a bunch of functions const (#91) and added some From implementations (#92).
fixed the file path of the svg example (#196).
improved the scaling of the hands in the clock example (#251).
introduced a with_children method for Column and Row (#220).
fixed the hash_layout implementation of the Image widget (#101).
experimented with iOS support and touch events (#57) while contributing to winit.
wrote the ProgressBar widget (#141), contributed the download_progress example (#232), and has been using the library in Airshipper, a cross-platform launcher for Veloren.
enabled custom fonts for TextInput (#171).
removed unnecessary 'static lifetimes in a bunch of generic types (#245).
I am very grateful for all these contributions and all the feedback and suggestions received. Thank you, everyone!