summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/audit.yml20
-rw-r--r--Cargo.toml135
-rw-r--r--README.md14
-rw-r--r--core/Cargo.toml30
-rw-r--r--examples/README.md20
-rw-r--r--examples/arc/Cargo.toml3
-rw-r--r--examples/bezier_tool/Cargo.toml3
-rw-r--r--examples/bezier_tool/README.md4
-rw-r--r--examples/checkbox/Cargo.toml2
-rw-r--r--examples/clock/Cargo.toml6
-rw-r--r--examples/color_palette/Cargo.toml6
-rw-r--r--examples/color_palette/README.md6
-rw-r--r--examples/combo_box/Cargo.toml3
-rw-r--r--examples/component/Cargo.toml3
-rw-r--r--examples/counter/Cargo.toml2
-rw-r--r--examples/counter/README.md4
-rw-r--r--examples/custom_quad/Cargo.toml3
-rw-r--r--examples/custom_widget/Cargo.toml3
-rw-r--r--examples/custom_widget/README.md4
-rw-r--r--examples/download_progress/Cargo.toml3
-rw-r--r--examples/download_progress/README.md4
-rw-r--r--examples/events/Cargo.toml3
-rw-r--r--examples/events/README.md6
-rw-r--r--examples/events/src/main.rs5
-rw-r--r--examples/exit/Cargo.toml2
-rw-r--r--examples/game_of_life/Cargo.toml12
-rw-r--r--examples/game_of_life/README.md4
-rw-r--r--examples/game_of_life/src/main.rs2
-rw-r--r--examples/geometry/Cargo.toml3
-rw-r--r--examples/geometry/README.md4
-rw-r--r--examples/integration/Cargo.toml20
-rw-r--r--examples/integration/README.md4
-rw-r--r--examples/integration/src/main.rs2
-rw-r--r--examples/lazy/Cargo.toml3
-rw-r--r--examples/loading_spinners/Cargo.toml8
-rw-r--r--examples/loading_spinners/README.md6
-rw-r--r--examples/modal/Cargo.toml3
-rw-r--r--examples/modal/src/main.rs8
-rw-r--r--examples/multitouch/Cargo.toml7
-rw-r--r--examples/multitouch/src/main.rs2
-rw-r--r--examples/pane_grid/Cargo.toml3
-rw-r--r--examples/pane_grid/README.md4
-rw-r--r--examples/pane_grid/src/main.rs14
-rw-r--r--examples/pick_list/Cargo.toml3
-rw-r--r--examples/pokedex/Cargo.toml11
-rw-r--r--examples/pokedex/README.md4
-rw-r--r--examples/pokedex/src/main.rs2
-rw-r--r--examples/progress_bar/Cargo.toml2
-rw-r--r--examples/progress_bar/README.md4
-rw-r--r--examples/qr_code/Cargo.toml3
-rw-r--r--examples/qr_code/README.md4
-rw-r--r--examples/screenshot/Cargo.toml8
-rw-r--r--examples/screenshot/src/main.rs9
-rw-r--r--examples/scrollable/Cargo.toml6
-rw-r--r--examples/sierpinski_triangle/Cargo.toml6
-rw-r--r--examples/sierpinski_triangle/README.md4
-rw-r--r--examples/slider/Cargo.toml2
-rw-r--r--examples/solar_system/Cargo.toml6
-rw-r--r--examples/solar_system/README.md4
-rw-r--r--examples/solar_system/src/main.rs2
-rw-r--r--examples/stopwatch/Cargo.toml3
-rw-r--r--examples/stopwatch/README.md4
-rw-r--r--examples/stopwatch/src/main.rs16
-rw-r--r--examples/styling/Cargo.toml2
-rw-r--r--examples/styling/README.md4
-rw-r--r--examples/svg/Cargo.toml3
-rw-r--r--examples/system_information/Cargo.toml6
-rw-r--r--examples/toast/Cargo.toml3
-rw-r--r--examples/toast/src/main.rs8
-rw-r--r--examples/todos/Cargo.toml12
-rw-r--r--examples/todos/README.md4
-rw-r--r--examples/todos/src/main.rs40
-rw-r--r--examples/tooltip/Cargo.toml3
-rw-r--r--examples/tour/Cargo.toml6
-rw-r--r--examples/tour/README.md4
-rw-r--r--examples/tour/src/main.rs2
-rw-r--r--examples/url_handler/Cargo.toml2
-rw-r--r--examples/url_handler/src/main.rs13
-rw-r--r--examples/visible_bounds/Cargo.toml6
-rw-r--r--examples/visible_bounds/src/main.rs8
-rw-r--r--examples/websocket/Cargo.toml12
-rw-r--r--futures/Cargo.toml61
-rw-r--r--futures/src/event.rs59
-rw-r--r--futures/src/keyboard.rs61
-rw-r--r--futures/src/lib.rs2
-rw-r--r--futures/src/subscription.rs91
-rw-r--r--graphics/Cargo.toml62
-rw-r--r--renderer/Cargo.toml39
-rw-r--r--runtime/Cargo.toml28
-rw-r--r--runtime/src/window.rs5
-rw-r--r--src/lib.rs16
-rw-r--r--src/window/icon.rs9
-rw-r--r--style/Cargo.toml30
-rw-r--r--tiny_skia/Cargo.toml54
-rw-r--r--tiny_skia/src/text.rs5
-rw-r--r--wgpu/Cargo.toml90
-rw-r--r--wgpu/src/shader/quad.wgsl20
-rw-r--r--wgpu/src/shader/triangle.wgsl20
-rw-r--r--wgpu/src/text.rs5
-rw-r--r--widget/Cargo.toml57
-rw-r--r--widget/src/pane_grid.rs4
-rw-r--r--widget/src/scrollable.rs10
-rw-r--r--winit/Cargo.toml91
103 files changed, 767 insertions, 696 deletions
diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml
index ba5dc190..e9f4b0c5 100644
--- a/.github/workflows/audit.yml
+++ b/.github/workflows/audit.yml
@@ -1,12 +1,26 @@
name: Audit
-on: [push]
+on:
+ push: {}
+ pull_request: {}
+ schedule:
+ - cron: '0 0 * * *'
jobs:
- dependencies:
+ vulnerabilities:
runs-on: ubuntu-latest
steps:
- uses: hecrj/setup-rust-action@v1
- name: Install cargo-audit
run: cargo install cargo-audit
- uses: actions/checkout@master
- - name: Audit dependencies
+ - name: Audit vulnerabilities
run: cargo audit
+
+ artifacts:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: hecrj/setup-rust-action@v1
+ - name: Install cargo-outdated
+ run: cargo install cargo-outdated
+ - uses: actions/checkout@master
+ - name: Find outdated dependencies
+ run: cargo outdated --workspace --exit-code 1
diff --git a/Cargo.toml b/Cargo.toml
index 3b2ef547..af74a3cf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,22 +1,28 @@
[package]
name = "iced"
-version = "0.10.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
description = "A cross-platform GUI library inspired by Elm"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced"
-readme = "README.md"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
+
+[badges]
+maintenance = { status = "actively-developed" }
[features]
default = ["wgpu"]
# Enable the `wgpu` GPU-accelerated renderer backend
wgpu = ["iced_renderer/wgpu"]
# Enables the `Image` widget
-image = ["iced_widget/image", "image_rs"]
+image = ["iced_widget/image", "dep:image"]
# Enables the `Svg` widget
svg = ["iced_widget/svg"]
# Enables the `Canvas` widget
@@ -44,8 +50,28 @@ webgl = ["iced_renderer/webgl"]
# Enables the advanced module
advanced = []
-[badges]
-maintenance = { status = "actively-developed" }
+[dependencies]
+iced_core.workspace = true
+iced_futures.workspace = true
+iced_renderer.workspace = true
+iced_widget.workspace = true
+iced_winit.features = ["application"]
+iced_winit.workspace = true
+
+thiserror.workspace = true
+
+image.workspace = true
+image.optional = true
+
+[profile.release-opt]
+inherits = "release"
+codegen-units = 1
+debug = false
+lto = true
+incremental = false
+opt-level = 3
+overflow-checks = false
+strip = "debuginfo"
[workspace]
members = [
@@ -62,29 +88,66 @@ members = [
"examples/*",
]
-[dependencies]
-iced_core = { version = "0.10", path = "core" }
-iced_futures = { version = "0.7", path = "futures" }
-iced_renderer = { version = "0.1", path = "renderer" }
-iced_widget = { version = "0.1", path = "widget" }
-iced_winit = { version = "0.10", path = "winit", features = ["application"] }
-thiserror = "1"
+[workspace.package]
+version = "0.12.0"
+authors = ["Héctor Ramón Jiménez <hector@hecrj.dev>"]
+edition = "2021"
+license = "MIT"
+repository = "https://github.com/iced-rs/iced"
+homepage = "https://iced.rs"
+categories = ["gui"]
+keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-[dependencies.image_rs]
-version = "0.24"
-package = "image"
-optional = true
+[workspace.dependencies]
+iced = { version = "0.12", path = "." }
+iced_core = { version = "0.12", path = "core" }
+iced_futures = { version = "0.12", path = "futures" }
+iced_graphics = { version = "0.12", path = "graphics" }
+iced_renderer = { version = "0.12", path = "renderer" }
+iced_runtime = { version = "0.12", path = "runtime" }
+iced_style = { version = "0.12", path = "style" }
+iced_tiny_skia = { version = "0.12", path = "tiny_skia" }
+iced_wgpu = { version = "0.12", path = "wgpu" }
+iced_widget = { version = "0.12", path = "widget" }
+iced_winit = { version = "0.12", path = "winit" }
-[package.metadata.docs.rs]
-rustdoc-args = ["--cfg", "docsrs"]
-all-features = true
-
-[profile.release-opt]
-inherits = "release"
-codegen-units = 1
-debug = false
-lto = true
-incremental = false
-opt-level = 3
-overflow-checks = false
-strip = "debuginfo"
+async-std = "1.0"
+bitflags = "1.0"
+bytemuck = { version = "1.0", features = ["derive"] }
+cosmic-text = "0.9"
+futures = "0.3"
+glam = "0.24"
+glyphon = { git = "https://github.com/grovesNL/glyphon.git", rev = "20f0f8fa80e0d0df4c63634ce9176fa489546ca9" }
+guillotiere = "0.6"
+half = "2.2"
+image = "0.24"
+instant = "0.1"
+kamadak-exif = "0.5"
+kurbo = "0.9"
+log = "0.4"
+lyon = "1.0"
+lyon_path = "1.0"
+num-traits = "0.2"
+once_cell = "1.0"
+ouroboros = "0.17"
+palette = "0.7"
+qrcode = { version = "0.12", default-features = false }
+raw-window-handle = "0.5"
+resvg = "0.35"
+rustc-hash = "1.0"
+smol = "1.0"
+softbuffer = "0.2"
+sysinfo = "0.28"
+thiserror = "1.0"
+tiny-skia = "0.10"
+tokio = "1.0"
+tracing = "0.1"
+twox-hash = { version = "1.0", default-features = false }
+unicode-segmentation = "1.0"
+wasm-bindgen-futures = "0.4"
+wasm-timer = "0.2"
+web-sys = "0.3"
+wgpu = "0.17"
+winapi = "0.3"
+window_clipboard = "0.3"
+winit = { git = "https://github.com/iced-rs/winit.git", rev = "c52db2045d0a2f1b8d9923870de1d4ab1994146e", default-features = false }
diff --git a/README.md b/README.md
index 431f14f9..825219aa 100644
--- a/README.md
+++ b/README.md
@@ -15,11 +15,11 @@
A cross-platform GUI library for Rust focused on simplicity and type-safety.
Inspired by [Elm].
-<a href="https://gfycat.com/littlesanehalicore">
- <img src="https://thumbs.gfycat.com/LittleSaneHalicore-small.gif" width="275px">
+<a href="https://iced.rs/examples/todos.mp4">
+ <img src="https://iced.rs/examples/todos.gif" width="275px">
</a>
-<a href="https://gfycat.com/politeadorableiberianmole">
- <img src="https://thumbs.gfycat.com/PoliteAdorableIberianmole-small.gif" width="273px">
+<a href="https://iced.rs/examples/tour.mp4">
+ <img src="https://iced.rs/examples/tour.gif" width="273px">
</a>
</div>
@@ -47,9 +47,9 @@ __Iced is currently experimental software.__ [Take a look at the roadmap],
[Cross-platform support]: https://raw.githubusercontent.com/iced-rs/iced/master/docs/images/todos_desktop.jpg
[the Web]: https://github.com/iced-rs/iced_web
-[text inputs]: https://gfycat.com/alertcalmcrow-rust-gui
-[scrollables]: https://gfycat.com/perkybaggybaboon-rust-gui
-[Debug overlay with performance metrics]: https://gfycat.com/incredibledarlingbee
+[text inputs]: https://iced.rs/examples/text_input.mp4
+[scrollables]: https://iced.rs/examples/scrollable.mp4
+[Debug overlay with performance metrics]: https://iced.rs/examples/debug.mp4
[Modular ecosystem]: ECOSYSTEM.md
[renderer-agnostic native runtime]: runtime/
[`wgpu`]: https://github.com/gfx-rs/wgpu
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 8bb37309..8859e91e 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -1,24 +1,26 @@
[package]
name = "iced_core"
-version = "0.10.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "The essential concepts of Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
+description = "The essential ideas of iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[dependencies]
-bitflags = "1.2"
-thiserror = "1"
-log = "0.4.17"
-twox-hash = { version = "1.5", default-features = false }
+bitflags.workspace = true
+log.workspace = true
+thiserror.workspace = true
+twox-hash.workspace = true
-[dependencies.palette]
-version = "0.7"
-optional = true
+palette.workspace = true
+palette.optional = true
[target.'cfg(target_arch = "wasm32")'.dependencies]
-instant = "0.1"
+instant.workspace = true
[dev-dependencies]
approx = "0.5"
diff --git a/examples/README.md b/examples/README.md
index 111e8910..71dad13e 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -10,8 +10,8 @@ A simple UI tour that can run both on native platforms and the web! It showcases
The __[`main`](tour/src/main.rs)__ file contains all the code of the example! All the cross-platform GUI is defined in terms of __state__, __messages__, __update logic__ and __view logic__.
<div align="center">
- <a href="https://gfycat.com/politeadorableiberianmole">
- <img src="https://thumbs.gfycat.com/PoliteAdorableIberianmole-small.gif">
+ <a href="https://iced.rs/examples/tour.mp4">
+ <img src="https://iced.rs/examples/tour.gif">
</a>
</div>
@@ -33,8 +33,8 @@ A todos tracker inspired by [TodoMVC]. It showcases dynamic layout, text input,
The example code is located in the __[`main`](todos/src/main.rs)__ file.
<div align="center">
- <a href="https://gfycat.com/littlesanehalicore">
- <img src="https://thumbs.gfycat.com/LittleSaneHalicore-small.gif" height="400px">
+ <a href="https://iced.rs/examples/todos.mp4">
+ <img src="https://iced.rs/examples/todos.gif" height="400px">
</a>
</div>
@@ -53,9 +53,7 @@ It runs a simulation in a background thread while allowing interaction with a `C
The relevant code is located in the __[`main`](game_of_life/src/main.rs)__ file.
<div align="center">
- <a href="https://gfycat.com/briefaccurateaardvark">
- <img src="https://thumbs.gfycat.com/BriefAccurateAardvark-size_restricted.gif">
- </a>
+ <img src="https://iced.rs/examples/game_of_life.gif">
</div>
You can run it with `cargo run`:
@@ -72,9 +70,7 @@ An example showcasing custom styling with a light and dark theme.
The example code is located in the __[`main`](styling/src/main.rs)__ file.
<div align="center">
- <a href="https://user-images.githubusercontent.com/518289/71867993-acff4300-310c-11ea-85a3-d01d8f884346.gif">
- <img src="https://user-images.githubusercontent.com/518289/71867993-acff4300-310c-11ea-85a3-d01d8f884346.gif" height="400px">
- </a>
+ <img src="https://iced.rs/examples/styling.gif">
</div>
You can run it with `cargo run`:
@@ -120,9 +116,7 @@ Since [Iced was born in May 2019], it has been powering the user interfaces in
<div align="center">
- <a href="https://gfycat.com/gloomyweakhammerheadshark">
- <img src="https://thumbs.gfycat.com/GloomyWeakHammerheadshark-small.gif">
- </a>
+ <img src="https://iced.rs/examples/coffee.gif">
</div>
[Iced was born in May 2019]: https://github.com/hecrj/coffee/pull/35
diff --git a/examples/arc/Cargo.toml b/examples/arc/Cargo.toml
index e6e74363..5012ff82 100644
--- a/examples/arc/Cargo.toml
+++ b/examples/arc/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
+iced.workspace = true
+iced.features = ["canvas", "tokio", "debug"]
diff --git a/examples/bezier_tool/Cargo.toml b/examples/bezier_tool/Cargo.toml
index 890e3027..b2547ff1 100644
--- a/examples/bezier_tool/Cargo.toml
+++ b/examples/bezier_tool/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas"] }
+iced.workspace = true
+iced.features = ["canvas"]
diff --git a/examples/bezier_tool/README.md b/examples/bezier_tool/README.md
index ebbb12cc..6dc13785 100644
--- a/examples/bezier_tool/README.md
+++ b/examples/bezier_tool/README.md
@@ -5,9 +5,7 @@ A Paint-like tool for drawing Bézier curves using the `Canvas` widget.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/soulfulinfiniteantbear">
- <img src="https://thumbs.gfycat.com/SoulfulInfiniteAntbear-small.gif">
- </a>
+ <img src="https://iced.rs/examples/bezier_tool.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/checkbox/Cargo.toml b/examples/checkbox/Cargo.toml
index dde8f910..1e027c4c 100644
--- a/examples/checkbox/Cargo.toml
+++ b/examples/checkbox/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/clock/Cargo.toml b/examples/clock/Cargo.toml
index 5e869eb5..2d3d5908 100644
--- a/examples/clock/Cargo.toml
+++ b/examples/clock/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
-time = { version = "0.3.5", features = ["local-offset"] }
+iced.workspace = true
+iced.features = ["canvas", "tokio", "debug"]
+
+time = { version = "0.3", features = ["local-offset"] }
diff --git a/examples/color_palette/Cargo.toml b/examples/color_palette/Cargo.toml
index 3be732bb..2da6c6ed 100644
--- a/examples/color_palette/Cargo.toml
+++ b/examples/color_palette/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "palette"] }
-palette = "0.7.0"
+iced.workspace = true
+iced.features = ["canvas", "palette"]
+
+palette.workspace = true
diff --git a/examples/color_palette/README.md b/examples/color_palette/README.md
index f90020b1..9c135937 100644
--- a/examples/color_palette/README.md
+++ b/examples/color_palette/README.md
@@ -3,13 +3,11 @@
A color palette generator, based on a user-defined root color.
<div align="center">
- <a href="https://gfycat.com/dirtylonebighornsheep">
- <img src="screenshot.png">
- </a>
+ <img src="screenshot.png">
</div>
You can run it with `cargo run`:
```
-cargo run --package pure_color_palette
+cargo run --package color_palette
```
diff --git a/examples/combo_box/Cargo.toml b/examples/combo_box/Cargo.toml
index be1b5e32..0f5ecf2a 100644
--- a/examples/combo_box/Cargo.toml
+++ b/examples/combo_box/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
+iced.workspace = true
+iced.features = ["debug"]
diff --git a/examples/component/Cargo.toml b/examples/component/Cargo.toml
index 9db1e6b4..83b7b8a4 100644
--- a/examples/component/Cargo.toml
+++ b/examples/component/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug", "lazy"] }
+iced.workspace = true
+iced.features = ["debug", "lazy"]
diff --git a/examples/counter/Cargo.toml b/examples/counter/Cargo.toml
index e31f440f..1e9bba6b 100644
--- a/examples/counter/Cargo.toml
+++ b/examples/counter/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/counter/README.md b/examples/counter/README.md
index 4d9fc5b9..53243c24 100644
--- a/examples/counter/README.md
+++ b/examples/counter/README.md
@@ -5,9 +5,7 @@ The classic counter example explained in the [`README`](../../README.md).
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/fairdeadcatbird">
- <img src="https://thumbs.gfycat.com/FairDeadCatbird-small.gif">
- </a>
+ <img src="https://iced.rs/examples/counter.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/custom_quad/Cargo.toml b/examples/custom_quad/Cargo.toml
index f097c2dd..31b5055d 100644
--- a/examples/custom_quad/Cargo.toml
+++ b/examples/custom_quad/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced"] }
+iced.workspace = true
+iced.features = ["advanced"]
diff --git a/examples/custom_widget/Cargo.toml b/examples/custom_widget/Cargo.toml
index dda0efe8..1e94bc52 100644
--- a/examples/custom_widget/Cargo.toml
+++ b/examples/custom_widget/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced"] }
+iced.workspace = true
+iced.features = ["advanced"]
diff --git a/examples/custom_widget/README.md b/examples/custom_widget/README.md
index 3d6cf902..b80e898f 100644
--- a/examples/custom_widget/README.md
+++ b/examples/custom_widget/README.md
@@ -5,9 +5,7 @@ A demonstration of how to build a custom widget that draws a circle.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/jealouscornyhomalocephale">
- <img src="https://thumbs.gfycat.com/JealousCornyHomalocephale-small.gif">
- </a>
+ <img src="https://iced.rs/examples/custom_widget.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/download_progress/Cargo.toml b/examples/download_progress/Cargo.toml
index 212832f4..18a49f66 100644
--- a/examples/download_progress/Cargo.toml
+++ b/examples/download_progress/Cargo.toml
@@ -6,7 +6,8 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["tokio"] }
+iced.workspace = true
+iced.features = ["tokio"]
[dependencies.reqwest]
version = "0.11"
diff --git a/examples/download_progress/README.md b/examples/download_progress/README.md
index 7999ce94..19cb2966 100644
--- a/examples/download_progress/README.md
+++ b/examples/download_progress/README.md
@@ -5,9 +5,7 @@ A basic application that asynchronously downloads multiple dummy files of 100 MB
The example implements a custom `Subscription` in the __[`download`](src/download.rs)__ module. This subscription downloads and produces messages that can be used to keep track of its progress.
<div align="center">
- <a href="https://gfycat.com/wildearlyafricanwilddog">
- <img src="https://thumbs.gfycat.com/WildEarlyAfricanwilddog-small.gif">
- </a>
+ <img src="https://iced.rs/examples/download_progress.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/events/Cargo.toml b/examples/events/Cargo.toml
index 15ffc0af..87315a10 100644
--- a/examples/events/Cargo.toml
+++ b/examples/events/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
+iced.workspace = true
+iced.features = ["debug"]
diff --git a/examples/events/README.md b/examples/events/README.md
index 3c9a1cab..fd7f9b47 100644
--- a/examples/events/README.md
+++ b/examples/events/README.md
@@ -4,12 +4,6 @@ A log of native events displayed using a conditional `Subscription`.
The __[`main`]__ file contains all the code of the example.
-<div align="center">
- <a href="https://gfycat.com/infamousicyermine">
- <img src="https://thumbs.gfycat.com/InfamousIcyErmine-small.gif">
- </a>
-</div>
-
You can run it with `cargo run`:
```
cargo run --package events
diff --git a/examples/events/src/main.rs b/examples/events/src/main.rs
index 7f3a5e1d..32d0da2c 100644
--- a/examples/events/src/main.rs
+++ b/examples/events/src/main.rs
@@ -1,9 +1,8 @@
use iced::alignment;
+use iced::event::{self, Event};
use iced::executor;
-use iced::subscription;
use iced::widget::{button, checkbox, container, text, Column};
use iced::window;
-use iced::Event;
use iced::{
Alignment, Application, Command, Element, Length, Settings, Subscription,
Theme,
@@ -71,7 +70,7 @@ impl Application for Events {
}
fn subscription(&self) -> Subscription<Message> {
- subscription::events().map(Message::EventOccurred)
+ event::listen().map(Message::EventOccurred)
}
fn view(&self) -> Element<Message> {
diff --git a/examples/exit/Cargo.toml b/examples/exit/Cargo.toml
index 34d0789a..b06fbadc 100644
--- a/examples/exit/Cargo.toml
+++ b/examples/exit/Cargo.toml
@@ -5,4 +5,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/game_of_life/Cargo.toml b/examples/game_of_life/Cargo.toml
index 6de45db6..9b291de8 100644
--- a/examples/game_of_life/Cargo.toml
+++ b/examples/game_of_life/Cargo.toml
@@ -6,8 +6,10 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
-tokio = { version = "1.0", features = ["sync"] }
-itertools = "0.9"
-rustc-hash = "1.1"
-env_logger = "0.10"
+iced.workspace = true
+iced.features = ["debug", "canvas", "tokio"]
+
+itertools = "0.11"
+rustc-hash.workspace = true
+tokio = { workspace = true, features = ["sync"] }
+tracing-subscriber = "0.3"
diff --git a/examples/game_of_life/README.md b/examples/game_of_life/README.md
index aa39201c..60033c1a 100644
--- a/examples/game_of_life/README.md
+++ b/examples/game_of_life/README.md
@@ -7,9 +7,7 @@ It runs a simulation in a background thread while allowing interaction with a `C
The __[`main`]__ file contains the relevant code of the example.
<div align="center">
- <a href="https://gfycat.com/WhichPaltryChick">
- <img src="https://thumbs.gfycat.com/WhichPaltryChick-size_restricted.gif">
- </a>
+ <img src="https://iced.rs/examples/game_of_life.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs
index 1f266c8e..39c1609d 100644
--- a/examples/game_of_life/src/main.rs
+++ b/examples/game_of_life/src/main.rs
@@ -18,7 +18,7 @@ use iced::{
use std::time::{Duration, Instant};
pub fn main() -> iced::Result {
- env_logger::builder().format_timestamp(None).init();
+ tracing_subscriber::fmt::init();
GameOfLife::run(Settings {
antialiasing: true,
diff --git a/examples/geometry/Cargo.toml b/examples/geometry/Cargo.toml
index 6068d651..9606dcb3 100644
--- a/examples/geometry/Cargo.toml
+++ b/examples/geometry/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced"] }
+iced.workspace = true
+iced.features = ["advanced"]
diff --git a/examples/geometry/README.md b/examples/geometry/README.md
index 4d5c81cb..16be8d19 100644
--- a/examples/geometry/README.md
+++ b/examples/geometry/README.md
@@ -5,9 +5,7 @@ A custom widget showcasing how to draw geometry with the `Mesh2D` primitive in [
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/activeunfitkangaroo">
- <img src="https://thumbs.gfycat.com/ActiveUnfitKangaroo-small.gif">
- </a>
+ <img src="https://iced.rs/examples/geometry.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/integration/Cargo.toml b/examples/integration/Cargo.toml
index 22914742..032cc75e 100644
--- a/examples/integration/Cargo.toml
+++ b/examples/integration/Cargo.toml
@@ -6,19 +6,15 @@ edition = "2021"
publish = false
[dependencies]
-iced_winit = { path = "../../winit" }
-iced_wgpu = { path = "../../wgpu" }
-iced_widget = { path = "../../widget" }
-iced_renderer = { path = "../../renderer", features = ["wgpu"] }
-env_logger = "0.10"
+iced_winit.workspace = true
+iced_wgpu.workspace = true
+iced_widget.workspace = true
+
+tracing-subscriber = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies]
-console_error_panic_hook = "0.1.7"
-console_log = "0.2.0"
-log = "0.4"
+console_error_panic_hook = "0.1"
+console_log = "1.0"
+log.workspace = true
wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = ["Element", "HtmlCanvasElement", "Window", "Document"] }
-# This dependency a little bit quirky, it is deep in the tree and without `js` feature it
-# refuses to work with `wasm32-unknown-unknown target`. Unfortunately, we need this patch
-# to make it work
-getrandom = { version = "0.2", features = ["js"] }
diff --git a/examples/integration/README.md b/examples/integration/README.md
index ece9ba1e..996cdc17 100644
--- a/examples/integration/README.md
+++ b/examples/integration/README.md
@@ -5,9 +5,7 @@ A demonstration of how to integrate Iced in an existing [`wgpu`] application.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/nicemediocrekodiakbear">
- <img src="https://thumbs.gfycat.com/NiceMediocreKodiakbear-small.gif">
- </a>
+ <img src="https://iced.rs/examples/integration.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/integration/src/main.rs b/examples/integration/src/main.rs
index 98b58f16..af48af5f 100644
--- a/examples/integration/src/main.rs
+++ b/examples/integration/src/main.rs
@@ -41,7 +41,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
};
#[cfg(not(target_arch = "wasm32"))]
- env_logger::init();
+ tracing_subscriber::fmt::init();
// Initialize winit
let event_loop = EventLoop::new();
diff --git a/examples/lazy/Cargo.toml b/examples/lazy/Cargo.toml
index e03e89a9..4ccb9584 100644
--- a/examples/lazy/Cargo.toml
+++ b/examples/lazy/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug", "lazy"] }
+iced.workspace = true
+iced.features = ["debug", "lazy"]
diff --git a/examples/loading_spinners/Cargo.toml b/examples/loading_spinners/Cargo.toml
index ee9a48aa..a32da386 100644
--- a/examples/loading_spinners/Cargo.toml
+++ b/examples/loading_spinners/Cargo.toml
@@ -6,6 +6,8 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced", "canvas"] }
-lyon_algorithms = "1"
-once_cell = "1"
+iced.workspace = true
+iced.features = ["advanced", "canvas"]
+
+lyon_algorithms = "1.0"
+once_cell.workspace = true \ No newline at end of file
diff --git a/examples/loading_spinners/README.md b/examples/loading_spinners/README.md
index 3573c6f6..75b88804 100644
--- a/examples/loading_spinners/README.md
+++ b/examples/loading_spinners/README.md
@@ -2,12 +2,6 @@
Example implementation of animated indeterminate loading spinners.
-<div align="center">
- <a href="https://gfycat.com/importantdevotedhammerheadbird">
- <img src="https://thumbs.gfycat.com/ImportantDevotedHammerheadbird-small.gif">
- </a>
-</div>
-
You can run it with `cargo run`:
```
cargo run --package loading_spinners
diff --git a/examples/modal/Cargo.toml b/examples/modal/Cargo.toml
index 3ac61e6a..009d9653 100644
--- a/examples/modal/Cargo.toml
+++ b/examples/modal/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced"] }
+iced.workspace = true
+iced.features = ["advanced"]
diff --git a/examples/modal/src/main.rs b/examples/modal/src/main.rs
index 8a48f830..4aa70886 100644
--- a/examples/modal/src/main.rs
+++ b/examples/modal/src/main.rs
@@ -1,12 +1,14 @@
+use iced::event::{self, Event};
use iced::executor;
use iced::keyboard;
-use iced::subscription::{self, Subscription};
use iced::theme;
use iced::widget::{
self, button, column, container, horizontal_space, pick_list, row, text,
text_input,
};
-use iced::{Alignment, Application, Command, Element, Event, Length, Settings};
+use iced::{
+ Alignment, Application, Command, Element, Length, Settings, Subscription,
+};
use modal::Modal;
use std::fmt;
@@ -49,7 +51,7 @@ impl Application for App {
}
fn subscription(&self) -> Subscription<Self::Message> {
- subscription::events().map(Message::Event)
+ event::listen().map(Message::Event)
}
fn update(&mut self, message: Message) -> Command<Message> {
diff --git a/examples/multitouch/Cargo.toml b/examples/multitouch/Cargo.toml
index 867312f8..e0d14f58 100644
--- a/examples/multitouch/Cargo.toml
+++ b/examples/multitouch/Cargo.toml
@@ -6,7 +6,8 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
-tokio = { version = "1.0", features = ["sync"] }
-env_logger = "0.10"
+iced.workspace = true
+iced.features = ["debug", "canvas", "tokio"]
+
+tracing-subscriber = "0.3"
voronator = "0.2"
diff --git a/examples/multitouch/src/main.rs b/examples/multitouch/src/main.rs
index 2830b78d..ba8df7aa 100644
--- a/examples/multitouch/src/main.rs
+++ b/examples/multitouch/src/main.rs
@@ -13,7 +13,7 @@ use iced::{
use std::collections::HashMap;
pub fn main() -> iced::Result {
- env_logger::builder().format_timestamp(None).init();
+ tracing_subscriber::fmt::init();
Multitouch::run(Settings {
antialiasing: true,
diff --git a/examples/pane_grid/Cargo.toml b/examples/pane_grid/Cargo.toml
index 4c0bf072..095ecd10 100644
--- a/examples/pane_grid/Cargo.toml
+++ b/examples/pane_grid/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug", "lazy"] }
+iced.workspace = true
+iced.features = ["debug", "lazy"]
diff --git a/examples/pane_grid/README.md b/examples/pane_grid/README.md
index a4cfcb7d..65357b23 100644
--- a/examples/pane_grid/README.md
+++ b/examples/pane_grid/README.md
@@ -15,9 +15,7 @@ This example showcases the `PaneGrid` widget, which features:
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/frailfreshairedaleterrier">
- <img src="https://thumbs.gfycat.com/FrailFreshAiredaleterrier-small.gif">
- </a>
+ <img src="https://iced.rs/examples/pane_grid.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/pane_grid/src/main.rs b/examples/pane_grid/src/main.rs
index 04896e20..af87e2c0 100644
--- a/examples/pane_grid/src/main.rs
+++ b/examples/pane_grid/src/main.rs
@@ -1,8 +1,6 @@
use iced::alignment::{self, Alignment};
-use iced::event::{self, Event};
use iced::executor;
use iced::keyboard;
-use iced::subscription;
use iced::theme::{self, Theme};
use iced::widget::pane_grid::{self, PaneGrid};
use iced::widget::{
@@ -146,18 +144,12 @@ impl Application for Example {
}
fn subscription(&self) -> Subscription<Message> {
- subscription::events_with(|event, status| {
- if let event::Status::Captured = status {
+ keyboard::on_key_press(|key_code, modifiers| {
+ if !modifiers.command() {
return None;
}
- match event {
- Event::Keyboard(keyboard::Event::KeyPressed {
- modifiers,
- key_code,
- }) if modifiers.command() => handle_hotkey(key_code),
- _ => None,
- }
+ handle_hotkey(key_code)
})
}
diff --git a/examples/pick_list/Cargo.toml b/examples/pick_list/Cargo.toml
index 4aa4603a..030558e7 100644
--- a/examples/pick_list/Cargo.toml
+++ b/examples/pick_list/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
+iced.workspace = true
+iced.features = ["debug"]
diff --git a/examples/pokedex/Cargo.toml b/examples/pokedex/Cargo.toml
index e99fc0c3..bf7e1e35 100644
--- a/examples/pokedex/Cargo.toml
+++ b/examples/pokedex/Cargo.toml
@@ -6,7 +6,9 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["image", "debug", "tokio"] }
+iced.workspace = true
+iced.features = ["image", "debug", "tokio"]
+
serde_json = "1.0"
[dependencies.serde]
@@ -19,5 +21,8 @@ default-features = false
features = ["json", "rustls-tls"]
[dependencies.rand]
-version = "0.7"
-features = ["wasm-bindgen"]
+version = "0.8"
+
+[dependencies.getrandom]
+version = "0.2"
+features = ["js"]
diff --git a/examples/pokedex/README.md b/examples/pokedex/README.md
index 50720f57..8e8562ac 100644
--- a/examples/pokedex/README.md
+++ b/examples/pokedex/README.md
@@ -4,9 +4,7 @@ An application that loads a random Pokédex entry using the [PokéAPI].
All the example code can be found in the __[`main`](src/main.rs)__ file.
<div align="center">
- <a href="https://gfycat.com/aggressivedarkelephantseal-rust-gui">
- <img src="https://thumbs.gfycat.com/AggressiveDarkElephantseal-small.gif" height="400px">
- </a>
+ <img src="https://iced.rs/examples/pokedex.gif">
</div>
You can run it on native platforms with `cargo run`:
diff --git a/examples/pokedex/src/main.rs b/examples/pokedex/src/main.rs
index 4482814c..8b71a269 100644
--- a/examples/pokedex/src/main.rs
+++ b/examples/pokedex/src/main.rs
@@ -153,7 +153,7 @@ impl Pokemon {
let id = {
let mut rng = rand::rngs::OsRng;
- rng.gen_range(0, Pokemon::TOTAL)
+ rng.gen_range(0..Pokemon::TOTAL)
};
let fetch_entry = async {
diff --git a/examples/progress_bar/Cargo.toml b/examples/progress_bar/Cargo.toml
index 383a9bdd..6624ae15 100644
--- a/examples/progress_bar/Cargo.toml
+++ b/examples/progress_bar/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/progress_bar/README.md b/examples/progress_bar/README.md
index 1e927b3c..1268ac6b 100644
--- a/examples/progress_bar/README.md
+++ b/examples/progress_bar/README.md
@@ -5,9 +5,7 @@ A simple progress bar that can be filled by using a slider.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/importantdevotedhammerheadbird">
- <img src="https://thumbs.gfycat.com/ImportantDevotedHammerheadbird-small.gif">
- </a>
+ <img src="https://iced.rs/examples/pokedex.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/qr_code/Cargo.toml b/examples/qr_code/Cargo.toml
index 2f164df6..8f33ea8c 100644
--- a/examples/qr_code/Cargo.toml
+++ b/examples/qr_code/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["qr_code"] }
+iced.workspace = true
+iced.features = ["qr_code"]
diff --git a/examples/qr_code/README.md b/examples/qr_code/README.md
index 2dd89c26..0d1abaa7 100644
--- a/examples/qr_code/README.md
+++ b/examples/qr_code/README.md
@@ -5,9 +5,7 @@ A basic QR code generator that showcases the `QRCode` widget.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/heavyexhaustedaracari">
- <img src="https://thumbs.gfycat.com/HeavyExhaustedAracari-size_restricted.gif">
- </a>
+ <img src="https://iced.rs/examples/qr_code.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/screenshot/Cargo.toml b/examples/screenshot/Cargo.toml
index b79300b7..dcd77439 100644
--- a/examples/screenshot/Cargo.toml
+++ b/examples/screenshot/Cargo.toml
@@ -6,6 +6,8 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug", "image", "advanced"] }
-image = { version = "0.24.6", features = ["png"]}
-env_logger = "0.10.0"
+iced.workspace = true
+iced.features = ["debug", "image", "advanced"]
+
+image = { workspace = true, features = ["png"]}
+tracing-subscriber = "0.3" \ No newline at end of file
diff --git a/examples/screenshot/src/main.rs b/examples/screenshot/src/main.rs
index 83824535..68c9d031 100644
--- a/examples/screenshot/src/main.rs
+++ b/examples/screenshot/src/main.rs
@@ -4,16 +4,15 @@ use iced::theme::{Button, Container};
use iced::widget::{button, column, container, image, row, text, text_input};
use iced::window::screenshot::{self, Screenshot};
use iced::{
- event, executor, keyboard, subscription, Alignment, Application, Command,
- ContentFit, Element, Event, Length, Rectangle, Renderer, Subscription,
- Theme,
+ event, executor, keyboard, Alignment, Application, Command, ContentFit,
+ Element, Event, Length, Rectangle, Renderer, Subscription, Theme,
};
use ::image as img;
use ::image::ColorType;
fn main() -> iced::Result {
- env_logger::builder().format_timestamp(None).init();
+ tracing_subscriber::fmt::init();
Example::run(iced::Settings::default())
}
@@ -254,7 +253,7 @@ impl Application for Example {
}
fn subscription(&self) -> Subscription<Self::Message> {
- subscription::events_with(|event, status| {
+ event::listen_with(|event, status| {
if let event::Status::Captured = status {
return None;
}
diff --git a/examples/scrollable/Cargo.toml b/examples/scrollable/Cargo.toml
index e6411e26..f8c735c0 100644
--- a/examples/scrollable/Cargo.toml
+++ b/examples/scrollable/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
-once_cell = "1.16.0"
+iced.workspace = true
+iced.features = ["debug"]
+
+once_cell.workspace = true
diff --git a/examples/sierpinski_triangle/Cargo.toml b/examples/sierpinski_triangle/Cargo.toml
index 39d45f64..600a9e06 100644
--- a/examples/sierpinski_triangle/Cargo.toml
+++ b/examples/sierpinski_triangle/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2018"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "debug"] }
-rand = "0.8.4"
+iced.workspace = true
+iced.features = ["debug", "canvas"]
+
+rand = "0.8"
diff --git a/examples/sierpinski_triangle/README.md b/examples/sierpinski_triangle/README.md
index 9fd18257..8b7676d1 100644
--- a/examples/sierpinski_triangle/README.md
+++ b/examples/sierpinski_triangle/README.md
@@ -5,9 +5,7 @@ A simple [Sierpiński triangle](https://en.wikipedia.org/wiki/Sierpi%C5%84ski_tr
Left-click add fixed point, right-click remove fixed point.
<div align="center">
- <a href="https://gfycat.com/flippantrectangularechidna">
- <img src="https://thumbs.gfycat.com/FlippantRectangularEchidna-size_restricted.gif">
- </a>
+ <img src="https://iced.rs/examples/sierpinski_triangle.gif">
</div>
You can run with cargo:
diff --git a/examples/slider/Cargo.toml b/examples/slider/Cargo.toml
index 112d7cff..fad8916e 100644
--- a/examples/slider/Cargo.toml
+++ b/examples/slider/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/solar_system/Cargo.toml b/examples/solar_system/Cargo.toml
index 1a98a87e..ca64da14 100644
--- a/examples/solar_system/Cargo.toml
+++ b/examples/solar_system/Cargo.toml
@@ -6,6 +6,8 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["canvas", "tokio", "debug"] }
-env_logger = "0.10.0"
+iced.workspace = true
+iced.features = ["debug", "canvas", "tokio"]
+
rand = "0.8.3"
+tracing-subscriber = "0.3"
diff --git a/examples/solar_system/README.md b/examples/solar_system/README.md
index acfbc466..81ffd3a5 100644
--- a/examples/solar_system/README.md
+++ b/examples/solar_system/README.md
@@ -5,9 +5,7 @@ An animated solar system drawn using the `Canvas` widget and showcasing how to c
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/selfassuredaromaticdunnart">
- <img src="https://thumbs.gfycat.com/SelfassuredAromaticDunnart-small.gif">
- </a>
+ <img src="https://iced.rs/examples/solar_system.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/solar_system/src/main.rs b/examples/solar_system/src/main.rs
index 58d06206..8fa8946e 100644
--- a/examples/solar_system/src/main.rs
+++ b/examples/solar_system/src/main.rs
@@ -23,7 +23,7 @@ use iced::{
use std::time::Instant;
pub fn main() -> iced::Result {
- env_logger::builder().format_timestamp(None).init();
+ tracing_subscriber::fmt::init();
SolarSystem::run(Settings {
antialiasing: true,
diff --git a/examples/stopwatch/Cargo.toml b/examples/stopwatch/Cargo.toml
index f623feb9..6b1419f6 100644
--- a/examples/stopwatch/Cargo.toml
+++ b/examples/stopwatch/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["smol"] }
+iced.workspace = true
+iced.features = ["smol"]
diff --git a/examples/stopwatch/README.md b/examples/stopwatch/README.md
index 4cf4582e..1cf370bd 100644
--- a/examples/stopwatch/README.md
+++ b/examples/stopwatch/README.md
@@ -5,9 +5,7 @@ A watch with start/stop and reset buttons showcasing how to listen to time.
The __[`main`]__ file contains all the code of the example.
<div align="center">
- <a href="https://gfycat.com/granularenviousgoitered-rust-gui">
- <img src="https://thumbs.gfycat.com/GranularEnviousGoitered-small.gif">
- </a>
+ <img src="https://iced.rs/examples/stopwatch.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/stopwatch/src/main.rs b/examples/stopwatch/src/main.rs
index 842ba3d4..0b0f0607 100644
--- a/examples/stopwatch/src/main.rs
+++ b/examples/stopwatch/src/main.rs
@@ -1,5 +1,6 @@
use iced::alignment;
use iced::executor;
+use iced::keyboard;
use iced::theme::{self, Theme};
use iced::time;
use iced::widget::{button, column, container, row, text};
@@ -77,12 +78,25 @@ impl Application for Stopwatch {
}
fn subscription(&self) -> Subscription<Message> {
- match self.state {
+ let tick = match self.state {
State::Idle => Subscription::none(),
State::Ticking { .. } => {
time::every(Duration::from_millis(10)).map(Message::Tick)
}
+ };
+
+ fn handle_hotkey(
+ key_code: keyboard::KeyCode,
+ _modifiers: keyboard::Modifiers,
+ ) -> Option<Message> {
+ match key_code {
+ keyboard::KeyCode::Space => Some(Message::Toggle),
+ keyboard::KeyCode::R => Some(Message::Reset),
+ _ => None,
+ }
}
+
+ Subscription::batch(vec![tick, keyboard::on_key_press(handle_hotkey)])
}
fn view(&self) -> Element<Message> {
diff --git a/examples/styling/Cargo.toml b/examples/styling/Cargo.toml
index f771708c..c8a90258 100644
--- a/examples/styling/Cargo.toml
+++ b/examples/styling/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/styling/README.md b/examples/styling/README.md
index 6c198a54..fd12300d 100644
--- a/examples/styling/README.md
+++ b/examples/styling/README.md
@@ -4,9 +4,7 @@ An example showcasing custom styling with a light and dark theme.
All the example code is located in the __[`main`](src/main.rs)__ file.
<div align="center">
- <a href="https://user-images.githubusercontent.com/518289/71867993-acff4300-310c-11ea-85a3-d01d8f884346.gif">
- <img src="https://user-images.githubusercontent.com/518289/71867993-acff4300-310c-11ea-85a3-d01d8f884346.gif" height="400px">
- </a>
+ <img src="https://iced.rs/examples/styling.gif">
</div>
You can run it with `cargo run`:
diff --git a/examples/svg/Cargo.toml b/examples/svg/Cargo.toml
index f5a6eaa2..78208fb0 100644
--- a/examples/svg/Cargo.toml
+++ b/examples/svg/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["svg"] }
+iced.workspace = true
+iced.features = ["svg"]
diff --git a/examples/system_information/Cargo.toml b/examples/system_information/Cargo.toml
index 7d1e4b94..41903122 100644
--- a/examples/system_information/Cargo.toml
+++ b/examples/system_information/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["system"] }
-bytesize = { version = "1.1.0" }
+iced.workspace = true
+iced.features = ["system"]
+
+bytesize = "1.1"
diff --git a/examples/toast/Cargo.toml b/examples/toast/Cargo.toml
index f703572c..113313e2 100644
--- a/examples/toast/Cargo.toml
+++ b/examples/toast/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["advanced"] }
+iced.workspace = true
+iced.features = ["advanced"]
diff --git a/examples/toast/src/main.rs b/examples/toast/src/main.rs
index 42f6c348..47b272a9 100644
--- a/examples/toast/src/main.rs
+++ b/examples/toast/src/main.rs
@@ -1,10 +1,12 @@
+use iced::event::{self, Event};
use iced::executor;
use iced::keyboard;
-use iced::subscription::{self, Subscription};
use iced::widget::{
self, button, column, container, pick_list, row, slider, text, text_input,
};
-use iced::{Alignment, Application, Command, Element, Event, Length, Settings};
+use iced::{
+ Alignment, Application, Command, Element, Length, Settings, Subscription,
+};
use toast::{Status, Toast};
@@ -57,7 +59,7 @@ impl Application for App {
}
fn subscription(&self) -> Subscription<Self::Message> {
- subscription::events().map(Message::Event)
+ event::listen().map(Message::Event)
}
fn update(&mut self, message: Message) -> Command<Message> {
diff --git a/examples/todos/Cargo.toml b/examples/todos/Cargo.toml
index 7ad4d558..fea20375 100644
--- a/examples/todos/Cargo.toml
+++ b/examples/todos/Cargo.toml
@@ -6,18 +6,20 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["async-std", "debug"] }
+iced.workspace = true
+iced.features = ["async-std", "debug"]
+
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
-once_cell = "1.15"
+once_cell.workspace = true
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-async-std = "1.0"
+async-std.workspace = true
directories-next = "2.0"
[target.'cfg(target_arch = "wasm32")'.dependencies]
-web-sys = { version = "0.3", features = ["Window", "Storage"] }
-wasm-timer = "0.2"
+web-sys = { workspace = true, features = ["Window", "Storage"] }
+wasm-timer.workspace = true
[package.metadata.deb]
assets = [
diff --git a/examples/todos/README.md b/examples/todos/README.md
index 9c2598b9..852dd88d 100644
--- a/examples/todos/README.md
+++ b/examples/todos/README.md
@@ -5,8 +5,8 @@ A todos tracker inspired by [TodoMVC]. It showcases dynamic layout, text input,
All the example code is located in the __[`main`]__ file.
<div align="center">
- <a href="https://gfycat.com/littlesanehalicore">
- <img src="https://thumbs.gfycat.com/LittleSaneHalicore-small.gif" height="400px">
+ <a href="https://iced.rs/examples/todos.mp4">
+ <img src="https://iced.rs/examples/todos.gif">
</a>
</div>
diff --git a/examples/todos/src/main.rs b/examples/todos/src/main.rs
index 6ad7b4fb..62c17926 100644
--- a/examples/todos/src/main.rs
+++ b/examples/todos/src/main.rs
@@ -1,8 +1,6 @@
use iced::alignment::{self, Alignment};
-use iced::event::{self, Event};
use iced::font::{self, Font};
-use iced::keyboard::{self, KeyCode, Modifiers};
-use iced::subscription;
+use iced::keyboard;
use iced::theme::{self, Theme};
use iced::widget::{
self, button, checkbox, column, container, row, scrollable, text,
@@ -52,7 +50,7 @@ enum Message {
FilterChanged(Filter),
TaskMessage(usize, TaskMessage),
TabPressed { shift: bool },
- ToggleFullscreen(window::Mode),
+ ChangeWindowMode(window::Mode),
}
impl Application for Todos {
@@ -163,7 +161,7 @@ impl Application for Todos {
widget::focus_next()
}
}
- Message::ToggleFullscreen(mode) => {
+ Message::ChangeWindowMode(mode) => {
window::change_mode(mode)
}
_ => Command::none(),
@@ -262,33 +260,19 @@ impl Application for Todos {
}
fn subscription(&self) -> Subscription<Message> {
- subscription::events_with(|event, status| match (event, status) {
- (
- Event::Keyboard(keyboard::Event::KeyPressed {
- key_code: keyboard::KeyCode::Tab,
- modifiers,
- ..
+ keyboard::on_key_press(|key_code, modifiers| {
+ match (key_code, modifiers) {
+ (keyboard::KeyCode::Tab, _) => Some(Message::TabPressed {
+ shift: modifiers.shift(),
}),
- event::Status::Ignored,
- ) => Some(Message::TabPressed {
- shift: modifiers.shift(),
- }),
- (
- Event::Keyboard(keyboard::Event::KeyPressed {
- key_code,
- modifiers: Modifiers::SHIFT,
- }),
- event::Status::Ignored,
- ) => match key_code {
- KeyCode::Up => {
- Some(Message::ToggleFullscreen(window::Mode::Fullscreen))
+ (keyboard::KeyCode::Up, keyboard::Modifiers::SHIFT) => {
+ Some(Message::ChangeWindowMode(window::Mode::Fullscreen))
}
- KeyCode::Down => {
- Some(Message::ToggleFullscreen(window::Mode::Windowed))
+ (keyboard::KeyCode::Down, keyboard::Modifiers::SHIFT) => {
+ Some(Message::ChangeWindowMode(window::Mode::Windowed))
}
_ => None,
- },
- _ => None,
+ }
})
}
}
diff --git a/examples/tooltip/Cargo.toml b/examples/tooltip/Cargo.toml
index 25840fb4..57bb0dcb 100644
--- a/examples/tooltip/Cargo.toml
+++ b/examples/tooltip/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
+iced.workspace = true
+iced.features = ["debug"]
diff --git a/examples/tour/Cargo.toml b/examples/tour/Cargo.toml
index 48471f2d..21206ecb 100644
--- a/examples/tour/Cargo.toml
+++ b/examples/tour/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["image", "debug"] }
-env_logger = "0.10.0"
+iced.workspace = true
+iced.features = ["image", "debug"]
+
+tracing-subscriber = "0.3"
diff --git a/examples/tour/README.md b/examples/tour/README.md
index 731e7e66..1c01236b 100644
--- a/examples/tour/README.md
+++ b/examples/tour/README.md
@@ -5,8 +5,8 @@ A simple UI tour that can run both on native platforms and the web! It showcases
The __[`main`]__ file contains all the code of the example! All the cross-platform GUI is defined in terms of __state__, __messages__, __update logic__ and __view logic__.
<div align="center">
- <a href="https://gfycat.com/politeadorableiberianmole">
- <img src="https://thumbs.gfycat.com/PoliteAdorableIberianmole-small.gif">
+ <a href="https://iced.rs/examples/tour.mp4">
+ <img src="https://iced.rs/examples/tour.gif">
</a>
</div>
diff --git a/examples/tour/src/main.rs b/examples/tour/src/main.rs
index 13bcd5ff..af508206 100644
--- a/examples/tour/src/main.rs
+++ b/examples/tour/src/main.rs
@@ -8,7 +8,7 @@ use iced::widget::{Button, Column, Container, Slider};
use iced::{Color, Element, Font, Length, Renderer, Sandbox, Settings};
pub fn main() -> iced::Result {
- env_logger::init();
+ tracing_subscriber::fmt::init();
Tour::run(Settings::default())
}
diff --git a/examples/url_handler/Cargo.toml b/examples/url_handler/Cargo.toml
index 4dcff92d..7bb9914b 100644
--- a/examples/url_handler/Cargo.toml
+++ b/examples/url_handler/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../.." }
+iced.workspace = true
diff --git a/examples/url_handler/src/main.rs b/examples/url_handler/src/main.rs
index f63fa06a..bf570123 100644
--- a/examples/url_handler/src/main.rs
+++ b/examples/url_handler/src/main.rs
@@ -1,6 +1,5 @@
-use iced::event::{Event, MacOS, PlatformSpecific};
+use iced::event::{self, Event};
use iced::executor;
-use iced::subscription;
use iced::widget::{container, text};
use iced::{
Application, Command, Element, Length, Settings, Subscription, Theme,
@@ -37,9 +36,11 @@ impl Application for App {
fn update(&mut self, message: Message) -> Command<Message> {
match message {
Message::EventOccurred(event) => {
- if let Event::PlatformSpecific(PlatformSpecific::MacOS(
- MacOS::ReceivedUrl(url),
- )) = event
+ if let Event::PlatformSpecific(
+ event::PlatformSpecific::MacOS(event::MacOS::ReceivedUrl(
+ url,
+ )),
+ ) = event
{
self.url = Some(url);
}
@@ -50,7 +51,7 @@ impl Application for App {
}
fn subscription(&self) -> Subscription<Message> {
- subscription::events().map(Message::EventOccurred)
+ event::listen().map(Message::EventOccurred)
}
fn view(&self) -> Element<Message> {
diff --git a/examples/visible_bounds/Cargo.toml b/examples/visible_bounds/Cargo.toml
index cfa56dd2..37594b84 100644
--- a/examples/visible_bounds/Cargo.toml
+++ b/examples/visible_bounds/Cargo.toml
@@ -6,5 +6,7 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["debug"] }
-once_cell = "1"
+iced.workspace = true
+iced.features = ["debug"]
+
+once_cell.workspace = true
diff --git a/examples/visible_bounds/src/main.rs b/examples/visible_bounds/src/main.rs
index 8b684514..42dfc24c 100644
--- a/examples/visible_bounds/src/main.rs
+++ b/examples/visible_bounds/src/main.rs
@@ -1,14 +1,14 @@
+use iced::event::{self, Event};
use iced::executor;
use iced::mouse;
-use iced::subscription::{self, Subscription};
use iced::theme::{self, Theme};
use iced::widget::{
column, container, horizontal_space, row, scrollable, text, vertical_space,
};
use iced::window;
use iced::{
- Alignment, Application, Color, Command, Element, Event, Font, Length,
- Point, Rectangle, Settings,
+ Alignment, Application, Color, Command, Element, Font, Length, Point,
+ Rectangle, Settings, Subscription,
};
pub fn main() -> iced::Result {
@@ -163,7 +163,7 @@ impl Application for Example {
}
fn subscription(&self) -> Subscription<Message> {
- subscription::events_with(|event, _| match event {
+ event::listen_with(|event, _| match event {
Event::Mouse(mouse::Event::CursorMoved { position }) => {
Some(Message::MouseMoved(position))
}
diff --git a/examples/websocket/Cargo.toml b/examples/websocket/Cargo.toml
index 12af9658..2756e8e0 100644
--- a/examples/websocket/Cargo.toml
+++ b/examples/websocket/Cargo.toml
@@ -6,16 +6,16 @@ edition = "2021"
publish = false
[dependencies]
-iced = { path = "../..", features = ["tokio", "debug"] }
-once_cell = "1.15"
+iced.workspace = true
+iced.features = ["debug", "tokio"]
+
+once_cell.workspace = true
+warp = "0.3"
[dependencies.async-tungstenite]
version = "0.23"
features = ["tokio-rustls-webpki-roots"]
[dependencies.tokio]
-version = "1"
+workspace = true
features = ["time"]
-
-[dependencies.warp]
-version = "0.3"
diff --git a/futures/Cargo.toml b/futures/Cargo.toml
index 044827c2..69a915e4 100644
--- a/futures/Cargo.toml
+++ b/futures/Cargo.toml
@@ -1,47 +1,40 @@
[package]
name = "iced_futures"
-version = "0.7.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "Commands, subscriptions, and runtimes for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_futures"
-keywords = ["gui", "ui", "graphics", "interface", "futures"]
-categories = ["gui"]
+description = "Commands, subscriptions, and future executors for iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
[features]
thread-pool = ["futures/thread-pool"]
[dependencies]
-log = "0.4"
-
-[dependencies.iced_core]
-version = "0.10"
-path = "../core"
+iced_core.workspace = true
-[dependencies.futures]
-version = "0.3"
+futures.workspace = true
+log.workspace = true
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
-package = "tokio"
-version = "1.0"
-optional = true
-features = ["rt", "rt-multi-thread", "time"]
+[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
+async-std.workspace = true
+async-std.optional = true
+async-std.features = ["unstable"]
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies.async-std]
-version = "1.0"
-optional = true
-features = ["unstable"]
+smol.workspace = true
+smol.optional = true
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies.smol]
-version = "1.2"
-optional = true
+tokio.workspace = true
+tokio.optional = true
+tokio.features = ["rt", "rt-multi-thread", "time"]
[target.'cfg(target_arch = "wasm32")'.dependencies]
-wasm-bindgen-futures = "0.4"
-wasm-timer = "0.2"
-
-[package.metadata.docs.rs]
-rustdoc-args = ["--cfg", "docsrs"]
-all-features = true
+wasm-bindgen-futures.workspace = true
+wasm-timer.workspace = true
diff --git a/futures/src/event.rs b/futures/src/event.rs
new file mode 100644
index 00000000..214d2d40
--- /dev/null
+++ b/futures/src/event.rs
@@ -0,0 +1,59 @@
+//! Listen to runtime events.
+use crate::core::event::{self, Event};
+use crate::core::window;
+use crate::subscription::{self, Subscription};
+use crate::MaybeSend;
+
+/// Returns a [`Subscription`] to all the ignored runtime events.
+///
+/// This subscription will notify your application of any [`Event`] that was
+/// not captured by any widget.
+pub fn listen() -> Subscription<Event> {
+ listen_with(|event, status| match status {
+ event::Status::Ignored => Some(event),
+ event::Status::Captured => None,
+ })
+}
+
+/// Creates a [`Subscription`] that listens and filters all the runtime events
+/// with the provided function, producing messages accordingly.
+///
+/// This subscription will call the provided function for every [`Event`]
+/// handled by the runtime. If the function:
+///
+/// - Returns `None`, the [`Event`] will be discarded.
+/// - Returns `Some` message, the `Message` will be produced.
+pub fn listen_with<Message>(
+ f: fn(Event, event::Status) -> Option<Message>,
+) -> Subscription<Message>
+where
+ Message: 'static + MaybeSend,
+{
+ #[derive(Hash)]
+ struct EventsWith;
+
+ subscription::filter_map(
+ (EventsWith, f),
+ move |event, status| match event {
+ Event::Window(window::Event::RedrawRequested(_)) => None,
+ _ => f(event, status),
+ },
+ )
+}
+
+/// Creates a [`Subscription`] that produces a message for every runtime event,
+/// including the redraw request events.
+///
+/// **Warning:** This [`Subscription`], if unfiltered, may produce messages in
+/// an infinite loop.
+pub fn listen_raw<Message>(
+ f: fn(Event, event::Status) -> Option<Message>,
+) -> Subscription<Message>
+where
+ Message: 'static + MaybeSend,
+{
+ #[derive(Hash)]
+ struct RawEvents;
+
+ subscription::filter_map((RawEvents, f), f)
+}
diff --git a/futures/src/keyboard.rs b/futures/src/keyboard.rs
new file mode 100644
index 00000000..af68e1f2
--- /dev/null
+++ b/futures/src/keyboard.rs
@@ -0,0 +1,61 @@
+//! Listen to keyboard events.
+use crate::core;
+use crate::core::keyboard::{Event, KeyCode, Modifiers};
+use crate::subscription::{self, Subscription};
+use crate::MaybeSend;
+
+/// Listens to keyboard key presses and calls the given function
+/// map them into actual messages.
+///
+/// If the function returns `None`, the key press will be simply
+/// ignored.
+pub fn on_key_press<Message>(
+ f: fn(KeyCode, Modifiers) -> Option<Message>,
+) -> Subscription<Message>
+where
+ Message: MaybeSend + 'static,
+{
+ #[derive(Hash)]
+ struct OnKeyPress;
+
+ subscription::filter_map((OnKeyPress, f), move |event, status| {
+ match (event, status) {
+ (
+ core::Event::Keyboard(Event::KeyPressed {
+ key_code,
+ modifiers,
+ }),
+ core::event::Status::Ignored,
+ ) => f(key_code, modifiers),
+ _ => None,
+ }
+ })
+}
+
+/// Listens to keyboard key releases and calls the given function
+/// map them into actual messages.
+///
+/// If the function returns `None`, the key release will be simply
+/// ignored.
+pub fn on_key_release<Message>(
+ f: fn(KeyCode, Modifiers) -> Option<Message>,
+) -> Subscription<Message>
+where
+ Message: MaybeSend + 'static,
+{
+ #[derive(Hash)]
+ struct OnKeyRelease;
+
+ subscription::filter_map((OnKeyRelease, f), move |event, status| {
+ match (event, status) {
+ (
+ core::Event::Keyboard(Event::KeyReleased {
+ key_code,
+ modifiers,
+ }),
+ core::event::Status::Ignored,
+ ) => f(key_code, modifiers),
+ _ => None,
+ }
+ })
+}
diff --git a/futures/src/lib.rs b/futures/src/lib.rs
index 34d81e1e..8e75331f 100644
--- a/futures/src/lib.rs
+++ b/futures/src/lib.rs
@@ -24,7 +24,9 @@ mod maybe_send;
mod runtime;
pub mod backend;
+pub mod event;
pub mod executor;
+pub mod keyboard;
pub mod subscription;
pub use executor::Executor;
diff --git a/futures/src/subscription.rs b/futures/src/subscription.rs
index 8f78ce3a..759dd223 100644
--- a/futures/src/subscription.rs
+++ b/futures/src/subscription.rs
@@ -4,7 +4,6 @@ mod tracker;
pub use tracker::Tracker;
use crate::core::event::{self, Event};
-use crate::core::window;
use crate::core::Hasher;
use crate::futures::{Future, Stream};
use crate::{BoxStream, MaybeSend};
@@ -215,77 +214,6 @@ where
}
}
-/// Returns a [`Subscription`] to all the ignored runtime events.
-///
-/// This subscription will notify your application of any [`Event`] that was
-/// not captured by any widget.
-pub fn events() -> Subscription<Event> {
- events_with(|event, status| match status {
- event::Status::Ignored => Some(event),
- event::Status::Captured => None,
- })
-}
-
-/// Returns a [`Subscription`] that filters all the runtime events with the
-/// provided function, producing messages accordingly.
-///
-/// This subscription will call the provided function for every [`Event`]
-/// handled by the runtime. If the function:
-///
-/// - Returns `None`, the [`Event`] will be discarded.
-/// - Returns `Some` message, the `Message` will be produced.
-pub fn events_with<Message>(
- f: fn(Event, event::Status) -> Option<Message>,
-) -> Subscription<Message>
-where
- Message: 'static + MaybeSend,
-{
- #[derive(Hash)]
- struct EventsWith;
-
- Subscription::from_recipe(Runner {
- id: (EventsWith, f),
- spawn: move |events| {
- use futures::future;
- use futures::stream::StreamExt;
-
- events.filter_map(move |(event, status)| {
- future::ready(match event {
- Event::Window(window::Event::RedrawRequested(_)) => None,
- _ => f(event, status),
- })
- })
- },
- })
-}
-
-/// Returns a [`Subscription`] that produces a message for every runtime event,
-/// including the redraw request events.
-///
-/// **Warning:** This [`Subscription`], if unfiltered, may produce messages in
-/// an infinite loop.
-pub fn raw_events<Message>(
- f: fn(Event, event::Status) -> Option<Message>,
-) -> Subscription<Message>
-where
- Message: 'static + MaybeSend,
-{
- #[derive(Hash)]
- struct RawEvents;
-
- Subscription::from_recipe(Runner {
- id: (RawEvents, f),
- spawn: move |events| {
- use futures::future;
- use futures::stream::StreamExt;
-
- events.filter_map(move |(event, status)| {
- future::ready(f(event, status))
- })
- },
- })
-}
-
/// Returns a [`Subscription`] that will call the given function to create and
/// asynchronously run the given [`Stream`].
pub fn run<S, Message>(builder: fn() -> S) -> Subscription<Message>
@@ -338,6 +266,25 @@ where
)
}
+pub(crate) fn filter_map<I, F, Message>(id: I, f: F) -> Subscription<Message>
+where
+ I: Hash + 'static,
+ F: Fn(Event, event::Status) -> Option<Message> + MaybeSend + 'static,
+ Message: 'static + MaybeSend,
+{
+ Subscription::from_recipe(Runner {
+ id,
+ spawn: |events| {
+ use futures::future;
+ use futures::stream::StreamExt;
+
+ events.filter_map(move |(event, status)| {
+ future::ready(f(event, status))
+ })
+ },
+ })
+}
+
/// Creates a [`Subscription`] that publishes the events sent from a [`Future`]
/// to an [`mpsc::Sender`] with the given bounds.
///
diff --git a/graphics/Cargo.toml b/graphics/Cargo.toml
index ca7bf61a..23a19845 100644
--- a/graphics/Cargo.toml
+++ b/graphics/Cargo.toml
@@ -1,14 +1,18 @@
[package]
name = "iced_graphics"
-version = "0.9.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "A bunch of backend-agnostic types that can be leveraged to build a renderer for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_graphics"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+description = "A bunch of backend-agnostic types that can be leveraged to build a renderer for iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
[features]
geometry = ["lyon_path"]
@@ -17,33 +21,21 @@ image = ["dep:image", "kamadak-exif"]
web-colors = []
[dependencies]
-glam = "0.24"
-half = "2.2.1"
-log = "0.4"
-raw-window-handle = "0.5"
-thiserror = "1.0"
-bitflags = "1.2"
-
-[dependencies.bytemuck]
-version = "1.4"
-features = ["derive"]
+iced_core.workspace = true
-[dependencies.iced_core]
-version = "0.10"
-path = "../core"
+bitflags.workspace = true
+bytemuck.workspace = true
+glam.workspace = true
+half.workspace = true
+log.workspace = true
+raw-window-handle.workspace = true
+thiserror.workspace = true
-[dependencies.image]
-version = "0.24"
-optional = true
+lyon_path.workspace = true
+lyon_path.optional = true
-[dependencies.kamadak-exif]
-version = "0.5"
-optional = true
+image.workspace = true
+image.optional = true
-[dependencies.lyon_path]
-version = "1"
-optional = true
-
-[package.metadata.docs.rs]
-rustdoc-args = ["--cfg", "docsrs"]
-all-features = true
+kamadak-exif.workspace = true
+kamadak-exif.optional = true
diff --git a/renderer/Cargo.toml b/renderer/Cargo.toml
index 2c88cf31..56e17209 100644
--- a/renderer/Cargo.toml
+++ b/renderer/Cargo.toml
@@ -1,14 +1,14 @@
[package]
name = "iced_renderer"
-version = "0.1.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "The official renderer for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_renderer"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+description = "The official renderer for iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[features]
wgpu = ["iced_wgpu"]
@@ -20,19 +20,12 @@ web-colors = ["iced_wgpu?/web-colors"]
webgl = ["iced_wgpu?/webgl"]
[dependencies]
-raw-window-handle = "0.5"
-thiserror = "1"
-log = "0.4"
+iced_graphics.workspace = true
+iced_tiny_skia.workspace = true
-[dependencies.iced_graphics]
-version = "0.9"
-path = "../graphics"
+iced_wgpu.workspace = true
+iced_wgpu.optional = true
-[dependencies.iced_tiny_skia]
-version = "0.1"
-path = "../tiny_skia"
-
-[dependencies.iced_wgpu]
-version = "0.11"
-path = "../wgpu"
-optional = true
+log.workspace = true
+raw-window-handle.workspace = true
+thiserror.workspace = true
diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml
index 9fbe4be7..d19aedd3 100644
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -1,23 +1,21 @@
[package]
name = "iced_runtime"
-version = "0.1.1"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "A renderer-agnostic runtime for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
+description = "A renderer-agnostic runtime for iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[features]
debug = []
[dependencies]
-thiserror = "1"
+iced_core.workspace = true
+iced_futures.workspace = true
+iced_futures.features = ["thread-pool"]
-[dependencies.iced_core]
-version = "0.10"
-path = "../core"
-
-[dependencies.iced_futures]
-version = "0.7"
-path = "../futures"
-features = ["thread-pool"]
+thiserror.workspace = true
diff --git a/runtime/src/window.rs b/runtime/src/window.rs
index 5219fbfd..41816967 100644
--- a/runtime/src/window.rs
+++ b/runtime/src/window.rs
@@ -10,7 +10,8 @@ use crate::command::{self, Command};
use crate::core::time::Instant;
use crate::core::window::{Event, Icon, Level, Mode, UserAttention};
use crate::core::Size;
-use crate::futures::subscription::{self, Subscription};
+use crate::futures::event;
+use crate::futures::Subscription;
/// Subscribes to the frames of the window of the running application.
///
@@ -21,7 +22,7 @@ use crate::futures::subscription::{self, Subscription};
/// In any case, this [`Subscription`] is useful to smoothly draw application-driven
/// animations without missing any frames.
pub fn frames() -> Subscription<Instant> {
- subscription::raw_events(|event, _status| match event {
+ event::listen_raw(|event, _status| match event {
iced_core::Event::Window(Event::RedrawRequested(at)) => Some(at),
_ => None,
})
diff --git a/src/lib.rs b/src/lib.rs
index 36f48ba2..91c78423 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -20,9 +20,9 @@
//! Check out the [repository] and the [examples] for more details!
//!
//! [Cross-platform support]: https://github.com/iced-rs/iced/blob/master/docs/images/todos_desktop.jpg?raw=true
-//! [text inputs]: https://gfycat.com/alertcalmcrow-rust-gui
-//! [scrollables]: https://gfycat.com/perkybaggybaboon-rust-gui
-//! [Debug overlay with performance metrics]: https://gfycat.com/incredibledarlingbee
+//! [text inputs]: https://iced.rs/examples/text_input.mp4
+//! [scrollables]: https://iced.rs/examples/scrollable.mp4
+//! [Debug overlay with performance metrics]: https://iced.rs/examples/debug.mp4
//! [Modular ecosystem]: https://github.com/iced-rs/iced/blob/master/ECOSYSTEM.md
//! [renderer-agnostic native runtime]: https://github.com/iced-rs/iced/tree/0.10/runtime
//! [`wgpu`]: https://github.com/gfx-rs/wgpu-rs
@@ -187,7 +187,6 @@ pub mod advanced;
pub use style::theme;
pub use crate::core::alignment;
-pub use crate::core::event;
pub use crate::core::gradient;
pub use crate::core::{
color, Alignment, Background, BorderRadius, Color, ContentFit, Degrees,
@@ -223,9 +222,16 @@ pub mod font {
pub use crate::runtime::font::*;
}
+pub mod event {
+ //! Handle events of a user interface.
+ pub use crate::core::event::{Event, MacOS, PlatformSpecific, Status};
+ pub use iced_futures::event::{listen, listen_raw, listen_with};
+}
+
pub mod keyboard {
//! Listen and react to keyboard events.
pub use crate::core::keyboard::{Event, KeyCode, Modifiers};
+ pub use iced_futures::keyboard::{on_key_press, on_key_release};
}
pub mod mouse {
@@ -238,7 +244,7 @@ pub mod mouse {
pub mod subscription {
//! Listen to external events in your application.
pub use iced_futures::subscription::{
- channel, events, events_with, run, run_with_id, unfold, Subscription,
+ channel, run, run_with_id, unfold, Subscription,
};
}
diff --git a/src/window/icon.rs b/src/window/icon.rs
index 0fe010ca..0cb206b3 100644
--- a/src/window/icon.rs
+++ b/src/window/icon.rs
@@ -13,7 +13,7 @@ use std::path::Path;
/// This will return an error in case the file is missing at run-time. You may prefer [`Self::from_file_data`] instead.
#[cfg(feature = "image")]
pub fn from_file<P: AsRef<Path>>(icon_path: P) -> Result<Icon, Error> {
- let icon = image_rs::io::Reader::open(icon_path)?.decode()?.to_rgba8();
+ let icon = image::io::Reader::open(icon_path)?.decode()?.to_rgba8();
Ok(icon::from_rgba(icon.to_vec(), icon.width(), icon.height())?)
}
@@ -25,9 +25,10 @@ pub fn from_file<P: AsRef<Path>>(icon_path: P) -> Result<Icon, Error> {
#[cfg(feature = "image")]
pub fn from_file_data(
data: &[u8],
- explicit_format: Option<image_rs::ImageFormat>,
+ explicit_format: Option<image::ImageFormat>,
) -> Result<Icon, Error> {
- let mut icon = image_rs::io::Reader::new(std::io::Cursor::new(data));
+ let mut icon = image::io::Reader::new(std::io::Cursor::new(data));
+
let icon_with_format = match explicit_format {
Some(format) => {
icon.set_format(format);
@@ -59,5 +60,5 @@ pub enum Error {
/// The `image` crate reported an error.
#[cfg(feature = "image")]
#[error("Unable to create icon from a file: {0}")]
- ImageError(#[from] image_rs::error::ImageError),
+ ImageError(#[from] image::error::ImageError),
}
diff --git a/style/Cargo.toml b/style/Cargo.toml
index 689cf978..3f00e787 100644
--- a/style/Cargo.toml
+++ b/style/Cargo.toml
@@ -1,22 +1,18 @@
[package]
name = "iced_style"
-version = "0.9.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
description = "The default set of styles of Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_style"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
-[dependencies.iced_core]
-version = "0.10"
-path = "../core"
-features = ["palette"]
+[dependencies]
+iced_core.workspace = true
+iced_core.features = ["palette"]
-[dependencies.palette]
-version = "0.7"
-
-[dependencies.once_cell]
-version = "1.15"
+palette.workspace = true
+once_cell.workspace = true
diff --git a/tiny_skia/Cargo.toml b/tiny_skia/Cargo.toml
index 9aa63a4f..15a6928a 100644
--- a/tiny_skia/Cargo.toml
+++ b/tiny_skia/Cargo.toml
@@ -1,14 +1,14 @@
[package]
name = "iced_tiny_skia"
-version = "0.1.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "A software renderer for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_tiny_skia"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+description = "A software renderer for iced on top of tiny-skia"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[features]
image = ["iced_graphics/image"]
@@ -16,27 +16,21 @@ svg = ["resvg"]
geometry = ["iced_graphics/geometry"]
[dependencies]
-raw-window-handle = "0.5"
-softbuffer = "0.2"
-tiny-skia = "0.10"
-cosmic-text = "0.9"
-bytemuck = "1"
-rustc-hash = "1.1"
-kurbo = "0.9"
-log = "0.4"
+iced_graphics.workspace = true
-[dependencies.iced_graphics]
-version = "0.9"
-path = "../graphics"
+bytemuck.workspace = true
+cosmic-text.workspace = true
+kurbo.workspace = true
+log.workspace = true
+raw-window-handle.workspace = true
+rustc-hash.workspace = true
+softbuffer.workspace = true
+tiny-skia.workspace = true
+twox-hash.workspace = true
-[dependencies.twox-hash]
-version = "1.6"
-default-features = false
+resvg.workspace = true
+resvg.optional = true
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies.twox-hash]
-version = "1.6.1"
-features = ["std"]
-
-[dependencies.resvg]
-version = "0.35"
-optional = true
+[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
+twox-hash.workspace = true
+twox-hash.features = ["std"]
diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs
index 08fde4bf..306b400a 100644
--- a/tiny_skia/src/text.rs
+++ b/tiny_skia/src/text.rs
@@ -405,7 +405,10 @@ impl Cache {
}
if let hash_map::Entry::Vacant(entry) = self.entries.entry(hash) {
- let metrics = cosmic_text::Metrics::new(key.size, key.size * 1.2);
+ let metrics = cosmic_text::Metrics::new(
+ key.size,
+ key.line_height.max(f32::MIN_POSITIVE),
+ );
let mut buffer = cosmic_text::Buffer::new(font_system, metrics);
buffer.set_size(
diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml
index 49c62673..97594f1a 100644
--- a/wgpu/Cargo.toml
+++ b/wgpu/Cargo.toml
@@ -1,11 +1,18 @@
[package]
name = "iced_wgpu"
-version = "0.11.1"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "A wgpu renderer for Iced"
-license = "MIT AND OFL-1.1"
-repository = "https://github.com/iced-rs/iced"
+description = "A renderer for iced on top of wgpu"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
[features]
geometry = ["iced_graphics/geometry", "lyon"]
@@ -15,47 +22,30 @@ web-colors = ["iced_graphics/web-colors"]
webgl = ["wgpu/webgl"]
[dependencies]
-wgpu = "0.17"
-glyphon = { git = "https://github.com/grovesNL/glyphon.git", rev = "20f0f8fa80e0d0df4c63634ce9176fa489546ca9" }
-raw-window-handle = "0.5"
-guillotiere = "0.6"
-futures = "0.3"
-bitflags = "1.2"
-once_cell = "1.0"
-rustc-hash = "1.1"
-log = "0.4"
-
-[dependencies.twox-hash]
-version = "1.6"
-default-features = false
-
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies.twox-hash]
-version = "1.6.1"
-features = ["std"]
-
-[dependencies.bytemuck]
-version = "1.9"
-features = ["derive"]
-
-[dependencies.iced_graphics]
-version = "0.9"
-path = "../graphics"
-
-[dependencies.glam]
-version = "0.24"
-
-[dependencies.lyon]
-version = "1.0"
-optional = true
-
-[dependencies.resvg]
-version = "0.35"
-optional = true
-
-[dependencies.tracing]
-version = "0.1.6"
-optional = true
-
-[package.metadata.docs.rs]
-rustdoc-args = ["--cfg", "docsrs"]
-all-features = true
+iced_graphics.workspace = true
+
+bitflags.workspace = true
+bytemuck.workspace = true
+futures.workspace = true
+glam.workspace = true
+glyphon.workspace = true
+guillotiere.workspace = true
+log.workspace = true
+once_cell.workspace = true
+raw-window-handle.workspace = true
+rustc-hash.workspace = true
+twox-hash.workspace = true
+wgpu.workspace = true
+
+lyon.workspace = true
+lyon.optional = true
+
+resvg.workspace = true
+resvg.optional = true
+
+tracing.workspace = true
+tracing.optional = true
+
+[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
+twox-hash.workspace = true
+twox-hash.features = ["std"]
diff --git a/wgpu/src/shader/quad.wgsl b/wgpu/src/shader/quad.wgsl
index fb402158..023b5a6d 100644
--- a/wgpu/src/shader/quad.wgsl
+++ b/wgpu/src/shader/quad.wgsl
@@ -147,11 +147,11 @@ fn solid_fs_main(
struct GradientVertexInput {
@location(0) v_pos: vec2<f32>,
- @location(1) colors_1: vec4<u32>,
- @location(2) colors_2: vec4<u32>,
- @location(3) colors_3: vec4<u32>,
- @location(4) colors_4: vec4<u32>,
- @location(5) offsets: vec4<u32>,
+ @location(1) @interpolate(flat) colors_1: vec4<u32>,
+ @location(2) @interpolate(flat) colors_2: vec4<u32>,
+ @location(3) @interpolate(flat) colors_3: vec4<u32>,
+ @location(4) @interpolate(flat) colors_4: vec4<u32>,
+ @location(5) @interpolate(flat) offsets: vec4<u32>,
@location(6) direction: vec4<f32>,
@location(7) position_and_scale: vec4<f32>,
@location(8) border_color: vec4<f32>,
@@ -161,11 +161,11 @@ struct GradientVertexInput {
struct GradientVertexOutput {
@builtin(position) position: vec4<f32>,
- @location(1) colors_1: vec4<u32>,
- @location(2) colors_2: vec4<u32>,
- @location(3) colors_3: vec4<u32>,
- @location(4) colors_4: vec4<u32>,
- @location(5) offsets: vec4<u32>,
+ @location(1) @interpolate(flat) colors_1: vec4<u32>,
+ @location(2) @interpolate(flat) colors_2: vec4<u32>,
+ @location(3) @interpolate(flat) colors_3: vec4<u32>,
+ @location(4) @interpolate(flat) colors_4: vec4<u32>,
+ @location(5) @interpolate(flat) offsets: vec4<u32>,
@location(6) direction: vec4<f32>,
@location(7) position_and_scale: vec4<f32>,
@location(8) border_color: vec4<f32>,
diff --git a/wgpu/src/shader/triangle.wgsl b/wgpu/src/shader/triangle.wgsl
index 9f512d14..3a2b9845 100644
--- a/wgpu/src/shader/triangle.wgsl
+++ b/wgpu/src/shader/triangle.wgsl
@@ -38,22 +38,22 @@ fn solid_fs_main(input: SolidVertexOutput) -> @location(0) vec4<f32> {
struct GradientVertexInput {
@location(0) v_pos: vec2<f32>,
- @location(1) colors_1: vec4<u32>,
- @location(2) colors_2: vec4<u32>,
- @location(3) colors_3: vec4<u32>,
- @location(4) colors_4: vec4<u32>,
- @location(5) offsets: vec4<u32>,
+ @location(1) @interpolate(flat) colors_1: vec4<u32>,
+ @location(2) @interpolate(flat) colors_2: vec4<u32>,
+ @location(3) @interpolate(flat) colors_3: vec4<u32>,
+ @location(4) @interpolate(flat) colors_4: vec4<u32>,
+ @location(5) @interpolate(flat) offsets: vec4<u32>,
@location(6) direction: vec4<f32>,
}
struct GradientVertexOutput {
@builtin(position) position: vec4<f32>,
@location(0) raw_position: vec2<f32>,
- @location(1) colors_1: vec4<u32>,
- @location(2) colors_2: vec4<u32>,
- @location(3) colors_3: vec4<u32>,
- @location(4) colors_4: vec4<u32>,
- @location(5) offsets: vec4<u32>,
+ @location(1) @interpolate(flat) colors_1: vec4<u32>,
+ @location(2) @interpolate(flat) colors_2: vec4<u32>,
+ @location(3) @interpolate(flat) colors_3: vec4<u32>,
+ @location(4) @interpolate(flat) colors_4: vec4<u32>,
+ @location(5) @interpolate(flat) offsets: vec4<u32>,
@location(6) direction: vec4<f32>,
}
diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs
index fb13545d..9c42be0e 100644
--- a/wgpu/src/text.rs
+++ b/wgpu/src/text.rs
@@ -414,7 +414,10 @@ impl Cache {
}
if let hash_map::Entry::Vacant(entry) = self.entries.entry(hash) {
- let metrics = glyphon::Metrics::new(key.size, key.line_height);
+ let metrics = glyphon::Metrics::new(
+ key.size,
+ key.line_height.max(f32::MIN_POSITIVE),
+ );
let mut buffer = glyphon::Buffer::new(font_system, metrics);
buffer.set_size(
diff --git a/widget/Cargo.toml b/widget/Cargo.toml
index 128a7c38..6d62c181 100644
--- a/widget/Cargo.toml
+++ b/widget/Cargo.toml
@@ -1,14 +1,18 @@
[package]
name = "iced_widget"
-version = "0.1.3"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "The built-in widgets for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_widget"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+description = "The built-in widgets for iced"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
[features]
lazy = ["ouroboros"]
@@ -18,31 +22,16 @@ canvas = ["iced_renderer/geometry"]
qr_code = ["canvas", "qrcode"]
[dependencies]
-unicode-segmentation = "1.6"
-num-traits = "0.2"
-thiserror = "1"
-
-[dependencies.iced_runtime]
-version = "0.1"
-path = "../runtime"
+iced_renderer.workspace = true
+iced_runtime.workspace = true
+iced_style.workspace = true
-[dependencies.iced_renderer]
-version = "0.1"
-path = "../renderer"
+num-traits.workspace = true
+thiserror.workspace = true
+unicode-segmentation.workspace = true
-[dependencies.iced_style]
-version = "0.9"
-path = "../style"
+ouroboros.workspace = true
+ouroboros.optional = true
-[dependencies.ouroboros]
-version = "0.17"
-optional = true
-
-[dependencies.qrcode]
-version = "0.12"
-optional = true
-default-features = false
-
-[package.metadata.docs.rs]
-rustdoc-args = ["--cfg", "docsrs"]
-all-features = true
+qrcode.workspace = true
+qrcode.optional = true
diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs
index d8c98858..40833622 100644
--- a/widget/src/pane_grid.rs
+++ b/widget/src/pane_grid.rs
@@ -1,6 +1,6 @@
//! Let your users split regions of your application and organize layout dynamically.
//!
-//! [![Pane grid - Iced](https://thumbs.gfycat.com/MixedFlatJellyfish-small.gif)](https://gfycat.com/mixedflatjellyfish)
+//! ![Pane grid - Iced](https://iced.rs/examples/pane_grid.gif)
//!
//! # Example
//! The [`pane_grid` example] showcases how to use a [`PaneGrid`] with resizing,
@@ -49,7 +49,7 @@ use crate::core::{
/// A collection of panes distributed using either vertical or horizontal splits
/// to completely fill the space available.
///
-/// [![Pane grid - Iced](https://thumbs.gfycat.com/FrailFreshAiredaleterrier-small.gif)](https://gfycat.com/frailfreshairedaleterrier)
+/// ![Pane grid - Iced](https://iced.rs/examples/pane_grid.gif)
///
/// This distribution of space is common in tiling window managers (like
/// [`awesome`](https://awesomewm.org/), [`i3`](https://i3wm.org/), or even
diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs
index a83ed985..d0c77e6b 100644
--- a/widget/src/scrollable.rs
+++ b/widget/src/scrollable.rs
@@ -1146,6 +1146,16 @@ impl Viewport {
RelativeOffset { x, y }
}
+
+ /// Returns the bounds of the current [`Viewport`].
+ pub fn bounds(&self) -> Rectangle {
+ self.bounds
+ }
+
+ /// Returns the content bounds of the current [`Viewport`].
+ pub fn content_bounds(&self) -> Rectangle {
+ self.content_bounds
+ }
}
impl State {
diff --git a/winit/Cargo.toml b/winit/Cargo.toml
index 67216147..674a66d3 100644
--- a/winit/Cargo.toml
+++ b/winit/Cargo.toml
@@ -1,19 +1,17 @@
[package]
name = "iced_winit"
-version = "0.10.0"
-authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
-edition = "2021"
-description = "A winit runtime for Iced"
-license = "MIT"
-repository = "https://github.com/iced-rs/iced"
-documentation = "https://docs.rs/iced_winit"
-keywords = ["gui", "ui", "graphics", "interface", "widgets"]
-categories = ["gui"]
+description = "A runtime for iced on top of winit"
+version.workspace = true
+edition.workspace = true
+authors.workspace = true
+license.workspace = true
+repository.workspace = true
+homepage.workspace = true
+categories.workspace = true
+keywords.workspace = true
[features]
default = ["x11", "wayland", "wayland-dlopen", "wayland-csd-adwaita"]
-trace = ["tracing", "tracing-core", "tracing-subscriber"]
-chrome-trace = ["trace", "tracing-chrome"]
debug = ["iced_runtime/debug"]
system = ["sysinfo"]
application = []
@@ -23,54 +21,23 @@ wayland-dlopen = ["winit/wayland-dlopen"]
wayland-csd-adwaita = ["winit/wayland-csd-adwaita"]
[dependencies]
-window_clipboard = "0.3"
-log = "0.4"
-thiserror = "1.0"
-raw-window-handle = "0.5"
-
-[dependencies.winit]
-version = "0.28"
-git = "https://github.com/iced-rs/winit.git"
-rev = "c52db2045d0a2f1b8d9923870de1d4ab1994146e"
-default-features = false
-
-[dependencies.iced_runtime]
-version = "0.1"
-path = "../runtime"
-
-[dependencies.iced_graphics]
-version = "0.9"
-path = "../graphics"
-
-[dependencies.iced_style]
-version = "0.9"
-path = "../style"
-
-[dependencies.tracing]
-version = "0.1.37"
-optional = true
-features = ["std"]
-
-[dependencies.tracing-core]
-version = "0.1.30"
-optional = true
-
-[dependencies.tracing-subscriber]
-version = "0.3.16"
-optional = true
-features = ["registry"]
-
-[dependencies.tracing-chrome]
-version = "0.7.0"
-optional = true
-
-[target.'cfg(target_os = "windows")'.dependencies.winapi]
-version = "0.3.6"
-
-[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
-version = "0.3"
-features = ["Document", "Window"]
-
-[dependencies.sysinfo]
-version = "0.28"
-optional = true
+iced_graphics.workspace = true
+iced_runtime.workspace = true
+iced_style.workspace = true
+
+log.workspace = true
+raw-window-handle.workspace = true
+thiserror.workspace = true
+tracing.workspace = true
+window_clipboard.workspace = true
+winit.workspace = true
+
+sysinfo.workspace = true
+sysinfo.optional = true
+
+[target.'cfg(target_os = "windows")'.dependencies]
+winapi.workspace = true
+
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+web-sys.workspace = true
+web-sys.features = ["Document", "Window"]