diff --git a/core/README.md b/core/README.md new file mode 100644 index 00000000..8f967796 --- /dev/null +++ b/core/README.md @@ -0,0 +1,13 @@ +# `iced_core` +[![Documentation](https://docs.rs/iced_core/badge.svg)][documentation] +[![Crates.io](https://img.shields.io/crates/v/iced_core.svg)](https://crates.io/crates/iced_core) +[![License](https://img.shields.io/crates/l/iced_core.svg)](https://github.com/hecrj/iced/blob/master/LICENSE) +[![project chat](https://img.shields.io/badge/chat-on_zulip-brightgreen.svg)](https://iced.zulipchat.com) + +`iced_core` holds basic reusable types of the public API. For instance, basic data types like `Point`, `Rectangle`, `Length`, etc. + +This crate is meant to be a starting point for an Iced runtime. + +![iced_core](../docs/graphs/core.png) + +[documentation]: https://docs.rs/iced_core diff --git a/native/README.md b/native/README.md new file mode 100644 index 00000000..60f350b8 --- /dev/null +++ b/native/README.md @@ -0,0 +1,23 @@ +# `iced_native` +[![Documentation](https://docs.rs/iced_native/badge.svg)][documentation] +[![Crates.io](https://img.shields.io/crates/v/iced_native.svg)](https://crates.io/crates/iced_native) +[![License](https://img.shields.io/crates/l/iced_native.svg)](https://github.com/hecrj/iced/blob/master/LICENSE) +[![project chat](https://img.shields.io/badge/chat-on_zulip-brightgreen.svg)](https://iced.zulipchat.com) + +`iced_native` takes [`iced_core`] and builds a native runtime on top of it, featuring: +- A custom layout engine, greatly inspired by [`druid`] +- Event handling for all the built-in widgets +- A renderer-agnostic API + +To achieve this, it introduces a bunch of reusable interfaces: +- A `Widget` trait, which is used to implement new widgets: from layout requirements to event and drawing logic. +- A bunch of `Renderer` traits, meant to keep the crate renderer-agnostic. +- A `Windowed` trait, leveraging [`raw-window-handle`], which can be implemented by graphical renderers that target _windows_. Window-based shells (like [`iced_winit`]) can use this trait to stay renderer-agnostic. + +![iced_native](../docs/graphs/native.png) + +[documentation]: https://docs.rs/iced_native +[`iced_core`]: ../core +[`iced_winit`]: ../winit +[`druid`]: https://github.com/xi-editor/druid +[`raw-window-handle`]: https://github.com/rust-windowing/raw-window-handle diff --git a/web/README.md b/web/README.md new file mode 100644 index 00000000..f86b2cb7 --- /dev/null +++ b/web/README.md @@ -0,0 +1,15 @@ +# `iced_web` +[![Documentation](https://docs.rs/iced_web/badge.svg)][documentation] +[![Crates.io](https://img.shields.io/crates/v/iced_web.svg)](https://crates.io/crates/iced_web) +[![License](https://img.shields.io/crates/l/iced_web.svg)](https://github.com/hecrj/iced/blob/master/LICENSE) +[![project chat](https://img.shields.io/badge/chat-on_zulip-brightgreen.svg)](https://iced.zulipchat.com) + +`iced_web` takes [`iced_core`] and builds a WebAssembly runtime on top. It achieves this by introducing a `Widget` trait that can be used to produce VDOM nodes. + +The crate is currently a __very experimental__, simple abstraction layer over [`dodrio`]. + +![iced_core](../docs/graphs/web.png) + +[documentation]: https://docs.rs/iced_web +[`iced_core`]: ../core +[`dodrio`]: https://github.com/fitzgen/dodrio diff --git a/wgpu/README.md b/wgpu/README.md new file mode 100644 index 00000000..47038c10 --- /dev/null +++ b/wgpu/README.md @@ -0,0 +1,37 @@ +# `iced_wgpu` +[![Documentation](https://docs.rs/iced_wgpu/badge.svg)][documentation] +[![Crates.io](https://img.shields.io/crates/v/iced_wgpu.svg)](https://crates.io/crates/iced_wgpu) +[![License](https://img.shields.io/crates/l/iced_wgpu.svg)](https://github.com/hecrj/iced/blob/master/LICENSE) +[![project chat](https://img.shields.io/badge/chat-on_zulip-brightgreen.svg)](https://iced.zulipchat.com) + +`iced_wgpu` is a [`wgpu`] renderer for [`iced_native`]. For now, it is the default renderer of Iced in native platforms. + +[`wgpu`] supports most modern graphics backends: Vulkan, Metal, DX11, and DX12 (OpenGL and WebGL are still WIP). Additionally, it will support the incoming [WebGPU API]. + +Currently, `iced_wgpu` supports the following primitives: +- Text, which is rendered using [`wgpu_glyph`]. No shaping at all. +- Quads or rectangles, with rounded borders and a solid background color. +- Images, lazily loaded from the filesystem. +- Clip areas, useful to implement scrollables or hide overflowing content. + +![iced_wgpu](../docs/graphs/wgpu.png) + +[documentation]: https://docs.rs/iced_wgpu +[`iced_native`]: ../native +[`wgpu`]: https://github.com/gfx-rs/wgpu-rs +[WebGPU API]: https://gpuweb.github.io/gpuweb/ +[`wgpu_glyph`]: https://github.com/hecrj/wgpu_glyph + +## Current limitations + +The current implementation is quite naive, it uses: + +- A different pipeline/shader for each primitive +- A very simplistic layer model: every `Clip` primitive will generate new layers +- _Many_ render passes instead of preparing everything upfront +- A glyph cache that is trimmed incorrectly when there are multiple layers (a [`glyph_brush`] limitation) + +Some of these issues are already being worked on! If you want to help, [get in touch!] + +[get in touch!]: ../CONTRIBUTING.md +[`glyph_brush`]: https://github.com/alexheretic/glyph-brush diff --git a/winit/README.md b/winit/README.md new file mode 100644 index 00000000..b11184cb --- /dev/null +++ b/winit/README.md @@ -0,0 +1,15 @@ +# `iced_winit` +[![Documentation](https://docs.rs/iced_winit/badge.svg)][documentation] +[![Crates.io](https://img.shields.io/crates/v/iced_winit.svg)](https://crates.io/crates/iced_winit) +[![License](https://img.shields.io/crates/l/iced_winit.svg)](https://github.com/hecrj/iced/blob/master/LICENSE) +[![project chat](https://img.shields.io/badge/chat-on_zulip-brightgreen.svg)](https://iced.zulipchat.com) + +`iced_winit` offers some convenient abstractions on top of [`iced_native`] to quickstart development when using [`winit`]. + +It exposes a renderer-agnostic `Application` trait that can be implemented and then run with a simple call. The use of this trait is optional. A `conversion` module is provided for users that decide to implement a custom event loop. + +![iced_winit](../docs/graphs/winit.png) + +[documentation]: https://docs.rs/iced_winit +[`iced_native`]: ../native +[`winit`]: https://github.com/rust-windowing/winit