From dccfc1aea6e30c4701dedad296a40f5e8ca684de Mon Sep 17 00:00:00 2001 From: pszsh Date: Fri, 6 Mar 2026 07:01:40 -0800 Subject: [PATCH] init commit --- .gitignore | 1 + .idea/.gitignore | 8 + .idea/audio-oxide.iml | 11 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + Cargo.lock | 5681 ++++++++++ Cargo.toml | 31 + assets/icons/add.svg | 4 + assets/icons/automation.svg | 5 + assets/icons/close.svg | 4 + assets/icons/copy.svg | 4 + assets/icons/count-in.svg | 8 + assets/icons/cut.svg | 7 + assets/icons/cycle.svg | 6 + assets/icons/eq.svg | 3 + assets/icons/fast-forward.svg | 4 + assets/icons/folder.svg | 3 + assets/icons/freeze.svg | 7 + assets/icons/input-monitor.svg | 5 + assets/icons/insert.svg | 7 + assets/icons/io.svg | 5 + assets/icons/lock.svg | 4 + assets/icons/metronome.svg | 5 + assets/icons/mute.svg | 5 + assets/icons/pan.svg | 6 + assets/icons/paste.svg | 4 + assets/icons/pause.svg | 4 + assets/icons/play.svg | 3 + assets/icons/record-arm.svg | 4 + assets/icons/record.svg | 3 + assets/icons/redo.svg | 4 + assets/icons/remove.svg | 3 + assets/icons/rewind.svg | 4 + assets/icons/rtz.svg | 4 + assets/icons/save.svg | 5 + assets/icons/search.svg | 4 + assets/icons/send.svg | 4 + assets/icons/settings.svg | 4 + assets/icons/solo.svg | 5 + assets/icons/stop.svg | 3 + assets/icons/tool-eraser.svg | 4 + assets/icons/tool-glue.svg | 7 + assets/icons/tool-pencil.svg | 3 + assets/icons/tool-pointer.svg | 4 + assets/icons/tool-scissors.svg | 7 + assets/icons/tool-zoom.svg | 4 + assets/icons/track-audio.svg | 3 + assets/icons/track-aux.svg | 5 + assets/icons/track-bus.svg | 7 + assets/icons/track-midi.svg | 7 + assets/icons/undo.svg | 4 + assets/icons/view-editor.svg | 7 + assets/icons/view-inspector.svg | 5 + assets/icons/view-library.svg | 4 + assets/icons/view-mixer.svg | 8 + assets/icons/view-notepad.svg | 6 + assets/icons/view-toolbar.svg | 3 + error.log | 122 + iced_pocket_guide.txt | 9878 +++++++++++++++++ imagdagdos.py | 139 + json-md.py | 123 + src/behaviors/mod.rs | 49 + src/config.rs | 130 + src/editor.rs | 702 ++ src/engine/bus.rs | 109 + src/engine/cycle.rs | 252 + src/engine/graph.rs | 151 + src/engine/host.rs | 61 + src/engine/io.rs | 176 + src/engine/mod.rs | 97 + src/engine/param.rs | 62 + src/engine/schedule.rs | 190 + src/entry.rs | 704 ++ src/first_run.rs | 41 + src/gui/editor/control_bar.rs | 165 + src/gui/editor/editor_pane.rs | 45 + src/gui/editor/inspector.rs | 129 + src/gui/editor/menu_bar.rs | 395 + src/gui/editor/mixer.rs | 84 + src/gui/editor/mod.rs | 10 + src/gui/editor/new_track_wizard.rs | 72 + src/gui/editor/timeline.rs | 314 + src/gui/editor/toolbar.rs | 42 + src/gui/editor/track_header.rs | 130 + src/gui/editor/visualizer/mod.rs | 6 + src/gui/editor/visualizer/shaders/spiral.wgsl | 28 + src/gui/editor/visualizer/spiral.rs | 420 + src/gui/first_run_wizard.rs | 20 + src/gui/icon_button.rs | 436 + src/gui/icons.rs | 244 + src/gui/mod.rs | 8 + src/gui/new_project.rs | 119 + src/gui/project_viewer.rs | 154 + src/gui/settings.rs | 348 + src/gui/time_utility.rs | 365 + src/main.rs | 18 + src/modules/complex_stream.rs | 133 + src/modules/mod.rs | 64 + src/modules/registry.rs | 36 + src/modules/spiral_visualizer.rs | 86 + src/region.rs | 22 + src/timing.rs | 47 + src/track.rs | 111 + src/triggers.rs | 107 + 104 files changed, 23128 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/audio-oxide.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 assets/icons/add.svg create mode 100644 assets/icons/automation.svg create mode 100644 assets/icons/close.svg create mode 100644 assets/icons/copy.svg create mode 100644 assets/icons/count-in.svg create mode 100644 assets/icons/cut.svg create mode 100644 assets/icons/cycle.svg create mode 100644 assets/icons/eq.svg create mode 100644 assets/icons/fast-forward.svg create mode 100644 assets/icons/folder.svg create mode 100644 assets/icons/freeze.svg create mode 100644 assets/icons/input-monitor.svg create mode 100644 assets/icons/insert.svg create mode 100644 assets/icons/io.svg create mode 100644 assets/icons/lock.svg create mode 100644 assets/icons/metronome.svg create mode 100644 assets/icons/mute.svg create mode 100644 assets/icons/pan.svg create mode 100644 assets/icons/paste.svg create mode 100644 assets/icons/pause.svg create mode 100644 assets/icons/play.svg create mode 100644 assets/icons/record-arm.svg create mode 100644 assets/icons/record.svg create mode 100644 assets/icons/redo.svg create mode 100644 assets/icons/remove.svg create mode 100644 assets/icons/rewind.svg create mode 100644 assets/icons/rtz.svg create mode 100644 assets/icons/save.svg create mode 100644 assets/icons/search.svg create mode 100644 assets/icons/send.svg create mode 100644 assets/icons/settings.svg create mode 100644 assets/icons/solo.svg create mode 100644 assets/icons/stop.svg create mode 100644 assets/icons/tool-eraser.svg create mode 100644 assets/icons/tool-glue.svg create mode 100644 assets/icons/tool-pencil.svg create mode 100644 assets/icons/tool-pointer.svg create mode 100644 assets/icons/tool-scissors.svg create mode 100644 assets/icons/tool-zoom.svg create mode 100644 assets/icons/track-audio.svg create mode 100644 assets/icons/track-aux.svg create mode 100644 assets/icons/track-bus.svg create mode 100644 assets/icons/track-midi.svg create mode 100644 assets/icons/undo.svg create mode 100644 assets/icons/view-editor.svg create mode 100644 assets/icons/view-inspector.svg create mode 100644 assets/icons/view-library.svg create mode 100644 assets/icons/view-mixer.svg create mode 100644 assets/icons/view-notepad.svg create mode 100644 assets/icons/view-toolbar.svg create mode 100644 error.log create mode 100644 iced_pocket_guide.txt create mode 100644 imagdagdos.py create mode 100644 json-md.py create mode 100644 src/behaviors/mod.rs create mode 100644 src/config.rs create mode 100644 src/editor.rs create mode 100644 src/engine/bus.rs create mode 100644 src/engine/cycle.rs create mode 100644 src/engine/graph.rs create mode 100644 src/engine/host.rs create mode 100644 src/engine/io.rs create mode 100644 src/engine/mod.rs create mode 100644 src/engine/param.rs create mode 100644 src/engine/schedule.rs create mode 100644 src/entry.rs create mode 100644 src/first_run.rs create mode 100644 src/gui/editor/control_bar.rs create mode 100644 src/gui/editor/editor_pane.rs create mode 100644 src/gui/editor/inspector.rs create mode 100644 src/gui/editor/menu_bar.rs create mode 100644 src/gui/editor/mixer.rs create mode 100644 src/gui/editor/mod.rs create mode 100644 src/gui/editor/new_track_wizard.rs create mode 100644 src/gui/editor/timeline.rs create mode 100644 src/gui/editor/toolbar.rs create mode 100644 src/gui/editor/track_header.rs create mode 100644 src/gui/editor/visualizer/mod.rs create mode 100644 src/gui/editor/visualizer/shaders/spiral.wgsl create mode 100644 src/gui/editor/visualizer/spiral.rs create mode 100644 src/gui/first_run_wizard.rs create mode 100644 src/gui/icon_button.rs create mode 100644 src/gui/icons.rs create mode 100644 src/gui/mod.rs create mode 100644 src/gui/new_project.rs create mode 100644 src/gui/project_viewer.rs create mode 100644 src/gui/settings.rs create mode 100644 src/gui/time_utility.rs create mode 100644 src/main.rs create mode 100644 src/modules/complex_stream.rs create mode 100644 src/modules/mod.rs create mode 100644 src/modules/registry.rs create mode 100644 src/modules/spiral_visualizer.rs create mode 100644 src/region.rs create mode 100644 src/timing.rs create mode 100644 src/track.rs create mode 100644 src/triggers.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/audio-oxide.iml b/.idea/audio-oxide.iml new file mode 100644 index 0000000..cf84ae4 --- /dev/null +++ b/.idea/audio-oxide.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..da90fbc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..8d58a27 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5681 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ab_glyph" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alsa" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" +dependencies = [ + "alsa-sys", + "bitflags 2.9.4", + "cfg-if", + "libc", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-activity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +dependencies = [ + "android-properties", + "bitflags 2.9.4", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys 0.6.0+11769913", + "num_enum", + "thiserror 1.0.69", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.1.2", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix 1.1.2", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-signal" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.1.2", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "audio-oxide" +version = "0.1.0" +dependencies = [ + "chrono", + "confy", + "cpal", + "crossbeam-channel", + "dirs 6.0.0", + "iced", + "libloading 0.8.9", + "oxforge", + "ringbuf", + "rustfft", + "serde", + "tokio", + "toml 0.9.7", + "uuid", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "bzip2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +dependencies = [ + "libbz2-rs-sys", +] + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.9.4", + "log", + "polling", + "rustix 0.38.44", + "slab", + "thiserror 1.0.69", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop", + "rustix 0.38.44", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.2.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d05d92f4b1fd76aad469d46cdd858ca761576082cd37df81416691e50199fb" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clap" +version = "4.5.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "clap_lex" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" + +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + +[[package]] +name = "clipboard_macos" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f" +dependencies = [ + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "clipboard_wayland" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003f886bc4e2987729d10c1db3424e7f80809f3fc22dbc16c685738887cb37b8" +dependencies = [ + "smithay-clipboard", +] + +[[package]] +name = "clipboard_x11" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c" +dependencies = [ + "thiserror 1.0.69", + "x11rb", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width 0.1.14", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "confy" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29222b549d4e3ded127989d523da9e928918d0d0d7f7c1690b439d0d538bae9" +dependencies = [ + "directories", + "serde", + "thiserror 2.0.17", + "toml 0.8.23", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.9.4", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.9.4", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aae284fbaf7d27aa0e292f7677dfbe26503b0d555026f702940805a630eac17" +dependencies = [ + "bitflags 1.3.2", + "libc", + "objc2-audio-toolbox", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", +] + +[[package]] +name = "cosmic-text" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" +dependencies = [ + "bitflags 2.9.4", + "fontdb 0.16.2", + "log", + "rangemap", + "rayon", + "rustc-hash 1.1.0", + "rustybuzz", + "self_cell", + "swash", + "sys-locale", + "ttf-parser 0.21.1", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", +] + +[[package]] +name = "cpal" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd307f43cc2a697e2d1f8bc7a1d824b5269e052209e28883e5bc04d095aaa3f" +dependencies = [ + "alsa", + "coreaudio-rs", + "dasp_sample", + "jni", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "objc2-audio-toolbox", + "objc2-core-audio", + "objc2-core-audio-types", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.54.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctor-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" + +[[package]] +name = "cursor-icon" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" + +[[package]] +name = "d3d12" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" +dependencies = [ + "bitflags 2.9.4", + "libloading 0.8.9", + "winapi", +] + +[[package]] +name = "dark-light" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a76fa97167fa740dcdbfe18e8895601e1bc36525f09b044e00916e717c03a3c" +dependencies = [ + "dconf_rs", + "detect-desktop-environment", + "dirs 4.0.0", + "objc", + "rust-ini", + "web-sys", + "winreg", + "zbus", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + +[[package]] +name = "dconf_rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" + +[[package]] +name = "deflate64" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2" + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "detect-desktop-environment" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users 0.4.6", + "winapi", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.9", +] + +[[package]] +name = "dlv-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "drm" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" +dependencies = [ + "drm-sys", + "rustix 0.38.44", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "error-code" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" + +[[package]] +name = "etagere" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "libz-rs-sys", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "float_next_after" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" + +[[package]] +name = "font-types" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontconfig-parser" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.20.0", +] + +[[package]] +name = "fontdb" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.21.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" +dependencies = [ + "rustix 1.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width 0.2.2", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "gif" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.9.4", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "gpu-allocator" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "winapi", + "windows 0.52.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.9.4", + "gpu-descriptor-types", + "hashbrown 0.14.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.12", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.9.4", + "com", + "libc", + "libloading 0.8.9", + "thiserror 1.0.69", + "widestring", + "winapi", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "iced" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88acfabc84ec077eaf9ede3457ffa3a104626d79022a9bf7f296093b1d60c73f" +dependencies = [ + "iced_core", + "iced_futures", + "iced_renderer", + "iced_widget", + "iced_winit", + "thiserror 1.0.69", +] + +[[package]] +name = "iced_core" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0013a238275494641bf8f1732a23a808196540dc67b22ff97099c044ae4c8a1c" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "dark-light", + "glam", + "log", + "num-traits", + "once_cell", + "palette", + "rustc-hash 2.1.1", + "smol_str", + "thiserror 1.0.69", + "web-time", +] + +[[package]] +name = "iced_futures" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c04a6745ba2e80f32cf01e034fd00d853aa4f4cd8b91888099cb7aaee0d5d7c" +dependencies = [ + "futures", + "iced_core", + "log", + "rustc-hash 2.1.1", + "tokio", + "wasm-bindgen-futures", + "wasm-timer", +] + +[[package]] +name = "iced_glyphon" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41c3bb56f1820ca252bc1d0994ece33d233a55657c0c263ea7cb16895adbde82" +dependencies = [ + "cosmic-text", + "etagere", + "lru", + "rustc-hash 2.1.1", + "wgpu", +] + +[[package]] +name = "iced_graphics" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba25a18cfa6d5cc160aca7e1b34f73ccdff21680fa8702168c09739767b6c66f" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "cosmic-text", + "half", + "iced_core", + "iced_futures", + "log", + "lyon_path", + "once_cell", + "raw-window-handle", + "rustc-hash 2.1.1", + "thiserror 1.0.69", + "unicode-segmentation", +] + +[[package]] +name = "iced_renderer" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73558208059f9e622df2bf434e044ee2f838ce75201a023cf0ca3e1244f46c2a" +dependencies = [ + "iced_graphics", + "iced_tiny_skia", + "iced_wgpu", + "log", + "thiserror 1.0.69", +] + +[[package]] +name = "iced_runtime" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348b5b2c61c934d88ca3b0ed1ed913291e923d086a66fa288ce9669da9ef62b5" +dependencies = [ + "bytes", + "iced_core", + "iced_futures", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "iced_tiny_skia" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c625d368284fcc43b0b36b176f76eff1abebe7959dd58bd8ce6897d641962a50" +dependencies = [ + "bytemuck", + "cosmic-text", + "iced_graphics", + "kurbo 0.10.4", + "log", + "resvg", + "rustc-hash 2.1.1", + "softbuffer", + "tiny-skia", +] + +[[package]] +name = "iced_wgpu" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15708887133671d2bcc6c1d01d1f176f43a64d6cdc3b2bf893396c3ee498295f" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "futures", + "glam", + "guillotiere", + "iced_glyphon", + "iced_graphics", + "log", + "lyon", + "once_cell", + "resvg", + "rustc-hash 2.1.1", + "thiserror 1.0.69", + "wgpu", +] + +[[package]] +name = "iced_widget" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81429e1b950b0e4bca65be4c4278fea6678ea782030a411778f26fa9f8983e1d" +dependencies = [ + "iced_renderer", + "iced_runtime", + "num-traits", + "once_cell", + "pulldown-cmark", + "rustc-hash 2.1.1", + "thiserror 1.0.69", + "unicode-segmentation", + "url", +] + +[[package]] +name = "iced_winit" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f44cd4e1c594b6334f409282937bf972ba14d31fedf03c23aa595d982a2fda28" +dependencies = [ + "iced_futures", + "iced_graphics", + "iced_runtime", + "log", + "rustc-hash 2.1.1", + "sysinfo", + "thiserror 1.0.69", + "tracing", + "wasm-bindgen-futures", + "web-sys", + "winapi", + "window_clipboard", + "winit", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.9", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kurbo" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440" +dependencies = [ + "arrayvec", + "smallvec", +] + +[[package]] +name = "kurbo" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] + +[[package]] +name = "libbz2-rs-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" + +[[package]] +name = "libc" +version = "0.2.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.9.4", + "libc", + "redox_syscall 0.5.18", +] + +[[package]] +name = "libz-rs-sys" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" +dependencies = [ + "zlib-rs", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" + +[[package]] +name = "lyon" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbcb7d54d54c8937364c9d41902d066656817dce1e03a44e5533afebd1ef4352" +dependencies = [ + "lyon_algorithms", + "lyon_tessellation", +] + +[[package]] +name = "lyon_algorithms" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" +dependencies = [ + "lyon_path", + "num-traits", +] + +[[package]] +name = "lyon_geom" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e16770d760c7848b0c1c2d209101e408207a65168109509f8483837a36cf2e7" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] + +[[package]] +name = "lyon_path" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" +dependencies = [ + "lyon_geom", + "num-traits", +] + +[[package]] +name = "lyon_tessellation" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3f586142e1280335b1bc89539f7c97dd80f08fc43e9ab1b74ef0a42b04aa353" +dependencies = [ + "float_next_after", + "lyon_path", + "num-traits", +] + +[[package]] +name = "lzma-rust2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +dependencies = [ + "crc", + "sha2", +] + +[[package]] +name = "mach2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memmap2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types 0.1.3", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "naga" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" +dependencies = [ + "bit-set", + "bitflags 2.9.4", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "rustc-hash 1.1.0", + "spirv", + "termcolor", + "thiserror 1.0.69", + "unicode-xid", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.9.4", + "jni-sys", + "log", + "ndk-sys 0.6.0+11769913", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", + "memoffset", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.9.4", + "block2", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation 0.2.2", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-audio-toolbox" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6948501a91121d6399b79abaa33a8aa4ea7857fe019f341b8c23ad6e81b79b08" +dependencies = [ + "bitflags 2.9.4", + "libc", + "objc2 0.6.3", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-audio" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" +dependencies = [ + "dispatch2", + "objc2 0.6.3", + "objc2-core-audio-types", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-core-audio-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.3", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2 0.5.2", + "objc2-contacts", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.9.4", + "block2", + "dispatch", + "libc", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "objc2 0.6.3", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation 0.2.2", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.9.4", + "block2", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +dependencies = [ + "libredox", +] + +[[package]] +name = "ordered-multimap" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +dependencies = [ + "dlv-list", + "hashbrown 0.12.3", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" +dependencies = [ + "ttf-parser 0.25.1", +] + +[[package]] +name = "oxforge" +version = "0.1.0" +dependencies = [ + "clap", + "serde", + "toml 0.9.7", + "uuid", + "zip", +] + +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "palette_derive", + "phf", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.12", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppmd-rust" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "primal-check" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" +dependencies = [ + "num-integer", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.6", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" + +[[package]] +name = "pulldown-cmark" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "679341d22c78c6c649893cbd6c3278dcbe9fc4faa62fea3a9296ae2b50c14625" +dependencies = [ + "bitflags 2.9.4", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "range-alloc" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" + +[[package]] +name = "rangemap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "read-fonts" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f" +dependencies = [ + "bytemuck", + "font-types", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "resvg" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" +dependencies = [ + "gif", + "jpeg-decoder", + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ringbuf" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe47b720588c8702e34b5979cb3271a8b1842c7cb6f57408efa70c779363488c" +dependencies = [ + "crossbeam-utils", + "portable-atomic", + "portable-atomic-util", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "rust-ini" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustfft" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89" +dependencies = [ + "num-complex", + "num-integer", + "num-traits", + "primal-check", + "strength_reduce", + "transpose", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "rustybuzz" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "libm", + "smallvec", + "ttf-parser 0.21.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "self_cell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +dependencies = [ + "serde_core", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "skrifa" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" +dependencies = [ + "bytemuck", + "read-fonts", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.9.4", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.44", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases 0.2.1", + "core-graphics 0.24.0", + "drm", + "fastrand", + "foreign-types", + "js-sys", + "log", + "memmap2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall 0.5.18", + "rustix 0.38.44", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.59.0", + "x11rb", +] + +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "svg_fmt" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" + +[[package]] +name = "svgtypes" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +dependencies = [ + "kurbo 0.11.3", + "siphasher", +] + +[[package]] +name = "swash" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" +dependencies = [ + "skrifa", + "yazi", + "zeno", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "sysinfo" +version = "0.30.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows 0.52.0", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +dependencies = [ + "as-raw-xcb-connection", + "ctor-lite", + "libloading 0.8.9", + "pkg-config", + "tracing", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.47.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +dependencies = [ + "backtrace", + "io-uring", + "libc", + "mio", + "pin-project-lite", + "slab", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned 1.0.2", + "toml_datetime 0.7.2", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" +dependencies = [ + "indexmap", + "toml_datetime 0.7.2", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "toml_writer" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "transpose" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" +dependencies = [ + "num-integer", + "strength_reduce", +] + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" + +[[package]] +name = "unicode-ccc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-script" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "usvg" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84ea542ae85c715f07b082438a4231c3760539d902e11d093847a0b22963032" +dependencies = [ + "base64", + "data-url", + "flate2", + "fontdb 0.18.0", + "imagesize", + "kurbo 0.11.3", + "log", + "pico-args", + "roxmltree", + "rustybuzz", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wayland-backend" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +dependencies = [ + "cc", + "downcast-rs", + "rustix 1.1.2", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +dependencies = [ + "bitflags 2.9.4", + "rustix 1.1.2", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.9.4", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" +dependencies = [ + "rustix 1.1.2", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" + +[[package]] +name = "wgpu" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" +dependencies = [ + "arrayvec", + "cfg-if", + "cfg_aliases 0.1.1", + "js-sys", + "log", + "naga", + "parking_lot 0.12.5", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.9.4", + "cfg_aliases 0.1.1", + "codespan-reporting", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot 0.12.5", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 1.0.69", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.4", + "block", + "cfg_aliases 0.1.1", + "core-graphics-types 0.1.3", + "d3d12", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.9", + "log", + "metal", + "naga", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "parking_lot 0.12.5", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" +dependencies = [ + "bitflags 2.9.4", + "js-sys", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window_clipboard" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d" +dependencies = [ + "clipboard-win", + "clipboard_macos", + "clipboard_wayland", + "clipboard_x11", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +dependencies = [ + "windows-core 0.54.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.4.1", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winit" +version = "0.30.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" +dependencies = [ + "ahash 0.8.12", + "android-activity", + "atomic-waker", + "bitflags 2.9.4", + "block2", + "bytemuck", + "calloop", + "cfg_aliases 0.2.1", + "concurrent-queue", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "memmap2", + "ndk", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation 0.2.2", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix 0.38.44", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.9", + "once_cell", + "rustix 1.1.2", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xcursor" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" + +[[package]] +name = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.9.4", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xml-rs" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "yazi" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zeno" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "zip" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.3", + "hmac", + "indexmap", + "lzma-rust2", + "memchr", + "pbkdf2", + "ppmd-rust", + "sha1", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zlib-rs" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" + +[[package]] +name = "zopfli" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..05b0712 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "audio-oxide" +version = "0.1.0" +edition = "2024" + +[[bin]] +name = "audio-oxide" +path = "src/main.rs" + +[dependencies] +# --- GUI Framework --- +iced = { version = "0.13.1", features = ["tokio", "debug", "canvas", "advanced", "multi-window", "system", "svg", "tiny-skia", "web-colors", "markdown"] } + +# --- Core Audio & Hardware --- +cpal = "0.16.0" +ringbuf = "0.4.8" +crossbeam-channel = "0.5.12" + +# --- Module System --- +oxforge = { path = "../oxforge" } +libloading = "0.8" +rustfft = "6" + +# --- Configuration & Project Management --- +confy = "1.0.0" +serde = { version = "1.0", features = ["derive"] } +toml = "0.9.7" +dirs = "6.0.0" +uuid = { version = "1.18.1", features = ["v4", "serde"] } +chrono = { version = "0.4.42", features = ["serde"] } +tokio = "1.47.1" diff --git a/assets/icons/add.svg b/assets/icons/add.svg new file mode 100644 index 0000000..04421c1 --- /dev/null +++ b/assets/icons/add.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/automation.svg b/assets/icons/automation.svg new file mode 100644 index 0000000..0ab55a0 --- /dev/null +++ b/assets/icons/automation.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/close.svg b/assets/icons/close.svg new file mode 100644 index 0000000..bec5a18 --- /dev/null +++ b/assets/icons/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/copy.svg b/assets/icons/copy.svg new file mode 100644 index 0000000..ad20fed --- /dev/null +++ b/assets/icons/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/count-in.svg b/assets/icons/count-in.svg new file mode 100644 index 0000000..79f41eb --- /dev/null +++ b/assets/icons/count-in.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/icons/cut.svg b/assets/icons/cut.svg new file mode 100644 index 0000000..1112222 --- /dev/null +++ b/assets/icons/cut.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/cycle.svg b/assets/icons/cycle.svg new file mode 100644 index 0000000..ad489d9 --- /dev/null +++ b/assets/icons/cycle.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/eq.svg b/assets/icons/eq.svg new file mode 100644 index 0000000..4a9f74a --- /dev/null +++ b/assets/icons/eq.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/fast-forward.svg b/assets/icons/fast-forward.svg new file mode 100644 index 0000000..9aade41 --- /dev/null +++ b/assets/icons/fast-forward.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/folder.svg b/assets/icons/folder.svg new file mode 100644 index 0000000..49ef941 --- /dev/null +++ b/assets/icons/folder.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/freeze.svg b/assets/icons/freeze.svg new file mode 100644 index 0000000..e2064b4 --- /dev/null +++ b/assets/icons/freeze.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/input-monitor.svg b/assets/icons/input-monitor.svg new file mode 100644 index 0000000..f6f5f7b --- /dev/null +++ b/assets/icons/input-monitor.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/insert.svg b/assets/icons/insert.svg new file mode 100644 index 0000000..a9d1eaf --- /dev/null +++ b/assets/icons/insert.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/io.svg b/assets/icons/io.svg new file mode 100644 index 0000000..85a7701 --- /dev/null +++ b/assets/icons/io.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/lock.svg b/assets/icons/lock.svg new file mode 100644 index 0000000..1215e63 --- /dev/null +++ b/assets/icons/lock.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/metronome.svg b/assets/icons/metronome.svg new file mode 100644 index 0000000..6a3d2a2 --- /dev/null +++ b/assets/icons/metronome.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mute.svg b/assets/icons/mute.svg new file mode 100644 index 0000000..8e9c58c --- /dev/null +++ b/assets/icons/mute.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/pan.svg b/assets/icons/pan.svg new file mode 100644 index 0000000..1eb7d6f --- /dev/null +++ b/assets/icons/pan.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/paste.svg b/assets/icons/paste.svg new file mode 100644 index 0000000..b2b3c57 --- /dev/null +++ b/assets/icons/paste.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/pause.svg b/assets/icons/pause.svg new file mode 100644 index 0000000..0095d8f --- /dev/null +++ b/assets/icons/pause.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/play.svg b/assets/icons/play.svg new file mode 100644 index 0000000..c30fb02 --- /dev/null +++ b/assets/icons/play.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/record-arm.svg b/assets/icons/record-arm.svg new file mode 100644 index 0000000..3152108 --- /dev/null +++ b/assets/icons/record-arm.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/record.svg b/assets/icons/record.svg new file mode 100644 index 0000000..c67bf05 --- /dev/null +++ b/assets/icons/record.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/redo.svg b/assets/icons/redo.svg new file mode 100644 index 0000000..37315fb --- /dev/null +++ b/assets/icons/redo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/remove.svg b/assets/icons/remove.svg new file mode 100644 index 0000000..aafb382 --- /dev/null +++ b/assets/icons/remove.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/rewind.svg b/assets/icons/rewind.svg new file mode 100644 index 0000000..e940897 --- /dev/null +++ b/assets/icons/rewind.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/rtz.svg b/assets/icons/rtz.svg new file mode 100644 index 0000000..f348f8e --- /dev/null +++ b/assets/icons/rtz.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/save.svg b/assets/icons/save.svg new file mode 100644 index 0000000..73e5407 --- /dev/null +++ b/assets/icons/save.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/search.svg b/assets/icons/search.svg new file mode 100644 index 0000000..895e4ae --- /dev/null +++ b/assets/icons/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/send.svg b/assets/icons/send.svg new file mode 100644 index 0000000..4598aa3 --- /dev/null +++ b/assets/icons/send.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/settings.svg b/assets/icons/settings.svg new file mode 100644 index 0000000..ba6331a --- /dev/null +++ b/assets/icons/settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/solo.svg b/assets/icons/solo.svg new file mode 100644 index 0000000..4ca1b27 --- /dev/null +++ b/assets/icons/solo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/stop.svg b/assets/icons/stop.svg new file mode 100644 index 0000000..4310a07 --- /dev/null +++ b/assets/icons/stop.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/tool-eraser.svg b/assets/icons/tool-eraser.svg new file mode 100644 index 0000000..b7546e4 --- /dev/null +++ b/assets/icons/tool-eraser.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/tool-glue.svg b/assets/icons/tool-glue.svg new file mode 100644 index 0000000..a302a63 --- /dev/null +++ b/assets/icons/tool-glue.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/tool-pencil.svg b/assets/icons/tool-pencil.svg new file mode 100644 index 0000000..30bea73 --- /dev/null +++ b/assets/icons/tool-pencil.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/tool-pointer.svg b/assets/icons/tool-pointer.svg new file mode 100644 index 0000000..3908f53 --- /dev/null +++ b/assets/icons/tool-pointer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/tool-scissors.svg b/assets/icons/tool-scissors.svg new file mode 100644 index 0000000..1112222 --- /dev/null +++ b/assets/icons/tool-scissors.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/tool-zoom.svg b/assets/icons/tool-zoom.svg new file mode 100644 index 0000000..895e4ae --- /dev/null +++ b/assets/icons/tool-zoom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/track-audio.svg b/assets/icons/track-audio.svg new file mode 100644 index 0000000..c67e43b --- /dev/null +++ b/assets/icons/track-audio.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/track-aux.svg b/assets/icons/track-aux.svg new file mode 100644 index 0000000..e392298 --- /dev/null +++ b/assets/icons/track-aux.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/track-bus.svg b/assets/icons/track-bus.svg new file mode 100644 index 0000000..31f4b10 --- /dev/null +++ b/assets/icons/track-bus.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/track-midi.svg b/assets/icons/track-midi.svg new file mode 100644 index 0000000..387858e --- /dev/null +++ b/assets/icons/track-midi.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/undo.svg b/assets/icons/undo.svg new file mode 100644 index 0000000..cfe1aa9 --- /dev/null +++ b/assets/icons/undo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/view-editor.svg b/assets/icons/view-editor.svg new file mode 100644 index 0000000..6243e2d --- /dev/null +++ b/assets/icons/view-editor.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/view-inspector.svg b/assets/icons/view-inspector.svg new file mode 100644 index 0000000..ad4694e --- /dev/null +++ b/assets/icons/view-inspector.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/view-library.svg b/assets/icons/view-library.svg new file mode 100644 index 0000000..12a97d5 --- /dev/null +++ b/assets/icons/view-library.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/view-mixer.svg b/assets/icons/view-mixer.svg new file mode 100644 index 0000000..39edbcc --- /dev/null +++ b/assets/icons/view-mixer.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/icons/view-notepad.svg b/assets/icons/view-notepad.svg new file mode 100644 index 0000000..16cd7c1 --- /dev/null +++ b/assets/icons/view-notepad.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/view-toolbar.svg b/assets/icons/view-toolbar.svg new file mode 100644 index 0000000..22b7dca --- /dev/null +++ b/assets/icons/view-toolbar.svg @@ -0,0 +1,3 @@ + + + diff --git a/error.log b/error.log new file mode 100644 index 0000000..8dacc44 --- /dev/null +++ b/error.log @@ -0,0 +1,122 @@ + Compiling audio-oxide v0.1.0 (/Users/pszsh/Staging/audio-oxide/audio-oxide) +warning: field `0` is never read + --> src/editor.rs:29:15 + | +29 | Transport(transport::Message), + | --------- ^^^^^^^^^^^^^^^^^^ + | | + | field in this variant + | + = note: `Message` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis + = note: `#[warn(dead_code)]` on by default +help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field + | +29 - Transport(transport::Message), +29 + Transport(()), + | + +warning: field `0` is never read + --> src/editor.rs:33:23 + | +33 | TrackListScrolled(scrollable::Viewport), + | ----------------- ^^^^^^^^^^^^^^^^^^^^ + | | + | field in this variant + | + = note: `Message` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis +help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field + | +33 - TrackListScrolled(scrollable::Viewport), +33 + TrackListScrolled(()), + | + +warning: field `0` is never read + --> src/editor.rs:34:14 + | +34 | Timeline(timeline::Message), + | -------- ^^^^^^^^^^^^^^^^^ + | | + | field in this variant + | + = note: `Message` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis +help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field + | +34 - Timeline(timeline::Message), +34 + Timeline(()), + | + +warning: field `0` is never read + --> src/editor.rs:35:22 + | +35 | TimelineScrolled(scrollable::Viewport), + | ---------------- ^^^^^^^^^^^^^^^^^^^^ + | | + | field in this variant + | + = note: `Message` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis +help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field + | +35 - TimelineScrolled(scrollable::Viewport), +35 + TimelineScrolled(()), + | + +warning: variants `SelectTrack` and `SelectRegion` are never constructed + --> src/gui/editor/timeline.rs:15:5 + | +14 | pub enum Message { + | ------- variants in this enum +15 | SelectTrack, + | ^^^^^^^^^^^ +16 | SelectRegion, + | ^^^^^^^^^^^^ + | + = note: `Message` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis + +warning: associated function `new` is never used + --> src/region.rs:16:12 + | +14 | impl Region { + | ----------- associated function in this implementation +15 | /// Creates a new region. +16 | pub fn new(start_time: MusicalTime, duration: MusicalTime) -> Self { + | ^^^ + +warning: constant `TICKS_PER_BEAT` is never used + --> src/timing.rs:6:11 + | +6 | pub const TICKS_PER_BEAT: u32 = 960; + | ^^^^^^^^^^^^^^ + +warning: method `as_total_ticks` is never used + --> src/timing.rs:23:12 + | +16 | impl MusicalTime { + | ---------------- method in this implementation +... +23 | pub fn as_total_ticks(&self, beats_per_bar: u32) -> u64 { + | ^^^^^^^^^^^^^^ + +warning: constant `TRACK_HEIGHT` is never used + --> src/track.rs:6:11 + | +6 | pub const TRACK_HEIGHT: f32 = 125.0; + | ^^^^^^^^^^^^ + +warning: hiding a lifetime that's elided elsewhere is confusing + --> src/editor.rs:114:17 + | +114 | pub fn view(&self) -> Element { + | ^^^^^ ---------------- the same lifetime is hidden here + | | + | the lifetime is elided here + | + = help: the same lifetime is referred to in inconsistent ways, making the signature confusing + = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default +help: use `'_` for type paths + | +114 | pub fn view(&self) -> Element<'_, Message> { + | +++ + +warning: `audio-oxide` (bin "audio-oxide") generated 10 warnings + Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.17s + Running `target/debug/audio-oxide` diff --git a/iced_pocket_guide.txt b/iced_pocket_guide.txt new file mode 100644 index 0000000..cb0c7b9 --- /dev/null +++ b/iced_pocket_guide.txt @@ -0,0 +1,9878 @@ +# Iced Pocket Guide + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/index.html](https://docs.rs/iced/0.13.1/iced/index.html) + +# Crate icedCopy item path + +[Source](../src/iced/lib.rs.html#1-688) + +Expand description + +iced is a cross-platform GUI library focused on simplicity and type-safety. +Inspired by [Elm](https://elm-lang.org/). + +## [§](#disclaimer)Disclaimer + +iced is **experimental** software. If you expect the documentation to hold your hand +as you learn the ropes, you are in for a frustrating experience. + +The library leverages Rust to its full extent: ownership, borrowing, lifetimes, futures, +streams, first-class functions, trait bounds, closures, and more. This documentation +is not meant to teach you any of these. Far from it, it will assume you have **mastered** +all of them. + +Furthermore—just like Rust—iced is very unforgiving. It will not let you easily cut corners. +The type signatures alone can be used to learn how to use most of the library. +Everything is connected. + +Therefore, iced is easy to learn for **advanced** Rust programmers; but plenty of patient +beginners have learned it and had a good time with it. Since it leverages a lot of what +Rust has to offer in a type-safe way, it can be a great way to discover Rust itself. + +If you don’t like the sound of that, you expect to be spoonfed, or you feel frustrated +and struggle to use the library; then I recommend you to wait patiently until [the book](https://book.iced.rs) +is finished. + +## [§](#the-pocket-guide)The Pocket Guide + +Start by calling [`run`](fn.run.html "fn iced::run"): + +``` +pub fn main() -> iced::Result { + iced::run("A cool counter", update, view) +} +``` + +Define an `update` function to **change** your state: + +``` +fn update(counter: &mut u64, message: Message) { + match message { + Message::Increment => *counter += 1, + } +} +``` + +Define a `view` function to **display** your state: + +``` +use iced::widget::{button, text}; +use iced::Element; + +fn view(counter: &u64) -> Element { + button(text(counter)).on_press(Message::Increment).into() +} +``` + +And create a `Message` enum to **connect** `view` and `update` together: + +``` +#[derive(Debug, Clone)] +enum Message { + Increment, +} +``` + +### [§](#custom-state)Custom State + +You can define your own struct for your state: + +``` +#[derive(Default)] +struct Counter { + value: u64, +} +``` + +But you have to change `update` and `view` accordingly: + +``` +fn update(counter: &mut Counter, message: Message) { + match message { + Message::Increment => counter.value += 1, + } +} + +fn view(counter: &Counter) -> Element { + button(text(counter.value)).on_press(Message::Increment).into() +} +``` + +### [§](#widgets-and-elements)Widgets and Elements + +The `view` function must return an [`Element`](type.Element.html "type iced::Element"). An [`Element`](type.Element.html "type iced::Element") is just a generic [`widget`](widget/index.html "mod iced::widget"). + +The [`widget`](widget/index.html "mod iced::widget") module contains a bunch of functions to help you build +and use widgets. + +Widgets are configured using the builder pattern: + +``` +use iced::widget::{button, column, text}; +use iced::Element; + +fn view(counter: &Counter) -> Element { + column![ + text(counter.value).size(20), + button("Increment").on_press(Message::Increment), + ] + .spacing(10) + .into() +} +``` + +A widget can be turned into an [`Element`](type.Element.html "type iced::Element") by calling `into`. + +Widgets and elements are generic over the message type they produce. The +[`Element`](type.Element.html "type iced::Element") returned by `view` must have the same `Message` type as +your `update`. + +### [§](#layout-1)Layout + +There is no unified layout system in iced. Instead, each widget implements +its own layout strategy. + +Building your layout will often consist in using a combination of +[rows](widget/struct.Row.html "struct iced::widget::Row"), [columns](widget/struct.Column.html "struct iced::widget::Column"), and [containers](widget/struct.Container.html "struct iced::widget::Container"): + +``` +use iced::widget::{column, container, row}; +use iced::{Fill, Element}; + +fn view(state: &State) -> Element { + container( + column![ + "Top", + row!["Left", "Right"].spacing(10), + "Bottom" + ] + .spacing(10) + ) + .padding(10) + .center_x(Fill) + .center_y(Fill) + .into() +} +``` + +Rows and columns lay out their children horizontally and vertically, +respectively. [Spacing](widget/struct.Column.html#method.spacing "method iced::widget::Column::spacing") can be easily added between elements. + +Containers position or align a single widget inside their bounds. + +### [§](#sizing)Sizing + +The width and height of widgets can generally be defined using a [`Length`](enum.Length.html "enum iced::Length"). + +* [`Fill`](enum.Length.html#variant.Fill "variant iced::Length::Fill") will make the widget take all the available space in a given axis. +* [`Shrink`](enum.Length.html#variant.Shrink "variant iced::Length::Shrink") will make the widget use its intrinsic size. + +Most widgets use a [`Shrink`](enum.Length.html#variant.Shrink "variant iced::Length::Shrink") sizing strategy by default, but will inherit +a [`Fill`](enum.Length.html#variant.Fill "variant iced::Length::Fill") strategy from their children. + +A fixed numeric [`Length`](enum.Length.html "enum iced::Length") in [`Pixels`](struct.Pixels.html "struct iced::Pixels") can also be used: + +``` +use iced::widget::container; +use iced::Element; + +fn view(state: &State) -> Element { + container("I am 300px tall!").height(300).into() +} +``` + +### [§](#theming)Theming + +The default [`Theme`](enum.Theme.html "enum iced::Theme") of an application can be changed by defining a `theme` +function and leveraging the [`Application`](application/struct.Application.html "struct iced::application::Application") builder, instead of directly +calling [`run`](fn.run.html "fn iced::run"): + +``` +use iced::Theme; + +pub fn main() -> iced::Result { + iced::application("A cool application", update, view) + .theme(theme) + .run() +} + +fn theme(state: &State) -> Theme { + Theme::TokyoNight +} +``` + +The `theme` function takes the current state of the application, allowing the +returned [`Theme`](enum.Theme.html "enum iced::Theme") to be completely dynamic—just like `view`. + +There are a bunch of built-in [`Theme`](enum.Theme.html "enum iced::Theme") variants at your disposal, but you can +also [create your own](enum.Theme.html#method.custom "associated function iced::Theme::custom"). + +### [§](#styling)Styling + +As with layout, iced does not have a unified styling system. However, all +of the built-in widgets follow the same styling approach. + +The appearance of a widget can be changed by calling its `style` method: + +``` +use iced::widget::container; +use iced::Element; + +fn view(state: &State) -> Element { + container("I am a rounded box!").style(container::rounded_box).into() +} +``` + +The `style` method of a widget takes a closure that, given the current active +[`Theme`](enum.Theme.html "enum iced::Theme"), returns the widget style: + +``` +use iced::widget::button; +use iced::{Element, Theme}; + +fn view(state: &State) -> Element { + button("I am a styled button!").style(|theme: &Theme, status| { + let palette = theme.extended_palette(); + + match status { + button::Status::Active => { + button::Style::default() + .with_background(palette.success.strong.color) + } + _ => button::primary(theme, status), + } + }) + .into() +} +``` + +Widgets that can be in multiple different states will also provide the closure +with some [`Status`](widget/button/enum.Status.html "enum iced::widget::button::Status"), allowing you to use a different style for each state. + +You can extract the [`Palette`](enum.Theme.html#method.palette "method iced::Theme::palette") colors of a [`Theme`](enum.Theme.html "enum iced::Theme") with the [`palette`](enum.Theme.html#method.palette "method iced::Theme::palette") or +[`extended_palette`](enum.Theme.html#method.extended_palette "method iced::Theme::extended_palette") methods. + +Most widgets provide styling functions for your convenience in their respective modules; +like [`container::rounded_box`](widget/container/fn.rounded_box.html "fn iced::widget::container::rounded_box"), [`button::primary`](widget/button/fn.primary.html "fn iced::widget::button::primary"), or [`text::danger`](widget/text/fn.danger.html "fn iced::widget::text::danger"). + +### [§](#concurrent-tasks)Concurrent Tasks + +The `update` function can *optionally* return a [`Task`](struct.Task.html "struct iced::Task"). + +A [`Task`](struct.Task.html "struct iced::Task") can be leveraged to perform asynchronous work, like running a +future or a stream: + +``` +use iced::Task; + +struct State { + weather: Option, +} + +enum Message { + FetchWeather, + WeatherFetched(Weather), +} + +fn update(state: &mut State, message: Message) -> Task { + match message { + Message::FetchWeather => Task::perform( + fetch_weather(), + Message::WeatherFetched, + ), + Message::WeatherFetched(weather) => { + state.weather = Some(weather); + + Task::none() + } + } +} + +async fn fetch_weather() -> Weather { + // ... +} +``` + +Tasks can also be used to interact with the iced runtime. Some modules +expose functions that create tasks for different purposes—like [changing +window settings](window/index.html#functions "mod iced::window"), [focusing a widget](widget/fn.focus_next.html "fn iced::widget::focus_next"), or +[querying its visible bounds](widget/container/fn.visible_bounds.html "fn iced::widget::container::visible_bounds"). + +Like futures and streams, tasks expose [a monadic interface](struct.Task.html#method.then "method iced::Task::then")—but they can also be +[mapped](struct.Task.html#method.map "method iced::Task::map"), [chained](struct.Task.html#method.chain "method iced::Task::chain"), [batched](struct.Task.html#method.batch "associated function iced::Task::batch"), [canceled](struct.Task.html#method.abortable "method iced::Task::abortable"), +and more. + +### [§](#passive-subscriptions)Passive Subscriptions + +Applications can subscribe to passive sources of data—like time ticks or runtime events. + +You will need to define a `subscription` function and use the [`Application`](application/struct.Application.html "struct iced::application::Application") builder: + +``` +use iced::window; +use iced::{Size, Subscription}; + +#[derive(Debug)] +enum Message { + WindowResized(Size), +} + +pub fn main() -> iced::Result { + iced::application("A cool application", update, view) + .subscription(subscription) + .run() +} + +fn subscription(state: &State) -> Subscription { + window::resize_events().map(|(_id, size)| Message::WindowResized(size)) +} +``` + +A [`Subscription`](struct.Subscription.html "struct iced::Subscription") is [a *declarative* builder of streams](struct.Subscription.html#the-lifetime-of-a-subscription "struct iced::Subscription") +that are not allowed to end on their own. Only the `subscription` function +dictates the active subscriptions—just like `view` fully dictates the +visible widgets of your user interface, at every moment. + +As with tasks, some modules expose convenient functions that build a [`Subscription`](struct.Subscription.html "struct iced::Subscription") for you—like +[`time::every`](time/fn.every.html "fn iced::time::every") which can be used to listen to time, or [`keyboard::on_key_press`](keyboard/fn.on_key_press.html "fn iced::keyboard::on_key_press") which will notify you +of any key presses. But you can also create your own with [`Subscription::run`](struct.Subscription.html#method.run "associated function iced::Subscription::run") and [`run_with_id`](struct.Subscription.html#method.run_with_id "associated function iced::Subscription::run_with_id"). + +### [§](#scaling-applications)Scaling Applications + +The `update`, `view`, and `Message` triplet composes very nicely. + +A common pattern is to leverage this composability to split an +application into different screens: + +``` +use contacts::Contacts; +use conversation::Conversation; + +use iced::{Element, Task}; + +struct State { + screen: Screen, +} + +enum Screen { + Contacts(Contacts), + Conversation(Conversation), +} + +enum Message { + Contacts(contacts::Message), + Conversation(conversation::Message) +} + +fn update(state: &mut State, message: Message) -> Task { + match message { + Message::Contacts(message) => { + if let Screen::Contacts(contacts) = &mut state.screen { + let action = contacts.update(message); + + match action { + contacts::Action::None => Task::none(), + contacts::Action::Run(task) => task.map(Message::Contacts), + contacts::Action::Chat(contact) => { + let (conversation, task) = Conversation::new(contact); + + state.screen = Screen::Conversation(conversation); + + task.map(Message::Conversation) + } + } + } else { + Task::none() + } + } + Message::Conversation(message) => { + if let Screen::Conversation(conversation) = &mut state.screen { + conversation.update(message).map(Message::Conversation) + } else { + Task::none() + } + } + } +} + +fn view(state: &State) -> Element { + match &state.screen { + Screen::Contacts(contacts) => contacts.view().map(Message::Contacts), + Screen::Conversation(conversation) => conversation.view().map(Message::Conversation), + } +} +``` + +The `update` method of a screen can return an `Action` enum that can be leveraged by the parent to +execute a task or transition to a completely different screen altogether. The variants of `Action` can +have associated data. For instance, in the example above, the `Conversation` screen is created when +`Contacts::update` returns an `Action::Chat` with the selected contact. + +Effectively, this approach lets you “tell a story” to connect different screens together in a type safe +way. + +Furthermore, functor methods like [`Task::map`](struct.Task.html#method.map "method iced::Task::map"), [`Element::map`](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html#method.map "method iced_core::element::Element::map"), and [`Subscription::map`](struct.Subscription.html#method.map "method iced::Subscription::map") make composition +seamless. + +## Re-exports[§](#reexports) + +`pub use application::Application;` + +`pub use daemon::Daemon;` + +`pub use settings::Settings;` + +`pub use iced_futures::futures;` + +`pub use iced_highlighter as highlighter;``highlighter` + +`pub use alignment::Horizontal::Left;` + +`pub use alignment::Horizontal::Right;` + +`pub use alignment::Vertical::Bottom;` + +`pub use alignment::Vertical::Top;` + +`pub use Alignment::Center;` + +`pub use Length::Fill;` + +`pub use Length::FillPortion;` + +`pub use Length::Shrink;` + +## Modules[§](#modules) + +[advanced](advanced/index.html "mod iced::advanced")`advanced` +: Leverage advanced concepts like custom widgets. + +[alignment](alignment/index.html "mod iced::alignment") +: Align and position widgets. + +[application](application/index.html "mod iced::application") +: Create and run iced applications step by step. + +[border](border/index.html "mod iced::border") +: Draw lines around containers. + +[clipboard](clipboard/index.html "mod iced::clipboard") +: Access the clipboard. + +[daemon](daemon/index.html "mod iced::daemon") +: Create and run daemons that run in the background. + +[event](event/index.html "mod iced::event") +: Handle events of a user interface. + +[executor](executor/index.html "mod iced::executor") +: Choose your preferred executor to power your application. + +[font](font/index.html "mod iced::font") +: Load and use fonts. + +[gradient](gradient/index.html "mod iced::gradient") +: Colors that transition progressively. + +[keyboard](keyboard/index.html "mod iced::keyboard") +: Listen and react to keyboard events. + +[mouse](mouse/index.html "mod iced::mouse") +: Listen and react to mouse events. + +[overlay](overlay/index.html "mod iced::overlay") +: Display interactive elements on top of other widgets. + +[padding](padding/index.html "mod iced::padding") +: Space stuff around the perimeter. + +[settings](settings/index.html "mod iced::settings") +: Configure your application. + +[stream](stream/index.html "mod iced::stream") +: Create asynchronous streams of data. + +[system](system/index.html "mod iced::system")`system` +: Retrieve system information. + +[task](task/index.html "mod iced::task") +: Create runtime tasks. + +[theme](theme/index.html "mod iced::theme") +: Use the built-in theme and styles. + +[time](time/index.html "mod iced::time") +: Listen and react to time. + +[touch](touch/index.html "mod iced::touch") +: Listen and react to touch events. + +[widget](widget/index.html "mod iced::widget") +: Use the built-in widgets or create your own. + +[window](window/index.html "mod iced::window") +: Configure the window of your application in native platforms. + +## Macros[§](#macros) + +[color](macro.color.html "macro iced::color") +: Creates a [`Color`](struct.Color.html "struct iced::Color") with shorter and cleaner syntax. + +## Structs[§](#structs) + +[Border](struct.Border.html "struct iced::Border") +: A border. + +[Color](struct.Color.html "struct iced::Color") +: A color in the `sRGB` color space. + +[Degrees](struct.Degrees.html "struct iced::Degrees") +: Degrees + +[Font](struct.Font.html "struct iced::Font") +: A font. + +[Padding](struct.Padding.html "struct iced::Padding") +: An amount of space to pad for each side of a box + +[Pixels](struct.Pixels.html "struct iced::Pixels") +: An amount of logical pixels. + +[Point](struct.Point.html "struct iced::Point") +: A 2D point. + +[Radians](struct.Radians.html "struct iced::Radians") +: Radians + +[Rectangle](struct.Rectangle.html "struct iced::Rectangle") +: An axis-aligned rectangle. + +[Shadow](struct.Shadow.html "struct iced::Shadow") +: A shadow. + +[Size](struct.Size.html "struct iced::Size") +: An amount of space in 2 dimensions. + +[Subscription](struct.Subscription.html "struct iced::Subscription") +: A request to listen to external events. + +[Task](struct.Task.html "struct iced::Task") +: A set of concurrent actions to be performed by the iced runtime. + +[Transformation](struct.Transformation.html "struct iced::Transformation") +: A 2D transformation matrix. + +[Vector](struct.Vector.html "struct iced::Vector") +: A 2D vector. + +## Enums[§](#enums) + +[Alignment](enum.Alignment.html "enum iced::Alignment") +: Alignment on the axis of a container. + +[Background](enum.Background.html "enum iced::Background") +: The background of some element. + +[ContentFit](enum.ContentFit.html "enum iced::ContentFit") +: The strategy used to fit the contents of a widget to its bounding box. + +[Error](enum.Error.html "enum iced::Error") +: An error that occurred while running an application. + +[Event](enum.Event.html "enum iced::Event") +: A user interface event. + +[Gradient](enum.Gradient.html "enum iced::Gradient") +: A fill which transitions colors progressively along a direction, either linearly, radially (TBD), + or conically (TBD). + +[Length](enum.Length.html "enum iced::Length") +: The strategy used to fill space in a specific dimension. + +[Rotation](enum.Rotation.html "enum iced::Rotation") +: The strategy used to rotate the content. + +[Theme](enum.Theme.html "enum iced::Theme") +: A built-in theme. + +## Traits[§](#traits) + +[Executor](trait.Executor.html "trait iced::Executor") +: A type that can run futures. + +## Functions[§](#functions) + +[application](fn.application.html "fn iced::application") +: Creates an iced [`Application`](application/struct.Application.html "struct iced::application::Application") given its title, update, and view logic. + +[daemon](fn.daemon.html "fn iced::daemon") +: Creates an iced [`Daemon`](daemon/struct.Daemon.html "struct iced::daemon::Daemon") given its title, update, and view logic. + +[exit](fn.exit.html "fn iced::exit") +: Creates a [`Task`](struct.Task.html "struct iced::Task") that exits the iced runtime. + +[run](fn.run.html "fn iced::run") +: Runs a basic iced application with default [`Settings`](settings/struct.Settings.html "struct iced::settings::Settings") given its title, + update, and view logic. + +## Type Aliases[§](#types) + +[Element](type.Element.html "type iced::Element") +: A generic widget. + +[Renderer](type.Renderer.html "type iced::Renderer") +: The default graphics renderer for [`iced`](https://github.com/iced-rs/iced). + +[Result](type.Result.html "type iced::Result") +: The result of running an iced program. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/advanced/index.html](https://docs.rs/iced/0.13.1/iced/advanced/index.html) + +[iced](../index.html) + +# Module advancedCopy item path + +[Source](../../src/iced/advanced.rs.html#1-25) + +Available on **crate feature `advanced`** only. + +Expand description + +Leverage advanced concepts like custom widgets. + +## Re-exports[§](#reexports) + +`pub use crate::renderer::graphics;` + +## Modules[§](#modules) + +[clipboard](clipboard/index.html "mod iced::advanced::clipboard") +: Access the clipboard. + +[image](image/index.html "mod iced::advanced::image") +: Load and draw raster graphics. + +[layout](layout/index.html "mod iced::advanced::layout") +: Position your widgets properly. + +[mouse](mouse/index.html "mod iced::advanced::mouse") +: Handle mouse events. + +[overlay](overlay/index.html "mod iced::advanced::overlay") +: Display interactive elements on top of other widgets. + +[renderer](renderer/index.html "mod iced::advanced::renderer") +: Write your own renderer. + +[subscription](subscription/index.html "mod iced::advanced::subscription") +: Write your own subscriptions. + +[svg](svg/index.html "mod iced::advanced::svg") +: Load and draw vector graphics. + +[text](text/index.html "mod iced::advanced::text") +: Draw and interact with text. + +[widget](widget/index.html "mod iced::advanced::widget") +: Create custom widgets and operate on them. + +## Structs[§](#structs) + +[Layout](struct.Layout.html "struct iced::advanced::Layout") +: The bounds of a [`Node`](layout/struct.Node.html "struct iced::advanced::layout::Node") and its children, using absolute coordinates. + +[Shell](struct.Shell.html "struct iced::advanced::Shell") +: A connection to the state of a shell. + +[Text](struct.Text.html "struct iced::advanced::Text") +: A paragraph. + +## Traits[§](#traits) + +[Clipboard](trait.Clipboard.html "trait iced::advanced::Clipboard") +: A buffer for short-term storage and transfer within and between + applications. + +[Overlay](trait.Overlay.html "trait iced::advanced::Overlay") +: An interactive component that can be displayed on top of other widgets. + +[Renderer](trait.Renderer.html "trait iced::advanced::Renderer") +: A component that can be used by widgets to draw themselves on a screen. + +[Widget](trait.Widget.html "trait iced::advanced::Widget") +: A component that displays information and allows interaction. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/application/index.html](https://docs.rs/iced/0.13.1/iced/application/index.html) + +[iced](../index.html) + +# Module applicationCopy item path + +[Source](../../src/iced/application.rs.html#1-486) + +Expand description + +Create and run iced applications step by step. + +## [§](#example)Example + +``` +use iced::widget::{button, column, text, Column}; +use iced::Theme; + +pub fn main() -> iced::Result { + iced::application("A counter", update, view) + .theme(|_| Theme::Dark) + .centered() + .run() +} + +#[derive(Debug, Clone)] +enum Message { + Increment, +} + +fn update(value: &mut u64, message: Message) { + match message { + Message::Increment => *value += 1, + } +} + +fn view(value: &u64) -> Column { + column![ + text(value), + button("+").on_press(Message::Increment), + ] +} +``` + +## Structs[§](#structs) + +[Appearance](struct.Appearance.html "struct iced::application::Appearance") +: The appearance of a program. + +[Application](struct.Application.html "struct iced::application::Application") +: The underlying definition and configuration of an iced application. + +## Traits[§](#traits) + +[DefaultStyle](trait.DefaultStyle.html "trait iced::application::DefaultStyle") +: The default style of a [`Program`](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/iced_winit/program/trait.Program.html "trait iced_winit::program::Program"). + +[Title](trait.Title.html "trait iced::application::Title") +: The title logic of some [`Application`](struct.Application.html "struct iced::application::Application"). + +[Update](trait.Update.html "trait iced::application::Update") +: The update logic of some [`Application`](struct.Application.html "struct iced::application::Application"). + +[View](trait.View.html "trait iced::application::View") +: The view logic of some [`Application`](struct.Application.html "struct iced::application::Application"). + +## Functions[§](#functions) + +[application](fn.application.html "fn iced::application::application") +: Creates an iced [`Application`](struct.Application.html "struct iced::application::Application") given its title, update, and view logic. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/application/struct.Application.html](https://docs.rs/iced/0.13.1/iced/application/struct.Application.html) + +[iced](../index.html)::[application](index.html) + +# Struct ApplicationCopy item path + +[Source](../../src/iced/application.rs.html#148-152) + +``` +pub struct Application { /* private fields */ } +``` + +Expand description + +The underlying definition and configuration of an iced application. + +You can use this API to create and run iced applications +step by step—without coupling your logic to a trait +or a specific type. + +You can create an [`Application`](struct.Application.html "struct iced::application::Application") with the [`application`](../fn.application.html "fn iced::application") helper. + +## Implementations[§](#implementations) + +[Source](../../src/iced/application.rs.html#154-397)[§](#impl-Application%3CP%3E) + +### impl [Application](struct.Application.html "struct iced::application::Application")

+ +[Source](../../src/iced/application.rs.html#162-168) + +#### pub fn [run](#method.run)(self) -> [Result](../type.Result.html "type iced::Result") where Self: 'static, P::State: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +Runs the [`Application`](struct.Application.html "struct iced::application::Application"). + +The state of the [`Application`](struct.Application.html "struct iced::application::Application") must implement [`Default`](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"). +If your state does not implement [`Default`](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), use [`run_with`](struct.Application.html#method.run_with "method iced::application::Application::run_with") +instead. + +[Source](../../src/iced/application.rs.html#171-178) + +#### pub fn [run\_with](#method.run_with)(self, initialize: I) -> [Result](../type.Result.html "type iced::Result") where Self: 'static, I: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")() -> (P::State, [Task](../struct.Task.html "struct iced::Task")) + 'static, + +Runs the [`Application`](struct.Application.html "struct iced::application::Application") with a closure that creates the initial state. + +[Source](../../src/iced/application.rs.html#181-183) + +#### pub fn [settings](#method.settings)(self, settings: [Settings](../settings/struct.Settings.html "struct iced::settings::Settings")) -> Self + +Sets the [`Settings`](../settings/struct.Settings.html "struct iced::settings::Settings") that will be used to run the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#186-194) + +#### pub fn [antialiasing](#method.antialiasing)(self, antialiasing: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`Settings::antialiasing`](../settings/struct.Settings.html#structfield.antialiasing "field iced::settings::Settings::antialiasing") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#197-205) + +#### pub fn [default\_font](#method.default_font)(self, default\_font: [Font](../struct.Font.html "struct iced::Font")) -> Self + +Sets the default [`Font`](../struct.Font.html "struct iced::Font") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#208-211) + +#### pub fn [font](#method.font)(self, font: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Cow](https://doc.rust-lang.org/nightly/alloc/borrow/enum.Cow.html "enum alloc::borrow::Cow")<'static, [[u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)]>>) -> Self + +Adds a font to the list of fonts that will be loaded at the start of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#216-218) + +#### pub fn [window](#method.window)(self, window: [Settings](../window/struct.Settings.html "struct iced::window::Settings")) -> Self + +Sets the [`window::Settings`](../window/struct.Settings.html "struct iced::window::Settings") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +Overwrites any previous [`window::Settings`](../window/struct.Settings.html "struct iced::window::Settings"). + +[Source](../../src/iced/application.rs.html#221-229) + +#### pub fn [centered](#method.centered)(self) -> Self + +Sets the [`window::Settings::position`](../window/struct.Settings.html#structfield.position "field iced::window::Settings::position") to [`window::Position::Centered`](../window/enum.Position.html#variant.Centered "variant iced::window::Position::Centered") in the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#232-240) + +#### pub fn [exit\_on\_close\_request](#method.exit_on_close_request)(self, exit\_on\_close\_request: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`window::Settings::exit_on_close_request`](../window/struct.Settings.html#structfield.exit_on_close_request "field iced::window::Settings::exit_on_close_request") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#243-251) + +#### pub fn [window\_size](#method.window_size)(self, size: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Size](../struct.Size.html "struct iced::Size")>) -> Self + +Sets the [`window::Settings::size`](../window/struct.Settings.html#structfield.size "field iced::window::Settings::size") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#254-262) + +#### pub fn [transparent](#method.transparent)(self, transparent: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`window::Settings::transparent`](../window/struct.Settings.html#structfield.transparent "field iced::window::Settings::transparent") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#265-273) + +#### pub fn [resizable](#method.resizable)(self, resizable: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`window::Settings::resizable`](../window/struct.Settings.html#structfield.resizable "field iced::window::Settings::resizable") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#276-284) + +#### pub fn [decorations](#method.decorations)(self, decorations: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`window::Settings::decorations`](../window/struct.Settings.html#structfield.decorations "field iced::window::Settings::decorations") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#287-295) + +#### pub fn [position](#method.position)(self, position: [Position](../window/enum.Position.html "enum iced::window::Position")) -> Self + +Sets the [`window::Settings::position`](../window/struct.Settings.html#structfield.position "field iced::window::Settings::position") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#298-306) + +#### pub fn [level](#method.level)(self, level: [Level](../window/enum.Level.html "enum iced::window::Level")) -> Self + +Sets the [`window::Settings::level`](../window/struct.Settings.html#structfield.level "field iced::window::Settings::level") of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#325-336) + +#### pub fn [subscription](#method.subscription)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State) -> [Subscription](../struct.Subscription.html "struct iced::Subscription"), ) -> [Application](struct.Application.html "struct iced::application::Application")> + +Sets the subscription logic of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#339-350) + +#### pub fn [theme](#method.theme)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State) -> P::Theme, ) -> [Application](struct.Application.html "struct iced::application::Application")> + +Sets the theme logic of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#353-364) + +#### pub fn [style](#method.style)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State, &P::Theme) -> [Appearance](struct.Appearance.html "struct iced::application::Appearance"), ) -> [Application](struct.Application.html "struct iced::application::Application")> + +Sets the style logic of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#367-380) + +#### pub fn [scale\_factor](#method.scale_factor)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State) -> [f64](https://doc.rust-lang.org/nightly/std/primitive.f64.html), ) -> [Application](struct.Application.html "struct iced::application::Application")> + +Sets the scale factor of the [`Application`](struct.Application.html "struct iced::application::Application"). + +[Source](../../src/iced/application.rs.html#383-396) + +#### pub fn [executor](#method.executor)( self, ) -> [Application](struct.Application.html "struct iced::application::Application")> where E: [Executor](../trait.Executor.html "trait iced::Executor"), + +Sets the executor of the [`Application`](struct.Application.html "struct iced::application::Application"). + +## Trait Implementations[§](#trait-implementations) + +[Source](../../src/iced/application.rs.html#147)[§](#impl-Debug-for-Application%3CP%3E) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Application](struct.Application.html "struct iced::application::Application")

+ +[Source](../../src/iced/application.rs.html#147)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/fmt/type.Result.html "type core::fmt::Result") + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Application%3CP%3E) + +### impl

[Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Application](struct.Application.html "struct iced::application::Application")

where P: [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze"), + +[§](#impl-RefUnwindSafe-for-Application%3CP%3E) + +### impl

[RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Application](struct.Application.html "struct iced::application::Application")

where P: [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe"), + +[§](#impl-Send-for-Application%3CP%3E) + +### impl

[Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Application](struct.Application.html "struct iced::application::Application")

where P: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[§](#impl-Sync-for-Application%3CP%3E) + +### impl

[Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Application](struct.Application.html "struct iced::application::Application")

where P: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[§](#impl-Unpin-for-Application%3CP%3E) + +### impl

[Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Application](struct.Application.html "struct iced::application::Application")

where P: [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin"), + +[§](#impl-UnwindSafe-for-Application%3CP%3E) + +### impl

[UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Application](struct.Application.html "struct iced::application::Application")

where P: [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe"), + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](../widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/widget/index.html](https://docs.rs/iced/0.13.1/iced/widget/index.html) + +[iced](../index.html) + +# Module widgetCopy item path + +[Source](../../src/iced/lib.rs.html#603) + +Expand description + +Use the built-in widgets or create your own. + +## Modules[§](#modules) + +[button](button/index.html "mod iced::widget::button") +: Buttons allow your users to perform actions by pressing them. + +[canvas](canvas/index.html "mod iced::widget::canvas") +: Canvases can be leveraged to draw interactive 2D graphics. + +[checkbox](checkbox/index.html "mod iced::widget::checkbox") +: Checkboxes can be used to let users make binary choices. + +[combo\_box](combo_box/index.html "mod iced::widget::combo_box") +: Combo boxes display a dropdown list of searchable and selectable options. + +[container](container/index.html "mod iced::widget::container") +: Containers let you align a widget inside their boundaries. + +[image](image/index.html "mod iced::widget::image") +: Images display raster graphics in different formats (PNG, JPG, etc.). + +[keyed](keyed/index.html "mod iced::widget::keyed") +: Keyed widgets can provide hints to ensure continuity. + +[markdown](markdown/index.html "mod iced::widget::markdown") +: Markdown widgets can parse and display Markdown. + +[overlay](overlay/index.html "mod iced::widget::overlay") +: Display interactive elements on top of other widgets. + +[pane\_grid](pane_grid/index.html "mod iced::widget::pane_grid") +: Pane grids let your users split regions of your application and organize layout dynamically. + +[pick\_list](pick_list/index.html "mod iced::widget::pick_list") +: Pick lists display a dropdown list of selectable options. + +[progress\_bar](progress_bar/index.html "mod iced::widget::progress_bar") +: Progress bars visualize the progression of an extended computer operation, such as a download, file transfer, or installation. + +[qr\_code](qr_code/index.html "mod iced::widget::qr_code") +: QR codes display information in a type of two-dimensional matrix barcode. + +[radio](radio/index.html "mod iced::widget::radio") +: Radio buttons let users choose a single option from a bunch of options. + +[rule](rule/index.html "mod iced::widget::rule") +: Rules divide space horizontally or vertically. + +[scrollable](scrollable/index.html "mod iced::widget::scrollable") +: Scrollables let users navigate an endless amount of content with a scrollbar. + +[shader](shader/index.html "mod iced::widget::shader") +: A custom shader widget for wgpu applications. + +[slider](slider/index.html "mod iced::widget::slider") +: Sliders let users set a value by moving an indicator. + +[svg](svg/index.html "mod iced::widget::svg") +: Svg widgets display vector graphics in your application. + +[text](text/index.html "mod iced::widget::text") +: Draw and interact with text. + +[text\_editor](text_editor/index.html "mod iced::widget::text_editor") +: Text editors display a multi-line text input for text editing. + +[text\_input](text_input/index.html "mod iced::widget::text_input") +: Text inputs display fields that can be filled with text. + +[theme](theme/index.html "mod iced::widget::theme") +: Use the built-in theme and styles. + +[toggler](toggler/index.html "mod iced::widget::toggler") +: Togglers let users make binary choices by toggling a switch. + +[tooltip](tooltip/index.html "mod iced::widget::tooltip") +: Tooltips display a hint of information over some element when hovered. + +[vertical\_slider](vertical_slider/index.html "mod iced::widget::vertical_slider") +: Sliders let users set a value by moving an indicator. + +## Macros[§](#macros) + +[column](macro.column.html "macro iced::widget::column") +: Creates a [`Column`](struct.Column.html "struct iced::widget::Column") with the given children. + +[keyed\_column](macro.keyed_column.html "macro iced::widget::keyed_column") +: Creates a keyed [`Column`](keyed/struct.Column.html "struct iced::widget::keyed::Column") with the given children. + +[rich\_text](macro.rich_text.html "macro iced::widget::rich_text") +: Creates some [`Rich`](text/struct.Rich.html "struct iced::widget::text::Rich") text with the given spans. + +[row](macro.row.html "macro iced::widget::row") +: Creates a [`Row`](struct.Row.html "struct iced::widget::Row") with the given children. + +[stack](macro.stack.html "macro iced::widget::stack") +: Creates a [`Stack`](struct.Stack.html "struct iced::widget::Stack") with the given children. + +[text](macro.text.html "macro iced::widget::text") +: Creates a new [`Text`](../advanced/widget/struct.Text.html "struct iced::advanced::widget::Text") widget with the provided content. + +## Structs[§](#structs) + +[Button](struct.Button.html "struct iced::widget::Button") +: A generic widget that produces a message when pressed. + +[Canvas](struct.Canvas.html "struct iced::widget::Canvas") +: A widget capable of drawing 2D graphics. + +[Checkbox](struct.Checkbox.html "struct iced::widget::Checkbox") +: A box that can be checked. + +[Column](struct.Column.html "struct iced::widget::Column") +: A container that distributes its contents vertically. + +[ComboBox](struct.ComboBox.html "struct iced::widget::ComboBox") +: A widget for searching and selecting a single value from a list of options. + +[Container](struct.Container.html "struct iced::widget::Container") +: A widget that aligns its contents inside of its boundaries. + +[Image](struct.Image.html "struct iced::widget::Image") +: A frame that displays an image while keeping aspect ratio. + +[Lazy](struct.Lazy.html "struct iced::widget::Lazy") +: A widget that only rebuilds its contents when necessary. + +[MouseArea](struct.MouseArea.html "struct iced::widget::MouseArea") +: Emit messages on mouse events. + +[PaneGrid](struct.PaneGrid.html "struct iced::widget::PaneGrid") +: A collection of panes distributed using either vertical or horizontal splits + to completely fill the space available. + +[PickList](struct.PickList.html "struct iced::widget::PickList") +: A widget for selecting a single value from a list of options. + +[ProgressBar](struct.ProgressBar.html "struct iced::widget::ProgressBar") +: A bar that displays progress. + +[QRCode](struct.QRCode.html "struct iced::widget::QRCode") +: A type of matrix barcode consisting of squares arranged in a grid which + can be read by an imaging device, such as a camera. + +[Radio](struct.Radio.html "struct iced::widget::Radio") +: A circular button representing a choice. + +[Responsive](struct.Responsive.html "struct iced::widget::Responsive") +: A widget that is aware of its dimensions. + +[Row](struct.Row.html "struct iced::widget::Row") +: A container that distributes its contents horizontally. + +[Rule](struct.Rule.html "struct iced::widget::Rule") +: Display a horizontal or vertical rule for dividing content. + +[Scrollable](struct.Scrollable.html "struct iced::widget::Scrollable") +: A widget that can vertically display an infinite amount of content with a + scrollbar. + +[Shader](struct.Shader.html "struct iced::widget::Shader") +: A widget which can render custom shaders with Iced’s `wgpu` backend. + +[Slider](struct.Slider.html "struct iced::widget::Slider") +: An horizontal bar and a handle that selects a single value from a range of + values. + +[Space](struct.Space.html "struct iced::widget::Space") +: An amount of empty space. + +[Stack](struct.Stack.html "struct iced::widget::Stack") +: A container that displays children on top of each other. + +[Svg](struct.Svg.html "struct iced::widget::Svg") +: A vector graphics image. + +[TextEditor](struct.TextEditor.html "struct iced::widget::TextEditor") +: A multi-line text input. + +[TextInput](struct.TextInput.html "struct iced::widget::TextInput") +: A field that can be filled with text. + +[Themer](struct.Themer.html "struct iced::widget::Themer") +: A widget that applies any `Theme` to its contents. + +[Toggler](struct.Toggler.html "struct iced::widget::Toggler") +: A toggler widget. + +[Tooltip](struct.Tooltip.html "struct iced::widget::Tooltip") +: An element to display a widget over another. + +[VerticalSlider](struct.VerticalSlider.html "struct iced::widget::VerticalSlider") +: An vertical bar and a handle that selects a single value from a range of + values. + +## Enums[§](#enums) + +[Theme](enum.Theme.html "enum iced::widget::Theme") +: A built-in theme. + +## Traits[§](#traits) + +[Component](trait.Component.html "trait iced::widget::Component")Deprecated +: A reusable, custom widget that uses The Elm Architecture. + +## Functions[§](#functions) + +[button](fn.button.html "fn iced::widget::button") +: Creates a new [`Button`](struct.Button.html "struct iced::widget::Button") with the provided content. + +[canvas](fn.canvas.html "fn iced::widget::canvas") +: Creates a new [`Canvas`](struct.Canvas.html "struct iced::widget::Canvas"). + +[center](fn.center.html "fn iced::widget::center") +: Creates a new [`Container`](struct.Container.html "struct iced::widget::Container") that fills all the available space + and centers its contents inside. + +[checkbox](fn.checkbox.html "fn iced::widget::checkbox") +: Creates a new [`Checkbox`](struct.Checkbox.html "struct iced::widget::Checkbox"). + +[column](fn.column.html "fn iced::widget::column") +: Creates a new [`Column`](struct.Column.html "struct iced::widget::Column") with the given children. + +[combo\_box](fn.combo_box.html "fn iced::widget::combo_box") +: Creates a new [`ComboBox`](struct.ComboBox.html "struct iced::widget::ComboBox"). + +[component](fn.component.html "fn iced::widget::component")Deprecated +: Turns an implementor of [`Component`](trait.Component.html "trait iced::widget::Component") into an [`Element`](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element") that can be + embedded in any application. + +[container](fn.container.html "fn iced::widget::container") +: Creates a new [`Container`](struct.Container.html "struct iced::widget::Container") with the provided content. + +[focus\_next](fn.focus_next.html "fn iced::widget::focus_next") +: Focuses the next focusable widget. + +[focus\_previous](fn.focus_previous.html "fn iced::widget::focus_previous") +: Focuses the previous focusable widget. + +[horizontal\_rule](fn.horizontal_rule.html "fn iced::widget::horizontal_rule") +: Creates a horizontal [`Rule`](struct.Rule.html "struct iced::widget::Rule") with the given height. + +[horizontal\_space](fn.horizontal_space.html "fn iced::widget::horizontal_space") +: Creates a new [`Space`](struct.Space.html "struct iced::widget::Space") widget that fills the available + horizontal space. + +[hover](fn.hover.html "fn iced::widget::hover") +: Displays a widget on top of another one, only when the base widget is hovered. + +[iced](fn.iced.html "fn iced::widget::iced") +: Creates an [`Element`](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element") that displays the iced logo with the given `text_size`. + +[image](fn.image.html "fn iced::widget::image") +: Creates a new [`Image`](struct.Image.html "struct iced::widget::Image"). + +[keyed\_column](fn.keyed_column.html "fn iced::widget::keyed_column") +: Creates a new [`keyed::Column`](keyed/struct.Column.html "struct iced::widget::keyed::Column") from an iterator of elements. + +[lazy](fn.lazy.html "fn iced::widget::lazy") +: Creates a new [`Lazy`](struct.Lazy.html "struct iced::widget::Lazy") widget with the given data `Dependency` and a + closure that can turn this data into a widget tree. + +[markdown](fn.markdown.html "fn iced::widget::markdown") +: Display a bunch of Markdown items. + +[mouse\_area](fn.mouse_area.html "fn iced::widget::mouse_area") +: A container intercepting mouse events. + +[opaque](fn.opaque.html "fn iced::widget::opaque") +: Wraps the given widget and captures any mouse button presses inside the bounds of + the widget—effectively making it *opaque*. + +[pane\_grid](fn.pane_grid.html "fn iced::widget::pane_grid") +: Creates a [`PaneGrid`](struct.PaneGrid.html "struct iced::widget::PaneGrid") with the given [`pane_grid::State`](pane_grid/struct.State.html "struct iced::widget::pane_grid::State") and view function. + +[pick\_list](fn.pick_list.html "fn iced::widget::pick_list") +: Creates a new [`PickList`](struct.PickList.html "struct iced::widget::PickList"). + +[progress\_bar](fn.progress_bar.html "fn iced::widget::progress_bar") +: Creates a new [`ProgressBar`](struct.ProgressBar.html "struct iced::widget::ProgressBar"). + +[qr\_code](fn.qr_code.html "fn iced::widget::qr_code") +: Creates a new [`QRCode`](struct.QRCode.html "struct iced::widget::QRCode") widget from the given [`Data`](qr_code/struct.Data.html "struct iced::widget::qr_code::Data"). + +[radio](fn.radio.html "fn iced::widget::radio") +: Creates a new [`Radio`](struct.Radio.html "struct iced::widget::Radio"). + +[responsive](fn.responsive.html "fn iced::widget::responsive") +: Creates a new [`Responsive`](struct.Responsive.html "struct iced::widget::Responsive") widget with a closure that produces its + contents. + +[rich\_text](fn.rich_text.html "fn iced::widget::rich_text") +: Creates a new [`Rich`](text/struct.Rich.html "struct iced::widget::text::Rich") text widget with the provided spans. + +[row](fn.row.html "fn iced::widget::row") +: Creates a new [`Row`](struct.Row.html "struct iced::widget::Row") from an iterator. + +[scrollable](fn.scrollable.html "fn iced::widget::scrollable") +: Creates a new [`Scrollable`](struct.Scrollable.html "struct iced::widget::Scrollable") with the provided content. + +[shader](fn.shader.html "fn iced::widget::shader") +: Creates a new [`Shader`](struct.Shader.html "struct iced::widget::Shader"). + +[slider](fn.slider.html "fn iced::widget::slider") +: Creates a new [`Slider`](struct.Slider.html "struct iced::widget::Slider"). + +[span](fn.span.html "fn iced::widget::span") +: Creates a new [`Span`](../advanced/text/struct.Span.html "struct iced::advanced::text::Span") of text with the provided content. + +[stack](fn.stack.html "fn iced::widget::stack") +: Creates a new [`Stack`](struct.Stack.html "struct iced::widget::Stack") with the given children. + +[svg](fn.svg.html "fn iced::widget::svg") +: Creates a new [`Svg`](struct.Svg.html "struct iced::widget::Svg") widget from the given [`Handle`](../advanced/svg/struct.Handle.html "struct iced::advanced::svg::Handle"). + +[text](fn.text.html "fn iced::widget::text") +: Creates a new [`Text`](type.Text.html "type iced::widget::Text") widget with the provided content. + +[text\_editor](fn.text_editor.html "fn iced::widget::text_editor") +: Creates a new [`TextEditor`](struct.TextEditor.html "struct iced::widget::TextEditor"). + +[text\_input](fn.text_input.html "fn iced::widget::text_input") +: Creates a new [`TextInput`](struct.TextInput.html "struct iced::widget::TextInput"). + +[themer](fn.themer.html "fn iced::widget::themer") +: A widget that applies any `Theme` to its contents. + +[toggler](fn.toggler.html "fn iced::widget::toggler") +: Creates a new [`Toggler`](struct.Toggler.html "struct iced::widget::Toggler"). + +[tooltip](fn.tooltip.html "fn iced::widget::tooltip") +: Creates a new [`Tooltip`](struct.Tooltip.html "struct iced::widget::Tooltip") for the provided content with the given + [`Element`](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element") and [`tooltip::Position`](tooltip/enum.Position.html "enum iced::widget::tooltip::Position"). + +[value](fn.value.html "fn iced::widget::value") +: Creates a new [`Text`](type.Text.html "type iced::widget::Text") widget that displays the provided value. + +[vertical\_rule](fn.vertical_rule.html "fn iced::widget::vertical_rule") +: Creates a vertical [`Rule`](struct.Rule.html "struct iced::widget::Rule") with the given width. + +[vertical\_slider](fn.vertical_slider.html "fn iced::widget::vertical_slider") +: Creates a new [`VerticalSlider`](struct.VerticalSlider.html "struct iced::widget::VerticalSlider"). + +[vertical\_space](fn.vertical_space.html "fn iced::widget::vertical_space") +: Creates a new [`Space`](struct.Space.html "struct iced::widget::Space") widget that fills the available + vertical space. + +## Type Aliases[§](#types) + +[Renderer](type.Renderer.html "type iced::widget::Renderer") +: The default graphics renderer for [`iced`](https://github.com/iced-rs/iced). + +[Text](type.Text.html "type iced::widget::Text") +: A bunch of text. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/widget/struct.Container.html](https://docs.rs/iced/0.13.1/iced/widget/struct.Container.html) + +[iced](../index.html)::[widget](index.html) + +# Struct ContainerCopy item path + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#61-66) + +``` +pub struct Container<'a, Message, Theme = Theme, Renderer = Renderer> + +where + Theme: Catalog, + Renderer: Renderer, + +{ /* private fields */ } +``` + +Expand description + +A widget that aligns its contents inside of its boundaries. + +## [§](#example)Example + +``` +use iced::widget::container; + +enum Message { + // ... +} + +fn view(state: &State) -> Element<'_, Message> { + container("This text is centered inside a rounded box!") + .padding(10) + .center(800) + .style(container::rounded_box) + .into() +} +``` + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#83-86)[§](#impl-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where Theme: [Catalog](container/trait.Catalog.html "trait iced::widget::container::Catalog"), Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#89-91) + +#### pub fn [new](#method.new)( content: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Creates a [`Container`](struct.Container.html "struct iced::widget::Container") with the given content. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#111) + +#### pub fn [id](#method.id)(self, id: [Id](container/struct.Id.html "struct iced::widget::container::Id")) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the [`Id`](container/struct.Id.html "struct iced::widget::container::Id") of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#117) + +#### pub fn [padding](#method.padding)

(self, padding: P) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where P: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Padding](../struct.Padding.html "struct iced::Padding")>, + +Sets the [`Padding`](../struct.Padding.html "struct iced::Padding") of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#123) + +#### pub fn [width](#method.width)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the width of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#129) + +#### pub fn [height](#method.height)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the height of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#135) + +#### pub fn [max\_width](#method.max_width)( self, max\_width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Pixels](../struct.Pixels.html "struct iced::Pixels")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the maximum width of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#141) + +#### pub fn [max\_height](#method.max_height)( self, max\_height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Pixels](../struct.Pixels.html "struct iced::Pixels")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the maximum height of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#147) + +#### pub fn [center\_x](#method.center_x)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the width of the [`Container`](struct.Container.html "struct iced::widget::Container") and centers its contents horizontally. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#152) + +#### pub fn [center\_y](#method.center_y)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the height of the [`Container`](struct.Container.html "struct iced::widget::Container") and centers its contents vertically. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#163) + +#### pub fn [center](#method.center)( self, length: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Centers the contents in both the horizontal and vertical axes of the +[`Container`](struct.Container.html "struct iced::widget::Container"). + +This is equivalent to chaining [`center_x`](struct.Container.html#method.center_x "method iced::widget::Container::center_x") and [`center_y`](struct.Container.html#method.center_y "method iced::widget::Container::center_y"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#170) + +#### pub fn [align\_left](#method.align_left)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Aligns the contents of the [`Container`](struct.Container.html "struct iced::widget::Container") to the left. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#175) + +#### pub fn [align\_right](#method.align_right)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Aligns the contents of the [`Container`](struct.Container.html "struct iced::widget::Container") to the right. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#180) + +#### pub fn [align\_top](#method.align_top)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Aligns the contents of the [`Container`](struct.Container.html "struct iced::widget::Container") to the top. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#185) + +#### pub fn [align\_bottom](#method.align_bottom)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Aligns the contents of the [`Container`](struct.Container.html "struct iced::widget::Container") to the bottom. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#190-193) + +#### pub fn [align\_x](#method.align_x)( self, alignment: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Horizontal](../alignment/enum.Horizontal.html "enum iced::alignment::Horizontal")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the content alignment for the horizontal axis of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#199-202) + +#### pub fn [align\_y](#method.align_y)( self, alignment: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Vertical](../alignment/enum.Vertical.html "enum iced::alignment::Vertical")>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the content alignment for the vertical axis of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#209) + +#### pub fn [clip](#method.clip)(self, clip: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets whether the contents of the [`Container`](struct.Container.html "struct iced::widget::Container") should be clipped on +overflow. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#216-218) + +#### pub fn [style](#method.style)( self, style: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")([&Theme](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Style](container/struct.Style.html "struct iced::widget::container::Style") + 'a, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where ::[Class](container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a>: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](container/struct.Style.html "struct iced::widget::container::Style") + 'a>>, + +Sets the style of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#226) + +#### pub fn [class](#method.class)( self, class: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<::[Class](container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a>>, ) -> [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +Sets the style class of the [`Container`](struct.Container.html "struct iced::widget::Container"). + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#393-398)[§](#impl-From%3CContainer%3C'a,+Message,+Theme,+Renderer%3E%3E-for-Element%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer>> for [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> where Message: 'a, Theme: [Catalog](container/trait.Catalog.html "trait iced::widget::container::Catalog") + 'a, Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer") + 'a, + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#400-402)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)( column: [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer>, ) -> [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#232-236)[§](#impl-Widget%3CMessage,+Theme,+Renderer%3E-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Widget](../advanced/trait.Widget.html "trait iced::advanced::Widget") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where Theme: [Catalog](container/trait.Catalog.html "trait iced::widget::container::Catalog"), Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#238)[§](#method.tag) + +#### fn [tag](../advanced/trait.Widget.html#method.tag)(&self) -> [Tag](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") + +Returns the [`Tag`](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#242)[§](#method.state) + +#### fn [state](../advanced/trait.Widget.html#method.state)(&self) -> [State](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") + +Returns the [`State`](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#246)[§](#method.children) + +#### fn [children](../advanced/trait.Widget.html#method.children)(&self) -> [Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")<[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")> + +Returns the state [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree") of the children of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#250)[§](#method.diff) + +#### fn [diff](../advanced/trait.Widget.html#method.diff)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")) + +Reconciles the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") with the provided [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#254)[§](#method.size) + +#### fn [size](../advanced/trait.Widget.html#tymethod.size)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns the [`Size`](../struct.Size.html "struct iced::Size") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") in lengths. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#261-266)[§](#method.layout) + +#### fn [layout](../advanced/trait.Widget.html#tymethod.layout)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), limits: &[Limits](../advanced/layout/struct.Limits.html "struct iced::advanced::layout::Limits")) -> [Node](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") + +Returns the [`layout::Node`](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#tymethod.layout) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#280-286)[§](#method.operate) + +#### fn [operate](../advanced/trait.Widget.html#method.operate)( &self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), operation: &mut dyn [Operation](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation"), ) + +Applies an [`Operation`](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation") to the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#301-311)[§](#method.on_event) + +#### fn [on\_event](../advanced/trait.Widget.html#method.on_event)( &mut self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), event: [Event](../enum.Event.html "enum iced::Event"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), clipboard: &mut dyn [Clipboard](../advanced/trait.Clipboard.html "trait iced::advanced::Clipboard"), shell: &mut [Shell](../advanced/struct.Shell.html "struct iced::advanced::Shell")<'\_, Message>, viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) -> [Status](../event/enum.Status.html "enum iced::event::Status") + +Processes a runtime [`Event`](../enum.Event.html "enum iced::Event"). [Read more](../advanced/trait.Widget.html#method.on_event) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#324-331)[§](#method.mouse_interaction) + +#### fn [mouse\_interaction](../advanced/trait.Widget.html#method.mouse_interaction)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), ) -> [Interaction](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") + +Returns the current [`mouse::Interaction`](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.mouse_interaction) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#341-350)[§](#method.draw) + +#### fn [draw](../advanced/trait.Widget.html#tymethod.draw)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&mut Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), theme: [&Theme](https://doc.rust-lang.org/nightly/std/primitive.reference.html), renderer\_style: &[Style](../advanced/renderer/struct.Style.html "struct iced::advanced::renderer::Style"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) + +Draws the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") using the associated `Renderer`. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#377-383)[§](#method.overlay) + +#### fn [overlay](../advanced/trait.Widget.html#method.overlay)<'b>( &'b mut self, tree: &'b mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), translation: [Vector](../struct.Vector.html "struct iced::Vector"), ) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[Element](../advanced/overlay/struct.Element.html "struct iced::advanced::overlay::Element")<'b, Message, Theme, Renderer>> + +Returns the overlay of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"), if there is any. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#53)[§](#method.size_hint) + +#### fn [size\_hint](../advanced/trait.Widget.html#method.size_hint)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns a [`Size`](../struct.Size.html "struct iced::Size") hint for laying out the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.size_hint) + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where ::[Class](container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a>: [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze"), + +[§](#impl-RefUnwindSafe-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +[§](#impl-Send-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +[§](#impl-Sync-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +[§](#impl-Unpin-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> where ::[Class](container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a>: [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin"), + +[§](#impl-UnwindSafe-for-Container%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Container](struct.Container.html "struct iced::widget::Container")<'a, Message, Theme, Renderer> + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/widget/struct.Column.html](https://docs.rs/iced/0.13.1/iced/widget/struct.Column.html) + +[iced](../index.html)::[widget](index.html) + +# Struct ColumnCopy item path + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#37) + +``` +pub struct Column<'a, Message, Theme = Theme, Renderer = Renderer> { /* private fields */ } +``` + +Expand description + +A container that distributes its contents vertically. + +## [§](#example)Example + +``` +use iced::widget::{button, column}; + +#[derive(Debug, Clone)] +enum Message { + // ... +} + +fn view(state: &State) -> Element<'_, Message> { + column![ + "I am on top!", + button("I am in the center!"), + "I am below.", + ].into() +} +``` + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#49-51)[§](#impl-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#54) + +#### pub fn [new](#method.new)() -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Creates an empty [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#59) + +#### pub fn [with\_capacity](#method.with_capacity)(capacity: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Creates a [`Column`](struct.Column.html "struct iced::widget::Column") with the given capacity. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#64-66) + +#### pub fn [with\_children](#method.with_children)( children: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Creates a [`Column`](struct.Column.html "struct iced::widget::Column") with the given elements. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#79-81) + +#### pub fn [from\_vec](#method.from_vec)( children: [Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Creates a [`Column`](struct.Column.html "struct iced::widget::Column") from an already allocated [`Vec`](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec"). + +Keep in mind that the [`Column`](struct.Column.html "struct iced::widget::Column") will not inspect the [`Vec`](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec"), which means +it won’t automatically adapt to the sizing strategy of its contents. + +If any of the children have a [`Length::Fill`](../enum.Length.html#variant.Fill "variant iced::Length::Fill") strategy, you will need to +call [`Column::width`](struct.Column.html#method.width "method iced::widget::Column::width") or [`Column::height`](struct.Column.html#method.height "method iced::widget::Column::height") accordingly. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#99) + +#### pub fn [spacing](#method.spacing)( self, amount: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Pixels](../struct.Pixels.html "struct iced::Pixels")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets the vertical spacing *between* elements. + +Custom margins per element do not exist in iced. You should use this +method instead! While less flexible, it helps you keep spacing between +elements consistent. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#105) + +#### pub fn [padding](#method.padding)

(self, padding: P) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> where P: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Padding](../struct.Padding.html "struct iced::Padding")>, + +Sets the [`Padding`](../struct.Padding.html "struct iced::Padding") of the [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#111) + +#### pub fn [width](#method.width)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets the width of the [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#117) + +#### pub fn [height](#method.height)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets the height of the [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#123) + +#### pub fn [max\_width](#method.max_width)( self, max\_width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Pixels](../struct.Pixels.html "struct iced::Pixels")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets the maximum width of the [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#129) + +#### pub fn [align\_x](#method.align_x)( self, align: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Horizontal](../alignment/enum.Horizontal.html "enum iced::alignment::Horizontal")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets the horizontal alignment of the contents of the [`Column`](struct.Column.html "struct iced::widget::Column") . + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#136) + +#### pub fn [clip](#method.clip)(self, clip: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Sets whether the contents of the [`Column`](struct.Column.html "struct iced::widget::Column") should be clipped on +overflow. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#142-145) + +#### pub fn [push](#method.push)( self, child: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Adds an element to the [`Column`](struct.Column.html "struct iced::widget::Column"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#157-160) + +#### pub fn [push\_maybe](#method.push_maybe)( self, child: [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")>>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Adds an element to the [`Column`](struct.Column.html "struct iced::widget::Column"), if `Some`. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#169-172) + +#### pub fn [extend](#method.extend)( self, children: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, ) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +Extends the [`Column`](struct.Column.html "struct iced::widget::Column") with the given children. + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#177-179)[§](#impl-Default-for-Column%3C'a,+Message,+Renderer%3E) + +### impl<'a, Message, Renderer> [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#181)[§](#method.default) + +#### fn [default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default)() -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Renderer> + +Returns the “default value” for a type. [Read more](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#363-368)[§](#impl-From%3CColumn%3C'a,+Message,+Theme,+Renderer%3E%3E-for-Element%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer>> for [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> where Message: 'a, Theme: 'a, Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer") + 'a, + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#370)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)( column: [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer>, ) -> [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#186-188)[§](#impl-FromIterator%3CElement%3C'a,+Message,+Theme,+Renderer%3E%3E-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [FromIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html "trait core::iter::traits::collect::FromIterator")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>> for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#190-194)[§](#method.from_iter) + +#### fn [from\_iter](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter)(iter: T) -> [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> where T: [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, + +Creates a value from an iterator. [Read more](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#199-202)[§](#impl-Widget%3CMessage,+Theme,+Renderer%3E-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Widget](../advanced/trait.Widget.html "trait iced::advanced::Widget") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#204)[§](#method.children) + +#### fn [children](../advanced/trait.Widget.html#method.children)(&self) -> [Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")<[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")> + +Returns the state [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree") of the children of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#208)[§](#method.diff) + +#### fn [diff](../advanced/trait.Widget.html#method.diff)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")) + +Reconciles the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") with the provided [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#212)[§](#method.size) + +#### fn [size](../advanced/trait.Widget.html#tymethod.size)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns the [`Size`](../struct.Size.html "struct iced::Size") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") in lengths. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#219-224)[§](#method.layout) + +#### fn [layout](../advanced/trait.Widget.html#tymethod.layout)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), limits: &[Limits](../advanced/layout/struct.Limits.html "struct iced::advanced::layout::Limits")) -> [Node](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") + +Returns the [`layout::Node`](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#tymethod.layout) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#241-247)[§](#method.operate) + +#### fn [operate](../advanced/trait.Widget.html#method.operate)( &self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), operation: &mut dyn [Operation](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation"), ) + +Applies an [`Operation`](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation") to the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#261-271)[§](#method.on_event) + +#### fn [on\_event](../advanced/trait.Widget.html#method.on_event)( &mut self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), event: [Event](../enum.Event.html "enum iced::Event"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), clipboard: &mut dyn [Clipboard](../advanced/trait.Clipboard.html "trait iced::advanced::Clipboard"), shell: &mut [Shell](../advanced/struct.Shell.html "struct iced::advanced::Shell")<'\_, Message>, viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) -> [Status](../event/enum.Status.html "enum iced::event::Status") + +Processes a runtime [`Event`](../enum.Event.html "enum iced::Event"). [Read more](../advanced/trait.Widget.html#method.on_event) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#291-298)[§](#method.mouse_interaction) + +#### fn [mouse\_interaction](../advanced/trait.Widget.html#method.mouse_interaction)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), ) -> [Interaction](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") + +Returns the current [`mouse::Interaction`](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.mouse_interaction) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#312-321)[§](#method.draw) + +#### fn [draw](../advanced/trait.Widget.html#tymethod.draw)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&mut Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), theme: [&Theme](https://doc.rust-lang.org/nightly/std/primitive.reference.html), style: &[Style](../advanced/renderer/struct.Style.html "struct iced::advanced::renderer::Style"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) + +Draws the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") using the associated `Renderer`. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/column.rs.html#346-352)[§](#method.overlay) + +#### fn [overlay](../advanced/trait.Widget.html#method.overlay)<'b>( &'b mut self, tree: &'b mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), translation: [Vector](../struct.Vector.html "struct iced::Vector"), ) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[Element](../advanced/overlay/struct.Element.html "struct iced::advanced::overlay::Element")<'b, Message, Theme, Renderer>> + +Returns the overlay of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"), if there is any. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#53)[§](#method.size_hint) + +#### fn [size\_hint](../advanced/trait.Widget.html#method.size_hint)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns a [`Size`](../struct.Size.html "struct iced::Size") hint for laying out the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.size_hint) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#83)[§](#method.tag) + +#### fn [tag](../advanced/trait.Widget.html#method.tag)(&self) -> [Tag](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") + +Returns the [`Tag`](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#90)[§](#method.state) + +#### fn [state](../advanced/trait.Widget.html#method.state)(&self) -> [State](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") + +Returns the [`State`](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +[§](#impl-RefUnwindSafe-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +[§](#impl-Send-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +[§](#impl-Sync-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +[§](#impl-Unpin-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +[§](#impl-UnwindSafe-for-Column%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Column](struct.Column.html "struct iced::widget::Column")<'a, Message, Theme, Renderer> + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#31-33)[§](#impl-NoneValue-for-T) + +### impl [NoneValue](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html "trait zvariant::optional::NoneValue") for T where T: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#35)[§](#associatedtype.NoneType) + +#### type [NoneType](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#associatedtype.NoneType) = T + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#37)[§](#method.null_value) + +#### fn [null\_value](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#tymethod.null_value)() -> T + +The none-equivalent value. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#347)[§](#impl-ReadPrimitive%3CR%3E-for-P) + +### impl [ReadPrimitive](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html "trait lebe::io::ReadPrimitive") for P where R: [Read](https://doc.rust-lang.org/nightly/std/io/trait.Read.html "trait std::io::Read") + [ReadEndian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadEndian.html "trait lebe::io::ReadEndian")

, P: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#377)[§](#method.read_from_little_endian) + +#### fn [read\_from\_little\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_little_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_little_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#382)[§](#method.read_from_big_endian) + +#### fn [read\_from\_big\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_big_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_big_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#387)[§](#method.read_from_native_endian) + +#### fn [read\_from\_native\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_native_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_native_endian()`. + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/widget/struct.Row.html](https://docs.rs/iced/0.13.1/iced/widget/struct.Row.html) + +[iced](../index.html)::[widget](index.html) + +# Struct RowCopy item path + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#37) + +``` +pub struct Row<'a, Message, Theme = Theme, Renderer = Renderer> { /* private fields */ } +``` + +Expand description + +A container that distributes its contents horizontally. + +## [§](#example)Example + +``` +use iced::widget::{button, row}; + +#[derive(Debug, Clone)] +enum Message { + // ... +} + +fn view(state: &State) -> Element<'_, Message> { + row![ + "I am to the left!", + button("I am in the middle!"), + "I am to the right!", + ].into() +} +``` + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#47-49)[§](#impl-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#52) + +#### pub fn [new](#method.new)() -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Creates an empty [`Row`](struct.Row.html "struct iced::widget::Row"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#57) + +#### pub fn [with\_capacity](#method.with_capacity)(capacity: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Creates a [`Row`](struct.Row.html "struct iced::widget::Row") with the given capacity. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#62-64) + +#### pub fn [with\_children](#method.with_children)( children: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Creates a [`Row`](struct.Row.html "struct iced::widget::Row") with the given elements. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#77-79) + +#### pub fn [from\_vec](#method.from_vec)( children: [Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Creates a [`Row`](struct.Row.html "struct iced::widget::Row") from an already allocated [`Vec`](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec"). + +Keep in mind that the [`Row`](struct.Row.html "struct iced::widget::Row") will not inspect the [`Vec`](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec"), which means +it won’t automatically adapt to the sizing strategy of its contents. + +If any of the children have a [`Length::Fill`](../enum.Length.html#variant.Fill "variant iced::Length::Fill") strategy, you will need to +call [`Row::width`](struct.Row.html#method.width "method iced::widget::Row::width") or [`Row::height`](struct.Row.html#method.height "method iced::widget::Row::height") accordingly. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#96) + +#### pub fn [spacing](#method.spacing)( self, amount: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Pixels](../struct.Pixels.html "struct iced::Pixels")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Sets the horizontal spacing *between* elements. + +Custom margins per element do not exist in iced. You should use this +method instead! While less flexible, it helps you keep spacing between +elements consistent. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#102) + +#### pub fn [padding](#method.padding)

(self, padding: P) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> where P: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Padding](../struct.Padding.html "struct iced::Padding")>, + +Sets the [`Padding`](../struct.Padding.html "struct iced::Padding") of the [`Row`](struct.Row.html "struct iced::widget::Row"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#108) + +#### pub fn [width](#method.width)( self, width: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Sets the width of the [`Row`](struct.Row.html "struct iced::widget::Row"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#114) + +#### pub fn [height](#method.height)( self, height: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Length](../enum.Length.html "enum iced::Length")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Sets the height of the [`Row`](struct.Row.html "struct iced::widget::Row"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#120) + +#### pub fn [align\_y](#method.align_y)( self, align: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Vertical](../alignment/enum.Vertical.html "enum iced::alignment::Vertical")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Sets the vertical alignment of the contents of the [`Row`](struct.Row.html "struct iced::widget::Row") . + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#127) + +#### pub fn [clip](#method.clip)(self, clip: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Sets whether the contents of the [`Row`](struct.Row.html "struct iced::widget::Row") should be clipped on +overflow. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#133-136) + +#### pub fn [push](#method.push)( self, child: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Adds an [`Element`](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element") to the [`Row`](struct.Row.html "struct iced::widget::Row"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#148-151) + +#### pub fn [push\_maybe](#method.push_maybe)( self, child: [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")>>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Adds an element to the [`Row`](struct.Row.html "struct iced::widget::Row"), if `Some`. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#160-163) + +#### pub fn [extend](#method.extend)( self, children: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, ) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +Extends the [`Row`](struct.Row.html "struct iced::widget::Row") with the given children. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#170) + +#### pub fn [wrap](#method.wrap)(self) -> Wrapping<'a, Message, Theme, Renderer> + +Turns the [`Row`](struct.Row.html "struct iced::widget::Row") into a [`Wrapping`] row. + +The original alignment of the [`Row`](struct.Row.html "struct iced::widget::Row") is preserved per row wrapped. + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#175-177)[§](#impl-Default-for-Row%3C'a,+Message,+Renderer%3E) + +### impl<'a, Message, Renderer> [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#179)[§](#method.default) + +#### fn [default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default)() -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Renderer> + +Returns the “default value” for a type. [Read more](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#359-364)[§](#impl-From%3CRow%3C'a,+Message,+Theme,+Renderer%3E%3E-for-Element%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer>> for [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> where Message: 'a, Theme: 'a, Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer") + 'a, + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#366)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)( row: [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer>, ) -> [Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer> + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#184-186)[§](#impl-FromIterator%3CElement%3C'a,+Message,+Theme,+Renderer%3E%3E-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [FromIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html "trait core::iter::traits::collect::FromIterator")<[Element](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/iced_core/element/struct.Element.html "struct iced_core::element::Element")<'a, Message, Theme, Renderer>> for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#188-192)[§](#method.from_iter) + +#### fn [from\_iter](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter)(iter: T) -> [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> where T: [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, + +Creates a value from an iterator. [Read more](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#197-200)[§](#impl-Widget%3CMessage,+Theme,+Renderer%3E-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Widget](../advanced/trait.Widget.html "trait iced::advanced::Widget") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> where Renderer: [Renderer](../advanced/trait.Renderer.html "trait iced::advanced::Renderer"), + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#202)[§](#method.children) + +#### fn [children](../advanced/trait.Widget.html#method.children)(&self) -> [Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")<[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")> + +Returns the state [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree") of the children of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#206)[§](#method.diff) + +#### fn [diff](../advanced/trait.Widget.html#method.diff)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree")) + +Reconciles the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") with the provided [`Tree`](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#210)[§](#method.size) + +#### fn [size](../advanced/trait.Widget.html#tymethod.size)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns the [`Size`](../struct.Size.html "struct iced::Size") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") in lengths. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#217-222)[§](#method.layout) + +#### fn [layout](../advanced/trait.Widget.html#tymethod.layout)(&self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), limits: &[Limits](../advanced/layout/struct.Limits.html "struct iced::advanced::layout::Limits")) -> [Node](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") + +Returns the [`layout::Node`](../advanced/layout/struct.Node.html "struct iced::advanced::layout::Node") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#tymethod.layout) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#237-243)[§](#method.operate) + +#### fn [operate](../advanced/trait.Widget.html#method.operate)( &self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), operation: &mut dyn [Operation](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation"), ) + +Applies an [`Operation`](../advanced/widget/trait.Operation.html "trait iced::advanced::widget::Operation") to the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#257-267)[§](#method.on_event) + +#### fn [on\_event](../advanced/trait.Widget.html#method.on_event)( &mut self, tree: &mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), event: [Event](../enum.Event.html "enum iced::Event"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), clipboard: &mut dyn [Clipboard](../advanced/trait.Clipboard.html "trait iced::advanced::Clipboard"), shell: &mut [Shell](../advanced/struct.Shell.html "struct iced::advanced::Shell")<'\_, Message>, viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) -> [Status](../event/enum.Status.html "enum iced::event::Status") + +Processes a runtime [`Event`](../enum.Event.html "enum iced::Event"). [Read more](../advanced/trait.Widget.html#method.on_event) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#287-294)[§](#method.mouse_interaction) + +#### fn [mouse\_interaction](../advanced/trait.Widget.html#method.mouse_interaction)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), ) -> [Interaction](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") + +Returns the current [`mouse::Interaction`](../mouse/enum.Interaction.html "enum iced::mouse::Interaction") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.mouse_interaction) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#308-317)[§](#method.draw) + +#### fn [draw](../advanced/trait.Widget.html#tymethod.draw)( &self, tree: &[Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), renderer: [&mut Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), theme: [&Theme](https://doc.rust-lang.org/nightly/std/primitive.reference.html), style: &[Style](../advanced/renderer/struct.Style.html "struct iced::advanced::renderer::Style"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, cursor: [Cursor](../mouse/enum.Cursor.html "enum iced::mouse::Cursor"), viewport: &[Rectangle](../struct.Rectangle.html "struct iced::Rectangle"), ) + +Draws the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget") using the associated `Renderer`. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/row.rs.html#342-348)[§](#method.overlay) + +#### fn [overlay](../advanced/trait.Widget.html#method.overlay)<'b>( &'b mut self, tree: &'b mut [Tree](../advanced/widget/struct.Tree.html "struct iced::advanced::widget::Tree"), layout: [Layout](../advanced/struct.Layout.html "struct iced::advanced::Layout")<'\_>, renderer: [&Renderer](https://doc.rust-lang.org/nightly/std/primitive.reference.html), translation: [Vector](../struct.Vector.html "struct iced::Vector"), ) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[Element](../advanced/overlay/struct.Element.html "struct iced::advanced::overlay::Element")<'b, Message, Theme, Renderer>> + +Returns the overlay of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"), if there is any. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#53)[§](#method.size_hint) + +#### fn [size\_hint](../advanced/trait.Widget.html#method.size_hint)(&self) -> [Size](../struct.Size.html "struct iced::Size")<[Length](../enum.Length.html "enum iced::Length")> + +Returns a [`Size`](../struct.Size.html "struct iced::Size") hint for laying out the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). [Read more](../advanced/trait.Widget.html#method.size_hint) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#83)[§](#method.tag) + +#### fn [tag](../advanced/trait.Widget.html#method.tag)(&self) -> [Tag](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") + +Returns the [`Tag`](../advanced/widget/tree/struct.Tag.html "struct iced::advanced::widget::tree::Tag") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget.rs.html#90)[§](#method.state) + +#### fn [state](../advanced/trait.Widget.html#method.state)(&self) -> [State](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") + +Returns the [`State`](../advanced/widget/tree/enum.State.html "enum iced::advanced::widget::tree::State") of the [`Widget`](../advanced/trait.Widget.html "trait iced::advanced::Widget"). + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +[§](#impl-RefUnwindSafe-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +[§](#impl-Send-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +[§](#impl-Sync-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +[§](#impl-Unpin-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme, Renderer> [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +[§](#impl-UnwindSafe-for-Row%3C'a,+Message,+Theme,+Renderer%3E) + +### impl<'a, Message, Theme = [Theme](../enum.Theme.html "enum iced::Theme"), Renderer = [Renderer](https://docs.rs/iced_renderer/0.13.0/x86_64-unknown-linux-gnu/iced_renderer/fallback/enum.Renderer.html "enum iced_renderer::fallback::Renderer")<[Renderer](https://docs.rs/iced_wgpu/0.13.5/x86_64-unknown-linux-gnu/iced_wgpu/struct.Renderer.html "struct iced_wgpu::Renderer"), [Renderer](https://docs.rs/iced_tiny_skia/0.13.0/x86_64-unknown-linux-gnu/iced_tiny_skia/struct.Renderer.html "struct iced_tiny_skia::Renderer")>> ![UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Row](struct.Row.html "struct iced::widget::Row")<'a, Message, Theme, Renderer> + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#31-33)[§](#impl-NoneValue-for-T) + +### impl [NoneValue](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html "trait zvariant::optional::NoneValue") for T where T: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#35)[§](#associatedtype.NoneType) + +#### type [NoneType](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#associatedtype.NoneType) = T + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#37)[§](#method.null_value) + +#### fn [null\_value](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#tymethod.null_value)() -> T + +The none-equivalent value. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#347)[§](#impl-ReadPrimitive%3CR%3E-for-P) + +### impl [ReadPrimitive](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html "trait lebe::io::ReadPrimitive") for P where R: [Read](https://doc.rust-lang.org/nightly/std/io/trait.Read.html "trait std::io::Read") + [ReadEndian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadEndian.html "trait lebe::io::ReadEndian")

, P: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#377)[§](#method.read_from_little_endian) + +#### fn [read\_from\_little\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_little_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_little_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#382)[§](#method.read_from_big_endian) + +#### fn [read\_from\_big\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_big_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_big_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#387)[§](#method.read_from_native_endian) + +#### fn [read\_from\_native\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_native_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_native_endian()`. + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/enum.Length.html](https://docs.rs/iced/0.13.1/iced/enum.Length.html) + +[iced](index.html) + +# Enum LengthCopy item path + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#5) + +``` +pub enum Length { + Fill, + FillPortion(u16), + Shrink, + Fixed(f32), +} +``` + +Expand description + +The strategy used to fill space in a specific dimension. + +## Variants[§](#variants) + +[§](#variant.Fill) + +### Fill + +Fill all the remaining space + +[§](#variant.FillPortion) + +### FillPortion([u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html)) + +Fill a portion of the remaining space relative to other elements. + +Let’s say we have two elements: one with `FillPortion(2)` and one with +`FillPortion(3)`. The first will get 2 portions of the available space, +while the second one would get 3. + +`Length::Fill` is equivalent to `Length::FillPortion(1)`. + +[§](#variant.Shrink) + +### Shrink + +Fill the least amount of space + +[§](#variant.Fixed) + +### Fixed([f32](https://doc.rust-lang.org/nightly/std/primitive.f32.html)) + +Fill a fixed amount of space + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#25)[§](#impl-Length) + +### impl [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#31) + +#### pub fn [fill\_factor](#method.fill_factor)(&self) -> [u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html) + +Returns the *fill factor* of the [`Length`](enum.Length.html "enum iced::Length"). + +The *fill factor* is a relative unit describing how much of the +remaining space should be filled when compared to other elements. It +is only meant to be used by layout engines. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#42) + +#### pub fn [is\_fill](#method.is_fill)(&self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Returns `true` iff the [`Length`](enum.Length.html "enum iced::Length") is either [`Length::Fill`](enum.Length.html#variant.Fill "variant iced::Length::Fill") or + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#51) + +#### pub fn [fluid](#method.fluid)(&self) -> [Length](enum.Length.html "enum iced::Length") + +Returns the “fluid” variant of the [`Length`](enum.Length.html "enum iced::Length"). + +Specifically: + +* [`Length::Shrink`](enum.Length.html#variant.Shrink "variant iced::Length::Shrink") if [`Length::Shrink`](enum.Length.html#variant.Shrink "variant iced::Length::Shrink") or [`Length::Fixed`](enum.Length.html#variant.Fixed "variant iced::Length::Fixed"). +* [`Length::Fill`](enum.Length.html#variant.Fill "variant iced::Length::Fill") otherwise. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#60) + +#### pub fn [enclose](#method.enclose)(self, other: [Length](enum.Length.html "enum iced::Length")) -> [Length](enum.Length.html "enum iced::Length") + +Adapts the [`Length`](enum.Length.html "enum iced::Length") so it can contain the other [`Length`](enum.Length.html "enum iced::Length") and +match its fluidity. + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#impl-Clone-for-Length) + +### impl [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#method.clone) + +#### fn [clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone)(&self) -> [Length](enum.Length.html "enum iced::Length") + +Returns a duplicate of the value. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone) + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#213-215)[§](#method.clone_from) + +#### fn [clone\_from](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from)(&mut self, source: &Self) + +Performs copy-assignment from `source`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#impl-Debug-for-Length) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html), [Error](https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html "struct core::fmt::Error")> + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#68)[§](#impl-From%3CPixels%3E-for-Length) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Pixels](struct.Pixels.html "struct iced::Pixels")> for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#69)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(amount: [Pixels](struct.Pixels.html "struct iced::Pixels")) -> [Length](enum.Length.html "enum iced::Length") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#74)[§](#impl-From%3Cf32%3E-for-Length) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[f32](https://doc.rust-lang.org/nightly/std/primitive.f32.html)> for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#75)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(amount: [f32](https://doc.rust-lang.org/nightly/std/primitive.f32.html)) -> [Length](enum.Length.html "enum iced::Length") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#80)[§](#impl-From%3Cu16%3E-for-Length) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html)> for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#81)[§](#method.from-2) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(units: [u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html)) -> [Length](enum.Length.html "enum iced::Length") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#impl-PartialEq-for-Length) + +### impl [PartialEq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html "trait core::cmp::PartialEq") for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#method.eq) + +#### fn [eq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq)(&self, other: &[Length](enum.Length.html "enum iced::Length")) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `self` and `other` values to be equal, and is used by `==`. + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#265)[§](#method.ne) + +#### fn [ne](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne)(&self, other: [&Rhs](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `!=`. The default implementation is almost always sufficient, +and should not be overridden without very good reason. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#impl-Copy-for-Length) + +### impl [Copy](https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html "trait core::marker::Copy") for [Length](enum.Length.html "enum iced::Length") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/length.rs.html#4)[§](#impl-StructuralPartialEq-for-Length) + +### impl [StructuralPartialEq](https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html "trait core::marker::StructuralPartialEq") for [Length](enum.Length.html "enum iced::Length") + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Length) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Length](enum.Length.html "enum iced::Length") + +[§](#impl-RefUnwindSafe-for-Length) + +### impl [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Length](enum.Length.html "enum iced::Length") + +[§](#impl-Send-for-Length) + +### impl [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Length](enum.Length.html "enum iced::Length") + +[§](#impl-Sync-for-Length) + +### impl [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Length](enum.Length.html "enum iced::Length") + +[§](#impl-Unpin-for-Length) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Length](enum.Length.html "enum iced::Length") + +[§](#impl-UnwindSafe-for-Length) + +### impl [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Length](enum.Length.html "enum iced::Length") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#483)[§](#impl-CloneToUninit-for-T) + +### impl [CloneToUninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html "trait core::clone::CloneToUninit") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#485)[§](#method.clone_to_uninit) + +#### unsafe fn [clone\_to\_uninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit)(&self, dest: [\*mut](https://doc.rust-lang.org/nightly/std/primitive.pointer.html) [u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)) + +🔬This is a nightly-only experimental API. (`clone_to_uninit`) + +Performs copy-assignment from `self` to `dest`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-3) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#82-84)[§](#impl-ToOwned-for-T) + +### impl [ToOwned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html "trait alloc::borrow::ToOwned") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#86)[§](#associatedtype.Owned) + +#### type [Owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned) = T + +The resulting type after obtaining ownership. + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#87)[§](#method.to_owned) + +#### fn [to\_owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned)(&self) -> T + +Creates owned data from borrowed data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned) + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#91)[§](#method.clone_into) + +#### fn [clone\_into](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into)(&self, target: [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) + +Uses borrowed data to replace owned data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/alignment/index.html](https://docs.rs/iced/0.13.1/iced/alignment/index.html) + +[iced](../index.html) + +# Module alignmentCopy item path + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/lib.rs.html#12) + +Expand description + +Align and position widgets. + +## Enums[§](#enums) + +[Alignment](enum.Alignment.html "enum iced::alignment::Alignment") +: Alignment on the axis of a container. + +[Horizontal](enum.Horizontal.html "enum iced::alignment::Horizontal") +: The horizontal [`Alignment`](../enum.Alignment.html "enum iced::Alignment") of some resource. + +[Vertical](enum.Vertical.html "enum iced::alignment::Vertical") +: The vertical [`Alignment`](../enum.Alignment.html "enum iced::Alignment") of some resource. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/enum.Alignment.html](https://docs.rs/iced/0.13.1/iced/enum.Alignment.html) + +[iced](index.html) + +# Enum AlignmentCopy item path + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#5) + +``` +pub enum Alignment { + Start, + Center, + End, +} +``` + +Expand description + +Alignment on the axis of a container. + +## Variants[§](#variants) + +[§](#variant.Start) + +### Start + +Align at the start of the axis. + +[§](#variant.Center) + +### Center + +Align at the center of the axis. + +[§](#variant.End) + +### End + +Align at the end of the axis. + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-Clone-for-Alignment) + +### impl [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#method.clone) + +#### fn [clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone)(&self) -> [Alignment](enum.Alignment.html "enum iced::Alignment") + +Returns a duplicate of the value. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone) + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#213-215)[§](#method.clone_from) + +#### fn [clone\_from](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from)(&mut self, source: &Self) + +Performs copy-assignment from `source`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-Debug-for-Alignment) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html), [Error](https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html "struct core::fmt::Error")> + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#49)[§](#impl-From%3CAlignment%3E-for-Horizontal) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Alignment](enum.Alignment.html "enum iced::Alignment")> for [Horizontal](alignment/enum.Horizontal.html "enum iced::alignment::Horizontal") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#50)[§](#method.from-2) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(alignment: [Alignment](enum.Alignment.html "enum iced::Alignment")) -> [Horizontal](alignment/enum.Horizontal.html "enum iced::alignment::Horizontal") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#72)[§](#impl-From%3CAlignment%3E-for-Vertical) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Alignment](enum.Alignment.html "enum iced::Alignment")> for [Vertical](alignment/enum.Vertical.html "enum iced::alignment::Vertical") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#73)[§](#method.from-3) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(alignment: [Alignment](enum.Alignment.html "enum iced::Alignment")) -> [Vertical](alignment/enum.Vertical.html "enum iced::alignment::Vertical") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#16)[§](#impl-From%3CHorizontal%3E-for-Alignment) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Horizontal](alignment/enum.Horizontal.html "enum iced::alignment::Horizontal")> for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#17)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(horizontal: [Horizontal](alignment/enum.Horizontal.html "enum iced::alignment::Horizontal")) -> [Alignment](enum.Alignment.html "enum iced::Alignment") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#26)[§](#impl-From%3CVertical%3E-for-Alignment) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Vertical](alignment/enum.Vertical.html "enum iced::alignment::Vertical")> for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#27)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(vertical: [Vertical](alignment/enum.Vertical.html "enum iced::alignment::Vertical")) -> [Alignment](enum.Alignment.html "enum iced::Alignment") + +Converts to this type from the input type. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-Hash-for-Alignment) + +### impl [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html "trait core::hash::Hash") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#method.hash) + +#### fn [hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash)<\_\_H>(&self, state: [&mut \_\_H](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) where \_\_H: [Hasher](https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html "trait core::hash::Hasher"), + +Feeds this value into the given [`Hasher`](https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html "trait core::hash::Hasher"). [Read more](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash) + +1.3.0 · [Source](https://doc.rust-lang.org/nightly/src/core/hash/mod.rs.html#235-237)[§](#method.hash_slice) + +#### fn [hash\_slice](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice)(data: &[Self], state: [&mut H](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) where H: [Hasher](https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html "trait core::hash::Hasher"), Self: [Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +Feeds a slice of this type into the given [`Hasher`](https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html "trait core::hash::Hasher"). [Read more](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-PartialEq-for-Alignment) + +### impl [PartialEq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html "trait core::cmp::PartialEq") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#method.eq) + +#### fn [eq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq)(&self, other: &[Alignment](enum.Alignment.html "enum iced::Alignment")) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `self` and `other` values to be equal, and is used by `==`. + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#265)[§](#method.ne) + +#### fn [ne](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne)(&self, other: [&Rhs](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `!=`. The default implementation is almost always sufficient, +and should not be overridden without very good reason. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-Copy-for-Alignment) + +### impl [Copy](https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html "trait core::marker::Copy") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-Eq-for-Alignment) + +### impl [Eq](https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html "trait core::cmp::Eq") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/alignment.rs.html#4)[§](#impl-StructuralPartialEq-for-Alignment) + +### impl [StructuralPartialEq](https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html "trait core::marker::StructuralPartialEq") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Alignment) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[§](#impl-RefUnwindSafe-for-Alignment) + +### impl [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[§](#impl-Send-for-Alignment) + +### impl [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[§](#impl-Sync-for-Alignment) + +### impl [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[§](#impl-Unpin-for-Alignment) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +[§](#impl-UnwindSafe-for-Alignment) + +### impl [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Alignment](enum.Alignment.html "enum iced::Alignment") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/ahash/0.8.12/x86_64-unknown-linux-gnu/src/ahash/specialize.rs.html#59-61)[§](#impl-CallHasher-for-T) + +### impl [CallHasher](https://docs.rs/ahash/0.8.12/x86_64-unknown-linux-gnu/ahash/specialize/trait.CallHasher.html "trait ahash::specialize::CallHasher") for T where T: [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html "trait core::hash::Hash") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://docs.rs/ahash/0.8.12/x86_64-unknown-linux-gnu/src/ahash/specialize.rs.html#64)[§](#method.get_hash) + +#### default fn [get\_hash](https://docs.rs/ahash/0.8.12/x86_64-unknown-linux-gnu/ahash/specialize/trait.CallHasher.html#tymethod.get_hash)(value: [&H](https://doc.rust-lang.org/nightly/std/primitive.reference.html), build\_hasher: [&B](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [u64](https://doc.rust-lang.org/nightly/std/primitive.u64.html) where H: [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html "trait core::hash::Hash") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), B: [BuildHasher](https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html "trait core::hash::BuildHasher"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#483)[§](#impl-CloneToUninit-for-T) + +### impl [CloneToUninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html "trait core::clone::CloneToUninit") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#485)[§](#method.clone_to_uninit) + +#### unsafe fn [clone\_to\_uninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit)(&self, dest: [\*mut](https://doc.rust-lang.org/nightly/std/primitive.pointer.html) [u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)) + +🔬This is a nightly-only experimental API. (`clone_to_uninit`) + +Performs copy-assignment from `self` to `dest`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/src/hashbrown/lib.rs.html#166-169)[§](#impl-Equivalent%3CK%3E-for-Q) + +### impl [Equivalent](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html "trait hashbrown::Equivalent") for Q where Q: [Eq](https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html "trait core::cmp::Eq") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), K: [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/src/hashbrown/lib.rs.html#171)[§](#method.equivalent) + +#### fn [equivalent](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html#tymethod.equivalent)(&self, key: [&K](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Checks if this value is equivalent to the given key. [Read more](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html#tymethod.equivalent) + +[Source](https://docs.rs/equivalent/1.0.2/x86_64-unknown-linux-gnu/src/equivalent/lib.rs.html#82-85)[§](#impl-Equivalent%3CK%3E-for-Q-1) + +### impl [Equivalent](https://docs.rs/equivalent/1.0.2/x86_64-unknown-linux-gnu/equivalent/trait.Equivalent.html "trait equivalent::Equivalent") for Q where Q: [Eq](https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html "trait core::cmp::Eq") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), K: [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://docs.rs/equivalent/1.0.2/x86_64-unknown-linux-gnu/src/equivalent/lib.rs.html#88)[§](#method.equivalent-1) + +#### fn [equivalent](https://docs.rs/equivalent/1.0.2/x86_64-unknown-linux-gnu/equivalent/trait.Equivalent.html#tymethod.equivalent)(&self, key: [&K](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Compare self to `key` and return `true` if they are equal. + +[Source](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/src/hashbrown/lib.rs.html#166-169)[§](#impl-Equivalent%3CK%3E-for-Q-2) + +### impl [Equivalent](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html "trait hashbrown::Equivalent") for Q where Q: [Eq](https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html "trait core::cmp::Eq") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), K: [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/src/hashbrown/lib.rs.html#171)[§](#method.equivalent-2) + +#### fn [equivalent](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html#tymethod.equivalent)(&self, key: [&K](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Checks if this value is equivalent to the given key. [Read more](https://docs.rs/hashbrown/0.14.5/x86_64-unknown-linux-gnu/hashbrown/trait.Equivalent.html#tymethod.equivalent) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-4) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#82-84)[§](#impl-ToOwned-for-T) + +### impl [ToOwned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html "trait alloc::borrow::ToOwned") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#86)[§](#associatedtype.Owned) + +#### type [Owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned) = T + +The resulting type after obtaining ownership. + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#87)[§](#method.to_owned) + +#### fn [to\_owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned)(&self) -> T + +Creates owned data from borrowed data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned) + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#91)[§](#method.clone_into) + +#### fn [clone\_into](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into)(&self, target: [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) + +Uses borrowed data to replace owned data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/type.Element.html](https://docs.rs/iced/0.13.1/iced/type.Element.html) + +[iced](index.html) + +# Type Alias ElementCopy item path + +[Source](../src/iced/lib.rs.html#634-639) + +``` +pub type Element<'a, Message, Theme = Theme, Renderer = Renderer> = Element<'a, Message, Theme, Renderer>; +``` + +Expand description + +A generic widget. + +This is an alias of an `iced_native` element with a default `Renderer`. + +## Aliased Type[§](#aliased-type) + +``` +pub struct Element<'a, Message, Theme = Theme, Renderer = Renderer> { /* private fields */ } +``` + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/struct.Task.html](https://docs.rs/iced/0.13.1/iced/struct.Task.html) + +[iced](index.html) + +# Struct TaskCopy item path + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#18) + +``` +pub struct Task(/* private fields */); +``` + +Expand description + +A set of concurrent actions to be performed by the iced runtime. + +A [`Task`](struct.Task.html "struct iced::Task") *may* produce a bunch of values of type `T`. + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#20)[§](#impl-Task%3CT%3E) + +### impl [Task](struct.Task.html "struct iced::Task") + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#22) + +#### pub fn [none](#method.none)() -> [Task](struct.Task.html "struct iced::Task") + +Creates a [`Task`](struct.Task.html "struct iced::Task") that does nothing. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#27-29) + +#### pub fn [done](#method.done)(value: T) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that instantly produces the given value. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#36-42) + +#### pub fn [perform](#method.perform)( future: impl [Future](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(A) -> T + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, ) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, A: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Creates a [`Task`](struct.Task.html "struct iced::Task") that runs the given [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") to completion and maps its +output with the given closure. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#49-54) + +#### pub fn [run](#method.run)( stream: impl [Stream](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(A) -> T + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, ) -> [Task](struct.Task.html "struct iced::Task") where T: 'static, + +Creates a [`Task`](struct.Task.html "struct iced::Task") that runs the given [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") to completion and maps each +item with the given closure. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#61-63) + +#### pub fn [batch](#method.batch)(tasks: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>) -> [Task](struct.Task.html "struct iced::Task") where T: 'static, + +Combines the given tasks and produces a single [`Task`](struct.Task.html "struct iced::Task") that will run all of them +in parallel. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#71-77) + +#### pub fn [map](#method.map)(self, f: impl [FnMut](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html "trait core::ops::function::FnMut")(T) -> O + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, O: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Maps the output of a [`Task`](struct.Task.html "struct iced::Task") with the given closure. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#87-93) + +#### pub fn [then](#method.then)( self, f: impl [FnMut](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html "trait core::ops::function::FnMut")(T) -> [Task](struct.Task.html "struct iced::Task") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, ) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, O: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Performs a new [`Task`](struct.Task.html "struct iced::Task") for every output of the current [`Task`](struct.Task.html "struct iced::Task") using the +given closure. + +This is the monadic interface of [`Task`](struct.Task.html "struct iced::Task")—analogous to [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") and +[`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream"). + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#113-115) + +#### pub fn [chain](#method.chain)(self, task: [Task](struct.Task.html "struct iced::Task")) -> [Task](struct.Task.html "struct iced::Task") where T: 'static, + +Chains a new [`Task`](struct.Task.html "struct iced::Task") to be performed once the current one finishes completely. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#127-129) + +#### pub fn [collect](#method.collect)(self) -> [Task](struct.Task.html "struct iced::Task")<[Vec](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec")> where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that collects all the output of the current one into a [`Vec`](https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html "struct alloc::vec::Vec"). + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#166-169) + +#### pub fn [discard](#method.discard)(self) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, O: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that discards the result of the current one. + +Useful if you only care about the side effects of a [`Task`](struct.Task.html "struct iced::Task"). + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#175-177) + +#### pub fn [abortable](#method.abortable)(self) -> ([Task](struct.Task.html "struct iced::Task"), [Handle](task/struct.Handle.html "struct iced::task::Handle")) where T: 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that can be aborted with the returned [`Handle`](task/struct.Handle.html "struct iced::task::Handle"). + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#203-205) + +#### pub fn [future](#method.future)(future: impl [Future](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static) -> [Task](struct.Task.html "struct iced::Task") where T: 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that runs the given [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") and produces +its output. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#212-214) + +#### pub fn [stream](#method.stream)(stream: impl [Stream](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static) -> [Task](struct.Task.html "struct iced::Task") where T: 'static, + +Creates a new [`Task`](struct.Task.html "struct iced::Task") that runs the given [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") and produces +each of its items. + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#265)[§](#impl-Task%3COption%3CT%3E%3E) + +### impl [Task](struct.Task.html "struct iced::Task")<[Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")> + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#269-275) + +#### pub fn [and\_then](#method.and_then)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(T) -> [Task](struct.Task.html "struct iced::Task") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, ) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, A: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Executes a new [`Task`](struct.Task.html "struct iced::Task") after this one, only when it produces `Some` value. + +The value is provided to the closure to create the subsequent [`Task`](struct.Task.html "struct iced::Task"). + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#281)[§](#impl-Task%3CResult%3CT,+E%3E%3E) + +### impl [Task](struct.Task.html "struct iced::Task")<[Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#285-292) + +#### pub fn [and\_then](#method.and_then-1)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(T) -> [Task](struct.Task.html "struct iced::Task") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, ) -> [Task](struct.Task.html "struct iced::Task") where T: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, E: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, A: [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, + +Executes a new [`Task`](struct.Task.html "struct iced::Task") after this one, only when it succeeds with an `Ok` value. + +The success value is provided to the closure to create the subsequent [`Task`](struct.Task.html "struct iced::Task"). + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#298)[§](#impl-From%3C()%3E-for-Task%3CT%3E) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html)> for [Task](struct.Task.html "struct iced::Task") + +[Source](https://docs.rs/iced_runtime/0.13.2/x86_64-unknown-linux-gnu/src/iced_runtime/task.rs.html#299)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(\_value: [()](https://doc.rust-lang.org/nightly/std/primitive.unit.html)) -> [Task](struct.Task.html "struct iced::Task") + +Converts to this type from the input type. + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Task%3CT%3E) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Task](struct.Task.html "struct iced::Task") + +[§](#impl-RefUnwindSafe-for-Task%3CT%3E) + +### impl ![RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Task](struct.Task.html "struct iced::Task") + +[§](#impl-Send-for-Task%3CT%3E) + +### impl [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Task](struct.Task.html "struct iced::Task") + +[§](#impl-Sync-for-Task%3CT%3E) + +### impl ![Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Task](struct.Task.html "struct iced::Task") + +[§](#impl-Unpin-for-Task%3CT%3E) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Task](struct.Task.html "struct iced::Task") + +[§](#impl-UnwindSafe-for-Task%3CT%3E) + +### impl ![UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Task](struct.Task.html "struct iced::Task") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/task/index.html](https://docs.rs/iced/0.13.1/iced/task/index.html) + +[iced](../index.html) + +# Module taskCopy item path + +[Source](../../src/iced/lib.rs.html#517) + +Expand description + +Create runtime tasks. + +## Structs[§](#structs) + +[Handle](struct.Handle.html "struct iced::task::Handle") +: A handle to a [`Task`](../struct.Task.html "struct iced::Task") that can be used for aborting it. + +[Task](struct.Task.html "struct iced::task::Task") +: A set of concurrent actions to be performed by the iced runtime. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/struct.Subscription.html](https://docs.rs/iced/0.13.1/iced/struct.Subscription.html) + +[iced](index.html) + +# Struct SubscriptionCopy item path + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#96) + +``` +pub struct Subscription { /* private fields */ } +``` + +Expand description + +A request to listen to external events. + +Besides performing async actions on demand with `Task`, most +applications also need to listen to external events passively. + +A [`Subscription`](struct.Subscription.html "struct iced::Subscription") is normally provided to some runtime, like a `Task`, +and it will generate events as long as the user keeps requesting it. + +For instance, you can use a [`Subscription`](struct.Subscription.html "struct iced::Subscription") to listen to a `WebSocket` +connection, keyboard presses, mouse events, time ticks, etc. + +## [§](#the-lifetime-of-a-subscription)The Lifetime of a [`Subscription`](struct.Subscription.html "struct iced::Subscription") + +Much like a [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") or a [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream"), a [`Subscription`](struct.Subscription.html "struct iced::Subscription") does not produce any effects +on its own. For a [`Subscription`](struct.Subscription.html "struct iced::Subscription") to run, it must be returned to the iced runtime—normally +in the `subscription` function of an `application` or a `daemon`. + +When a [`Subscription`](struct.Subscription.html "struct iced::Subscription") is provided to the runtime for the first time, the runtime will +start running it asynchronously. Running a [`Subscription`](struct.Subscription.html "struct iced::Subscription") consists in building its underlying +[`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") and executing it in an async runtime. + +Therefore, you can think of a [`Subscription`](struct.Subscription.html "struct iced::Subscription") as a “stream builder”. It simply represents a way +to build a certain [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") together with some way to *identify* it. + +Identification is important because when a specific [`Subscription`](struct.Subscription.html "struct iced::Subscription") stops being returned to the +iced runtime, the runtime will kill its associated [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream"). The runtime uses the identity of a +[`Subscription`](struct.Subscription.html "struct iced::Subscription") to keep track of it. + +This way, iced allows you to declaratively **subscribe** to particular streams of data temporarily +and whenever necessary. + +``` +use iced::time::{self, Duration, Instant}; +use iced::Subscription; + +struct State { + timer_enabled: bool, +} + +fn subscription(state: &State) -> Subscription { + if state.timer_enabled { + time::every(Duration::from_secs(1)) + } else { + Subscription::none() + } +} +``` + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#100)[§](#impl-Subscription%3CT%3E) + +### impl [Subscription](struct.Subscription.html "struct iced::Subscription") + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#102) + +#### pub fn [none](#method.none)() -> [Subscription](struct.Subscription.html "struct iced::Subscription") + +Returns an empty [`Subscription`](struct.Subscription.html "struct iced::Subscription") that will not produce any output. + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#178-181) + +#### pub fn [run](#method.run)(builder: [fn](https://doc.rust-lang.org/nightly/std/primitive.fn.html)() -> S) -> [Subscription](struct.Subscription.html "struct iced::Subscription") where S: [Stream](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, T: 'static, + +Returns a [`Subscription`](struct.Subscription.html "struct iced::Subscription") that will call the given function to create and +asynchronously run the given [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream"). + +##### [§](#creating-an-asynchronous-worker-with-bidirectional-communication)Creating an asynchronous worker with bidirectional communication + +You can leverage this helper to create a [`Subscription`](struct.Subscription.html "struct iced::Subscription") that spawns +an asynchronous worker in the background and establish a channel of +communication with an `iced` application. + +You can achieve this by creating an `mpsc` channel inside the closure +and returning the `Sender` as a `Message` for the `Application`: + +``` +use iced::futures::channel::mpsc; +use iced::futures::sink::SinkExt; +use iced::futures::Stream; +use iced::stream; +use iced::Subscription; + +pub enum Event { + Ready(mpsc::Sender), + WorkFinished, + // ... +} + +enum Input { + DoSomeWork, + // ... +} + +fn some_worker() -> impl Stream { + stream::channel(100, |mut output| async move { + // Create channel + let (sender, mut receiver) = mpsc::channel(100); + + // Send the sender back to the application + output.send(Event::Ready(sender)).await; + + loop { + use iced_futures::futures::StreamExt; + + // Read next input sent from `Application` + let input = receiver.select_next_some().await; + + match input { + Input::DoSomeWork => { + // Do some async work... + + // Finally, we can optionally produce a message to tell the + // `Application` the work is done + output.send(Event::WorkFinished).await; + } + } + } + }) +} + +fn subscription() -> Subscription { + Subscription::run(some_worker) +} +``` + +Check out the [`websocket`](https://github.com/iced-rs/iced/tree/0.13/examples/websocket) example, which showcases this pattern to maintain a `WebSocket` +connection open. + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#193-197) + +#### pub fn [run\_with\_id](#method.run_with_id)(id: I, stream: S) -> [Subscription](struct.Subscription.html "struct iced::Subscription") where I: [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html "trait core::hash::Hash") + 'static, S: [Stream](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + 'static, T: 'static, + +Returns a [`Subscription`](struct.Subscription.html "struct iced::Subscription") that will create and asynchronously run the +given [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream"). + +The `id` will be used to uniquely identify the [`Subscription`](struct.Subscription.html "struct iced::Subscription"). + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#207-209) + +#### pub fn [batch](#method.batch)( subscriptions: impl [IntoIterator](https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html "trait core::iter::traits::collect::IntoIterator")>, ) -> [Subscription](struct.Subscription.html "struct iced::Subscription") + +Batches all the provided subscriptions and returns the resulting +[`Subscription`](struct.Subscription.html "struct iced::Subscription"). + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#221-224) + +#### pub fn [with](#method.with)(self, value: A) -> [Subscription](struct.Subscription.html "struct iced::Subscription")<[(A, T)](https://doc.rust-lang.org/nightly/std/primitive.tuple.html)> where T: 'static, A: [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html "trait core::hash::Hash") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") + 'static, + +Adds a value to the [`Subscription`](struct.Subscription.html "struct iced::Subscription") context. + +The value will be part of the identity of a [`Subscription`](struct.Subscription.html "struct iced::Subscription"). + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#243-247) + +#### pub fn [map](#method.map)(self, f: F) -> [Subscription](struct.Subscription.html "struct iced::Subscription") where T: 'static, F: [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(T) -> A + [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") + 'static, A: 'static, + +Transforms the [`Subscription`](struct.Subscription.html "struct iced::Subscription") output with the given function. + +##### [§](#panics)Panics + +The closure provided must be a non-capturing closure. The method +will panic in debug mode otherwise. + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#284)[§](#impl-Debug-for-Subscription%3CT%3E) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/subscription.rs.html#285)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html), [Error](https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html "struct core::fmt::Error")> + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Subscription%3CT%3E) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[§](#impl-RefUnwindSafe-for-Subscription%3CT%3E) + +### impl ![RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[§](#impl-Send-for-Subscription%3CT%3E) + +### impl ![Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[§](#impl-Sync-for-Subscription%3CT%3E) + +### impl ![Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[§](#impl-Unpin-for-Subscription%3CT%3E) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +[§](#impl-UnwindSafe-for-Subscription%3CT%3E) + +### impl ![UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Subscription](struct.Subscription.html "struct iced::Subscription") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/stream/index.html](https://docs.rs/iced/0.13.1/iced/stream/index.html) + +[iced](../index.html) + +# Module streamCopy item path + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/lib.rs.html#18) + +Expand description + +Create asynchronous streams of data. + +## Functions[§](#functions) + +[channel](fn.channel.html "fn iced::stream::channel") +: Creates a new [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") that produces the items sent from a [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") + to the [`mpsc::Sender`](https://docs.rs/futures-channel/0.3.31/x86_64-unknown-linux-gnu/futures_channel/mpsc/struct.Sender.html "struct futures_channel::mpsc::Sender") provided to the closure. + +[try\_channel](fn.try_channel.html "fn iced::stream::try_channel") +: Creates a new [`Stream`](https://docs.rs/futures-core/0.3.31/x86_64-unknown-linux-gnu/futures_core/stream/trait.Stream.html "trait futures_core::stream::Stream") that produces the items sent from a [`Future`](https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html "trait core::future::future::Future") + that can fail to the [`mpsc::Sender`](https://docs.rs/futures-channel/0.3.31/x86_64-unknown-linux-gnu/futures_channel/mpsc/struct.Sender.html "struct futures_channel::mpsc::Sender") provided to the closure. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/daemon/index.html](https://docs.rs/iced/0.13.1/iced/daemon/index.html) + +[iced](../index.html) + +# Module daemonCopy item path + +[Source](../../src/iced/daemon.rs.html#1-296) + +Expand description + +Create and run daemons that run in the background. + +## Structs[§](#structs) + +[Appearance](struct.Appearance.html "struct iced::daemon::Appearance") +: The appearance of a program. + +[Daemon](struct.Daemon.html "struct iced::daemon::Daemon") +: The underlying definition and configuration of an iced daemon. + +## Traits[§](#traits) + +[DefaultStyle](trait.DefaultStyle.html "trait iced::daemon::DefaultStyle") +: The default style of a [`Program`](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/iced_winit/program/trait.Program.html "trait iced_winit::program::Program"). + +[Title](trait.Title.html "trait iced::daemon::Title") +: The title logic of some [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[View](trait.View.html "trait iced::daemon::View") +: The view logic of some [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +## Functions[§](#functions) + +[daemon](fn.daemon.html "fn iced::daemon::daemon") +: Creates an iced [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon") given its title, update, and view logic. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/daemon/struct.Daemon.html](https://docs.rs/iced/0.13.1/iced/daemon/struct.Daemon.html) + +[iced](../index.html)::[daemon](index.html) + +# Struct DaemonCopy item path + +[Source](../../src/iced/daemon.rs.html#97-100) + +``` +pub struct Daemon { /* private fields */ } +``` + +Expand description + +The underlying definition and configuration of an iced daemon. + +You can use this API to create and run iced applications +step by step—without coupling your logic to a trait +or a specific type. + +You can create a [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon") with the [`daemon`](../fn.daemon.html "fn iced::daemon") helper. + +## Implementations[§](#implementations) + +[Source](../../src/iced/daemon.rs.html#102-241)[§](#impl-Daemon%3CP%3E) + +### impl [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

+ +[Source](../../src/iced/daemon.rs.html#110-116) + +#### pub fn [run](#method.run)(self) -> [Result](../type.Result.html "type iced::Result") where Self: 'static, P::State: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +Runs the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +The state of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon") must implement [`Default`](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"). +If your state does not implement [`Default`](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), use [`run_with`](struct.Daemon.html#method.run_with "method iced::daemon::Daemon::run_with") +instead. + +[Source](../../src/iced/daemon.rs.html#119-125) + +#### pub fn [run\_with](#method.run_with)(self, initialize: I) -> [Result](../type.Result.html "type iced::Result") where Self: 'static, I: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")() -> (P::State, [Task](../struct.Task.html "struct iced::Task")) + 'static, + +Runs the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon") with a closure that creates the initial state. + +[Source](../../src/iced/daemon.rs.html#128-130) + +#### pub fn [settings](#method.settings)(self, settings: [Settings](../settings/struct.Settings.html "struct iced::settings::Settings")) -> Self + +Sets the [`Settings`](../settings/struct.Settings.html "struct iced::settings::Settings") that will be used to run the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#133-141) + +#### pub fn [antialiasing](#method.antialiasing)(self, antialiasing: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> Self + +Sets the [`Settings::antialiasing`](../settings/struct.Settings.html#structfield.antialiasing "field iced::settings::Settings::antialiasing") of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#144-152) + +#### pub fn [default\_font](#method.default_font)(self, default\_font: [Font](../struct.Font.html "struct iced::Font")) -> Self + +Sets the default [`Font`](../struct.Font.html "struct iced::Font") of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#155-158) + +#### pub fn [font](#method.font)(self, font: impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Cow](https://doc.rust-lang.org/nightly/alloc/borrow/enum.Cow.html "enum alloc::borrow::Cow")<'static, [[u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)]>>) -> Self + +Adds a font to the list of fonts that will be loaded at the start of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#176-186) + +#### pub fn [subscription](#method.subscription)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State) -> [Subscription](../struct.Subscription.html "struct iced::Subscription"), ) -> [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")> + +Sets the subscription logic of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#189-199) + +#### pub fn [theme](#method.theme)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State, [Id](../window/struct.Id.html "struct iced::window::Id")) -> P::Theme, ) -> [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")> + +Sets the theme logic of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#202-212) + +#### pub fn [style](#method.style)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State, &P::Theme) -> [Appearance](../application/struct.Appearance.html "struct iced::application::Appearance"), ) -> [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")> + +Sets the style logic of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#215-225) + +#### pub fn [scale\_factor](#method.scale_factor)( self, f: impl [Fn](https://doc.rust-lang.org/nightly/core/ops/function/trait.Fn.html "trait core::ops::function::Fn")(&P::State, [Id](../window/struct.Id.html "struct iced::window::Id")) -> [f64](https://doc.rust-lang.org/nightly/std/primitive.f64.html), ) -> [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")> + +Sets the scale factor of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +[Source](../../src/iced/daemon.rs.html#228-240) + +#### pub fn [executor](#method.executor)( self, ) -> [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")> where E: [Executor](../trait.Executor.html "trait iced::Executor"), + +Sets the executor of the [`Daemon`](struct.Daemon.html "struct iced::daemon::Daemon"). + +## Trait Implementations[§](#trait-implementations) + +[Source](../../src/iced/daemon.rs.html#96)[§](#impl-Debug-for-Daemon%3CP%3E) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

+ +[Source](../../src/iced/daemon.rs.html#96)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/fmt/type.Result.html "type core::fmt::Result") + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Daemon%3CP%3E) + +### impl

[Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze"), + +[§](#impl-RefUnwindSafe-for-Daemon%3CP%3E) + +### impl

[RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe"), + +[§](#impl-Send-for-Daemon%3CP%3E) + +### impl

[Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[§](#impl-Sync-for-Daemon%3CP%3E) + +### impl

[Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[§](#impl-Unpin-for-Daemon%3CP%3E) + +### impl

[Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin"), + +[§](#impl-UnwindSafe-for-Daemon%3CP%3E) + +### impl

[UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Daemon](struct.Daemon.html "struct iced::daemon::Daemon")

where P: [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe"), + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](../widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/theme/index.html](https://docs.rs/iced/0.13.1/iced/theme/index.html) + +[iced](../index.html) + +# Module themeCopy item path + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/lib.rs.html#27) + +Expand description + +Use the built-in theme and styles. + +## Modules[§](#modules) + +[palette](palette/index.html "mod iced::theme::palette") +: Define the colors of a theme. + +## Structs[§](#structs) + +[Custom](struct.Custom.html "struct iced::theme::Custom") +: A [`Theme`](../enum.Theme.html "enum iced::Theme") with a customized [`Palette`](struct.Palette.html "struct iced::theme::Palette"). + +[Palette](struct.Palette.html "struct iced::theme::Palette") +: A color palette. + +## Enums[§](#enums) + +[Theme](enum.Theme.html "enum iced::theme::Theme") +: A built-in theme. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/enum.Theme.html](https://docs.rs/iced/0.13.1/iced/enum.Theme.html) + +[iced](index.html) + +# Enum ThemeCopy item path + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#11) + +``` +pub enum Theme { +Show 23 variants Light, + Dark, + Dracula, + Nord, + SolarizedLight, + SolarizedDark, + GruvboxLight, + GruvboxDark, + CatppuccinLatte, + CatppuccinFrappe, + CatppuccinMacchiato, + CatppuccinMocha, + TokyoNight, + TokyoNightStorm, + TokyoNightLight, + KanagawaWave, + KanagawaDragon, + KanagawaLotus, + Moonfly, + Nightfly, + Oxocarbon, + Ferra, + Custom(Arc), +} +``` + +Expand description + +A built-in theme. + +## Variants[§](#variants) + +[§](#variant.Light) + +### Light + +The built-in light variant. + +[§](#variant.Dark) + +### Dark + +The built-in dark variant. + +[§](#variant.Dracula) + +### Dracula + +The built-in Dracula variant. + +[§](#variant.Nord) + +### Nord + +The built-in Nord variant. + +[§](#variant.SolarizedLight) + +### SolarizedLight + +The built-in Solarized Light variant. + +[§](#variant.SolarizedDark) + +### SolarizedDark + +The built-in Solarized Dark variant. + +[§](#variant.GruvboxLight) + +### GruvboxLight + +The built-in Gruvbox Light variant. + +[§](#variant.GruvboxDark) + +### GruvboxDark + +The built-in Gruvbox Dark variant. + +[§](#variant.CatppuccinLatte) + +### CatppuccinLatte + +The built-in Catppuccin Latte variant. + +[§](#variant.CatppuccinFrappe) + +### CatppuccinFrappe + +The built-in Catppuccin Frappé variant. + +[§](#variant.CatppuccinMacchiato) + +### CatppuccinMacchiato + +The built-in Catppuccin Macchiato variant. + +[§](#variant.CatppuccinMocha) + +### CatppuccinMocha + +The built-in Catppuccin Mocha variant. + +[§](#variant.TokyoNight) + +### TokyoNight + +The built-in Tokyo Night variant. + +[§](#variant.TokyoNightStorm) + +### TokyoNightStorm + +The built-in Tokyo Night Storm variant. + +[§](#variant.TokyoNightLight) + +### TokyoNightLight + +The built-in Tokyo Night Light variant. + +[§](#variant.KanagawaWave) + +### KanagawaWave + +The built-in Kanagawa Wave variant. + +[§](#variant.KanagawaDragon) + +### KanagawaDragon + +The built-in Kanagawa Dragon variant. + +[§](#variant.KanagawaLotus) + +### KanagawaLotus + +The built-in Kanagawa Lotus variant. + +[§](#variant.Moonfly) + +### Moonfly + +The built-in Moonfly variant. + +[§](#variant.Nightfly) + +### Nightfly + +The built-in Nightfly variant. + +[§](#variant.Oxocarbon) + +### Oxocarbon + +The built-in Oxocarbon variant. + +[§](#variant.Ferra) + +### Ferra + +The built-in Ferra variant: + +[§](#variant.Custom) + +### Custom([Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")<[Custom](theme/struct.Custom.html "struct iced::theme::Custom")>) + +A [`Theme`](enum.Theme.html "enum iced::Theme") that uses a [`Custom`](theme/struct.Custom.html "struct iced::theme::Custom") palette. + +## Implementations[§](#implementations) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#60)[§](#impl-Theme) + +### impl [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#62) + +#### pub const [ALL](#associatedconstant.ALL): &'static [[Theme](enum.Theme.html "enum iced::Theme")] + +A list with all the defined themes. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#88) + +#### pub fn [custom](#method.custom)(name: [String](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html "struct alloc::string::String"), palette: [Palette](theme/struct.Palette.html "struct iced::theme::Palette")) -> [Theme](enum.Theme.html "enum iced::Theme") + +Creates a new custom [`Theme`](enum.Theme.html "enum iced::Theme") from the given [`Palette`](theme/struct.Palette.html "struct iced::theme::Palette"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#94-98) + +#### pub fn [custom\_with\_fn](#method.custom_with_fn)( name: [String](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html "struct alloc::string::String"), palette: [Palette](theme/struct.Palette.html "struct iced::theme::Palette"), generate: impl [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")([Palette](theme/struct.Palette.html "struct iced::theme::Palette")) -> [Extended](theme/palette/struct.Extended.html "struct iced::theme::palette::Extended"), ) -> [Theme](enum.Theme.html "enum iced::Theme") + +Creates a new custom [`Theme`](enum.Theme.html "enum iced::Theme") from the given [`Palette`](theme/struct.Palette.html "struct iced::theme::Palette"), with +a custom generator of a [`palette::Extended`](theme/palette/struct.Extended.html "struct iced::theme::palette::Extended"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#103) + +#### pub fn [palette](#method.palette)(&self) -> [Palette](theme/struct.Palette.html "struct iced::theme::Palette") + +Returns the [`Palette`](theme/struct.Palette.html "struct iced::theme::Palette") of the [`Theme`](enum.Theme.html "enum iced::Theme"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#132) + +#### pub fn [extended\_palette](#method.extended_palette)(&self) -> &[Extended](theme/palette/struct.Extended.html "struct iced::theme::palette::Extended") + +Returns the [`palette::Extended`](theme/palette/struct.Extended.html "struct iced::theme::palette::Extended") of the [`Theme`](enum.Theme.html "enum iced::Theme"). + +## Trait Implementations[§](#trait-implementations) + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/button.rs.html#522)[§](#impl-Catalog-for-Theme) + +### impl [Catalog](widget/button/trait.Catalog.html "trait iced::widget::button::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/button.rs.html#523)[§](#associatedtype.Class) + +#### type [Class](widget/button/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/button/struct.Style.html "struct iced::widget::button::Style") + 'a> + +The item class of the [`Catalog`](widget/button/trait.Catalog.html "trait iced::widget::button::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/button.rs.html#525)[§](#method.default) + +#### fn [default](widget/button/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/button/trait.Catalog.html "trait iced::widget::button::Catalog")>::[Class](widget/button/trait.Catalog.html#associatedtype.Class "type iced::widget::button::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/button/trait.Catalog.html "trait iced::widget::button::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/button.rs.html#529)[§](#method.style) + +#### fn [style](widget/button/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/button/trait.Catalog.html "trait iced::widget::button::Catalog")>::[Class](widget/button/trait.Catalog.html#associatedtype.Class "type iced::widget::button::Catalog::Class")<'\_>, status: [Status](widget/button/enum.Status.html "enum iced::widget::button::Status")) -> [Style](widget/button/struct.Style.html "struct iced::widget::button::Style") + +The [`Style`](widget/button/struct.Style.html "struct iced::widget::button::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/checkbox.rs.html#513)[§](#impl-Catalog-for-Theme-1) + +### impl [Catalog](widget/checkbox/trait.Catalog.html "trait iced::widget::checkbox::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/checkbox.rs.html#514)[§](#associatedtype.Class-1) + +#### type [Class](widget/checkbox/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/checkbox/struct.Style.html "struct iced::widget::checkbox::Style") + 'a> + +The item class of the [`Catalog`](widget/checkbox/trait.Catalog.html "trait iced::widget::checkbox::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/checkbox.rs.html#516)[§](#method.default-1) + +#### fn [default](widget/checkbox/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/checkbox/trait.Catalog.html "trait iced::widget::checkbox::Catalog")>::[Class](widget/checkbox/trait.Catalog.html#associatedtype.Class "type iced::widget::checkbox::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/checkbox/trait.Catalog.html "trait iced::widget::checkbox::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/checkbox.rs.html#520)[§](#method.style-1) + +#### fn [style](widget/checkbox/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/checkbox/trait.Catalog.html "trait iced::widget::checkbox::Catalog")>::[Class](widget/checkbox/trait.Catalog.html#associatedtype.Class "type iced::widget::checkbox::Catalog::Class")<'\_>, status: [Status](widget/checkbox/enum.Status.html "enum iced::widget::checkbox::Status")) -> [Style](widget/checkbox/struct.Style.html "struct iced::widget::checkbox::Style") + +The [`Style`](widget/checkbox/struct.Style.html "struct iced::widget::checkbox::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/scrollable.rs.html#1906)[§](#impl-Catalog-for-Theme-10) + +### impl [Catalog](widget/scrollable/trait.Catalog.html "trait iced::widget::scrollable::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/scrollable.rs.html#1907)[§](#associatedtype.Class-9) + +#### type [Class](widget/scrollable/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/scrollable/struct.Style.html "struct iced::widget::scrollable::Style") + 'a> + +The item class of the [`Catalog`](widget/scrollable/trait.Catalog.html "trait iced::widget::scrollable::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/scrollable.rs.html#1909)[§](#method.default-9) + +#### fn [default](widget/scrollable/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/scrollable/trait.Catalog.html "trait iced::widget::scrollable::Catalog")>::[Class](widget/scrollable/trait.Catalog.html#associatedtype.Class "type iced::widget::scrollable::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/scrollable/trait.Catalog.html "trait iced::widget::scrollable::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/scrollable.rs.html#1913)[§](#method.style-9) + +#### fn [style](widget/scrollable/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/scrollable/trait.Catalog.html "trait iced::widget::scrollable::Catalog")>::[Class](widget/scrollable/trait.Catalog.html#associatedtype.Class "type iced::widget::scrollable::Catalog::Class")<'\_>, status: [Status](widget/scrollable/enum.Status.html "enum iced::widget::scrollable::Status")) -> [Style](widget/scrollable/struct.Style.html "struct iced::widget::scrollable::Style") + +The [`Style`](widget/scrollable/struct.Style.html "struct iced::widget::scrollable::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/slider.rs.html#640)[§](#impl-Catalog-for-Theme-11) + +### impl [Catalog](widget/slider/trait.Catalog.html "trait iced::widget::slider::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/slider.rs.html#641)[§](#associatedtype.Class-10) + +#### type [Class](widget/slider/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/slider/struct.Style.html "struct iced::widget::slider::Style") + 'a> + +The item class of the [`Catalog`](widget/slider/trait.Catalog.html "trait iced::widget::slider::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/slider.rs.html#643)[§](#method.default-10) + +#### fn [default](widget/slider/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/slider/trait.Catalog.html "trait iced::widget::slider::Catalog")>::[Class](widget/slider/trait.Catalog.html#associatedtype.Class "type iced::widget::slider::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/slider/trait.Catalog.html "trait iced::widget::slider::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/slider.rs.html#647)[§](#method.style-10) + +#### fn [style](widget/slider/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/slider/trait.Catalog.html "trait iced::widget::slider::Catalog")>::[Class](widget/slider/trait.Catalog.html#associatedtype.Class "type iced::widget::slider::Catalog::Class")<'\_>, status: [Status](widget/slider/enum.Status.html "enum iced::widget::slider::Status")) -> [Style](widget/slider/struct.Style.html "struct iced::widget::slider::Style") + +The [`Style`](widget/slider/struct.Style.html "struct iced::widget::slider::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_editor.rs.html#1260)[§](#impl-Catalog-for-Theme-12) + +### impl [Catalog](widget/text_editor/trait.Catalog.html "trait iced::widget::text_editor::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_editor.rs.html#1261)[§](#associatedtype.Class-11) + +#### type [Class](widget/text_editor/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/text_editor/struct.Style.html "struct iced::widget::text_editor::Style") + 'a> + +The item class of the [`Catalog`](widget/text_editor/trait.Catalog.html "trait iced::widget::text_editor::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_editor.rs.html#1263)[§](#method.default-11) + +#### fn [default](widget/text_editor/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text_editor/trait.Catalog.html "trait iced::widget::text_editor::Catalog")>::[Class](widget/text_editor/trait.Catalog.html#associatedtype.Class "type iced::widget::text_editor::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/text_editor/trait.Catalog.html "trait iced::widget::text_editor::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_editor.rs.html#1267)[§](#method.style-11) + +#### fn [style](widget/text_editor/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text_editor/trait.Catalog.html "trait iced::widget::text_editor::Catalog")>::[Class](widget/text_editor/trait.Catalog.html#associatedtype.Class "type iced::widget::text_editor::Catalog::Class")<'\_>, status: [Status](widget/text_editor/enum.Status.html "enum iced::widget::text_editor::Status")) -> [Style](widget/text_editor/struct.Style.html "struct iced::widget::text_editor::Style") + +The [`Style`](widget/text_editor/struct.Style.html "struct iced::widget::text_editor::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_input.rs.html#1577)[§](#impl-Catalog-for-Theme-13) + +### impl [Catalog](widget/text_input/trait.Catalog.html "trait iced::widget::text_input::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_input.rs.html#1578)[§](#associatedtype.Class-12) + +#### type [Class](widget/text_input/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/text_input/struct.Style.html "struct iced::widget::text_input::Style") + 'a> + +The item class of the [`Catalog`](widget/text_input/trait.Catalog.html "trait iced::widget::text_input::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_input.rs.html#1580)[§](#method.default-12) + +#### fn [default](widget/text_input/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text_input/trait.Catalog.html "trait iced::widget::text_input::Catalog")>::[Class](widget/text_input/trait.Catalog.html#associatedtype.Class "type iced::widget::text_input::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/text_input/trait.Catalog.html "trait iced::widget::text_input::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/text_input.rs.html#1584)[§](#method.style-12) + +#### fn [style](widget/text_input/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text_input/trait.Catalog.html "trait iced::widget::text_input::Catalog")>::[Class](widget/text_input/trait.Catalog.html#associatedtype.Class "type iced::widget::text_input::Catalog::Class")<'\_>, status: [Status](widget/text_input/enum.Status.html "enum iced::widget::text_input::Status")) -> [Style](widget/text_input/struct.Style.html "struct iced::widget::text_input::Style") + +The [`Style`](widget/text_input/struct.Style.html "struct iced::widget::text_input::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/toggler.rs.html#525)[§](#impl-Catalog-for-Theme-14) + +### impl [Catalog](widget/toggler/trait.Catalog.html "trait iced::widget::toggler::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/toggler.rs.html#526)[§](#associatedtype.Class-13) + +#### type [Class](widget/toggler/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/toggler/struct.Style.html "struct iced::widget::toggler::Style") + 'a> + +The item class of the [`Catalog`](widget/toggler/trait.Catalog.html "trait iced::widget::toggler::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/toggler.rs.html#528)[§](#method.default-13) + +#### fn [default](widget/toggler/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/toggler/trait.Catalog.html "trait iced::widget::toggler::Catalog")>::[Class](widget/toggler/trait.Catalog.html#associatedtype.Class "type iced::widget::toggler::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/toggler/trait.Catalog.html "trait iced::widget::toggler::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/toggler.rs.html#532)[§](#method.style-13) + +#### fn [style](widget/toggler/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/toggler/trait.Catalog.html "trait iced::widget::toggler::Catalog")>::[Class](widget/toggler/trait.Catalog.html#associatedtype.Class "type iced::widget::toggler::Catalog::Class")<'\_>, status: [Status](widget/toggler/enum.Status.html "enum iced::widget::toggler::Status")) -> [Style](widget/toggler/struct.Style.html "struct iced::widget::toggler::Style") + +The [`Style`](widget/toggler/struct.Style.html "struct iced::widget::toggler::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/svg.rs.html#309)[§](#impl-Catalog-for-Theme-15) + +### impl [Catalog](widget/svg/trait.Catalog.html "trait iced::widget::svg::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/svg.rs.html#310)[§](#associatedtype.Class-14) + +#### type [Class](widget/svg/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/svg/struct.Style.html "struct iced::widget::svg::Style") + 'a> + +The item class of the [`Catalog`](widget/svg/trait.Catalog.html "trait iced::widget::svg::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/svg.rs.html#312)[§](#method.default-14) + +#### fn [default](widget/svg/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/svg/trait.Catalog.html "trait iced::widget::svg::Catalog")>::[Class](widget/svg/trait.Catalog.html#associatedtype.Class "type iced::widget::svg::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/svg/trait.Catalog.html "trait iced::widget::svg::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/svg.rs.html#316)[§](#method.style-14) + +#### fn [style](widget/svg/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/svg/trait.Catalog.html "trait iced::widget::svg::Catalog")>::[Class](widget/svg/trait.Catalog.html#associatedtype.Class "type iced::widget::svg::Catalog::Class")<'\_>, status: [Status](widget/svg/enum.Status.html "enum iced::widget::svg::Status")) -> [Style](widget/svg/struct.Style.html "struct iced::widget::svg::Style") + +The [`Style`](widget/svg/struct.Style.html "struct iced::widget::svg::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/qr_code.rs.html#412)[§](#impl-Catalog-for-Theme-16) + +### impl [Catalog](widget/qr_code/trait.Catalog.html "trait iced::widget::qr_code::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/qr_code.rs.html#413)[§](#associatedtype.Class-15) + +#### type [Class](widget/qr_code/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/qr_code/struct.Style.html "struct iced::widget::qr_code::Style") + 'a> + +The item class of the [`Catalog`](widget/qr_code/trait.Catalog.html "trait iced::widget::qr_code::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/qr_code.rs.html#415)[§](#method.default-15) + +#### fn [default](widget/qr_code/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/qr_code/trait.Catalog.html "trait iced::widget::qr_code::Catalog")>::[Class](widget/qr_code/trait.Catalog.html#associatedtype.Class "type iced::widget::qr_code::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/qr_code/trait.Catalog.html "trait iced::widget::qr_code::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/qr_code.rs.html#419)[§](#method.style-15) + +#### fn [style](widget/qr_code/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/qr_code/trait.Catalog.html "trait iced::widget::qr_code::Catalog")>::[Class](widget/qr_code/trait.Catalog.html#associatedtype.Class "type iced::widget::qr_code::Catalog::Class")<'\_>) -> [Style](widget/qr_code/struct.Style.html "struct iced::widget::qr_code::Style") + +The [`Style`](widget/qr_code/struct.Style.html "struct iced::widget::qr_code::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/markdown.rs.html#712)[§](#impl-Catalog-for-Theme-17) + +### impl [Catalog](widget/markdown/trait.Catalog.html "trait iced::widget::markdown::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/markdown.rs.html#713)[§](#method.code_block) + +#### fn [code\_block](widget/markdown/trait.Catalog.html#tymethod.code_block)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog")>::[Class](widget/container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a> + +The styling class of a Markdown code block. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget/text.rs.html#417)[§](#impl-Catalog-for-Theme-18) + +### impl [Catalog](widget/text/trait.Catalog.html "trait iced::widget::text::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget/text.rs.html#418)[§](#associatedtype.Class-16) + +#### type [Class](widget/text/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/text/struct.Style.html "struct iced::widget::text::Style") + 'a> + +The item class of this [`Catalog`](widget/text/trait.Catalog.html "trait iced::widget::text::Catalog"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget/text.rs.html#420)[§](#method.default-17) + +#### fn [default](widget/text/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text/trait.Catalog.html "trait iced::widget::text::Catalog")>::[Class](widget/text/trait.Catalog.html#associatedtype.Class "type iced::widget::text::Catalog::Class")<'a> + +The default class produced by this [`Catalog`](widget/text/trait.Catalog.html "trait iced::widget::text::Catalog"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/widget/text.rs.html#424)[§](#method.style-16) + +#### fn [style](widget/text/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/text/trait.Catalog.html "trait iced::widget::text::Catalog")>::[Class](widget/text/trait.Catalog.html#associatedtype.Class "type iced::widget::text::Catalog::Class")<'\_>) -> [Style](widget/text/struct.Style.html "struct iced::widget::text::Style") + +The [`Style`](widget/text/struct.Style.html "struct iced::widget::text::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/combo_box.rs.html#917)[§](#impl-Catalog-for-Theme-2) + +### impl [Catalog](widget/combo_box/trait.Catalog.html "trait iced::widget::combo_box::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/combo_box.rs.html#907)[§](#method.default_input) + +#### fn [default\_input](widget/combo_box/trait.Catalog.html#method.default_input)<'a>() -> Self::[Class](widget/text_input/trait.Catalog.html#associatedtype.Class "type iced::widget::text_input::Catalog::Class")<'a> + +The default class for the text input of the [`ComboBox`](widget/struct.ComboBox.html "struct iced::widget::ComboBox"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/combo_box.rs.html#912)[§](#method.default_menu) + +#### fn [default\_menu](widget/combo_box/trait.Catalog.html#method.default_menu)<'a>() -> Self::[Class](overlay/menu/trait.Catalog.html#associatedtype.Class "type iced::overlay::menu::Catalog::Class")<'a> + +The default class for the menu of the [`ComboBox`](widget/struct.ComboBox.html "struct iced::widget::ComboBox"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#660)[§](#impl-Catalog-for-Theme-3) + +### impl [Catalog](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#661)[§](#associatedtype.Class-2) + +#### type [Class](widget/container/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/container/struct.Style.html "struct iced::widget::container::Style") + 'a> + +The item class of the [`Catalog`](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#663)[§](#method.default-2) + +#### fn [default](widget/container/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog")>::[Class](widget/container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/container.rs.html#667)[§](#method.style-2) + +#### fn [style](widget/container/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/container/trait.Catalog.html "trait iced::widget::container::Catalog")>::[Class](widget/container/trait.Catalog.html#associatedtype.Class "type iced::widget::container::Catalog::Class")<'\_>) -> [Style](widget/container/struct.Style.html "struct iced::widget::container::Style") + +The [`Style`](widget/container/struct.Style.html "struct iced::widget::container::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/overlay/menu.rs.html#599)[§](#impl-Catalog-for-Theme-4) + +### impl [Catalog](overlay/menu/trait.Catalog.html "trait iced::overlay::menu::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/overlay/menu.rs.html#600)[§](#associatedtype.Class-3) + +#### type [Class](overlay/menu/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](overlay/menu/struct.Style.html "struct iced::overlay::menu::Style") + 'a> + +The item class of the [`Catalog`](overlay/menu/trait.Catalog.html "trait iced::overlay::menu::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/overlay/menu.rs.html#602)[§](#method.default-3) + +#### fn [default](overlay/menu/trait.Catalog.html#tymethod.default)<'a>() -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](overlay/menu/struct.Style.html "struct iced::overlay::menu::Style") + 'a> + +The default class produced by the [`Catalog`](overlay/menu/trait.Catalog.html "trait iced::overlay::menu::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/overlay/menu.rs.html#606)[§](#method.style-3) + +#### fn [style](overlay/menu/trait.Catalog.html#tymethod.style)(&self, class: &[Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](overlay/menu/struct.Style.html "struct iced::overlay::menu::Style") + '\_>) -> [Style](overlay/menu/struct.Style.html "struct iced::overlay::menu::Style") + +The [`Style`](overlay/menu/struct.Style.html "struct iced::overlay::menu::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/overlay/menu.rs.html#588)[§](#method.default_scrollable) + +#### fn [default\_scrollable](overlay/menu/trait.Catalog.html#method.default_scrollable)<'a>() -> Self::[Class](widget/scrollable/trait.Catalog.html#associatedtype.Class "type iced::widget::scrollable::Catalog::Class")<'a> + +The default class for the scrollable of the [`Menu`](overlay/menu/struct.Menu.html "struct iced::overlay::menu::Menu"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pane_grid.rs.html#1233)[§](#impl-Catalog-for-Theme-5) + +### impl [Catalog](widget/pane_grid/trait.Catalog.html "trait iced::widget::pane_grid::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pane_grid.rs.html#1234)[§](#associatedtype.Class-4) + +#### type [Class](widget/pane_grid/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pane_grid/struct.Style.html "struct iced::widget::pane_grid::Style") + 'a> + +The item class of this [`Catalog`](widget/pane_grid/trait.Catalog.html "trait iced::widget::pane_grid::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pane_grid.rs.html#1236)[§](#method.default-4) + +#### fn [default](widget/pane_grid/trait.Catalog.html#tymethod.default)<'a>() -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pane_grid/struct.Style.html "struct iced::widget::pane_grid::Style") + 'a> + +The default class produced by this [`Catalog`](widget/pane_grid/trait.Catalog.html "trait iced::widget::pane_grid::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pane_grid.rs.html#1240)[§](#method.style-4) + +#### fn [style](widget/pane_grid/trait.Catalog.html#tymethod.style)(&self, class: &[Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pane_grid/struct.Style.html "struct iced::widget::pane_grid::Style") + '\_>) -> [Style](widget/pane_grid/struct.Style.html "struct iced::widget::pane_grid::Style") + +The [`Style`](widget/pane_grid/struct.Style.html "struct iced::widget::pane_grid::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pick_list.rs.html#871)[§](#impl-Catalog-for-Theme-6) + +### impl [Catalog](widget/pick_list/trait.Catalog.html "trait iced::widget::pick_list::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pick_list.rs.html#872)[§](#associatedtype.Class-5) + +#### type [Class](widget/pick_list/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pick_list/struct.Style.html "struct iced::widget::pick_list::Style") + 'a> + +The item class of the [`Catalog`](widget/pick_list/trait.Catalog.html "trait iced::widget::pick_list::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pick_list.rs.html#874)[§](#method.default-5) + +#### fn [default](widget/pick_list/trait.Catalog.html#tymethod.default)<'a>() -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pick_list/struct.Style.html "struct iced::widget::pick_list::Style") + 'a> + +The default class produced by the [`Catalog`](widget/pick_list/trait.Catalog.html "trait iced::widget::pick_list::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pick_list.rs.html#878)[§](#method.style-5) + +#### fn [style](widget/pick_list/trait.Catalog.html#tymethod.style)( &self, class: &[Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/pick_list/struct.Style.html "struct iced::widget::pick_list::Style") + '\_>, status: [Status](widget/pick_list/enum.Status.html "enum iced::widget::pick_list::Status"), ) -> [Style](widget/pick_list/struct.Style.html "struct iced::widget::pick_list::Style") + +The [`Style`](widget/pick_list/struct.Style.html "struct iced::widget::pick_list::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/pick_list.rs.html#854)[§](#method.default_menu-1) + +#### fn [default\_menu](widget/pick_list/trait.Catalog.html#method.default_menu)<'a>() -> Self::[Class](overlay/menu/trait.Catalog.html#associatedtype.Class "type iced::overlay::menu::Catalog::Class")<'a> + +The default class for the menu of the [`PickList`](widget/struct.PickList.html "struct iced::widget::PickList"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/progress_bar.rs.html#238)[§](#impl-Catalog-for-Theme-7) + +### impl [Catalog](widget/progress_bar/trait.Catalog.html "trait iced::widget::progress_bar::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/progress_bar.rs.html#239)[§](#associatedtype.Class-6) + +#### type [Class](widget/progress_bar/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/progress_bar/struct.Style.html "struct iced::widget::progress_bar::Style") + 'a> + +The item class of the [`Catalog`](widget/progress_bar/trait.Catalog.html "trait iced::widget::progress_bar::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/progress_bar.rs.html#241)[§](#method.default-6) + +#### fn [default](widget/progress_bar/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/progress_bar/trait.Catalog.html "trait iced::widget::progress_bar::Catalog")>::[Class](widget/progress_bar/trait.Catalog.html#associatedtype.Class "type iced::widget::progress_bar::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/progress_bar/trait.Catalog.html "trait iced::widget::progress_bar::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/progress_bar.rs.html#245)[§](#method.style-6) + +#### fn [style](widget/progress_bar/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/progress_bar/trait.Catalog.html "trait iced::widget::progress_bar::Catalog")>::[Class](widget/progress_bar/trait.Catalog.html#associatedtype.Class "type iced::widget::progress_bar::Catalog::Class")<'\_>) -> [Style](widget/progress_bar/struct.Style.html "struct iced::widget::progress_bar::Style") + +The [`Style`](widget/progress_bar/struct.Style.html "struct iced::widget::progress_bar::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/radio.rs.html#503)[§](#impl-Catalog-for-Theme-8) + +### impl [Catalog](widget/radio/trait.Catalog.html "trait iced::widget::radio::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/radio.rs.html#504)[§](#associatedtype.Class-7) + +#### type [Class](widget/radio/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/radio/struct.Style.html "struct iced::widget::radio::Style") + 'a> + +The item class of the [`Catalog`](widget/radio/trait.Catalog.html "trait iced::widget::radio::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/radio.rs.html#506)[§](#method.default-7) + +#### fn [default](widget/radio/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/radio/trait.Catalog.html "trait iced::widget::radio::Catalog")>::[Class](widget/radio/trait.Catalog.html#associatedtype.Class "type iced::widget::radio::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/radio/trait.Catalog.html "trait iced::widget::radio::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/radio.rs.html#510)[§](#method.style-7) + +#### fn [style](widget/radio/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/radio/trait.Catalog.html "trait iced::widget::radio::Catalog")>::[Class](widget/radio/trait.Catalog.html#associatedtype.Class "type iced::widget::radio::Catalog::Class")<'\_>, status: [Status](widget/radio/enum.Status.html "enum iced::widget::radio::Status")) -> [Style](widget/radio/struct.Style.html "struct iced::widget::radio::Style") + +The [`Style`](widget/radio/struct.Style.html "struct iced::widget::radio::Style") of a class with the given status. + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/rule.rs.html#283)[§](#impl-Catalog-for-Theme-9) + +### impl [Catalog](widget/rule/trait.Catalog.html "trait iced::widget::rule::Catalog") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/rule.rs.html#284)[§](#associatedtype.Class-8) + +#### type [Class](widget/rule/trait.Catalog.html#associatedtype.Class)<'a> = [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") [Style](widget/rule/struct.Style.html "struct iced::widget::rule::Style") + 'a> + +The item class of the [`Catalog`](widget/rule/trait.Catalog.html "trait iced::widget::rule::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/rule.rs.html#286)[§](#method.default-8) + +#### fn [default](widget/rule/trait.Catalog.html#tymethod.default)<'a>() -> <[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/rule/trait.Catalog.html "trait iced::widget::rule::Catalog")>::[Class](widget/rule/trait.Catalog.html#associatedtype.Class "type iced::widget::rule::Catalog::Class")<'a> + +The default class produced by the [`Catalog`](widget/rule/trait.Catalog.html "trait iced::widget::rule::Catalog"). + +[Source](https://docs.rs/iced_widget/0.13.4/x86_64-unknown-linux-gnu/src/iced_widget/rule.rs.html#290)[§](#method.style-8) + +#### fn [style](widget/rule/trait.Catalog.html#tymethod.style)(&self, class: &<[Theme](enum.Theme.html "enum iced::Theme") as [Catalog](widget/rule/trait.Catalog.html "trait iced::widget::rule::Catalog")>::[Class](widget/rule/trait.Catalog.html#associatedtype.Class "type iced::widget::rule::Catalog::Class")<'\_>) -> [Style](widget/rule/struct.Style.html "struct iced::widget::rule::Style") + +The [`Style`](widget/rule/struct.Style.html "struct iced::widget::rule::Style") of a class with the given status. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#impl-Clone-for-Theme) + +### impl [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#method.clone) + +#### fn [clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone)(&self) -> [Theme](enum.Theme.html "enum iced::Theme") + +Returns a duplicate of the value. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone) + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#213-215)[§](#method.clone_from) + +#### fn [clone\_from](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from)(&mut self, source: &Self) + +Performs copy-assignment from `source`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#impl-Debug-for-Theme) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html), [Error](https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html "struct core::fmt::Error")> + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#163)[§](#impl-Default-for-Theme) + +### impl [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#164)[§](#method.default-16) + +#### fn [default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default)() -> [Theme](enum.Theme.html "enum iced::Theme") + +Returns the “default value” for a type. [Read more](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default) + +[Source](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/src/iced_winit/program.rs.html#157)[§](#impl-DefaultStyle-for-Theme) + +### impl [DefaultStyle](application/trait.DefaultStyle.html "trait iced::application::DefaultStyle") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/src/iced_winit/program.rs.html#158)[§](#method.default_style) + +#### fn [default\_style](application/trait.DefaultStyle.html#tymethod.default_style)(&self) -> [Appearance](application/struct.Appearance.html "struct iced::application::Appearance") + +Returns the default style of a [`Program`](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/iced_winit/program/trait.Program.html "trait iced_winit::program::Program"). + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#185)[§](#impl-Display-for-Theme) + +### impl [Display](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html "trait core::fmt::Display") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#186)[§](#method.fmt-1) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")<[()](https://doc.rust-lang.org/nightly/std/primitive.unit.html), [Error](https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html "struct core::fmt::Error")> + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html#tymethod.fmt) + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#impl-PartialEq-for-Theme) + +### impl [PartialEq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html "trait core::cmp::PartialEq") for [Theme](enum.Theme.html "enum iced::Theme") + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#method.eq) + +#### fn [eq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq)(&self, other: &[Theme](enum.Theme.html "enum iced::Theme")) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `self` and `other` values to be equal, and is used by `==`. + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#265)[§](#method.ne) + +#### fn [ne](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne)(&self, other: [&Rhs](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html) + +Tests for `!=`. The default implementation is almost always sufficient, +and should not be overridden without very good reason. + +[Source](https://docs.rs/iced_core/0.13.2/x86_64-unknown-linux-gnu/src/iced_core/theme.rs.html#10)[§](#impl-StructuralPartialEq-for-Theme) + +### impl [StructuralPartialEq](https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html "trait core::marker::StructuralPartialEq") for [Theme](enum.Theme.html "enum iced::Theme") + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Theme) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Theme](enum.Theme.html "enum iced::Theme") + +[§](#impl-RefUnwindSafe-for-Theme) + +### impl [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Theme](enum.Theme.html "enum iced::Theme") + +[§](#impl-Send-for-Theme) + +### impl [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Theme](enum.Theme.html "enum iced::Theme") + +[§](#impl-Sync-for-Theme) + +### impl [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Theme](enum.Theme.html "enum iced::Theme") + +[§](#impl-Unpin-for-Theme) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Theme](enum.Theme.html "enum iced::Theme") + +[§](#impl-UnwindSafe-for-Theme) + +### impl [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Theme](enum.Theme.html "enum iced::Theme") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#483)[§](#impl-CloneToUninit-for-T) + +### impl [CloneToUninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html "trait core::clone::CloneToUninit") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#485)[§](#method.clone_to_uninit) + +#### unsafe fn [clone\_to\_uninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit)(&self, dest: [\*mut](https://doc.rust-lang.org/nightly/std/primitive.pointer.html) [u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)) + +🔬This is a nightly-only experimental API. (`clone_to_uninit`) + +Performs copy-assignment from `self` to `dest`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#31-33)[§](#impl-NoneValue-for-T) + +### impl [NoneValue](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html "trait zvariant::optional::NoneValue") for T where T: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#35)[§](#associatedtype.NoneType) + +#### type [NoneType](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#associatedtype.NoneType) = T + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#37)[§](#method.null_value) + +#### fn [null\_value](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#tymethod.null_value)() -> T + +The none-equivalent value. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#347)[§](#impl-ReadPrimitive%3CR%3E-for-P) + +### impl [ReadPrimitive](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html "trait lebe::io::ReadPrimitive") for P where R: [Read](https://doc.rust-lang.org/nightly/std/io/trait.Read.html "trait std::io::Read") + [ReadEndian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadEndian.html "trait lebe::io::ReadEndian")

, P: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#377)[§](#method.read_from_little_endian) + +#### fn [read\_from\_little\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_little_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_little_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#382)[§](#method.read_from_big_endian) + +#### fn [read\_from\_big\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_big_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_big_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#387)[§](#method.read_from_native_endian) + +#### fn [read\_from\_native\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_native_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_native_endian()`. + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#82-84)[§](#impl-ToOwned-for-T) + +### impl [ToOwned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html "trait alloc::borrow::ToOwned") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#86)[§](#associatedtype.Owned) + +#### type [Owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned) = T + +The resulting type after obtaining ownership. + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#87)[§](#method.to_owned) + +#### fn [to\_owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned)(&self) -> T + +Creates owned data from borrowed data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned) + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#91)[§](#method.clone_into) + +#### fn [clone\_into](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into)(&self, target: [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) + +Uses borrowed data to replace owned data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into) + +[Source](https://docs.rs/smol_str/0.2.2/x86_64-unknown-linux-gnu/src/smol_str/lib.rs.html#760-762)[§](#impl-ToSmolStr-for-T) + +### impl [ToSmolStr](https://docs.rs/smol_str/0.2.2/x86_64-unknown-linux-gnu/smol_str/trait.ToSmolStr.html "trait smol_str::ToSmolStr") for T where T: [Display](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html "trait core::fmt::Display") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://docs.rs/smol_str/0.2.2/x86_64-unknown-linux-gnu/src/smol_str/lib.rs.html#764)[§](#method.to_smolstr) + +#### fn [to\_smolstr](https://docs.rs/smol_str/0.2.2/x86_64-unknown-linux-gnu/smol_str/trait.ToSmolStr.html#tymethod.to_smolstr)(&self) -> [SmolStr](https://docs.rs/smol_str/0.2.2/x86_64-unknown-linux-gnu/smol_str/struct.SmolStr.html "struct smol_str::SmolStr") + +[Source](https://doc.rust-lang.org/nightly/src/alloc/string.rs.html#2806)[§](#impl-ToString-for-T) + +### impl [ToString](https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html "trait alloc::string::ToString") for T where T: [Display](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html "trait core::fmt::Display") + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/alloc/string.rs.html#2808)[§](#method.to_string) + +#### fn [to\_string](https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html#tymethod.to_string)(&self) -> [String](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html "struct alloc::string::String") + +Converts the given value to a `String`. [Read more](https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html#tymethod.to_string) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/settings/index.html](https://docs.rs/iced/0.13.1/iced/settings/index.html) + +[iced](../index.html) + +# Module settingsCopy item path + +[Source](../../src/iced/settings.rs.html#1-59) + +Expand description + +Configure your application. + +## Structs[§](#structs) + +[Settings](struct.Settings.html "struct iced::settings::Settings") +: The settings of an iced program. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/settings/struct.Settings.html](https://docs.rs/iced/0.13.1/iced/settings/struct.Settings.html) + +[iced](../index.html)::[settings](index.html) + +# Struct SettingsCopy item path + +[Source](../../src/iced/settings.rs.html#8-38) + +``` +pub struct Settings { + pub id: Option, + pub fonts: Vec>, + pub default_font: Font, + pub default_text_size: Pixels, + pub antialiasing: bool, +} +``` + +Expand description + +The settings of an iced program. + +## Fields[§](#fields) + +[§](#structfield.id)`id: Option` + +The identifier of the application. + +If provided, this identifier may be used to identify the application or +communicate with it through the windowing system. + +[§](#structfield.fonts)`fonts: Vec>` + +The fonts to load on boot. + +[§](#structfield.default_font)`default_font: Font` + +The default [`Font`](../struct.Font.html "struct iced::Font") to be used. + +By default, it uses [`Family::SansSerif`](../font/enum.Family.html#variant.SansSerif "variant iced::font::Family::SansSerif"). + +[§](#structfield.default_text_size)`default_text_size: Pixels` + +The text size that will be used by default. + +The default value is `16.0`. + +[§](#structfield.antialiasing)`antialiasing: bool` + +If set to true, the renderer will try to perform antialiasing for some +primitives. + +Enabling it can produce a smoother result in some widgets, like the +[`Canvas`](../widget/struct.Canvas.html "struct iced::widget::Canvas"), at a performance cost. + +By default, it is disabled. + +## Trait Implementations[§](#trait-implementations) + +[Source](../../src/iced/settings.rs.html#7)[§](#impl-Clone-for-Settings) + +### impl [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[Source](../../src/iced/settings.rs.html#7)[§](#method.clone) + +#### fn [clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone)(&self) -> [Settings](struct.Settings.html "struct iced::settings::Settings") + +Returns a duplicate of the value. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone) + +1.0.0 · [Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#213-215)[§](#method.clone_from) + +#### fn [clone\_from](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from)(&mut self, source: &Self) + +Performs copy-assignment from `source`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from) + +[Source](../../src/iced/settings.rs.html#7)[§](#impl-Debug-for-Settings) + +### impl [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html "trait core::fmt::Debug") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[Source](../../src/iced/settings.rs.html#7)[§](#method.fmt) + +#### fn [fmt](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt)(&self, f: &mut [Formatter](https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html "struct core::fmt::Formatter")<'\_>) -> [Result](https://doc.rust-lang.org/nightly/core/fmt/type.Result.html "type core::fmt::Result") + +Formats the value using the given formatter. [Read more](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt) + +[Source](../../src/iced/settings.rs.html#40-50)[§](#impl-Default-for-Settings) + +### impl [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[Source](../../src/iced/settings.rs.html#41-49)[§](#method.default) + +#### fn [default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default)() -> Self + +Returns the “default value” for a type. [Read more](https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default) + +[Source](../../src/iced/settings.rs.html#52-59)[§](#impl-From%3CSettings%3E-for-Settings) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From")<[Settings](struct.Settings.html "struct iced::settings::Settings")> for [Settings](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/iced_winit/settings/struct.Settings.html "struct iced_winit::settings::Settings") + +[Source](../../src/iced/settings.rs.html#53-58)[§](#method.from) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(settings: [Settings](struct.Settings.html "struct iced::settings::Settings")) -> [Settings](https://docs.rs/iced_winit/0.13.0/x86_64-unknown-linux-gnu/iced_winit/settings/struct.Settings.html "struct iced_winit::settings::Settings") + +Converts to this type from the input type. + +## Auto Trait Implementations[§](#synthetic-implementations) + +[§](#impl-Freeze-for-Settings) + +### impl [Freeze](https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html "trait core::marker::Freeze") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[§](#impl-RefUnwindSafe-for-Settings) + +### impl [RefUnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html "trait core::panic::unwind_safe::RefUnwindSafe") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[§](#impl-Send-for-Settings) + +### impl [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[§](#impl-Sync-for-Settings) + +### impl [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[§](#impl-Unpin-for-Settings) + +### impl [Unpin](https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html "trait core::marker::Unpin") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +[§](#impl-UnwindSafe-for-Settings) + +### impl [UnwindSafe](https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html "trait core::panic::unwind_safe::UnwindSafe") for [Settings](struct.Settings.html "struct iced::settings::Settings") + +## Blanket Implementations[§](#blanket-implementations) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#205-210)[§](#impl-AdaptInto%3CD,+Swp,+Dwp,+T%3E-for-S) + +### impl [AdaptInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html "trait palette::chromatic_adaptation::AdaptInto") for S where T: [Real](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Real.html "trait palette::num::Real") + [Zero](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Zero.html "trait palette::num::Zero") + [Arithmetics](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/num/trait.Arithmetics.html "trait palette::num::Arithmetics") + [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), Swp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), Dwp: [WhitePoint](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/white_point/trait.WhitePoint.html "trait palette::white_point::WhitePoint"), D: [AdaptFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptFrom.html "trait palette::chromatic_adaptation::AdaptFrom"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#213)[§](#method.adapt_into_using) + +#### fn [adapt\_into\_using](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#tymethod.adapt_into_using)(self, method: M) -> D where M: [TransformMatrix](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.TransformMatrix.html "trait palette::chromatic_adaptation::TransformMatrix"), + +Convert the source color to the destination color using the specified +method. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/chromatic_adaptation.rs.html#196)[§](#method.adapt_into) + +#### fn [adapt\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/chromatic_adaptation/trait.AdaptInto.html#method.adapt_into)(self) -> D + +Convert the source color to the destination color using the bradford +method by default. + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#138)[§](#impl-Any-for-T) + +### impl [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") for T where T: 'static + ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/any.rs.html#139)[§](#method.type_id) + +#### fn [type\_id](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id)(&self) -> [TypeId](https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html "struct core::any::TypeId") + +Gets the `TypeId` of `self`. [Read more](https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#271-273)[§](#impl-ArraysFrom%3CC%3E-for-T) + +### impl [ArraysFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html "trait palette::cast::from_into_arrays_traits::ArraysFrom") for T where C: [IntoArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.IntoArrays.html "trait palette::cast::from_into_arrays_traits::IntoArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#276)[§](#method.arrays_from) + +#### fn [arrays\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysFrom.html#tymethod.arrays_from)(colors: C) -> T + +Cast a collection of colors into a collection of arrays. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#329-331)[§](#impl-ArraysInto%3CC%3E-for-T) + +### impl [ArraysInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html "trait palette::cast::from_into_arrays_traits::ArraysInto") for T where C: [FromArrays](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.FromArrays.html "trait palette::cast::from_into_arrays_traits::FromArrays"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_arrays_traits.rs.html#334)[§](#method.arrays_into) + +#### fn [arrays\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_arrays_traits/trait.ArraysInto.html#tymethod.arrays_into)(self) -> C + +Cast this collection of arrays into a collection of colors. + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209)[§](#impl-Borrow%3CT%3E-for-T) + +### impl [Borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html "trait core::borrow::Borrow") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211)[§](#method.borrow) + +#### fn [borrow](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Immutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow) + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217)[§](#impl-BorrowMut%3CT%3E-for-T) + +### impl [BorrowMut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html "trait core::borrow::BorrowMut") for T where T: ?[Sized](https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html "trait core::marker::Sized"), + +[Source](https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218)[§](#method.borrow_mut) + +#### fn [borrow\_mut](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut)(&mut self) -> [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably borrows from an owned value. [Read more](https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#143-145)[§](#impl-Cam16IntoUnclamped%3CWpParam,+T%3E-for-U) + +### impl [Cam16IntoUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html "trait palette::cam16::Cam16IntoUnclamped") for U where T: [FromCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html "trait palette::cam16::FromCam16Unclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#147)[§](#associatedtype.Scalar-1) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.FromCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::FromCam16Unclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#149)[§](#method.cam16_into_unclamped) + +#### fn [cam16\_into\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#tymethod.cam16_into_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16IntoUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16IntoUnclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#483)[§](#impl-CloneToUninit-for-T) + +### impl [CloneToUninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html "trait core::clone::CloneToUninit") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/core/clone.rs.html#485)[§](#method.clone_to_uninit) + +#### unsafe fn [clone\_to\_uninit](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit)(&self, dest: [\*mut](https://doc.rust-lang.org/nightly/std/primitive.pointer.html) [u8](https://doc.rust-lang.org/nightly/std/primitive.u8.html)) + +🔬This is a nightly-only experimental API. (`clone_to_uninit`) + +Performs copy-assignment from `self` to `dest`. [Read more](https://doc.rust-lang.org/nightly/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#414-416)[§](#impl-ComponentsFrom%3CC%3E-for-T) + +### impl [ComponentsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html "trait palette::cast::from_into_components_traits::ComponentsFrom") for T where C: [IntoComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.IntoComponents.html "trait palette::cast::from_into_components_traits::IntoComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#419)[§](#method.components_from) + +#### fn [components\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.ComponentsFrom.html#tymethod.components_from)(colors: C) -> T + +Cast a collection of colors into a collection of color components. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#148)[§](#impl-Downcast%3CT%3E-for-T) + +### impl [Downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html "trait khronos_egl::Downcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#149)[§](#method.downcast) + +#### fn [downcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Downcast.html#tymethod.downcast)(&self) -> [&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#189)[§](#impl-Downcast-for-T) + +### impl [Downcast](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html "trait downcast_rs::Downcast") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#190)[§](#method.into_any) + +#### fn [into\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any)(self: [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box")) -> [Box](https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html "struct alloc::boxed::Box") + +Convert `Box` (where `Trait: Downcast`) to `Box`. `Box` can +then be further `downcast` into `Box` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#191)[§](#method.into_any_rc) + +#### fn [into\_any\_rc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.into_any_rc)(self: [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc")) -> [Rc](https://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html "struct alloc::rc::Rc") + +Convert `Rc` (where `Trait: Downcast`) to `Rc`. `Rc` can then be +further `downcast` into `Rc` where `ConcreteType` implements `Trait`. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#192)[§](#method.as_any) + +#### fn [as\_any](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any)(&self) -> &(dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&Any`’s vtable from `&Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#193)[§](#method.as_any_mut) + +#### fn [as\_any\_mut](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.Downcast.html#tymethod.as_any_mut)(&mut self) -> &mut (dyn [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + 'static) + +Convert `&mut Trait` (where `Trait: Downcast`) to `&Any`. This is needed since Rust cannot +generate `&mut Any`’s vtable from `&mut Trait`’s. + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#203)[§](#impl-DowncastSync-for-T) + +### impl [DowncastSync](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html "trait downcast_rs::DowncastSync") for T where T: [Any](https://doc.rust-lang.org/nightly/core/any/trait.Any.html "trait core::any::Any") + [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send") + [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/src/downcast_rs/lib.rs.html#204)[§](#method.into_any_arc) + +#### fn [into\_any\_arc](https://docs.rs/downcast-rs/1.2.1/x86_64-unknown-linux-gnu/downcast_rs/trait.DowncastSync.html#tymethod.into_any_arc)(self: [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc")) -> [Arc](https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html "struct alloc::sync::Arc") + +Convert `Arc` (where `Trait: Downcast`) to `Arc`. `Arc` can then be +further `downcast` into `Arc` where `ConcreteType` implements `Trait`. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#791)[§](#impl-From%3CT%3E-for-T) + +### impl [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From") for T + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#794)[§](#method.from-1) + +#### fn [from](https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from)(t: T) -> T + +Returns the argument unchanged. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#65)[§](#impl-FromAngle%3CT%3E-for-T) + +### impl [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#67)[§](#method.from_angle) + +#### fn [from\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html#tymethod.from_angle)(angle: T) -> T + +Performs a conversion from `angle`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#85)[§](#impl-FromStimulus%3CU%3E-for-T) + +### impl [FromStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html "trait palette::stimulus::FromStimulus") for T where U: [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#87)[§](#method.from_stimulus) + +#### fn [from\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.FromStimulus.html#tymethod.from_stimulus)(other: U) -> T + +Converts `other` into `Self`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#325)[§](#impl-Instrument-for-T) + +### impl [Instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html "trait tracing::instrument::Instrument") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#86)[§](#method.instrument) + +#### fn [instrument](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument)(self, span: [Span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span")) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the provided [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.instrument) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#128)[§](#method.in_current_span) + +#### fn [in\_current\_span](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span)(self) -> [Instrumented](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.Instrumented.html "struct tracing::instrument::Instrumented") + +Instruments this type with the [current](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html#method.current "associated function tracing::span::Span::current") [`Span`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/span/struct.Span.html "struct tracing::span::Span"), returning an +`Instrumented` wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.Instrument.html#method.in_current_span) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#773-775)[§](#impl-Into%3CU%3E-for-T) + +### impl [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into") for T where U: [From](https://doc.rust-lang.org/nightly/core/convert/trait.From.html "trait core::convert::From"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#783)[§](#method.into) + +#### fn [into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into)(self) -> U + +Calls `U::from(self)`. + +That is, this conversion is whatever the implementation of +`From for U` chooses to do. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#78-80)[§](#impl-IntoAngle%3CU%3E-for-T) + +### impl [IntoAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html "trait palette::angle::IntoAngle") for T where U: [FromAngle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.FromAngle.html "trait palette::angle::FromAngle"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/angle.rs.html#83)[§](#method.into_angle) + +#### fn [into\_angle](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/angle/trait.IntoAngle.html#tymethod.into_angle)(self) -> U + +Performs a conversion into `T`. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#114-116)[§](#impl-IntoCam16Unclamped%3CWpParam,+T%3E-for-U) + +### impl [IntoCam16Unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html "trait palette::cam16::IntoCam16Unclamped") for U where T: [Cam16FromUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html "trait palette::cam16::Cam16FromUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#118)[§](#associatedtype.Scalar) + +#### type [Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar) = >::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.Cam16FromUnclamped.html#associatedtype.Scalar "type palette::cam16::Cam16FromUnclamped::Scalar") + +The number type that’s used in `parameters` when converting. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cam16.rs.html#120)[§](#method.into_cam16_unclamped) + +#### fn [into\_cam16\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#tymethod.into_cam16_unclamped)( self, parameters: [BakedParameters](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/parameters/struct.BakedParameters.html "struct palette::cam16::parameters::BakedParameters")>::[Scalar](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cam16/trait.IntoCam16Unclamped.html#associatedtype.Scalar "type palette::cam16::IntoCam16Unclamped::Scalar")>, ) -> T + +Converts `self` into `C`, using the provided parameters. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#129-131)[§](#impl-IntoColor%3CU%3E-for-T) + +### impl [IntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html "trait palette::convert::from_into_color::IntoColor") for T where U: [FromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.FromColor.html "trait palette::convert::from_into_color::FromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color.rs.html#134)[§](#method.into_color) + +#### fn [into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color)(self) -> U + +Convert into T with values clamped to the color defined bounds [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color/trait.IntoColor.html#tymethod.into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#95-97)[§](#impl-IntoColorUnclamped%3CU%3E-for-T) + +### impl [IntoColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html "trait palette::convert::from_into_color_unclamped::IntoColorUnclamped") for T where U: [FromColorUnclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.FromColorUnclamped.html "trait palette::convert::from_into_color_unclamped::FromColorUnclamped"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/from_into_color_unclamped.rs.html#100)[§](#method.into_color_unclamped) + +#### fn [into\_color\_unclamped](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped)(self) -> U + +Convert into T. The resulting color might be invalid in its color space [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/from_into_color_unclamped/trait.IntoColorUnclamped.html#tymethod.into_color_unclamped) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#64)[§](#impl-IntoEither-for-T) + +### impl [IntoEither](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html "trait either::into_either::IntoEither") for T + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#29)[§](#method.into_either) + +#### fn [into\_either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either)(self, into\_left: [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html)) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left` is `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either) + +[Source](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/src/either/into_either.rs.html#55-57)[§](#method.into_either_with) + +#### fn [into\_either\_with](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with)(self, into\_left: F) -> [Either](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") where F: [FnOnce](https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html "trait core::ops::function::FnOnce")(&Self) -> [bool](https://doc.rust-lang.org/nightly/std/primitive.bool.html), + +Converts `self` into a [`Left`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Left "variant either::Either::Left") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +if `into_left(&self)` returns `true`. +Converts `self` into a [`Right`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html#variant.Right "variant either::Either::Right") variant of [`Either`](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/enum.Either.html "enum either::Either") +otherwise. [Read more](https://docs.rs/either/1.15.0/x86_64-unknown-linux-gnu/either/into_either/trait.IntoEither.html#method.into_either_with) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#109)[§](#impl-IntoStimulus%3CT%3E-for-T) + +### impl [IntoStimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html "trait palette::stimulus::IntoStimulus") for T + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/stimulus.rs.html#111)[§](#method.into_stimulus) + +#### fn [into\_stimulus](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/stimulus/trait.IntoStimulus.html#tymethod.into_stimulus)(self) -> T + +Converts `self` into `T`, while performing the appropriate scaling, +rounding and clamping. + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#31-33)[§](#impl-NoneValue-for-T) + +### impl [NoneValue](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html "trait zvariant::optional::NoneValue") for T where T: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#35)[§](#associatedtype.NoneType) + +#### type [NoneType](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#associatedtype.NoneType) = T + +[Source](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/src/zvariant/optional.rs.html#37)[§](#method.null_value) + +#### fn [null\_value](https://docs.rs/zvariant/4.2.0/x86_64-unknown-linux-gnu/zvariant/optional/trait.NoneValue.html#tymethod.null_value)() -> T + +The none-equivalent value. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#194)[§](#impl-Pointable-for-T) + +### impl [Pointable](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html "trait crossbeam_epoch::atomic::Pointable") for T + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#195)[§](#associatedconstant.ALIGN) + +#### const [ALIGN](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedconstant.ALIGN): [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +The alignment of pointer. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#197)[§](#associatedtype.Init) + +#### type [Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init) = T + +The type for initializers. + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#199)[§](#method.init) + +#### unsafe fn [init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init)(init: ::[Init](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#associatedtype.Init "type crossbeam_epoch::atomic::Pointable::Init")) -> [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html) + +Initializes a with the given initializer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.init) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#203)[§](#method.deref) + +#### unsafe fn [deref](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#207)[§](#method.deref_mut) + +#### unsafe fn [deref\_mut](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut)<'a>(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) -> [&'a mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html) + +Mutably dereferences the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.deref_mut) + +[Source](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/src/crossbeam_epoch/atomic.rs.html#211)[§](#method.drop) + +#### unsafe fn [drop](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop)(ptr: [usize](https://doc.rust-lang.org/nightly/std/primitive.usize.html)) + +Drops the object pointed to by the given pointer. [Read more](https://docs.rs/crossbeam-epoch/0.9.18/x86_64-unknown-linux-gnu/crossbeam_epoch/atomic/trait.Pointable.html#tymethod.drop) + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#347)[§](#impl-ReadPrimitive%3CR%3E-for-P) + +### impl [ReadPrimitive](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html "trait lebe::io::ReadPrimitive") for P where R: [Read](https://doc.rust-lang.org/nightly/std/io/trait.Read.html "trait std::io::Read") + [ReadEndian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadEndian.html "trait lebe::io::ReadEndian")

, P: [Default](https://doc.rust-lang.org/nightly/core/default/trait.Default.html "trait core::default::Default"), + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#377)[§](#method.read_from_little_endian) + +#### fn [read\_from\_little\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_little_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_little_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#382)[§](#method.read_from_big_endian) + +#### fn [read\_from\_big\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_big_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_big_endian()`. + +[Source](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/src/lebe/lib.rs.html#387)[§](#method.read_from_native_endian) + +#### fn [read\_from\_native\_endian](https://docs.rs/lebe/0.5.2/x86_64-unknown-linux-gnu/lebe/io/trait.ReadPrimitive.html#method.read_from_native_endian)(read: [&mut R](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result") + +Read this value from the supplied reader. Same as `ReadEndian::read_from_native_endian()`. + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#34)[§](#impl-Same-for-T) + +### impl [Same](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html "trait typenum::type_operators::Same") for T + +[Source](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/src/typenum/type_operators.rs.html#35)[§](#associatedtype.Output) + +#### type [Output](https://docs.rs/typenum/1.18.0/x86_64-unknown-linux-gnu/typenum/type_operators/trait.Same.html#associatedtype.Output) = T + +Should always be `Self` + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#82-84)[§](#impl-ToOwned-for-T) + +### impl [ToOwned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html "trait alloc::borrow::ToOwned") for T where T: [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html "trait core::clone::Clone"), + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#86)[§](#associatedtype.Owned) + +#### type [Owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned) = T + +The resulting type after obtaining ownership. + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#87)[§](#method.to_owned) + +#### fn [to\_owned](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned)(&self) -> T + +Creates owned data from borrowed data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned) + +[Source](https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#91)[§](#method.clone_into) + +#### fn [clone\_into](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into)(&self, target: [&mut T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)) + +Uses borrowed data to replace owned data, usually by cloning. [Read more](https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#584-586)[§](#impl-TryComponentsInto%3CC%3E-for-T) + +### impl [TryComponentsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html "trait palette::cast::from_into_components_traits::TryComponentsInto") for T where C: [TryFromComponents](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html "trait palette::cast::from_into_components_traits::TryFromComponents"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#588)[§](#associatedtype.Error-2) + +#### type [Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error) = >::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryFromComponents.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryFromComponents::Error") + +The error for when `try_into_colors` fails to cast. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_components_traits.rs.html#591)[§](#method.try_components_into) + +#### fn [try\_components\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#associatedtype.Error "type palette::cast::from_into_components_traits::TryComponentsInto::Error")> + +Try to cast this collection of color components into a collection of +colors. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_components_traits/trait.TryComponentsInto.html#tymethod.try_components_into) + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#833-835)[§](#impl-TryFrom%3CU%3E-for-T) + +### impl [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom") for T where U: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#837)[§](#associatedtype.Error-1) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error) = [Infallible](https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html "enum core::convert::Infallible") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#840)[§](#method.try_from) + +#### fn [try\_from](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from)(value: U) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#817-819)[§](#impl-TryInto%3CU%3E-for-T) + +### impl [TryInto](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html "trait core::convert::TryInto") for T where U: [TryFrom](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html "trait core::convert::TryFrom"), + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#821)[§](#associatedtype.Error) + +#### type [Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error) = >::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error") + +The type returned in the event of a conversion error. + +[Source](https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#824)[§](#method.try_into) + +#### fn [try\_into](https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")>::[Error](https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error "type core::convert::TryFrom::Error")> + +Performs the conversion. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#110-112)[§](#impl-TryIntoColor%3CU%3E-for-T) + +### impl [TryIntoColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html "trait palette::convert::try_from_into_color::TryIntoColor") for T where U: [TryFromColor](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryFromColor.html "trait palette::convert::try_from_into_color::TryFromColor"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/convert/try_from_into_color.rs.html#115)[§](#method.try_into_color) + +#### fn [try\_into\_color](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color)(self) -> [Result](https://doc.rust-lang.org/nightly/core/result/enum.Result.html "enum core::result::Result")> + +Convert into T, returning ok if the color is inside of its defined +range, otherwise an `OutOfBounds` error is returned which contains +the unclamped color. [Read more](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/convert/try_from_into_color/trait.TryIntoColor.html#tymethod.try_into_color) + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#325-327)[§](#impl-UintsFrom%3CC%3E-for-U) + +### impl [UintsFrom](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html "trait palette::cast::from_into_uints_traits::UintsFrom") for U where C: [IntoUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.IntoUints.html "trait palette::cast::from_into_uints_traits::IntoUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#330)[§](#method.uints_from) + +#### fn [uints\_from](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsFrom.html#tymethod.uints_from)(colors: C) -> U + +Cast a collection of colors into a collection of unsigned integers. + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#401-403)[§](#impl-UintsInto%3CC%3E-for-U) + +### impl [UintsInto](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html "trait palette::cast::from_into_uints_traits::UintsInto") for U where C: [FromUints](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.FromUints.html "trait palette::cast::from_into_uints_traits::FromUints"), + +[Source](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/src/palette/cast/from_into_uints_traits.rs.html#406)[§](#method.uints_into) + +#### fn [uints\_into](https://docs.rs/palette/0.7.6/x86_64-unknown-linux-gnu/palette/cast/from_into_uints_traits/trait.UintsInto.html#tymethod.uints_into)(self) -> C + +Cast this collection of unsigned integers into a collection of colors. + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#158)[§](#impl-Upcast%3CT%3E-for-T) + +### impl [Upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html "trait khronos_egl::Upcast") for T + +[Source](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/src/khronos_egl/lib.rs.html#159)[§](#method.upcast) + +#### fn [upcast](https://docs.rs/khronos-egl/6.0.0/x86_64-unknown-linux-gnu/khronos_egl/trait.Upcast.html#tymethod.upcast)(&self) -> [Option](https://doc.rust-lang.org/nightly/core/option/enum.Option.html "enum core::option::Option")<[&T](https://doc.rust-lang.org/nightly/std/primitive.reference.html)> + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#221-223)[§](#impl-VZip%3CV%3E-for-T) + +### impl [VZip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html "trait ppv_lite86::types::VZip") for T where V: [MultiLane](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.MultiLane.html "trait ppv_lite86::types::MultiLane"), + +[Source](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/src/ppv_lite86/types.rs.html#226)[§](#method.vzip) + +#### fn [vzip](https://docs.rs/ppv-lite86/0.2.21/x86_64-unknown-linux-gnu/ppv_lite86/types/trait.VZip.html#tymethod.vzip)(self) -> V + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#393)[§](#impl-WithSubscriber-for-T) + +### impl [WithSubscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html "trait tracing::instrument::WithSubscriber") for T + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#176-178)[§](#method.with_subscriber) + +#### fn [with\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber)(self, subscriber: S) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") where S: [Into](https://doc.rust-lang.org/nightly/core/convert/trait.Into.html "trait core::convert::Into")<[Dispatch](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/dispatcher/struct.Dispatch.html "struct tracing_core::dispatcher::Dispatch")>, + +Attaches the provided [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber) + +[Source](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/src/tracing/instrument.rs.html#228)[§](#method.with_current_subscriber) + +#### fn [with\_current\_subscriber](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber)(self) -> [WithDispatch](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") + +Attaches the current [default](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/dispatcher/index.html#setting-the-default-subscriber "mod tracing::dispatcher") [`Subscriber`](https://docs.rs/tracing-core/0.1.34/x86_64-unknown-linux-gnu/tracing_core/subscriber/trait.Subscriber.html "trait tracing_core::subscriber::Subscriber") to this type, returning a +[`WithDispatch`](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/struct.WithDispatch.html "struct tracing::instrument::WithDispatch") wrapper. [Read more](https://docs.rs/tracing/0.1.41/x86_64-unknown-linux-gnu/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber) + +[Source](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/src/yoke/erased.rs.html#22)[§](#impl-ErasedDestructor-for-T) + +### impl [ErasedDestructor](https://docs.rs/yoke/0.8.0/x86_64-unknown-linux-gnu/yoke/erased/trait.ErasedDestructor.html "trait yoke::erased::ErasedDestructor") for T where T: 'static, + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#8)[§](#impl-MaybeSend-for-T) + +### impl [MaybeSend](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSend.html "trait iced_futures::maybe::platform::MaybeSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/src/iced_futures/maybe.rs.html#15)[§](#impl-MaybeSync-for-T) + +### impl [MaybeSync](https://docs.rs/iced_futures/0.13.2/x86_64-unknown-linux-gnu/iced_futures/maybe/platform/trait.MaybeSync.html "trait iced_futures::maybe::platform::MaybeSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7040)[§](#impl-WasmNotSend-for-T) + +### impl [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") for T where T: [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html "trait core::marker::Send"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7024)[§](#impl-WasmNotSendSync-for-T) + +### impl [WasmNotSendSync](../widget/shader/wgpu/trait.WasmNotSendSync.html "trait iced::widget::shader::wgpu::WasmNotSendSync") for T where T: [WasmNotSend](../widget/shader/wgpu/trait.WasmNotSend.html "trait iced::widget::shader::wgpu::WasmNotSend") + [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync"), + +[Source](https://docs.rs/wgpu-types/0.19.2/x86_64-unknown-linux-gnu/src/wgpu_types/lib.rs.html#7073)[§](#impl-WasmNotSync-for-T) + +### impl [WasmNotSync](../widget/shader/wgpu/trait.WasmNotSync.html "trait iced::widget::shader::wgpu::WasmNotSync") for T where T: [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html "trait core::marker::Sync"), + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/window/index.html](https://docs.rs/iced/0.13.1/iced/window/index.html) + +[iced](../index.html) + +# Module windowCopy item path + +[Source](../../src/iced/window.rs.html#1-8) + +Expand description + +Configure the window of your application in native platforms. + +## Modules[§](#modules) + +[icon](icon/index.html "mod iced::window::icon") +: Attach an icon to the window of your application. + +[raw\_window\_handle](raw_window_handle/index.html "mod iced::window::raw_window_handle") +: Interoperability library for Rust Windowing applications. + +[screenshot](screenshot/index.html "mod iced::window::screenshot") +: Take screenshots of a window. + +[settings](settings/index.html "mod iced::window::settings") +: Configure your windows. + +## Structs[§](#structs) + +[Icon](struct.Icon.html "struct iced::window::Icon") +: An window icon normally used for the titlebar or taskbar. + +[Id](struct.Id.html "struct iced::window::Id") +: The id of the window. + +[Screenshot](struct.Screenshot.html "struct iced::window::Screenshot") +: Data of a screenshot, captured with `window::screenshot()`. + +[Settings](struct.Settings.html "struct iced::window::Settings") +: The window settings of an application. + +## Enums[§](#enums) + +[Action](enum.Action.html "enum iced::window::Action") +: An operation to be performed on some window. + +[Event](enum.Event.html "enum iced::window::Event") +: A window-related event. + +[Level](enum.Level.html "enum iced::window::Level") +: A window level groups windows with respect to their z-position. + +[Mode](enum.Mode.html "enum iced::window::Mode") +: The mode of a window-based application. + +[Position](enum.Position.html "enum iced::window::Position") +: The position of a window in a given screen. + +[RedrawRequest](enum.RedrawRequest.html "enum iced::window::RedrawRequest") +: A request to redraw a window. + +[UserAttention](enum.UserAttention.html "enum iced::window::UserAttention") +: The type of user attention to request. + +## Functions[§](#functions) + +[change\_icon](fn.change_icon.html "fn iced::window::change_icon") +: Changes the [`Icon`](struct.Icon.html "struct iced::window::Icon") of the window. + +[change\_level](fn.change_level.html "fn iced::window::change_level") +: Changes the window [`Level`](enum.Level.html "enum iced::window::Level"). + +[change\_mode](fn.change_mode.html "fn iced::window::change_mode") +: Changes the [`Mode`](enum.Mode.html "enum iced::window::Mode") of the window. + +[close](fn.close.html "fn iced::window::close") +: Closes the window with `id`. + +[close\_events](fn.close_events.html "fn iced::window::close_events") +: Subscribes to all [`Event::Closed`](enum.Event.html#variant.Closed "variant iced::window::Event::Closed") occurrences in the running application. + +[close\_requests](fn.close_requests.html "fn iced::window::close_requests") +: Subscribes to all [`Event::CloseRequested`](enum.Event.html#variant.CloseRequested "variant iced::window::Event::CloseRequested") occurences in the running application. + +[disable\_mouse\_passthrough](fn.disable_mouse_passthrough.html "fn iced::window::disable_mouse_passthrough") +: Disable mouse passthrough for the given window. + +[drag](fn.drag.html "fn iced::window::drag") +: Begins dragging the window while the left mouse button is held. + +[enable\_mouse\_passthrough](fn.enable_mouse_passthrough.html "fn iced::window::enable_mouse_passthrough") +: Enables mouse passthrough for the given window. + +[events](fn.events.html "fn iced::window::events") +: Subscribes to all window events of the running application. + +[frames](fn.frames.html "fn iced::window::frames") +: Subscribes to the frames of the window of the running application. + +[gain\_focus](fn.gain_focus.html "fn iced::window::gain_focus") +: Brings the window to the front and sets input focus. Has no effect if the window is + already in focus, minimized, or not visible. + +[get\_latest](fn.get_latest.html "fn iced::window::get_latest") +: Gets the window [`Id`](struct.Id.html "struct iced::window::Id") of the latest window. + +[get\_maximized](fn.get_maximized.html "fn iced::window::get_maximized") +: Gets the maximized state of the window with the given [`Id`](struct.Id.html "struct iced::window::Id"). + +[get\_minimized](fn.get_minimized.html "fn iced::window::get_minimized") +: Gets the minimized state of the window with the given [`Id`](struct.Id.html "struct iced::window::Id"). + +[get\_mode](fn.get_mode.html "fn iced::window::get_mode") +: Gets the current [`Mode`](enum.Mode.html "enum iced::window::Mode") of the window. + +[get\_oldest](fn.get_oldest.html "fn iced::window::get_oldest") +: Gets the window [`Id`](struct.Id.html "struct iced::window::Id") of the oldest window. + +[get\_position](fn.get_position.html "fn iced::window::get_position") +: Gets the position in logical coordinates of the window with the given [`Id`](struct.Id.html "struct iced::window::Id"). + +[get\_raw\_id](fn.get_raw_id.html "fn iced::window::get_raw_id") +: Gets an identifier unique to the window, provided by the underlying windowing system. This is + not to be confused with [`Id`](struct.Id.html "struct iced::window::Id"). + +[get\_scale\_factor](fn.get_scale_factor.html "fn iced::window::get_scale_factor") +: Gets the scale factor of the window with the given [`Id`](struct.Id.html "struct iced::window::Id"). + +[get\_size](fn.get_size.html "fn iced::window::get_size") +: Get the window’s size in logical dimensions. + +[maximize](fn.maximize.html "fn iced::window::maximize") +: Maximizes the window. + +[minimize](fn.minimize.html "fn iced::window::minimize") +: Minimizes the window. + +[move\_to](fn.move_to.html "fn iced::window::move_to") +: Moves the window to the given logical coordinates. + +[open](fn.open.html "fn iced::window::open") +: Opens a new window with the given [`Settings`](struct.Settings.html "struct iced::window::Settings"); producing the [`Id`](struct.Id.html "struct iced::window::Id") + of the new window on completion. + +[open\_events](fn.open_events.html "fn iced::window::open_events") +: Subscribes to all [`Event::Closed`](enum.Event.html#variant.Closed "variant iced::window::Event::Closed") occurrences in the running application. + +[request\_user\_attention](fn.request_user_attention.html "fn iced::window::request_user_attention") +: Request user attention to the window. This has no effect if the application + is already focused. How requesting for user attention manifests is platform dependent, + see [`UserAttention`](enum.UserAttention.html "enum iced::window::UserAttention") for details. + +[resize](fn.resize.html "fn iced::window::resize") +: Resizes the window to the given logical dimensions. + +[resize\_events](fn.resize_events.html "fn iced::window::resize_events") +: Subscribes to all [`Event::Resized`](enum.Event.html#variant.Resized "variant iced::window::Event::Resized") occurrences in the running application. + +[run\_with\_handle](fn.run_with_handle.html "fn iced::window::run_with_handle") +: Runs the given callback with the native window handle for the window with the given id. + +[screenshot](fn.screenshot.html "fn iced::window::screenshot") +: Captures a [`Screenshot`](struct.Screenshot.html "struct iced::window::Screenshot") from the window. + +[show\_system\_menu](fn.show_system_menu.html "fn iced::window::show_system_menu") +: Show the [system menu](https://en.wikipedia.org/wiki/Common_menus_in_Microsoft_Windows#System_menu) at cursor position. + +[toggle\_decorations](fn.toggle_decorations.html "fn iced::window::toggle_decorations") +: Toggles the window decorations. + +[toggle\_maximize](fn.toggle_maximize.html "fn iced::window::toggle_maximize") +: Toggles the window to maximized or back. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/keyboard/index.html](https://docs.rs/iced/0.13.1/iced/keyboard/index.html) + +[iced](../index.html) + +# Module keyboardCopy item path + +[Source](../../src/iced/lib.rs.html#558) + +Expand description + +Listen and react to keyboard events. + +## Modules[§](#modules) + +[key](key/index.html "mod iced::keyboard::key") +: Identify keyboard keys. + +## Structs[§](#structs) + +[Modifiers](struct.Modifiers.html "struct iced::keyboard::Modifiers") +: The current state of the keyboard modifiers. + +## Enums[§](#enums) + +[Event](enum.Event.html "enum iced::keyboard::Event") +: A keyboard event. + +[Key](enum.Key.html "enum iced::keyboard::Key") +: A key on the keyboard. + +[Location](enum.Location.html "enum iced::keyboard::Location") +: The location of a key on the keyboard. + +## Functions[§](#functions) + +[on\_key\_press](fn.on_key_press.html "fn iced::keyboard::on_key_press") +: Listens to keyboard key presses and calls the given function + to map them into actual messages. + +[on\_key\_release](fn.on_key_release.html "fn iced::keyboard::on_key_release") +: Listens to keyboard key releases and calls the given function + to map them into actual messages. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/mouse/index.html](https://docs.rs/iced/0.13.1/iced/mouse/index.html) + +[iced](../index.html) + +# Module mouseCopy item path + +[Source](../../src/iced/lib.rs.html#565) + +Expand description + +Listen and react to mouse events. + +## Enums[§](#enums) + +[Button](enum.Button.html "enum iced::mouse::Button") +: The button of a mouse. + +[Cursor](enum.Cursor.html "enum iced::mouse::Cursor") +: The mouse cursor state. + +[Event](enum.Event.html "enum iced::mouse::Event") +: A mouse event. + +[Interaction](enum.Interaction.html "enum iced::mouse::Interaction") +: The interaction of a mouse cursor. + +[ScrollDelta](enum.ScrollDelta.html "enum iced::mouse::ScrollDelta") +: A scroll movement. + + +--- + +## Source: [https://docs.rs/iced/0.13.1/iced/touch/index.html](https://docs.rs/iced/0.13.1/iced/touch/index.html) + +[iced](../index.html) + +# Module touchCopy item path + +[Source](../../src/iced/lib.rs.html#597) + +Expand description + +Listen and react to touch events. + +## Structs[§](#structs) + +[Finger](struct.Finger.html "struct iced::touch::Finger") +: A unique identifier representing a finger on a touch interaction. + +## Enums[§](#enums) + +[Event](enum.Event.html "enum iced::touch::Event") +: A touch interaction. + diff --git a/imagdagdos.py b/imagdagdos.py new file mode 100644 index 0000000..ac3a9eb --- /dev/null +++ b/imagdagdos.py @@ -0,0 +1,139 @@ +import os +import requests +from bs4 import BeautifulSoup +from markdownify import markdownify as md +import re +import time + +# Make sure you have the required libraries: +# pip install requests beautifulsoup4 markdownify + +def sanitize_filename(url_path): + """Creates a safe filename from a URL path.""" + sanitized = re.sub(r'[^a-zA-Z0-9\.]+', '_', url_path) + if not sanitized or sanitized.endswith('_html'): + sanitized = sanitized.replace('_html', '') + if not sanitized: + return "index.md" + return sanitized.strip('_').lower()[:100] + ".md" + +def scrape_and_convert_url(url, session): + """ + Fetches a single URL, finds its main documentation content, + and converts it to Markdown text. + """ + print(f"Fetching: {url}") + try: + response = session.get(url, timeout=10) + response.raise_for_status() + + soup = BeautifulSoup(response.text, 'html.parser') + + # 1. Try to find the most specific ID first. + main_content = soup.find(id="main-content") + + # 2. If that fails, fall back to finding the standard

HTML tag. + if not main_content: + main_content = soup.find("main") + + if main_content: + # Prepend the source URL to the content + header = f"# Source: {url}\n\n" + markdown_text = md(str(main_content), heading_style="ATX") + print(f" -> Success: Converted content.") + return header + markdown_text + else: + print(f" -> Warning: Could not find a recognizable main content section in page.") + return None + + except requests.exceptions.RequestException as e: + print(f" -> Error: Failed to fetch URL {url}. Reason: {e}") + return None + except Exception as e: + print(f" -> Error: An unexpected error occurred for {url}. Reason: {e}") + return None + +def process_url_list(base_url, paths, output_dir): + """ + Processes a list of URL paths, converts their content to Markdown, + and saves each into a separate file in the output directory. + """ + os.makedirs(output_dir, exist_ok=True) + print(f"Saving files to '{output_dir}/' directory.") + + with requests.Session() as session: + session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}) + + processed_urls = set() + for path in paths: + full_url = base_url + path + cleaned_url = full_url.split('#')[0] + + if not cleaned_url or not cleaned_url.startswith("http") or cleaned_url in processed_urls: + continue + + processed_urls.add(cleaned_url) + + content = scrape_and_convert_url(cleaned_url, session) + + if content: + filename = sanitize_filename(path) + filepath = os.path.join(output_dir, filename) + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + print(f" -> Saved: {filepath}") + + time.sleep(0.1) + + print(f"\n🎉 Conversion complete! All content saved to the '{output_dir}' directory.") + + +if __name__ == '__main__': + BASE_URL = "https://doc.rust-lang.org/book/" + URL_PATHS = [ + "", "appendix-00.html", "appendix-01-keywords.html", "appendix-02-operators.html", + "appendix-03-derivable-traits.html", "appendix-04-useful-development-tools.html", + "appendix-05-editions.html", "appendix-06-translation.html", "appendix-07-nightly-rust.html", + "ch00-00-introduction.html", "ch01-00-getting-started.html", "ch01-01-installation.html", + "ch01-02-hello-world.html", "ch01-03-hello-cargo.html", "ch02-00-guessing-game-tutorial.html", + "ch03-00-common-programming-concepts.html", "ch03-01-variables-and-mutability.html", + "ch03-02-data-types.html", "ch03-03-how-functions-work.html", "ch03-04-comments.html", + "ch03-05-control-flow.html", "ch04-00-understanding-ownership.html", "ch04-01-what-is-ownership.html", + "ch04-02-references-and-borrowing.html", "ch04-03-slices.html", "ch05-00-structs.html", + "ch05-01-defining-structs.html", "ch05-02-example-structs.html", "ch05-03-method-syntax.html", + "ch06-00-enums.html", "ch06-01-defining-an-enum.html", "ch06-02-match.html", "ch06-03-if-let.html", + "ch07-00-managing-growing-projects-with-packages-crates-and-modules.html", "ch07-01-packages-and-crates.html", + "ch07-02-defining-modules-to-control-scope-and-privacy.html", "ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html", + "ch07-04-bringing-paths-into-scope-with-the-use-keyword.html", "ch07-05-separating-modules-into-different-files.html", + "ch08-00-common-collections.html", "ch08-01-vectors.html", "ch08-02-strings.html", + "ch08-03-hash-maps.html", "ch09-00-error-handling.html", "ch09-01-unrecoverable-errors-with-panic.html", + "ch09-02-recoverable-errors-with-result.html", "ch09-03-to-panic-or-not-to-panic.html", + "ch10-00-generics.html", "ch10-01-syntax.html", "ch10-02-traits.html", + "ch10-03-lifetime-syntax.html", "ch11-00-testing.html", "ch11-01-writing-tests.html", + "ch11-02-running-tests.html", "ch11-03-test-organization.html", "ch12-00-an-io-project.html", + "ch12-01-accepting-command-line-arguments.html", "ch12-02-reading-a-file.html", + "ch12-03-improving-error-handling-and-modularity.html", "ch12-04-testing-the-librarys-functionality.html", + "ch12-05-working-with-environment-variables.html", "ch12-06-writing-to-stderr-instead-of-stdout.html", + "ch13-00-functional-features.html", "ch13-01-closures.html", "ch13-02-iterators.html", + "ch13-03-improving-our-io-project.html", "ch13-04-performance.html", "ch14-00-more-about-cargo.html", + "ch14-01-release-profiles.html", "ch14-02-publishing-to-crates-io.html", + "ch14-03-cargo-workspaces.html", "ch14-04-installing-binaries.html", "ch14-05-extending-cargo.html", + "ch15-00-smart-pointers.html", "ch15-01-box.html", "ch15-02-deref.html", "ch15-03-drop.html", + "ch15-04-rc.html", "ch15-05-interior-mutability.html", "ch15-06-reference-cycles.html", + "ch16-00-concurrency.html", "ch16-01-threads.html", "ch16-02-message-passing.html", + "ch16-03-shared-state.html", "ch16-04-extensible-concurrency-sync-and-send.html", + "ch17-00-async-await.html", "ch17-01-futures-and-syntax.html", "ch17-02-concurrency-with-async.html", + "ch17-03-more-futures.html", "ch17-04-streams.html", "ch17-05-traits-for-async.html", + "ch17-06-futures-tasks-threads.html", "ch18-00-oop.html", "ch18-01-what-is-oo.html", + "ch18-02-trait-objects.html", "ch18-03-oo-design-patterns.html", "ch19-00-patterns.html", + "ch19-01-all-the-places-for-patterns.html", "ch19-02-refutability.html", "ch19-03-pattern-syntax.html", + "ch20-00-advanced-features.html", "ch20-01-unsafe-rust.html", "ch20-02-advanced-traits.html", + "ch20-03-advanced-types.html", "ch20-04-advanced-functions-and-closures.html", "ch20-05-macros.html", + "ch21-00-final-project-a-web-server.html", "ch21-01-single-threaded.html", "ch21-02-multithreaded.html", + "ch21-03-graceful-shutdown-and-cleanup.html" + ] + + OUTPUT_DIRECTORY = "rust_book_markdown" + + process_url_list(BASE_URL, URL_PATHS, OUTPUT_DIRECTORY) \ No newline at end of file diff --git a/json-md.py b/json-md.py new file mode 100644 index 0000000..3587eb1 --- /dev/null +++ b/json-md.py @@ -0,0 +1,123 @@ +import os +import requests +from bs4 import BeautifulSoup +from markdownify import markdownify as md +import re + +# Make sure you have the required libraries: +# pip install requests beautifulsoup4 markdownify + +def sanitize_filename(url): + """Creates a safe filename from a URL.""" + if "docs.rs/" in url: + url = url.split("docs.rs/", 1)[1] + sanitized = re.sub(r'[^a-zA-Z0-9\.]+', '_', url) + return sanitized.strip('_').lower()[:100] + +def scrape_and_convert_url(url, session): + """ + Fetches a single URL, finds its main documentation content, + and converts it to Markdown text. + """ + print(f"Fetching: {url}") + try: + response = session.get(url, timeout=10) + response.raise_for_status() + + soup = BeautifulSoup(response.text, 'html.parser') + + # --- THIS IS THE CORRECTED LOGIC --- + # First, try to find the main content by its ID, which is the most reliable selector. + main_content = soup.find(id="main-content") + + # If that fails (which is unlikely), fall back to the class name as a safety measure. + if not main_content: + main_content = soup.find(class_="main-content") + # --- END OF CORRECTION --- + + if main_content: + markdown_text = md(str(main_content), heading_style="ATX") + print(f" -> Success: Converted content.") + return markdown_text + else: + print(f" -> Warning: Could not find a recognizable main content section in page.") + return None + + except requests.exceptions.RequestException as e: + print(f" -> Error: Failed to fetch URL {url}. Reason: {e}") + return None + except Exception as e: + print(f" -> Error: An unexpected error occurred for {url}. Reason: {e}") + return None + +def process_url_list(urls, output_file): + """ + Processes a list of URLs, converts their content to Markdown, + and saves everything into a single output file. + """ + with requests.Session() as session: + session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}) + + with open(output_file, 'w', encoding='utf-8') as f: + f.write("# Iced Pocket Guide\n\n") + + processed_urls = set() + for url in urls: + cleaned_url = url.split('#')[0] + if not cleaned_url or not cleaned_url.startswith("http") or cleaned_url in processed_urls: + if cleaned_url in processed_urls: + print(f"Skipping duplicate URL: {cleaned_url}") + else: + print(f"Skipping invalid or anchor-only URL: {url}") + continue + + processed_urls.add(cleaned_url) + + f.write(f"\n---\n\n") + f.write(f"## Source: [{cleaned_url}]({cleaned_url})\n\n") + + content = scrape_and_convert_url(cleaned_url, session) + + if content: + f.write(content) + else: + f.write("*Failed to retrieve or convert content for this URL.*") + + f.write("\n\n") + + print(f"\n🎉 Conversion complete! All content saved to '{output_file}'.") + + +if __name__ == '__main__': + pocket_guide_urls = [ + "https://docs.rs/iced/0.13.1/iced/index.html", + "https://docs.rs/iced/0.13.1/iced/advanced/index.html", + "https://docs.rs/iced/0.13.1/iced/application/index.html", + "https://docs.rs/iced/0.13.1/iced/application/struct.Application.html", + "https://docs.rs/iced/0.13.1/iced/widget/index.html", + "https://docs.rs/iced/0.13.1/iced/widget/struct.Container.html", + "https://docs.rs/iced/0.13.1/iced/widget/struct.Column.html", + "https://docs.rs/iced/0.13.1/iced/widget/struct.Row.html", + "https://docs.rs/iced/0.13.1/iced/enum.Length.html", + "https://docs.rs/iced/0.13.1/iced/alignment/index.html", + "https://docs.rs/iced/0.13.1/iced/enum.Alignment.html", + "https://docs.rs/iced/0.13.1/iced/type.Element.html", + "https://docs.rs/iced/0.13.1/iced/struct.Task.html", + "https://docs.rs/iced/0.13.1/iced/task/index.html", + "https://docs.rs/iced/0.13.1/iced/struct.Subscription.html", + "https://docs.rs/iced/0.13.1/iced/stream/index.html", + "https://docs.rs/iced/0.13.1/iced/daemon/index.html", + "https://docs.rs/iced/0.13.1/iced/daemon/struct.Daemon.html", + "https://docs.rs/iced/0.13.1/iced/theme/index.html", + "https://docs.rs/iced/0.13.1/iced/enum.Theme.html", + "https://docs.rs/iced/0.13.1/iced/settings/index.html", + "https://docs.rs/iced/0.13.1/iced/settings/struct.Settings.html", + "https://docs.rs/iced/0.13.1/iced/window/index.html", + "https://docs.rs/iced/0.13.1/iced/keyboard/index.html", + "https://docs.rs/iced/0.13.1/iced/mouse/index.html", + "https://docs.rs/iced/0.13.1/iced/touch/index.html" + ] + + OUTPUT_FILENAME = "iced_pocket_guide.md" + + process_url_list(pocket_guide_urls, OUTPUT_FILENAME) \ No newline at end of file diff --git a/src/behaviors/mod.rs b/src/behaviors/mod.rs new file mode 100644 index 0000000..cb2ff6f --- /dev/null +++ b/src/behaviors/mod.rs @@ -0,0 +1,49 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Action { + // Time utility + TimeUtilityTapPressed, + TimeUtilityTapReleased, + + // File menu (Cmd+key) + NewProject, + OpenProject, + SaveProject, + SaveProjectAs, + CloseProject, + + // App menu + OpenSettings, + + // Edit menu (Cmd+key) + Undo, + Redo, + Cut, + Copy, + Paste, + Duplicate, + SelectAll, + Delete, + + // Editor transport + EditorTogglePlayback, + EditorStop, + EditorToggleRecord, + EditorPlayFromBeginning, + EditorRewind, + + // Editor view toggles + EditorToggleInspector, + EditorToggleBottomPanel, + EditorToggleMixer, + EditorToggleToolbar, + + // Editor mode toggles + EditorToggleCycle, + EditorToggleMetronome, + + // Editor zoom + ZoomInH, + ZoomOutH, + ZoomInV, + ZoomOutV, +} diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..63cdd54 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,130 @@ +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct AudioOxideConfig { + pub first_run: bool, + pub project_dir: PathBuf, + + // Audio defaults + #[serde(default = "default_sample_rate")] + pub default_sample_rate: u32, + #[serde(default = "default_buffer_size")] + pub default_buffer_size: u32, + #[serde(default = "default_audio_device")] + pub default_audio_device: String, + #[serde(default = "default_recording_format")] + pub recording_format: RecordingFormat, + #[serde(default = "default_bit_depth")] + pub recording_bit_depth: u16, + + // General + #[serde(default = "default_true")] + pub auto_save: bool, + #[serde(default = "default_auto_save_interval")] + pub auto_save_interval_secs: u32, + #[serde(default = "default_true")] + pub ask_to_save_on_close: bool, + + // Display + #[serde(default = "default_track_height")] + pub default_track_height: f32, + #[serde(default = "default_true")] + pub show_toolbar_on_open: bool, + #[serde(default)] + pub show_inspector_on_open: bool, + + #[serde(default)] + pub zoom_mode: ZoomMode, +} + +impl Default for AudioOxideConfig { + fn default() -> Self { + Self { + first_run: true, + project_dir: dirs::home_dir().unwrap_or_default().join("Oxide/Projects"), + default_sample_rate: 48000, + default_buffer_size: 512, + default_audio_device: "Default".to_string(), + recording_format: RecordingFormat::Wav, + recording_bit_depth: 24, + auto_save: true, + auto_save_interval_secs: 300, + ask_to_save_on_close: true, + default_track_height: 160.0, + show_toolbar_on_open: true, + show_inspector_on_open: false, + zoom_mode: ZoomMode::default(), + } + } +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] +pub enum RecordingFormat { + Wav, + Aiff, + Caf, +} + +impl RecordingFormat { + pub const ALL: [RecordingFormat; 3] = [RecordingFormat::Wav, RecordingFormat::Aiff, RecordingFormat::Caf]; +} + +impl std::fmt::Display for RecordingFormat { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + RecordingFormat::Wav => write!(f, "WAV"), + RecordingFormat::Aiff => write!(f, "AIFF"), + RecordingFormat::Caf => write!(f, "CAF"), + } + } +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct ProjectConfig { + pub name: String, + pub sample_rate: u32, + pub buffer_size: u32, + pub audio_device: String, + #[serde(default = "default_audio_device")] + pub audio_input_device: String, + pub tempo: f32, + pub time_signature_numerator: u8, + pub time_signature_denominator: u8, +} + +impl Default for ProjectConfig { + fn default() -> Self { + Self { + name: "Untitled".to_string(), + sample_rate: 48000, + buffer_size: 512, + audio_device: "Default".to_string(), + audio_input_device: "Default".to_string(), + tempo: 120.0, + time_signature_numerator: 4, + time_signature_denominator: 4, + } + } +} + +fn default_sample_rate() -> u32 { 48000 } +fn default_buffer_size() -> u32 { 512 } +fn default_audio_device() -> String { "Default".to_string() } +fn default_recording_format() -> RecordingFormat { RecordingFormat::Wav } +fn default_bit_depth() -> u16 { 24 } +fn default_true() -> bool { true } +fn default_auto_save_interval() -> u32 { 300 } +fn default_track_height() -> f32 { 160.0 } + +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] +pub enum ZoomMode { + Keyboard, + Scientific, +} + +impl Default for ZoomMode { + fn default() -> Self { + ZoomMode::Keyboard + } +} diff --git a/src/editor.rs b/src/editor.rs new file mode 100644 index 0000000..fe97d03 --- /dev/null +++ b/src/editor.rs @@ -0,0 +1,702 @@ +use std::collections::HashMap; +use std::fs; +use std::path::PathBuf; + +use iced::widget::{ + button, column, container, mouse_area, row, scrollable, stack, Column, Space, +}; +use iced::{alignment, Alignment, Background, Color, Element, Length, Task, Theme}; +use oxforge::mdk::ToGuiMessage; + +use crate::behaviors; +use crate::config::ProjectConfig; +use crate::engine::{EngineCommand, EngineEvent, EngineHandle, TransportState}; +use crate::gui::editor::{ + control_bar, editor_pane, inspector, menu_bar, mixer, new_track_wizard, timeline, toolbar, + track_header, visualizer, +}; +use crate::gui::icons::IconSet; +use crate::modules::VisualizationFrame; +use crate::timing::MusicalTime; +use crate::track::{Track, TRACK_HEIGHT}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Tool { + Pointer, + Pencil, + Eraser, + Scissors, + Glue, + Zoom, +} + +impl Tool { + pub const ALL: [Tool; 6] = [ + Tool::Pointer, + Tool::Pencil, + Tool::Eraser, + Tool::Scissors, + Tool::Glue, + Tool::Zoom, + ]; + + pub fn label(&self) -> &'static str { + match self { + Tool::Pointer => "Ptr", + Tool::Pencil => "Pen", + Tool::Eraser => "Ers", + Tool::Scissors => "Cut", + Tool::Glue => "Glue", + Tool::Zoom => "Zoom", + } + } + + pub fn hint(&self) -> &'static str { + match self { + Tool::Pointer => "Pointer", + Tool::Pencil => "Pencil", + Tool::Eraser => "Eraser", + Tool::Scissors => "Scissors", + Tool::Glue => "Glue", + Tool::Zoom => "Zoom", + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BottomPanelMode { + Editor, + Mixer, + Visualizer, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum ScrollSource { + TrackList, + Timeline, +} + +#[derive(Debug, Clone)] +pub enum ModalState { + NewTrackWizard(new_track_wizard::State), +} + +pub struct Editor { + project_config: ProjectConfig, + tracks: Vec, + modal_state: Option, + menu_state: menu_bar::State, + engine: Option, + + // Transport / playback + transport: TransportState, + current_position: MusicalTime, + tempo: f32, + time_signature_numerator: u8, + time_signature_denominator: u8, + + // Tool selection + active_tool: Tool, + + // Panel visibility + show_inspector: bool, + show_bottom_panel: bool, + bottom_panel_mode: BottomPanelMode, + + // Layout + header_width: f32, + bottom_panel_height: f32, + + // Scroll sync + track_list_scrollable_id: scrollable::Id, + timeline_scrollable_id: scrollable::Id, + scroll_offset_y: f32, + scroll_source: Option, + + // Mode toggles + cycle_enabled: bool, + metronome_enabled: bool, + count_in_enabled: bool, + + // Selection + selected_track: Option, + + // Track creation counter for color assignment + track_count: usize, + + // Zoom + h_zoom: f32, + v_zoom: f32, + + // Module system + module_names: HashMap, + latest_viz_frame: Option, + viz_rotation: f32, + + icons: IconSet, +} + +#[derive(Debug, Clone)] +pub enum Message { + // Transport + PlayPressed, + StopPressed, + RecordPressed, + RewindPressed, + FastForwardPressed, + + // Mode toggles + CycleToggled, + MetronomeToggled, + CountInToggled, + + // Tool + ToolSelected(Tool), + + // Panel visibility + ToggleInspector, + ToggleBottomPanel, + SetBottomPanelMode(BottomPanelMode), + + // Track management + ShowNewTrackWizard, + NewTrackWizard(new_track_wizard::Message), + TrackHeader(usize, track_header::Message), + + // Timeline + Timeline(timeline::Message), + + // Scroll + TrackListScrolled(scrollable::Viewport), + TimelineScrolled(scrollable::Viewport), + + // Modal + EscapePressed, + CloseModal, + + // Menu bar + MenuBar(menu_bar::Message), + MenuAction(behaviors::Action), + + // Edit menu + EditAction(behaviors::Action), + + // Zoom + ZoomH(f32), + ZoomV(f32), + + // Module management + AddModuleToTrack(usize, String), + RemoveModuleFromTrack(usize, u32), + + // Engine + EngineTick, +} + +impl Editor { + pub fn new(project_path: PathBuf) -> (Self, Task) { + let config_path = project_path.join("project.toml"); + let project_config: ProjectConfig = fs::read_to_string(config_path) + .ok() + .and_then(|content| toml::from_str(&content).ok()) + .unwrap_or_default(); + + let tempo = project_config.tempo; + let ts_num = project_config.time_signature_numerator; + let ts_den = project_config.time_signature_denominator; + + let engine = Some(EngineHandle::spawn( + project_config.sample_rate, + project_config.buffer_size, + &project_config.audio_device, + &project_config.audio_input_device, + )); + + ( + Self { + project_config, + tracks: Vec::new(), + modal_state: None, + menu_state: menu_bar::State::new(), + engine, + transport: TransportState::Stopped, + current_position: MusicalTime::new(1, 1, 0), + tempo, + time_signature_numerator: ts_num, + time_signature_denominator: ts_den, + active_tool: Tool::Pointer, + show_inspector: false, + show_bottom_panel: false, + bottom_panel_mode: BottomPanelMode::Editor, + header_width: 280.0, + bottom_panel_height: 250.0, + track_list_scrollable_id: scrollable::Id::unique(), + timeline_scrollable_id: scrollable::Id::unique(), + scroll_offset_y: 0.0, + scroll_source: None, + cycle_enabled: false, + metronome_enabled: false, + count_in_enabled: false, + selected_track: None, + track_count: 0, + h_zoom: 100.0, + v_zoom: 1.0, + module_names: HashMap::new(), + latest_viz_frame: None, + viz_rotation: 0.0, + icons: IconSet::load(), + }, + Task::none(), + ) + } + + pub fn update(&mut self, message: Message) -> Task { + match message { + Message::PlayPressed => { + if self.transport == TransportState::Playing { + self.transport = TransportState::Stopped; + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::SetTransportState(TransportState::Stopped)); + } + } else { + self.transport = TransportState::Playing; + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::SetTransportState(TransportState::Playing)); + } + } + } + Message::StopPressed => { + self.transport = TransportState::Stopped; + self.current_position = MusicalTime::new(1, 1, 0); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::SetTransportState(TransportState::Stopped)); + } + } + Message::RecordPressed => {} + Message::RewindPressed => { + self.current_position = MusicalTime::new(1, 1, 0); + } + Message::FastForwardPressed => {} + Message::CycleToggled => self.cycle_enabled = !self.cycle_enabled, + Message::MetronomeToggled => self.metronome_enabled = !self.metronome_enabled, + Message::CountInToggled => self.count_in_enabled = !self.count_in_enabled, + Message::ToolSelected(tool) => self.active_tool = tool, + Message::ToggleInspector => self.show_inspector = !self.show_inspector, + Message::ToggleBottomPanel => self.show_bottom_panel = !self.show_bottom_panel, + Message::SetBottomPanelMode(mode) => { + if self.bottom_panel_mode == mode && self.show_bottom_panel { + self.show_bottom_panel = false; + } else { + self.bottom_panel_mode = mode; + self.show_bottom_panel = true; + } + } + Message::EscapePressed => { + if self.menu_state.open.is_some() { + self.menu_state.open = None; + } else { + self.modal_state = None; + } + } + Message::CloseModal => { + self.modal_state = None; + } + Message::ShowNewTrackWizard => { + self.modal_state = + Some(ModalState::NewTrackWizard(new_track_wizard::State::default())); + } + Message::MenuBar(msg) => match msg { + menu_bar::Message::Open(id) => { + if self.menu_state.open == Some(id) { + self.menu_state.open = None; + } else { + self.menu_state.open = Some(id); + } + } + menu_bar::Message::Close => { + self.menu_state.open = None; + } + menu_bar::Message::Action(action) => { + self.menu_state.open = None; + return Task::done(Message::MenuAction(action)); + } + menu_bar::Message::ShowNewTrackWizard => { + self.menu_state.open = None; + self.modal_state = + Some(ModalState::NewTrackWizard(new_track_wizard::State::default())); + } + }, + Message::MenuAction(_) => {} + Message::NewTrackWizard(wizard_message) => { + if let Some(ModalState::NewTrackWizard(state)) = &mut self.modal_state { + match wizard_message { + new_track_wizard::Message::Cancel => self.modal_state = None, + new_track_wizard::Message::Create => { + let config = state.config.clone(); + let track = Track::new(config, self.track_count); + self.track_count += 1; + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::CreateBus { + name: track.bus_name.clone(), + }); + } + self.tracks.push(track); + self.modal_state = None; + } + new_track_wizard::Message::NameChanged(name) => state.config.name = name, + new_track_wizard::Message::TrackTypeSelected(track_type) => { + state.config.track_type = track_type + } + } + } + } + Message::TrackHeader(i, msg) => { + if let Some(track) = self.tracks.get_mut(i) { + match msg { + track_header::Message::MuteToggled => track.muted = !track.muted, + track_header::Message::SoloToggled => track.soloed = !track.soloed, + track_header::Message::RecordArmToggled => { + track.record_armed = !track.record_armed; + if let Some(ref engine) = self.engine { + if track.record_armed { + engine.send(EngineCommand::ArmTrack { + bus_name: track.bus_name.clone(), + }); + } else { + engine.send(EngineCommand::DisarmTrack { + bus_name: track.bus_name.clone(), + }); + } + } + } + track_header::Message::VolumeChanged(vol) => track.volume = vol, + track_header::Message::PanChanged(pan) => track.pan = pan, + track_header::Message::Delete => { + let removed = self.tracks.remove(i); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::RemoveBus { + name: removed.bus_name, + }); + } + if self.selected_track == Some(i) { + self.selected_track = None; + } else if let Some(sel) = self.selected_track { + if sel > i { + self.selected_track = Some(sel - 1); + } + } + } + track_header::Message::Select => { + self.selected_track = Some(i); + for (idx, t) in self.tracks.iter_mut().enumerate() { + t.selected = idx == i; + } + } + } + } + } + Message::EditAction(action) => { + use behaviors::Action::*; + match action { + SelectAll => { + for t in &mut self.tracks { + t.selected = true; + } + } + Delete => { + if let Some(i) = self.selected_track { + if i < self.tracks.len() { + let removed = self.tracks.remove(i); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::RemoveBus { + name: removed.bus_name, + }); + } + self.selected_track = None; + } + } + } + Duplicate => { + if let Some(i) = self.selected_track { + if let Some(track) = self.tracks.get(i) { + let mut dup = track.clone(); + dup.id = uuid::Uuid::new_v4(); + dup.name = format!("{} Copy", dup.name); + dup.bus_name = format!("track_{}", dup.id.as_simple()); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::CreateBus { + name: dup.bus_name.clone(), + }); + } + self.tracks.insert(i + 1, dup); + self.track_count += 1; + } + } + } + // Undo, Redo, Cut, Copy, Paste: stubs for now + _ => {} + } + } + Message::ZoomH(factor) => { + self.h_zoom = (self.h_zoom * factor).clamp(10.0, 1000.0); + } + Message::ZoomV(factor) => { + self.v_zoom = (self.v_zoom * factor).clamp(0.3, 5.0); + } + Message::Timeline(timeline::Message::ZoomChanged(h, v)) => { + self.h_zoom = h.clamp(10.0, 1000.0); + self.v_zoom = v.clamp(0.3, 5.0); + } + Message::Timeline(_) => {} + Message::TrackListScrolled(viewport) => { + if self.scroll_source == Some(ScrollSource::Timeline) { + self.scroll_source = None; + return Task::none(); + } + self.scroll_source = Some(ScrollSource::TrackList); + self.scroll_offset_y = viewport.absolute_offset().y; + return scrollable::scroll_to( + self.timeline_scrollable_id.clone(), + scrollable::AbsoluteOffset { + x: 0.0, + y: self.scroll_offset_y, + }, + ); + } + Message::TimelineScrolled(viewport) => { + if self.scroll_source == Some(ScrollSource::TrackList) { + self.scroll_source = None; + return Task::none(); + } + self.scroll_source = Some(ScrollSource::Timeline); + self.scroll_offset_y = viewport.absolute_offset().y; + return scrollable::scroll_to( + self.track_list_scrollable_id.clone(), + scrollable::AbsoluteOffset { + x: 0.0, + y: self.scroll_offset_y, + }, + ); + } + Message::AddModuleToTrack(track_idx, module_type) => { + if let Some(track) = self.tracks.get(track_idx) { + let chain_pos = track.module_chain.len(); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::LoadModuleOnBus { + bus_name: track.bus_name.clone(), + module_type, + chain_position: chain_pos, + }); + } + } + } + Message::RemoveModuleFromTrack(track_idx, module_id) => { + if let Some(track) = self.tracks.get_mut(track_idx) { + track.module_chain.retain(|&id| id != module_id); + self.module_names.remove(&module_id); + if let Some(ref engine) = self.engine { + engine.send(EngineCommand::UnloadModule { module_id }); + } + } + } + Message::EngineTick => { + if let Some(ref engine) = self.engine { + for event in engine.poll_events() { + match event { + EngineEvent::TransportPosition(pos) => { + self.current_position = pos; + } + EngineEvent::Error(e) => { + eprintln!("engine error: {}", e); + } + EngineEvent::BusCreated(_) => {} + EngineEvent::GraphRebuilt => {} + EngineEvent::ModuleLoaded { bus_name, module_id, module_type } => { + self.module_names.insert(module_id, module_type); + for track in &mut self.tracks { + if track.bus_name == bus_name { + if !track.module_chain.contains(&module_id) { + track.module_chain.push(module_id); + } + break; + } + } + } + } + } + + // Poll visualization messages + for (_module_id, msg) in engine.poll_gui_messages() { + if let ToGuiMessage::VisualizationData { data } = msg { + if let Some(frame) = VisualizationFrame::deserialize(&data) { + self.latest_viz_frame = Some(frame); + } + } + } + } + } + } + Task::none() + } + + pub fn view(&self) -> Element<'_, Message> { + let selected_track_ref = self.selected_track.and_then(|i| self.tracks.get(i)); + + // Control bar + let control_bar = control_bar::view( + &self.transport, + &self.current_position, + self.tempo, + self.time_signature_numerator, + self.time_signature_denominator, + self.cycle_enabled, + self.metronome_enabled, + self.count_in_enabled, + self.show_inspector, + self.show_bottom_panel, + &self.bottom_panel_mode, + &self.icons, + ); + + // Toolbar + let toolbar = toolbar::view(&self.active_tool, &self.icons); + + // Track headers + let effective_track_height = TRACK_HEIGHT * self.v_zoom; + let track_headers: Element<_> = container( + scrollable( + self.tracks + .iter() + .enumerate() + .fold(Column::new().spacing(0), |col, (i, track)| { + col.push( + track_header::view(track, &self.icons, effective_track_height) + .map(move |msg| Message::TrackHeader(i, msg)), + ) + }), + ) + .id(self.track_list_scrollable_id.clone()) + .on_scroll(Message::TrackListScrolled), + ) + .width(self.header_width) + .into(); + + // Timeline + let timeline_el: Element<_> = scrollable( + timeline::view( + &self.project_config, + &self.tracks, + self.current_position, + self.active_tool, + self.h_zoom, + self.v_zoom, + ) + .map(Message::Timeline), + ) + .id(self.timeline_scrollable_id.clone()) + .on_scroll(Message::TimelineScrolled) + .width(Length::Fill) + .into(); + + // Arrangement area (headers + timeline) + let arrangement = row![track_headers, timeline_el].align_y(Alignment::Start); + + // Build middle section with optional inspector + let middle: Element<_> = if self.show_inspector { + row![ + inspector::view( + selected_track_ref, + &self.project_config, + &self.module_names, + self.selected_track, + ), + arrangement + ] + .height(Length::Fill) + .into() + } else { + container(arrangement).height(Length::Fill).into() + }; + + // Bottom panel + let bottom: Element<_> = if self.show_bottom_panel { + let panel_content: Element<_> = match self.bottom_panel_mode { + BottomPanelMode::Editor => editor_pane::view(selected_track_ref), + BottomPanelMode::Mixer => mixer::view(&self.tracks), + BottomPanelMode::Visualizer => { + visualizer::spiral::view(self.latest_viz_frame.as_ref(), self.viz_rotation) + } + }; + container(panel_content) + .height(self.bottom_panel_height) + .width(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1A, 0x1C, 0x1E))), + ..container::Style::default() + }) + .into() + } else { + Space::new(0, 0).into() + }; + + // Add track button row + let add_track_row: Element<_> = container( + row![button("+ Track").on_press(Message::ShowNewTrackWizard)] + .spacing(10) + .padding(2), + ) + .width(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1E, 0x20, 0x22))), + ..container::Style::default() + }) + .into(); + + let menu = menu_bar::view(&self.menu_state); + + let base_view: Element<_> = + column![menu, control_bar, toolbar, add_track_row, middle, bottom] + .spacing(0) + .into(); + + // Menu dropdown overlay + let main_view: Element<_> = if let Some(dropdown) = menu_bar::dropdown_view(&self.menu_state) + { + mouse_area(stack![base_view, dropdown]) + .on_press(Message::MenuBar(menu_bar::Message::Close)) + .into() + } else { + base_view + }; + + // Modal overlay + if let Some(modal_state) = &self.modal_state { + let modal_content = match modal_state { + ModalState::NewTrackWizard(state) => { + new_track_wizard::view(state).map(Message::NewTrackWizard) + } + }; + + let background = container(main_view).style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgba(0.0, 0.0, 0.0, 0.4))), + ..container::Style::default() + }); + + let modal = container(modal_content) + .width(Length::Fill) + .height(Length::Fill) + .align_x(alignment::Horizontal::Center) + .align_y(alignment::Vertical::Center); + + mouse_area(stack![background, modal]) + .on_press(Message::CloseModal) + .into() + } else { + main_view + } + } + + pub fn has_engine(&self) -> bool { + self.engine.is_some() + } +} diff --git a/src/engine/bus.rs b/src/engine/bus.rs new file mode 100644 index 0000000..e8f2dc8 --- /dev/null +++ b/src/engine/bus.rs @@ -0,0 +1,109 @@ +use std::any::Any; +use std::collections::HashMap; +use std::sync::{Arc, RwLock}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct BusId(pub u32); + +pub struct AudioBusData { + pub samples: Vec, +} + +impl AudioBusData { + pub fn new(buffer_size: usize, channels: usize) -> Self { + Self { + samples: vec![0.0; buffer_size * channels], + } + } + + pub fn clear(&mut self) { + for s in &mut self.samples { + *s = 0.0; + } + } +} + +pub struct Bus { + pub id: BusId, + pub name: String, + pub data: Arc>, +} + +pub struct BusRegistry { + buses: HashMap, + name_to_id: HashMap, + next_id: u32, + buffer_size: usize, + channels: usize, +} + +impl BusRegistry { + pub fn new(buffer_size: usize, channels: usize) -> Self { + Self { + buses: HashMap::new(), + name_to_id: HashMap::new(), + next_id: 0, + buffer_size, + channels, + } + } + + pub fn channels(&self) -> usize { + self.channels + } + + pub fn create_audio_bus(&mut self, name: &str) -> BusId { + if let Some(&id) = self.name_to_id.get(name) { + return id; + } + + let id = BusId(self.next_id); + self.next_id += 1; + + let data = AudioBusData::new(self.buffer_size, self.channels); + let bus = Bus { + id, + name: name.to_string(), + data: Arc::new(RwLock::new(data)), + }; + + self.name_to_id.insert(name.to_string(), id); + self.buses.insert(id, bus); + id + } + + pub fn remove_bus(&mut self, name: &str) -> bool { + if let Some(id) = self.name_to_id.remove(name) { + self.buses.remove(&id); + true + } else { + false + } + } + + pub fn get(&self, id: &BusId) -> Option<&Bus> { + self.buses.get(id) + } + + pub fn get_by_name(&self, name: &str) -> Option<&Bus> { + self.name_to_id.get(name).and_then(|id| self.buses.get(id)) + } + + pub fn id_for_name(&self, name: &str) -> Option { + self.name_to_id.get(name).copied() + } + + pub fn clear_all_audio(&self) { + for bus in self.buses.values() { + if let Ok(mut data) = bus.data.write() { + if let Some(audio) = data.downcast_mut::() { + audio.clear(); + } + } + } + } + + pub fn bus_names(&self) -> Vec { + self.name_to_id.keys().cloned().collect() + } +} diff --git a/src/engine/cycle.rs b/src/engine/cycle.rs new file mode 100644 index 0000000..a2a09b4 --- /dev/null +++ b/src/engine/cycle.rs @@ -0,0 +1,252 @@ +use std::collections::HashSet; + +use crossbeam_channel::{Receiver, Sender}; + +use oxforge::mdk::{GlobalConfig, ToGuiMessage}; + +use super::bus::{AudioBusData, BusRegistry}; +use super::graph::ProcessGraph; +use super::host::ModuleHost; +use super::param::ParamEngine; +use super::schedule::{CycleContext, CycleSchedule}; +use super::{EngineCommand, EngineEvent, TransportState}; +use crate::timing::{MusicalTime, TICKS_PER_BEAT}; + +pub struct CycleProcessor { + pub bus_registry: BusRegistry, + pub module_host: ModuleHost, + pub graph: ProcessGraph, + pub schedule: CycleSchedule, + pub param_engine: ParamEngine, + pub transport: TransportState, + pub tempo: f32, + pub sample_rate: u32, + pub sample_pos: u64, + pub time_signature_numerator: u8, + pub time_signature_denominator: u8, + cmd_rx: Receiver, + evt_tx: Sender, + gui_tx: Sender<(u32, ToGuiMessage)>, + needs_rebuild: bool, + armed_buses: HashSet, +} + +impl CycleProcessor { + pub fn new( + sample_rate: u32, + buffer_size: u32, + cmd_rx: Receiver, + evt_tx: Sender, + gui_tx: Sender<(u32, ToGuiMessage)>, + ) -> Self { + let mut bus_registry = BusRegistry::new(buffer_size as usize, 2); + bus_registry.create_audio_bus("hw_input"); + bus_registry.create_audio_bus("hw_output"); + + Self { + bus_registry, + module_host: ModuleHost::new(), + graph: ProcessGraph::new(), + schedule: CycleSchedule::new(), + param_engine: ParamEngine::new(), + transport: TransportState::Stopped, + tempo: 120.0, + sample_rate, + sample_pos: 0, + time_signature_numerator: 4, + time_signature_denominator: 4, + cmd_rx, + evt_tx, + gui_tx, + needs_rebuild: false, + armed_buses: HashSet::new(), + } + } + + pub fn process_cycle(&mut self, hw_input: &[f32], hw_output: &mut [f32]) { + self.drain_commands(); + self.param_engine.apply_pending(&mut self.module_host); + + if self.needs_rebuild { + self.rebuild_schedule(); + self.needs_rebuild = false; + } + + self.bus_registry.clear_all_audio(); + + if let Some(bus) = self.bus_registry.get_by_name("hw_input") { + if let Ok(mut data) = bus.data.write() { + if let Some(audio) = data.downcast_mut::() { + let len = hw_input.len().min(audio.samples.len()); + audio.samples[..len].copy_from_slice(&hw_input[..len]); + } + } + } + + // Route hw_input into each armed track bus + for bus_name in &self.armed_buses { + if let Some(bus) = self.bus_registry.get_by_name(bus_name) { + if let Ok(mut data) = bus.data.write() { + if let Some(audio) = data.downcast_mut::() { + let len = hw_input.len().min(audio.samples.len()); + audio.samples[..len].copy_from_slice(&hw_input[..len]); + } + } + } + } + + let ctx = CycleContext { + sample_pos: self.sample_pos, + tempo: self.tempo, + sample_rate: self.sample_rate, + transport: self.transport, + time_sig_num: self.time_signature_numerator, + time_sig_den: self.time_signature_denominator, + }; + self.schedule.execute(&self.bus_registry, &mut self.module_host, &ctx); + + // Mix armed track buses into hw_output for monitoring + for bus_name in &self.armed_buses { + if let Some(track_bus) = self.bus_registry.get_by_name(bus_name) { + if let Ok(track_data) = track_bus.data.read() { + if let Some(track_audio) = track_data.downcast_ref::() { + if let Some(out_bus) = self.bus_registry.get_by_name("hw_output") { + if let Ok(mut out_data) = out_bus.data.write() { + if let Some(out_audio) = out_data.downcast_mut::() { + let len = track_audio.samples.len().min(out_audio.samples.len()); + for i in 0..len { + out_audio.samples[i] += track_audio.samples[i]; + } + } + } + } + } + } + } + } + + if let Some(bus) = self.bus_registry.get_by_name("hw_output") { + if let Ok(data) = bus.data.read() { + if let Some(audio) = data.downcast_ref::() { + let len = hw_output.len().min(audio.samples.len()); + hw_output[..len].copy_from_slice(&audio.samples[..len]); + } + } + } + + if self.transport == TransportState::Playing { + let channels = self.bus_registry.channels(); + self.sample_pos += (hw_output.len() / channels) as u64; + let _ = self.evt_tx.send(EngineEvent::TransportPosition(self.current_musical_time())); + } + } + + fn current_musical_time(&self) -> MusicalTime { + let beats_per_second = self.tempo as f64 / 60.0; + let samples_per_beat = self.sample_rate as f64 / beats_per_second; + let total_beats = self.sample_pos as f64 / samples_per_beat; + let total_ticks = (total_beats * TICKS_PER_BEAT as f64) as u64; + + let beats_per_bar = self.time_signature_numerator as u64; + let ticks_per_bar = beats_per_bar * TICKS_PER_BEAT as u64; + + let bar = (total_ticks / ticks_per_bar) as u32 + 1; + let remaining = total_ticks % ticks_per_bar; + let beat = (remaining / TICKS_PER_BEAT as u64) as u32 + 1; + let tick = (remaining % TICKS_PER_BEAT as u64) as u32; + + MusicalTime::new(bar, beat, tick) + } + + fn drain_commands(&mut self) { + while let Ok(cmd) = self.cmd_rx.try_recv() { + match cmd { + EngineCommand::Shutdown => {} + EngineCommand::SetTransportState(state) => { + self.transport = state; + if state == TransportState::Stopped { + self.sample_pos = 0; + } + } + EngineCommand::SetTempo(t) => { + self.tempo = t; + } + EngineCommand::CreateBus { name } => { + self.bus_registry.create_audio_bus(&name); + let _ = self.evt_tx.send(EngineEvent::BusCreated(name)); + } + EngineCommand::RemoveBus { name } => { + self.bus_registry.remove_bus(&name); + } + EngineCommand::AddModuleToBus { bus_name, module_id } => { + self.graph.add_module_to_bus(module_id, &bus_name); + self.needs_rebuild = true; + } + EngineCommand::RemoveModuleFromBus { bus_name, module_id } => { + self.graph.remove_module_from_bus(module_id, &bus_name); + self.needs_rebuild = true; + } + EngineCommand::SetParam { module_id, key, value } => { + self.param_engine.queue_change(module_id, key, value); + } + EngineCommand::RebuildGraph => { + self.needs_rebuild = true; + } + EngineCommand::ArmTrack { bus_name } => { + self.armed_buses.insert(bus_name); + } + EngineCommand::DisarmTrack { bus_name } => { + self.armed_buses.remove(&bus_name); + } + EngineCommand::LoadModuleOnBus { bus_name, module_type, chain_position } => { + let config = GlobalConfig { + instance_id: oxforge::mdk::uuid::Uuid::new_v4(), + sample_rate: self.sample_rate as f32, + buffer_size: 0, // derived from bus at runtime + }; + if let Some(module_id) = crate::modules::registry::load_builtin( + &mut self.module_host, &module_type, &config, + ) { + self.graph.add_module_to_bus(module_id, &bus_name); + self.graph.set_chain_position(module_id, &bus_name, chain_position); + self.needs_rebuild = true; + let _ = self.evt_tx.send(EngineEvent::ModuleLoaded { + bus_name, + module_id, + module_type, + }); + } else { + let _ = self.evt_tx.send(EngineEvent::Error( + format!("unknown module type: {}", module_type), + )); + } + } + EngineCommand::UnloadModule { module_id } => { + self.module_host.unload(module_id); + self.graph.remove_module(module_id); + self.needs_rebuild = true; + } + } + } + } + + fn rebuild_schedule(&mut self) { + match self.graph.resolve_order() { + Ok(order) => { + let mut schedule = CycleSchedule::from_graph(&order, &self.graph, &self.bus_registry); + for routing in schedule.entries_mut() { + let module_id = routing.module_id; + let tx = self.gui_tx.clone(); + routing.to_gui = oxforge::mdk::ToGuiQueue::with_callback(move |msg| { + let _ = tx.send((module_id, msg)); + }); + } + self.schedule = schedule; + let _ = self.evt_tx.send(EngineEvent::GraphRebuilt); + } + Err(e) => { + let _ = self.evt_tx.send(EngineEvent::Error(e)); + } + } + } +} diff --git a/src/engine/graph.rs b/src/engine/graph.rs new file mode 100644 index 0000000..1cdcd3b --- /dev/null +++ b/src/engine/graph.rs @@ -0,0 +1,151 @@ +use std::collections::{HashMap, HashSet, VecDeque}; + +#[derive(Debug, Clone)] +pub struct ModuleNode { + pub module_id: u32, + pub reads: HashSet, + pub writes: HashSet, + pub chain_position: Option<(String, usize)>, +} + +pub struct ProcessGraph { + nodes: HashMap, +} + +impl ProcessGraph { + pub fn new() -> Self { + Self { + nodes: HashMap::new(), + } + } + + pub fn add_module(&mut self, module_id: u32) { + self.nodes.entry(module_id).or_insert_with(|| ModuleNode { + module_id, + reads: HashSet::new(), + writes: HashSet::new(), + chain_position: None, + }); + } + + pub fn remove_module(&mut self, module_id: u32) { + self.nodes.remove(&module_id); + } + + pub fn add_module_to_bus(&mut self, module_id: u32, bus_name: &str) { + let node = self.nodes.entry(module_id).or_insert_with(|| ModuleNode { + module_id, + reads: HashSet::new(), + writes: HashSet::new(), + chain_position: None, + }); + node.reads.insert(bus_name.to_string()); + node.writes.insert(bus_name.to_string()); + } + + pub fn set_chain_position(&mut self, module_id: u32, bus_name: &str, position: usize) { + if let Some(node) = self.nodes.get_mut(&module_id) { + node.chain_position = Some((bus_name.to_string(), position)); + } + } + + pub fn set_module_reads(&mut self, module_id: u32, bus_name: &str) { + if let Some(node) = self.nodes.get_mut(&module_id) { + node.reads.insert(bus_name.to_string()); + } + } + + pub fn set_module_writes(&mut self, module_id: u32, bus_name: &str) { + if let Some(node) = self.nodes.get_mut(&module_id) { + node.writes.insert(bus_name.to_string()); + } + } + + pub fn remove_module_from_bus(&mut self, module_id: u32, bus_name: &str) { + if let Some(node) = self.nodes.get_mut(&module_id) { + node.reads.remove(bus_name); + node.writes.remove(bus_name); + } + } + + pub fn get_node(&self, module_id: u32) -> Option<&ModuleNode> { + self.nodes.get(&module_id) + } + + /// Kahn's algorithm: topological sort based on bus read/write dependencies. + /// Writers must execute before readers within each cycle. + pub fn resolve_order(&self) -> Result, String> { + if self.nodes.is_empty() { + return Ok(Vec::new()); + } + + // Build adjacency: if module A writes to bus X and module B reads from bus X, + // then A must come before B (edge A -> B). + let ids: Vec = self.nodes.keys().copied().collect(); + let mut in_degree: HashMap = ids.iter().map(|&id| (id, 0)).collect(); + let mut adj: HashMap> = ids.iter().map(|&id| (id, Vec::new())).collect(); + + for &writer_id in &ids { + let writer = &self.nodes[&writer_id]; + for &reader_id in &ids { + if writer_id == reader_id { + continue; + } + let reader = &self.nodes[&reader_id]; + // If writer writes to a bus that reader reads (and reader doesn't also write it), + // writer must come first. + for bus in &writer.writes { + if reader.reads.contains(bus) && !reader.writes.contains(bus) { + adj.get_mut(&writer_id).unwrap().push(reader_id); + *in_degree.get_mut(&reader_id).unwrap() += 1; + } + } + } + } + + let mut queue: VecDeque = in_degree + .iter() + .filter(|(_id, deg)| **deg == 0) + .map(|(id, _)| *id) + .collect(); + + // Stable ordering: process lower IDs first + let mut queue_vec: Vec = queue.drain(..).collect(); + queue_vec.sort(); + queue.extend(queue_vec); + + let mut order = Vec::with_capacity(ids.len()); + + while let Some(id) = queue.pop_front() { + order.push(id); + if let Some(neighbors) = adj.get(&id) { + for &next in neighbors { + let deg = in_degree.get_mut(&next).unwrap(); + *deg -= 1; + if *deg == 0 { + queue.push_back(next); + } + } + } + } + + if order.len() != ids.len() { + return Err("cycle detected in module graph".into()); + } + + // Stable-sort modules on the same bus by chain_position + let nodes = &self.nodes; + order.sort_by(|&a, &b| { + let a_pos = nodes.get(&a).and_then(|n| n.chain_position.as_ref()); + let b_pos = nodes.get(&b).and_then(|n| n.chain_position.as_ref()); + match (a_pos, b_pos) { + (Some((bus_a, pos_a)), Some((bus_b, pos_b))) if bus_a == bus_b => { + pos_a.cmp(pos_b) + } + _ => std::cmp::Ordering::Equal, + } + }); + + Ok(order) + } +} diff --git a/src/engine/host.rs b/src/engine/host.rs new file mode 100644 index 0000000..d3c4455 --- /dev/null +++ b/src/engine/host.rs @@ -0,0 +1,61 @@ +use oxforge::mdk::{GlobalConfig, OxideModule, Ports, ProcessContext}; +use std::collections::HashMap; + +pub struct LoadedModule { + pub id: u32, + pub name: String, + instance: Box, +} + +impl LoadedModule { + pub fn process(&mut self, ports: Ports, context: &ProcessContext) { + self.instance.process(ports, context); + } +} + +pub struct ModuleHost { + modules: HashMap, + next_id: u32, +} + +impl ModuleHost { + pub fn new() -> Self { + Self { + modules: HashMap::new(), + next_id: 1, + } + } + + pub fn load_builtin(&mut self, name: &str, config: &GlobalConfig) -> u32 { + let id = self.next_id; + self.next_id += 1; + + let instance = M::new(config); + self.modules.insert(id, LoadedModule { + id, + name: name.to_string(), + instance: Box::new(instance), + }); + id + } + + pub fn unload(&mut self, module_id: u32) -> bool { + self.modules.remove(&module_id).is_some() + } + + pub fn get_mut(&mut self, module_id: u32) -> Option<&mut LoadedModule> { + self.modules.get_mut(&module_id) + } + + pub fn get(&self, module_id: u32) -> Option<&LoadedModule> { + self.modules.get(&module_id) + } + + pub fn module_ids(&self) -> Vec { + self.modules.keys().copied().collect() + } + + pub fn set_param(&mut self, module_id: u32, _key: &str, _value: f32) -> bool { + self.modules.contains_key(&module_id) + } +} diff --git a/src/engine/io.rs b/src/engine/io.rs new file mode 100644 index 0000000..c401126 --- /dev/null +++ b/src/engine/io.rs @@ -0,0 +1,176 @@ +use crossbeam_channel::{Receiver, Sender}; +use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; +use ringbuf::HeapRb; +use ringbuf::traits::{Consumer, Producer, Split}; +use std::sync::{Arc, Mutex}; + +use oxforge::mdk::ToGuiMessage; + +use super::cycle::CycleProcessor; +use super::{EngineCommand, EngineEvent}; + +pub fn enumerate_devices() -> Vec { + let host = cpal::default_host(); + let mut names = vec!["Default".to_string()]; + if let Ok(devices) = host.output_devices() { + names.extend(devices.filter_map(|d| d.name().ok())); + } + names +} + +pub fn enumerate_input_devices() -> Vec { + let host = cpal::default_host(); + let mut names = vec!["Default".to_string()]; + if let Ok(devices) = host.input_devices() { + names.extend(devices.filter_map(|d| d.name().ok())); + } + names +} + +fn resolve_input_device(host: &cpal::Host, name: &str) -> Option { + if name == "Default" || name.is_empty() { + host.default_input_device() + } else { + host.input_devices() + .ok() + .and_then(|mut devs| devs.find(|d| d.name().ok().as_deref() == Some(name))) + .or_else(|| host.default_input_device()) + } +} + +pub fn run_audio( + sample_rate: u32, + buffer_size: u32, + device_name: &str, + input_device_name: &str, + cmd_rx: Receiver, + evt_tx: Sender, + gui_tx: Sender<(u32, ToGuiMessage)>, +) { + let host = cpal::default_host(); + + let device = if device_name == "Default" || device_name.is_empty() { + host.default_output_device() + } else { + host.output_devices() + .ok() + .and_then(|mut devs| devs.find(|d| d.name().ok().as_deref() == Some(device_name))) + }; + + let device = match device { + Some(d) => d, + None => { + let _ = evt_tx.send(EngineEvent::Error( + format!("audio device '{}' not found, falling back to default", device_name), + )); + match host.default_output_device() { + Some(d) => d, + None => { + let _ = evt_tx.send(EngineEvent::Error("no audio output device available".into())); + return; + } + } + } + }; + + let config = cpal::StreamConfig { + channels: 2, + sample_rate: cpal::SampleRate(sample_rate), + buffer_size: cpal::BufferSize::Fixed(buffer_size), + }; + + let processor = Arc::new(Mutex::new(CycleProcessor::new( + sample_rate, + buffer_size, + cmd_rx.clone(), + evt_tx.clone(), + gui_tx, + ))); + + // Input capture via ringbuf + let ring_size = buffer_size as usize * 2 * 4; // stereo * 4 buffers headroom + let rb = HeapRb::::new(ring_size); + let (mut producer, mut consumer) = rb.split(); + + let _input_stream = if let Some(input_dev) = resolve_input_device(&host, input_device_name) { + let input_config = cpal::StreamConfig { + channels: 2, + sample_rate: cpal::SampleRate(sample_rate), + buffer_size: cpal::BufferSize::Fixed(buffer_size), + }; + + let input_err_tx = evt_tx.clone(); + + match input_dev.build_input_stream( + &input_config, + move |data: &[f32], _info: &cpal::InputCallbackInfo| { + let _ = producer.push_slice(data); + }, + move |err| { + let _ = input_err_tx.send(EngineEvent::Error(format!("cpal input error: {}", err))); + }, + None, + ) { + Ok(stream) => { + if let Err(e) = stream.play() { + let _ = evt_tx.send(EngineEvent::Error(format!("failed to start input: {}", e))); + } + Some(stream) + } + Err(e) => { + let _ = evt_tx.send(EngineEvent::Error(format!("failed to build input stream: {}", e))); + None + } + } + } else { + None + }; + + let proc_clone = Arc::clone(&processor); + let err_tx = evt_tx.clone(); + + let mut input_buf = vec![0.0f32; buffer_size as usize * 2]; + + let stream = device.build_output_stream( + &config, + move |output: &mut [f32], _info: &cpal::OutputCallbackInfo| { + for s in input_buf.iter_mut() { + *s = 0.0; + } + consumer.pop_slice(&mut input_buf); + + if let Ok(mut proc) = proc_clone.lock() { + proc.process_cycle(&input_buf, output); + } else { + for sample in output.iter_mut() { + *sample = 0.0; + } + } + }, + move |err| { + let _ = err_tx.send(EngineEvent::Error(format!("cpal stream error: {}", err))); + }, + None, + ); + + match stream { + Ok(stream) => { + if let Err(e) = stream.play() { + let _ = evt_tx.send(EngineEvent::Error(format!("failed to start stream: {}", e))); + return; + } + + loop { + match cmd_rx.recv() { + Ok(EngineCommand::Shutdown) | Err(_) => break, + _ => {} + } + } + + drop(stream); + } + Err(e) => { + let _ = evt_tx.send(EngineEvent::Error(format!("failed to build stream: {}", e))); + } + } +} diff --git a/src/engine/mod.rs b/src/engine/mod.rs new file mode 100644 index 0000000..1c92374 --- /dev/null +++ b/src/engine/mod.rs @@ -0,0 +1,97 @@ +pub mod bus; +pub mod cycle; +pub mod graph; +pub mod host; +pub mod io; +pub mod param; +pub mod schedule; + +use crossbeam_channel::{Receiver, Sender, unbounded}; +use oxforge::mdk::ToGuiMessage; +use crate::timing::MusicalTime; + +#[derive(Debug, Clone)] +pub enum EngineCommand { + Shutdown, + SetTransportState(TransportState), + SetTempo(f32), + CreateBus { name: String }, + RemoveBus { name: String }, + AddModuleToBus { bus_name: String, module_id: u32 }, + RemoveModuleFromBus { bus_name: String, module_id: u32 }, + SetParam { module_id: u32, key: String, value: f32 }, + RebuildGraph, + ArmTrack { bus_name: String }, + DisarmTrack { bus_name: String }, + LoadModuleOnBus { bus_name: String, module_type: String, chain_position: usize }, + UnloadModule { module_id: u32 }, +} + +#[derive(Debug, Clone)] +pub enum EngineEvent { + TransportPosition(MusicalTime), + Error(String), + BusCreated(String), + GraphRebuilt, + ModuleLoaded { bus_name: String, module_id: u32, module_type: String }, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum TransportState { + Playing, + Stopped, +} + +pub struct EngineHandle { + cmd_tx: Sender, + evt_rx: Receiver, + gui_rx: Receiver<(u32, ToGuiMessage)>, +} + +impl EngineHandle { + pub fn spawn(sample_rate: u32, buffer_size: u32, device_name: &str, input_device_name: &str) -> Self { + let (cmd_tx, cmd_rx) = unbounded(); + let (evt_tx, evt_rx) = unbounded(); + let (gui_tx, gui_rx) = unbounded::<(u32, ToGuiMessage)>(); + + let device = device_name.to_string(); + let input_device = input_device_name.to_string(); + let sr = sample_rate; + let bs = buffer_size; + + std::thread::Builder::new() + .name("audio-engine".into()) + .spawn(move || { + io::run_audio(sr, bs, &device, &input_device, cmd_rx, evt_tx, gui_tx); + }) + .expect("failed to spawn engine thread"); + + Self { cmd_tx, evt_rx, gui_rx } + } + + pub fn send(&self, cmd: EngineCommand) { + let _ = self.cmd_tx.send(cmd); + } + + pub fn poll_events(&self) -> Vec { + let mut events = Vec::new(); + while let Ok(evt) = self.evt_rx.try_recv() { + events.push(evt); + } + events + } + + pub fn poll_gui_messages(&self) -> Vec<(u32, ToGuiMessage)> { + let mut messages = Vec::new(); + while let Ok(msg) = self.gui_rx.try_recv() { + messages.push(msg); + } + messages + } +} + +impl Drop for EngineHandle { + fn drop(&mut self) { + let _ = self.cmd_tx.send(EngineCommand::Shutdown); + } +} diff --git a/src/engine/param.rs b/src/engine/param.rs new file mode 100644 index 0000000..237a06e --- /dev/null +++ b/src/engine/param.rs @@ -0,0 +1,62 @@ +use std::collections::HashMap; + +use super::host::ModuleHost; + +#[derive(Debug, Clone)] +pub struct ParamChange { + pub module_id: u32, + pub key: String, + pub value: f32, +} + +pub struct DataContract { + pub provider_module: u32, + pub consumer_module: u32, + pub bus_name: String, +} + +pub struct ParamEngine { + pending: Vec, + params: HashMap>, + contracts: Vec, +} + +impl ParamEngine { + pub fn new() -> Self { + Self { + pending: Vec::new(), + params: HashMap::new(), + contracts: Vec::new(), + } + } + + pub fn queue_change(&mut self, module_id: u32, key: String, value: f32) { + self.pending.push(ParamChange { module_id, key, value }); + } + + pub fn apply_pending(&mut self, host: &mut ModuleHost) { + for change in self.pending.drain(..) { + self.params + .entry(change.module_id) + .or_default() + .insert(change.key.clone(), change.value); + host.set_param(change.module_id, &change.key, change.value); + } + } + + pub fn get_params(&self, module_id: u32) -> Option<&HashMap> { + self.params.get(&module_id) + } + + pub fn add_contract(&mut self, contract: DataContract) { + self.contracts.push(contract); + } + + pub fn contracts(&self) -> &[DataContract] { + &self.contracts + } + + pub fn resolve_contracts(&mut self) { + // Future: validate all contracts still have valid providers/consumers + } +} diff --git a/src/engine/schedule.rs b/src/engine/schedule.rs new file mode 100644 index 0000000..4f44628 --- /dev/null +++ b/src/engine/schedule.rs @@ -0,0 +1,190 @@ +use std::any::Any; +use std::collections::HashMap; + +use oxforge::mdk::{ + Buses, ChainInput, ChainOutput, MainAudioInput, MainAudioOutput, + MusicalTime as MdkMusicalTime, Ports, ProcessContext, ToGuiQueue, + TransportState as MdkTransportState, +}; + +use super::bus::{AudioBusData, BusRegistry}; +use super::graph::ProcessGraph; +use super::host::ModuleHost; +use super::TransportState; + +pub struct CycleContext { + pub sample_pos: u64, + pub tempo: f32, + pub sample_rate: u32, + pub transport: TransportState, + pub time_sig_num: u8, + pub time_sig_den: u8, +} + +pub struct ModuleRouting { + pub module_id: u32, + pub input_bus: Option, + pub output_bus: Option, + pub bus_name: Option, + pub scratch_in: Vec, + pub scratch_out: Vec, + pub to_gui: ToGuiQueue, +} + +pub struct CycleSchedule { + entries: Vec, +} + +impl CycleSchedule { + pub fn new() -> Self { + Self { + entries: Vec::new(), + } + } + + pub fn entries_mut(&mut self) -> &mut Vec { + &mut self.entries + } + + pub fn from_graph(order: &[u32], graph: &ProcessGraph, bus_registry: &BusRegistry) -> Self { + let mut entries = Vec::new(); + + for &module_id in order { + if let Some(node) = graph.get_node(module_id) { + let input_bus = node.reads.iter().next().cloned(); + let output_bus = node.writes.iter().next().cloned(); + + let buf_size = if let Some(ref name) = input_bus { + if let Some(bus) = bus_registry.get_by_name(name) { + if let Ok(data) = bus.data.read() { + data.downcast_ref::() + .map(|a| a.samples.len()) + .unwrap_or(512) + } else { + 512 + } + } else { + 512 + } + } else { + 512 + }; + + let bus_name = node.chain_position.as_ref().map(|(b, _)| b.clone()) + .or_else(|| input_bus.clone()); + + entries.push(ModuleRouting { + module_id, + input_bus, + output_bus, + bus_name, + scratch_in: vec![0.0; buf_size], + scratch_out: vec![0.0; buf_size], + to_gui: ToGuiQueue::noop(), + }); + } + } + + Self { entries } + } + + pub fn execute( + &mut self, + bus_registry: &BusRegistry, + module_host: &mut ModuleHost, + ctx: &CycleContext, + ) { + let mdk_transport = match ctx.transport { + TransportState::Playing => MdkTransportState::Playing, + TransportState::Stopped => MdkTransportState::Stopped, + }; + + let beats_per_second = ctx.tempo as f64 / 60.0; + let beat_pos = ctx.sample_pos as f64 * beats_per_second / ctx.sample_rate as f64; + + let mdk_time = MdkMusicalTime { + sample_pos: ctx.sample_pos, + beat_pos, + tempo: ctx.tempo as f64, + time_signature_numerator: ctx.time_sig_num, + time_signature_denominator: ctx.time_sig_den, + state: mdk_transport, + }; + + let mut prev_chain_data: Option> = None; + let mut prev_bus: Option = None; + + for routing in &mut self.entries { + if let Some(ref bus_name) = routing.input_bus { + if let Some(bus) = bus_registry.get_by_name(bus_name) { + if let Ok(data) = bus.data.read() { + if let Some(audio) = data.downcast_ref::() { + let len = routing.scratch_in.len().min(audio.samples.len()); + routing.scratch_in[..len].copy_from_slice(&audio.samples[..len]); + } + } + } + } + + for s in &mut routing.scratch_out { + *s = 0.0; + } + + // Wire chain_in from previous module on same bus + let same_bus = routing.bus_name.is_some() + && routing.bus_name == prev_bus + && prev_chain_data.is_some(); + + let mut chain_out_box: Box = Box::new(()); + + let chain_in = if same_bus { + prev_chain_data.as_deref().map(|data| ChainInput { data }) + } else { + None + }; + + let chain_out = Some(ChainOutput { data: &mut chain_out_box }); + + let ports = Ports { + main_audio_in: Some(MainAudioInput { + buffer: &routing.scratch_in, + }), + main_audio_out: Some(MainAudioOutput { + buffer: &mut routing.scratch_out, + }), + chain_in, + chain_out, + }; + + let context = ProcessContext { + time: mdk_time, + params: HashMap::new(), + to_gui: routing.to_gui.clone(), + buses: Buses::default(), + }; + + if let Some(module) = module_host.get_mut(routing.module_id) { + module.process(ports, &context); + } + + // Stash chain output if module wrote something (not unit type) + if !chain_out_box.is::<()>() { + prev_chain_data = Some(chain_out_box); + } else if routing.bus_name != prev_bus { + prev_chain_data = None; + } + prev_bus = routing.bus_name.clone(); + + if let Some(ref bus_name) = routing.output_bus { + if let Some(bus) = bus_registry.get_by_name(bus_name) { + if let Ok(mut data) = bus.data.write() { + if let Some(audio) = data.downcast_mut::() { + let len = routing.scratch_out.len().min(audio.samples.len()); + audio.samples[..len].copy_from_slice(&routing.scratch_out[..len]); + } + } + } + } + } + } +} diff --git a/src/entry.rs b/src/entry.rs new file mode 100644 index 0000000..1152d39 --- /dev/null +++ b/src/entry.rs @@ -0,0 +1,704 @@ +use crate::config::{AudioOxideConfig, ProjectConfig}; +use crate::first_run::{load_or_initialize_config, save_config}; +use chrono::{DateTime, Utc}; +use iced::widget::{container, mouse_area, stack, text}; +use iced::{ + alignment, application, event, + keyboard::{self, key, Key}, + theme, time, Color, Element, Length, Subscription, Task, Theme, +}; +use std::fs; +use std::path::PathBuf; +use std::time::SystemTime; + +use crate::{behaviors, editor, gui, triggers}; + +pub fn main() -> iced::Result { + application("Audio Oxide", update, view) + .subscription(subscription) + .theme(theme) + .run_with(AudioOxide::new) +} + +fn theme(_app: &AudioOxide) -> Theme { + let mut palette = theme::Palette::OXOCARBON; + palette.primary = Color::from_rgb8(0x00, 0x7A, 0xFF); + palette.background = Color::from_rgb8(0x20, 0x22, 0x24); + Theme::custom("Audio Oxide Custom".to_string(), palette) +} + +pub struct AudioOxide { + config: AudioOxideConfig, + state: AppState, + settings_state: Option, +} + +impl AudioOxide { + fn new() -> (Self, Task) { + let args: Vec = std::env::args().collect(); + let mut project_path: Option = None; + + if let Some(project_arg_index) = args.iter().position(|a| a == "--project") { + if let Some(path_str) = args.get(project_arg_index + 1) { + project_path = Some(PathBuf::from(path_str)); + } + } + + let config = load_or_initialize_config(); + + if let Some(path) = project_path { + let (editor_state, editor_task) = editor::Editor::new(path); + let app = Self { + config, + state: AppState::Editor(Box::new(editor_state)), + settings_state: None, + }; + return (app, editor_task.map(Message::Editor)); + } + + if config.first_run { + let app = Self { + config, + state: AppState::FirstRunWizard, + settings_state: None, + }; + (app, Task::none()) + } else { + let app = Self { + config, + state: AppState::Loading, + settings_state: None, + }; + let initial_task = Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + (app, initial_task) + } + } +} + +pub enum AppState { + FirstRunWizard, + Loading, + ProjectManager(ProjectManagerState), + NewProjectWizard(gui::new_project::State), + TimeUtility { + wizard_state: Box, + tapper_state: gui::time_utility::State, + }, + Editor(Box), +} + +pub struct ProjectManagerState { + view: ProjectViewState, +} + +pub enum ProjectViewState { + Recent { projects: Vec }, + Find { path_input: String }, +} + +#[derive(Debug, Clone)] +pub struct ProjectInfo { + pub name: String, + pub path: PathBuf, + pub modified: DateTime, +} + +#[derive(Debug, Clone)] +pub enum Message { + EventOccurred(iced::Event), + FirstRunProjectDirChanged(String), + FirstRunComplete, + ViewRecentProjects, + ViewFindProject, + ViewNewProject, + OpenProject(PathBuf), + FindPathChanged(String), + ProjectsLoaded(Result, String>), + ProjectNameChanged(String), + SampleRateSelected(u32), + BufferSizeSelected(u32), + AudioDeviceSelected(String), + TimeSignatureNumeratorChanged(String), + TimeSignatureDenominatorChanged(String), + TempoChanged(f32), + CreateProject, + ViewTimeUtility, + TimeUtilityTapPressed, + TimeUtilityTapReleased, + RunTimeUtilityAnalysis, + TimeUtilitySet(u32), + TimeUtilitySetTimeSignature(String), + TimeUtilitySetBoth(u32, String), + TimeUtilityCancel, + Editor(editor::Message), + Settings(gui::settings::Message), + OpenSettings, + CloseSettings, +} + +fn update(app: &mut AudioOxide, message: Message) -> Task { + // Settings overlay messages + match &message { + Message::OpenSettings => { + app.settings_state = Some(gui::settings::State::new(&app.config)); + return Task::none(); + } + Message::CloseSettings => { + app.settings_state = None; + return Task::none(); + } + Message::Settings(settings_msg) => { + if let Some(ref mut state) = app.settings_state { + let is_save = matches!(settings_msg, gui::settings::Message::Save); + let done = gui::settings::handle_message(state, settings_msg.clone()); + if done { + if is_save { + app.config = state.config.clone(); + save_config(&app.config); + } + app.settings_state = None; + } + } + return Task::none(); + } + _ => {} + } + + // If settings overlay is open, block other input except engine tick + if app.settings_state.is_some() { + if let Message::Editor(editor::Message::EngineTick) = &message { + // Allow engine tick through + } else if let Message::EventOccurred(event::Event::Keyboard( + keyboard::Event::KeyPressed { + key: Key::Named(key::Named::Escape), + .. + }, + )) = &message + { + app.settings_state = None; + return Task::none(); + } else { + return Task::none(); + } + } + + match message { + Message::EventOccurred(event) => { + if let event::Event::Keyboard(keyboard::Event::KeyPressed { + key: Key::Named(key::Named::Escape), + .. + }) = event + { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::EscapePressed) + .map(Message::Editor); + } + } + + if let event::Event::Keyboard(keyboard_event) = event { + let action = match keyboard_event { + keyboard::Event::KeyPressed { + key, modifiers, .. + } => triggers::map_key_press_to_action(&app.state, key, modifiers), + keyboard::Event::KeyReleased { + key, modifiers, .. + } => triggers::map_key_release_to_action(&app.state, key, modifiers), + _ => None, + }; + + if let Some(action) = action { + return dispatch_action(app, action); + } + } + return Task::none(); + } + Message::Editor(editor_message) => match editor_message { + editor::Message::MenuAction(action) => { + return dispatch_action(app, action); + } + msg => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state.update(msg).map(Message::Editor); + } + } + }, + Message::ViewTimeUtility => { + if let AppState::NewProjectWizard(wizard_state) = + std::mem::replace(&mut app.state, AppState::Loading) + { + app.state = AppState::TimeUtility { + wizard_state: Box::new(wizard_state), + tapper_state: gui::time_utility::State::default(), + }; + } + } + Message::TimeUtilityTapPressed => { + if let AppState::TimeUtility { tapper_state, .. } = &mut app.state { + gui::time_utility::handle_tap_pressed(tapper_state); + } + } + Message::TimeUtilityTapReleased => { + if let AppState::TimeUtility { tapper_state, .. } = &mut app.state { + return gui::time_utility::handle_tap_released(tapper_state); + } + } + Message::RunTimeUtilityAnalysis => { + if let AppState::TimeUtility { tapper_state, .. } = &mut app.state { + if tapper_state.tap_events.len() >= 3 { + tapper_state.result = + gui::time_utility::run_analysis(&tapper_state.tap_events); + } + } + } + Message::TimeUtilitySet(bpm) => { + if let AppState::TimeUtility { wizard_state, .. } = + std::mem::replace(&mut app.state, AppState::Loading) + { + let mut state = *wizard_state; + state.config.tempo = bpm as f32; + app.state = AppState::NewProjectWizard(state); + } + } + Message::TimeUtilitySetTimeSignature(sig) => { + if let AppState::TimeUtility { wizard_state, .. } = + std::mem::replace(&mut app.state, AppState::Loading) + { + let mut state = *wizard_state; + let parts: Vec<&str> = sig.split('/').collect(); + if parts.len() == 2 { + if let (Ok(num), Ok(den)) = (parts[0].parse::(), parts[1].parse::()) + { + state.config.time_signature_numerator = num; + state.config.time_signature_denominator = den; + } + } + app.state = AppState::NewProjectWizard(state); + } + } + Message::TimeUtilitySetBoth(bpm, sig) => { + if let AppState::TimeUtility { wizard_state, .. } = + std::mem::replace(&mut app.state, AppState::Loading) + { + let mut state = *wizard_state; + state.config.tempo = bpm as f32; + let parts: Vec<&str> = sig.split('/').collect(); + if parts.len() == 2 { + if let (Ok(num), Ok(den)) = (parts[0].parse::(), parts[1].parse::()) + { + state.config.time_signature_numerator = num; + state.config.time_signature_denominator = den; + } + } + app.state = AppState::NewProjectWizard(state); + } + } + Message::TimeUtilityCancel => { + if let AppState::TimeUtility { wizard_state, .. } = + std::mem::replace(&mut app.state, AppState::Loading) + { + app.state = AppState::NewProjectWizard(*wizard_state); + } + } + Message::FirstRunProjectDirChanged(new_path) => { + if let AppState::FirstRunWizard = &mut app.state { + app.config.project_dir = PathBuf::from(new_path); + } + } + Message::FirstRunComplete => { + if let AppState::FirstRunWizard = &app.state { + fs::create_dir_all(&app.config.project_dir) + .expect("Could not create project directory"); + app.config.first_run = false; + save_config(&app.config); + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects: vec![] }, + }); + return Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + } + } + Message::ViewRecentProjects => { + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects: vec![] }, + }); + return Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + } + Message::ViewFindProject => { + if let AppState::ProjectManager(pm) = &mut app.state { + pm.view = ProjectViewState::Find { + path_input: String::new(), + }; + } + } + Message::ViewNewProject => { + app.state = AppState::NewProjectWizard(gui::new_project::State::default()); + } + Message::ProjectsLoaded(Ok(projects)) => { + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects }, + }); + } + Message::ProjectsLoaded(Err(e)) => { + eprintln!("Error loading projects: {}", e); + } + Message::OpenProject(path) => { + let (editor_state, editor_task) = editor::Editor::new(path); + app.state = AppState::Editor(Box::new(editor_state)); + return editor_task.map(Message::Editor); + } + Message::FindPathChanged(new_path) => { + if let AppState::ProjectManager(pm) = &mut app.state { + if let ProjectViewState::Find { path_input } = &mut pm.view { + *path_input = new_path; + } + } + } + Message::CreateProject => { + if let AppState::NewProjectWizard(wizard_state) = &app.state { + if let Some(path) = create_project_files(&app.config, &wizard_state.config) { + return update(app, Message::OpenProject(path)); + } + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects: vec![] }, + }); + return Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + } + } + Message::ProjectNameChanged(name) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + s.config.name = name; + } + } + Message::SampleRateSelected(sr) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + s.config.sample_rate = sr; + } + } + Message::BufferSizeSelected(bs) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + s.config.buffer_size = bs; + } + } + Message::AudioDeviceSelected(dev) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + s.config.audio_device = dev; + } + } + Message::TimeSignatureNumeratorChanged(num_str) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + if let Ok(num) = num_str.parse::() { + s.config.time_signature_numerator = num; + } + } + } + Message::TimeSignatureDenominatorChanged(den_str) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + if let Ok(den) = den_str.parse::() { + if den > 0 { + s.config.time_signature_denominator = den; + } + } + } + } + Message::TempoChanged(tempo) => { + if let AppState::NewProjectWizard(s) = &mut app.state { + s.config.tempo = tempo; + } + } + _ => {} + } + Task::none() +} + +fn dispatch_action(app: &mut AudioOxide, action: behaviors::Action) -> Task { + use behaviors::Action::*; + match action { + // Time utility + TimeUtilityTapPressed => { + if let AppState::TimeUtility { tapper_state, .. } = &mut app.state { + gui::time_utility::handle_tap_pressed(tapper_state); + } + } + TimeUtilityTapReleased => { + if let AppState::TimeUtility { tapper_state, .. } = &mut app.state { + return gui::time_utility::handle_tap_released(tapper_state); + } + } + + // Global shortcuts + OpenSettings => { + app.settings_state = Some(gui::settings::State::new(&app.config)); + } + NewProject => { + app.state = AppState::NewProjectWizard(gui::new_project::State::default()); + } + OpenProject => { + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects: vec![] }, + }); + return Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + } + + // File menu (editor context) + SaveProject | SaveProjectAs => { + // TODO: project serialization + } + CloseProject => { + app.state = AppState::ProjectManager(ProjectManagerState { + view: ProjectViewState::Recent { projects: vec![] }, + }); + return Task::perform( + load_projects(app.config.project_dir.clone()), + Message::ProjectsLoaded, + ); + } + + // Edit menu (editor context) + Undo | Redo | Cut | Copy | Paste | Duplicate | SelectAll | Delete => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::EditAction(action)) + .map(Message::Editor); + } + } + + // Editor transport + EditorTogglePlayback => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::PlayPressed) + .map(Message::Editor); + } + } + EditorStop => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::StopPressed) + .map(Message::Editor); + } + } + EditorToggleRecord => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::RecordPressed) + .map(Message::Editor); + } + } + EditorPlayFromBeginning => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::StopPressed) + .map(Message::Editor) + .chain(Task::done(Message::Editor(editor::Message::PlayPressed))); + } + } + EditorRewind => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::RewindPressed) + .map(Message::Editor); + } + } + + // Editor view toggles + EditorToggleInspector => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ToggleInspector) + .map(Message::Editor); + } + } + EditorToggleBottomPanel => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ToggleBottomPanel) + .map(Message::Editor); + } + } + EditorToggleMixer => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::SetBottomPanelMode( + editor::BottomPanelMode::Mixer, + )) + .map(Message::Editor); + } + } + EditorToggleToolbar => { + // TODO: toolbar visibility toggle + } + + // Editor mode toggles + EditorToggleCycle => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::CycleToggled) + .map(Message::Editor); + } + } + EditorToggleMetronome => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::MetronomeToggled) + .map(Message::Editor); + } + } + + ZoomInH => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ZoomH(1.2)) + .map(Message::Editor); + } + } + ZoomOutH => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ZoomH(1.0 / 1.2)) + .map(Message::Editor); + } + } + ZoomInV => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ZoomV(1.2)) + .map(Message::Editor); + } + } + ZoomOutV => { + if let AppState::Editor(editor_state) = &mut app.state { + return editor_state + .update(editor::Message::ZoomV(1.0 / 1.2)) + .map(Message::Editor); + } + } + } + Task::none() +} + +fn view<'a>(app: &'a AudioOxide) -> Element<'a, Message> { + let content: Element<'a, Message> = match &app.state { + AppState::FirstRunWizard => gui::first_run_wizard::view(&app.config.project_dir), + AppState::Loading => text("Loading projects...").into(), + AppState::ProjectManager(s) => gui::project_viewer::view(&s.view), + AppState::NewProjectWizard(s) => gui::new_project::view(s), + AppState::TimeUtility { tapper_state, .. } => gui::time_utility::view(tapper_state), + AppState::Editor(editor_state) => editor_state.view().map(Message::Editor), + }; + + let main = container(content) + .center_x(Length::Fill) + .center_y(Length::Fill); + + if let Some(ref settings_state) = app.settings_state { + let bg = container(main) + .width(Length::Fill) + .height(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(iced::Background::Color(Color::from_rgba( + 0.0, 0.0, 0.0, 0.5, + ))), + ..container::Style::default() + }); + + let settings_dialog = container( + gui::settings::view(settings_state).map(Message::Settings), + ) + .width(Length::Fill) + .height(Length::Fill) + .align_x(alignment::Horizontal::Center) + .align_y(alignment::Vertical::Center); + + mouse_area(stack![bg, settings_dialog]) + .on_press(Message::CloseSettings) + .into() + } else { + main.into() + } +} + +fn subscription(app: &AudioOxide) -> Subscription { + let keyboard = event::listen().map(Message::EventOccurred); + + if let AppState::Editor(editor_state) = &app.state { + if editor_state.has_engine() { + let tick = time::every(std::time::Duration::from_millis(16)) + .map(|_| Message::Editor(editor::Message::EngineTick)); + return Subscription::batch([keyboard, tick]); + } + } + + keyboard +} + +fn create_project_files( + config: &AudioOxideConfig, + project_config: &ProjectConfig, +) -> Option { + let project_dir = config + .project_dir + .join(format!("{}.xtc", project_config.name)); + if project_dir.exists() { + eprintln!("Error: Project directory already exists."); + return None; + } + if let Err(e) = fs::create_dir_all(&project_dir) { + eprintln!("Failed to create project directory: {}", e); + return None; + } + let toml_path = project_dir.join("project.toml"); + match toml::to_string_pretty(project_config) { + Ok(toml_content) => { + if let Err(e) = fs::write(&toml_path, toml_content) { + eprintln!("Failed to write project.toml: {}", e); + None + } else { + Some(project_dir) + } + } + Err(e) => { + eprintln!("Failed to serialize project config: {}", e); + None + } + } +} + +async fn load_projects(project_dir: PathBuf) -> Result, String> { + let mut projects = Vec::new(); + let entries = fs::read_dir(project_dir).map_err(|e| e.to_string())?; + for entry in entries { + let entry = entry.map_err(|e| e.to_string())?; + let path = entry.path(); + if path.is_dir() && path.extension().and_then(|s| s.to_str()) == Some("xtc") { + let metadata = entry.metadata().map_err(|e| e.to_string())?; + let modified_sys: SystemTime = metadata.modified().map_err(|e| e.to_string())?; + let name = path + .file_stem() + .and_then(|s| s.to_str()) + .unwrap_or("Untitled") + .to_string(); + projects.push(ProjectInfo { + name, + path, + modified: modified_sys.into(), + }); + } + } + projects.sort_by(|a, b| b.modified.cmp(&a.modified)); + Ok(projects) +} diff --git a/src/first_run.rs b/src/first_run.rs new file mode 100644 index 0000000..c933101 --- /dev/null +++ b/src/first_run.rs @@ -0,0 +1,41 @@ +use crate::config::AudioOxideConfig; +use std::{fs, path::PathBuf}; + +/// Returns the path to the config file: ~/.oxide-audio/config.toml +fn get_config_path() -> PathBuf { + dirs::home_dir() + .expect("Could not find the home directory") + .join(".oxide-audio/config.toml") +} + +/// Loads the config from disk, or creates a default one if it doesn't exist. +pub fn load_or_initialize_config() -> AudioOxideConfig { + let config_path = get_config_path(); + + if !config_path.exists() { + println!("Config file not found. Creating default at: {:?}", config_path); + let config = AudioOxideConfig::default(); + + // Ensure the parent directory ~/.oxide-audio/ exists + if let Some(parent) = config_path.parent() { + fs::create_dir_all(parent).expect("Could not create config directory"); + } + + // Write the new default config file + let toml_string = toml::to_string_pretty(&config).expect("Could not serialize config to TOML"); + fs::write(&config_path, toml_string).expect("Could not write new config file"); + + return config; + } + + // If the file exists, load and parse it. + let toml_string = fs::read_to_string(&config_path).expect("Could not read config file"); + toml::from_str(&toml_string).expect("Could not parse config file") +} + +/// Saves the provided configuration state to the disk. +pub fn save_config(config: &AudioOxideConfig) { + let config_path = get_config_path(); + let toml_string = toml::to_string_pretty(config).expect("Could not serialize config to TOML"); + fs::write(&config_path, toml_string).expect("Could not write updated config file"); +} \ No newline at end of file diff --git a/src/gui/editor/control_bar.rs b/src/gui/editor/control_bar.rs new file mode 100644 index 0000000..bf697fa --- /dev/null +++ b/src/gui/editor/control_bar.rs @@ -0,0 +1,165 @@ +use crate::editor::{BottomPanelMode, Message}; +use crate::engine::TransportState; +use crate::gui::icon_button::{button_group, IconButton}; +use crate::gui::icons::{Icon, IconSet}; +use crate::timing::MusicalTime; +use iced::widget::{container, row, text, Space}; +use iced::{Alignment, Background, Color, Element, Length, Theme}; + +pub fn view<'a>( + transport: &TransportState, + position: &MusicalTime, + tempo: f32, + ts_num: u8, + ts_den: u8, + cycle_enabled: bool, + metronome_enabled: bool, + count_in_enabled: bool, + show_inspector: bool, + show_bottom_panel: bool, + bottom_panel_mode: &BottomPanelMode, + icons: &'a IconSet, +) -> Element<'a, Message> { + let is_playing = *transport == TransportState::Playing; + + // LCD position display + let pos_text = format!( + "{:03}.{}.{:03}", + position.bar, position.beat, position.tick + ); + let lcd = container(text(pos_text).size(28).font(iced::Font::MONOSPACE)) + .padding([4, 12]) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x10, 0x12, 0x14))), + border: iced::Border { + radius: 3.0.into(), + color: Color::from_rgb8(0x30, 0x32, 0x34), + width: 1.0, + }, + ..container::Style::default() + }); + + // Transport buttons + let (rw_u, rw_f) = icons.get(Icon::Rewind); + let (stop_u, stop_f) = icons.get(Icon::Stop); + let (play_u, play_f) = icons.get(Icon::Play); + let (rec_u, rec_f) = icons.get(Icon::Record); + + let transport_controls = button_group(vec![ + IconButton::new(rw_u, rw_f, Message::RewindPressed) + .size(32.0) + .hint("Rewind") + .into(), + IconButton::new(stop_u, stop_f, Message::StopPressed) + .size(32.0) + .hint("Stop") + .into(), + IconButton::new(play_u, play_f, Message::PlayPressed) + .size(32.0) + .toggled(is_playing) + .hint("Play") + .into(), + IconButton::new(rec_u, rec_f, Message::RecordPressed) + .size(32.0) + .active_tint(Color::from_rgb8(0xCC, 0x33, 0x33)) + .hint("Record") + .into(), + ]); + + // Tempo + time sig + let tempo_display = text(format!("{:.1} BPM", tempo)).size(16); + let time_sig_display = text(format!("{}/{}", ts_num, ts_den)).size(16); + + // Mode toggles + let (cyc_u, cyc_f) = icons.get(Icon::Cycle); + let (met_u, met_f) = icons.get(Icon::Metronome); + let (cnt_u, cnt_f) = icons.get(Icon::CountIn); + + let mode_toggles = button_group(vec![ + IconButton::new(cyc_u, cyc_f, Message::CycleToggled) + .size(32.0) + .toggled(cycle_enabled) + .active_tint(Color::from_rgb8(0xFF, 0xA5, 0x00)) + .hint("Cycle") + .into(), + IconButton::new(met_u, met_f, Message::MetronomeToggled) + .size(32.0) + .toggled(metronome_enabled) + .hint("Metronome") + .into(), + IconButton::new(cnt_u, cnt_f, Message::CountInToggled) + .size(32.0) + .toggled(count_in_enabled) + .hint("Count In") + .into(), + ]); + + // View toggles + let (insp_u, insp_f) = icons.get(Icon::ViewInspector); + let (edit_u, edit_f) = icons.get(Icon::ViewEditor); + let (mix_u, mix_f) = icons.get(Icon::ViewMixer); + + let view_toggles = button_group(vec![ + IconButton::new(insp_u, insp_f, Message::ToggleInspector) + .size(32.0) + .toggled(show_inspector) + .active_tint(Color::from_rgb8(0x55, 0x55, 0x55)) + .hint("Inspector") + .into(), + IconButton::new( + edit_u, + edit_f, + Message::SetBottomPanelMode(BottomPanelMode::Editor), + ) + .size(32.0) + .toggled(show_bottom_panel && *bottom_panel_mode == BottomPanelMode::Editor) + .active_tint(Color::from_rgb8(0x55, 0x55, 0x55)) + .hint("Editor") + .into(), + IconButton::new( + mix_u, + mix_f, + Message::SetBottomPanelMode(BottomPanelMode::Mixer), + ) + .size(32.0) + .toggled(show_bottom_panel && *bottom_panel_mode == BottomPanelMode::Mixer) + .active_tint(Color::from_rgb8(0x55, 0x55, 0x55)) + .hint("Mixer") + .into(), + IconButton::new( + mix_u, + mix_f, + Message::SetBottomPanelMode(BottomPanelMode::Visualizer), + ) + .size(32.0) + .toggled(show_bottom_panel && *bottom_panel_mode == BottomPanelMode::Visualizer) + .active_tint(Color::from_rgb8(0x44, 0x77, 0xAA)) + .hint("Visualizer") + .into(), + ]); + + let left = Space::new(Length::Fill, 0); + let right = Space::new(Length::Fill, 0); + + let bar = row![ + view_toggles, + left, + lcd, + transport_controls, + tempo_display, + time_sig_display, + mode_toggles, + right, + ] + .spacing(12) + .padding([8, 14]) + .align_y(Alignment::Center); + + container(bar) + .width(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1A, 0x1C, 0x1E))), + ..container::Style::default() + }) + .into() +} diff --git a/src/gui/editor/editor_pane.rs b/src/gui/editor/editor_pane.rs new file mode 100644 index 0000000..cc5bf58 --- /dev/null +++ b/src/gui/editor/editor_pane.rs @@ -0,0 +1,45 @@ +use crate::editor::Message; +use crate::track::Track; +use iced::widget::{column, container, horizontal_rule, text}; +use iced::{Background, Color, Element, Length, Theme}; + +pub fn view<'a>(selected_track: Option<&'a Track>) -> Element<'a, Message> { + let header = text("Editor").size(14).color(Color::from_rgb8(0x88, 0x88, 0x88)); + + let content = if let Some(track) = selected_track { + let type_label = match track.track_type { + crate::track::TrackType::Audio => "Waveform Editor", + crate::track::TrackType::Midi => "Piano Roll", + }; + column![ + header, + horizontal_rule(1), + text(format!("{} - {}", track.name, type_label)).size(12), + text("(editor canvas placeholder)").size(10).color(Color::from_rgb8(0x55, 0x55, 0x55)), + ] + .spacing(4) + .padding(8) + } else { + column![ + header, + horizontal_rule(1), + text("Select a track to edit").size(12).color(Color::from_rgb8(0x55, 0x55, 0x55)), + ] + .spacing(4) + .padding(8) + }; + + container(content) + .width(Length::Fill) + .height(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1A, 0x1C, 0x1E))), + border: iced::Border { + color: Color::from_rgb8(0x30, 0x32, 0x34), + width: 1.0, + ..iced::Border::default() + }, + ..container::Style::default() + }) + .into() +} diff --git a/src/gui/editor/inspector.rs b/src/gui/editor/inspector.rs new file mode 100644 index 0000000..7d513e1 --- /dev/null +++ b/src/gui/editor/inspector.rs @@ -0,0 +1,129 @@ +use crate::config::ProjectConfig; +use crate::editor::Message; +use crate::modules::registry::BUILTIN_MODULES; +use crate::track::Track; +use iced::widget::{button, column, container, horizontal_rule, row, text, vertical_rule, Column}; +use iced::{Background, Color, Element, Length, Theme}; +use std::collections::HashMap; + +pub fn view<'a>( + selected_track: Option<&'a Track>, + project_config: &'a ProjectConfig, + module_names: &'a HashMap, + track_index: Option, +) -> Element<'a, Message> { + let header = text("Inspector").size(14).color(Color::from_rgb8(0x88, 0x88, 0x88)); + + let content = if let Some(track) = selected_track { + let color_swatch = container(text("").width(12).height(12)) + .style(move |_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8( + track.color.r, + track.color.g, + track.color.b, + ))), + border: iced::Border { + radius: 2.0.into(), + ..iced::Border::default() + }, + ..container::Style::default() + }); + + // Module chain display + let mut modules_col = Column::new().spacing(2); + for &module_id in &track.module_chain { + let name = module_names + .get(&module_id) + .map(|s| s.as_str()) + .unwrap_or("Unknown"); + let track_idx = track_index.unwrap_or(0); + let remove_btn = button(text("×").size(10)) + .on_press(Message::RemoveModuleFromTrack(track_idx, module_id)) + .padding([1, 4]) + .style(|_theme: &Theme, _status| button::Style { + background: Some(Background::Color(Color::TRANSPARENT)), + text_color: Color::from_rgb8(0xAA, 0x44, 0x44), + ..button::Style::default() + }); + modules_col = modules_col.push( + row![text(name).size(10), remove_btn] + .spacing(4) + .align_y(iced::Alignment::Center), + ); + } + + // Add module buttons + let mut add_col = Column::new().spacing(2); + if let Some(idx) = track_index { + for desc in BUILTIN_MODULES { + add_col = add_col.push( + button(text(desc.display_name).size(10)) + .on_press(Message::AddModuleToTrack(idx, desc.type_name.to_string())) + .padding([2, 6]) + .style(|_theme: &Theme, status| { + let bg = match status { + button::Status::Hovered => Color::from_rgb8(0x33, 0x55, 0x77), + _ => Color::from_rgb8(0x28, 0x2A, 0x2C), + }; + button::Style { + background: Some(Background::Color(bg)), + text_color: Color::from_rgb8(0xCC, 0xCC, 0xCC), + border: iced::Border { + radius: 3.0.into(), + ..iced::Border::default() + }, + ..button::Style::default() + } + }), + ); + } + } + + column![ + header, + horizontal_rule(1), + row![color_swatch, text(&track.name).size(14)].spacing(6), + text(format!("Type: {}", track.track_type)).size(12), + horizontal_rule(1), + text("Volume").size(10).color(Color::from_rgb8(0x77, 0x77, 0x77)), + text(format!("{:.0}%", track.volume * 100.0)).size(12), + text("Pan").size(10).color(Color::from_rgb8(0x77, 0x77, 0x77)), + text(format!("{:+.0}", track.pan * 100.0)).size(12), + horizontal_rule(1), + text("Modules").size(10).color(Color::from_rgb8(0x77, 0x77, 0x77)), + modules_col, + text("Add Module").size(10).color(Color::from_rgb8(0x77, 0x77, 0x77)), + add_col, + horizontal_rule(1), + text("Bus").size(10).color(Color::from_rgb8(0x77, 0x77, 0x77)), + text(&track.bus_name).size(10), + text(format!("Regions: {}", track.regions.len())).size(10), + ] + .spacing(4) + .padding(8) + } else { + column![ + header, + horizontal_rule(1), + text(&project_config.name).size(14), + text(format!("{}Hz / {} buf", project_config.sample_rate, project_config.buffer_size)).size(10), + text(format!("{:.1} BPM", project_config.tempo)).size(10), + text(format!("{}/{}", project_config.time_signature_numerator, project_config.time_signature_denominator)).size(10), + text(format!("Device: {}", project_config.audio_device)).size(10), + ] + .spacing(4) + .padding(8) + }; + + row![ + container(content) + .width(200) + .height(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1E, 0x20, 0x22))), + ..container::Style::default() + }), + vertical_rule(1), + ] + .into() +} diff --git a/src/gui/editor/menu_bar.rs b/src/gui/editor/menu_bar.rs new file mode 100644 index 0000000..ef265e5 --- /dev/null +++ b/src/gui/editor/menu_bar.rs @@ -0,0 +1,395 @@ +use crate::behaviors; +use crate::editor::Message as EditorMessage; +use iced::widget::{button, container, row, text, Column, Space}; +use iced::{Alignment, Background, Border, Color, Element, Length, Padding, Theme}; + +pub const BAR_HEIGHT: f32 = 24.0; +const TITLE_WIDTH: f32 = 75.0; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MenuId { + File, + Edit, + Transport, + View, +} + +impl MenuId { + const ALL: [MenuId; 4] = [MenuId::File, MenuId::Edit, MenuId::Transport, MenuId::View]; + + fn label(&self) -> &'static str { + match self { + MenuId::File => "File", + MenuId::Edit => "Edit", + MenuId::Transport => "Transport", + MenuId::View => "View", + } + } +} + +pub struct State { + pub open: Option, +} + +impl State { + pub fn new() -> Self { + Self { open: None } + } +} + +#[derive(Debug, Clone)] +pub enum Message { + Open(MenuId), + Close, + Action(behaviors::Action), + ShowNewTrackWizard, +} + +struct MenuItem { + label: &'static str, + shortcut: &'static str, + message: Message, +} + +enum MenuEntry { + Item(MenuItem), + Separator, +} + +fn file_entries() -> Vec { + use behaviors::Action::*; + vec![ + MenuEntry::Item(MenuItem { + label: "New Project", + shortcut: "\u{2318}N", + message: Message::Action(NewProject), + }), + MenuEntry::Item(MenuItem { + label: "Open\u{2026}", + shortcut: "\u{2318}O", + message: Message::Action(OpenProject), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Save", + shortcut: "\u{2318}S", + message: Message::Action(SaveProject), + }), + MenuEntry::Item(MenuItem { + label: "Save As\u{2026}", + shortcut: "\u{21E7}\u{2318}S", + message: Message::Action(SaveProjectAs), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Close", + shortcut: "\u{2318}W", + message: Message::Action(CloseProject), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Settings", + shortcut: "\u{2318},", + message: Message::Action(OpenSettings), + }), + ] +} + +fn edit_entries() -> Vec { + use behaviors::Action::*; + vec![ + MenuEntry::Item(MenuItem { + label: "Undo", + shortcut: "\u{2318}Z", + message: Message::Action(Undo), + }), + MenuEntry::Item(MenuItem { + label: "Redo", + shortcut: "\u{21E7}\u{2318}Z", + message: Message::Action(Redo), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Cut", + shortcut: "\u{2318}X", + message: Message::Action(Cut), + }), + MenuEntry::Item(MenuItem { + label: "Copy", + shortcut: "\u{2318}C", + message: Message::Action(Copy), + }), + MenuEntry::Item(MenuItem { + label: "Paste", + shortcut: "\u{2318}V", + message: Message::Action(Paste), + }), + MenuEntry::Item(MenuItem { + label: "Duplicate", + shortcut: "\u{2318}D", + message: Message::Action(Duplicate), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Select All", + shortcut: "\u{2318}A", + message: Message::Action(SelectAll), + }), + MenuEntry::Item(MenuItem { + label: "Delete", + shortcut: "\u{232B}", + message: Message::Action(Delete), + }), + ] +} + +fn transport_entries() -> Vec { + use behaviors::Action::*; + vec![ + MenuEntry::Item(MenuItem { + label: "Play/Pause", + shortcut: "Space", + message: Message::Action(EditorTogglePlayback), + }), + MenuEntry::Item(MenuItem { + label: "Stop", + shortcut: "", + message: Message::Action(EditorStop), + }), + MenuEntry::Item(MenuItem { + label: "Record", + shortcut: "R", + message: Message::Action(EditorToggleRecord), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "From Start", + shortcut: "\u{21B5}", + message: Message::Action(EditorPlayFromBeginning), + }), + MenuEntry::Item(MenuItem { + label: "Rewind", + shortcut: ",", + message: Message::Action(EditorRewind), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "New Track\u{2026}", + shortcut: "", + message: Message::ShowNewTrackWizard, + }), + ] +} + +fn view_entries() -> Vec { + use behaviors::Action::*; + vec![ + MenuEntry::Item(MenuItem { + label: "Inspector", + shortcut: "I", + message: Message::Action(EditorToggleInspector), + }), + MenuEntry::Item(MenuItem { + label: "Bottom Panel", + shortcut: "E", + message: Message::Action(EditorToggleBottomPanel), + }), + MenuEntry::Item(MenuItem { + label: "Mixer", + shortcut: "X", + message: Message::Action(EditorToggleMixer), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Cycle", + shortcut: "C", + message: Message::Action(EditorToggleCycle), + }), + MenuEntry::Item(MenuItem { + label: "Metronome", + shortcut: "K", + message: Message::Action(EditorToggleMetronome), + }), + MenuEntry::Separator, + MenuEntry::Item(MenuItem { + label: "Zoom In H", + shortcut: "\u{2318}\u{2192}", + message: Message::Action(ZoomInH), + }), + MenuEntry::Item(MenuItem { + label: "Zoom Out H", + shortcut: "\u{2318}\u{2190}", + message: Message::Action(ZoomOutH), + }), + MenuEntry::Item(MenuItem { + label: "Zoom In V", + shortcut: "\u{2318}\u{2191}", + message: Message::Action(ZoomInV), + }), + MenuEntry::Item(MenuItem { + label: "Zoom Out V", + shortcut: "\u{2318}\u{2193}", + message: Message::Action(ZoomOutV), + }), + ] +} + +fn entries_for(id: MenuId) -> Vec { + match id { + MenuId::File => file_entries(), + MenuId::Edit => edit_entries(), + MenuId::Transport => transport_entries(), + MenuId::View => view_entries(), + } +} + +fn dropdown_x_offset(id: MenuId) -> f32 { + match id { + MenuId::File => 0.0, + MenuId::Edit => TITLE_WIDTH, + MenuId::Transport => TITLE_WIDTH * 2.0, + MenuId::View => TITLE_WIDTH * 3.0, + } +} + +pub fn view(state: &State) -> Element<'_, EditorMessage> { + let titles: Vec> = MenuId::ALL + .iter() + .map(|&id| { + let is_open = state.open == Some(id); + let label_color = if is_open { + Color::WHITE + } else { + Color::from_rgb8(0xAA, 0xAA, 0xAA) + }; + + button(text(id.label()).size(12).color(label_color)) + .on_press(EditorMessage::MenuBar(Message::Open(id))) + .padding([4, 12]) + .width(TITLE_WIDTH) + .style(move |_theme: &Theme, status| { + let bg = match status { + button::Status::Hovered | button::Status::Pressed => { + Color::from_rgb8(0x2A, 0x2C, 0x2E) + } + _ if is_open => Color::from_rgb8(0x2A, 0x2C, 0x2E), + _ => Color::TRANSPARENT, + }; + button::Style { + background: Some(Background::Color(bg)), + text_color: label_color, + border: Border::default(), + ..button::Style::default() + } + }) + .into() + }) + .collect(); + + let bar = row(titles).spacing(0).align_y(Alignment::Center); + + container(bar) + .width(Length::Fill) + .height(BAR_HEIGHT) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1A, 0x1C, 0x1E))), + ..container::Style::default() + }) + .into() +} + +pub fn dropdown_view(state: &State) -> Option> { + let menu_id = state.open?; + let entries = entries_for(menu_id); + + let mut items: Column<'_, EditorMessage> = Column::new().spacing(0).width(200); + + for entry in entries { + match entry { + MenuEntry::Item(item) => { + let msg = EditorMessage::MenuBar(item.message); + let shortcut_el: Element<'_, EditorMessage> = if item.shortcut.is_empty() { + Space::new(0, 0).into() + } else { + text(item.shortcut) + .size(11) + .color(Color::from_rgb8(0x66, 0x66, 0x66)) + .into() + }; + + let item_row = row![ + text(item.label).size(12), + Space::with_width(Length::Fill), + shortcut_el, + ] + .align_y(Alignment::Center) + .spacing(8); + + let item_btn = button(item_row) + .on_press(msg) + .width(Length::Fill) + .padding([5, 12]) + .style(|_theme: &Theme, status| { + let bg = match status { + button::Status::Hovered => Color::from_rgb8(0x00, 0x7A, 0xFF), + button::Status::Pressed => Color::from_rgb8(0x00, 0x6A, 0xDD), + _ => Color::TRANSPARENT, + }; + let text_color = match status { + button::Status::Hovered | button::Status::Pressed => Color::WHITE, + _ => Color::from_rgb8(0xCC, 0xCC, 0xCC), + }; + button::Style { + background: Some(Background::Color(bg)), + text_color, + border: Border::default(), + ..button::Style::default() + } + }); + + items = items.push(item_btn); + } + MenuEntry::Separator => { + let line = container(Space::new(0, 0)) + .width(Length::Fill) + .height(1) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x30, 0x32, 0x34))), + ..container::Style::default() + }); + items = items.push(container(line).padding([4, 8])); + } + } + } + + let dropdown = container(items) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x22, 0x24, 0x26))), + border: Border { + color: Color::from_rgb8(0x35, 0x37, 0x39), + width: 1.0, + radius: 4.0.into(), + }, + ..container::Style::default() + }) + .padding(4); + + let offset = dropdown_x_offset(menu_id); + + let positioned: Element<'_, EditorMessage> = container(row![ + Space::new(offset, 0), + dropdown, + Space::with_width(Length::Fill), + ]) + .width(Length::Fill) + .height(Length::Fill) + .padding(Padding { + top: BAR_HEIGHT, + right: 0.0, + bottom: 0.0, + left: 0.0, + }) + .into(); + + Some(positioned) +} diff --git a/src/gui/editor/mixer.rs b/src/gui/editor/mixer.rs new file mode 100644 index 0000000..258444f --- /dev/null +++ b/src/gui/editor/mixer.rs @@ -0,0 +1,84 @@ +use crate::editor::Message; +use crate::gui::editor::track_header; +use crate::track::Track; +use iced::widget::{column, container, horizontal_rule, scrollable, slider, text, Row}; +use iced::{Alignment, Background, Color, Element, Length, Theme}; + +pub fn view<'a>(tracks: &'a [Track]) -> Element<'a, Message> { + let header = container( + text("Mixer").size(14).color(Color::from_rgb8(0x88, 0x88, 0x88)), + ) + .padding([4, 8]); + + let strips: Vec> = tracks + .iter() + .enumerate() + .map(|(i, track)| { + let color_bar = container(text("").width(Length::Fill).height(3)) + .style(move |_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8( + track.color.r, + track.color.g, + track.color.b, + ))), + ..container::Style::default() + }); + + let name = text(&track.name).size(10); + let vol_slider = slider(0.0..=1.0, track.volume, move |v| { + Message::TrackHeader(i, track_header::Message::VolumeChanged(v)) + }) + .step(0.01) + .width(50); + let vol_label = + text(format!("{:.0}", track.volume * 100.0)).size(9); + let pan_slider = slider(-1.0..=1.0, track.pan, move |p| { + Message::TrackHeader(i, track_header::Message::PanChanged(p)) + }) + .step(0.01) + .width(50); + + container( + column![color_bar, name, vol_slider, vol_label, pan_slider] + .spacing(4) + .align_x(Alignment::Center), + ) + .width(64) + .padding([4, 2]) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x22, 0x24, 0x26))), + border: iced::Border { + color: Color::from_rgb8(0x30, 0x32, 0x34), + width: 1.0, + radius: 2.0.into(), + }, + ..container::Style::default() + }) + .into() + }) + .collect(); + + let strip_row = scrollable(Row::with_children(strips).spacing(2).padding(4)) + .direction(scrollable::Direction::Horizontal( + scrollable::Scrollbar::default(), + )) + .width(Length::Fill); + + container( + column![header, horizontal_rule(1), strip_row] + .spacing(0) + .width(Length::Fill), + ) + .width(Length::Fill) + .height(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x1A, 0x1C, 0x1E))), + border: iced::Border { + color: Color::from_rgb8(0x30, 0x32, 0x34), + width: 1.0, + ..iced::Border::default() + }, + ..container::Style::default() + }) + .into() +} diff --git a/src/gui/editor/mod.rs b/src/gui/editor/mod.rs new file mode 100644 index 0000000..3c7fb43 --- /dev/null +++ b/src/gui/editor/mod.rs @@ -0,0 +1,10 @@ +pub mod control_bar; +pub mod editor_pane; +pub mod inspector; +pub mod menu_bar; +pub mod mixer; +pub mod new_track_wizard; +pub mod timeline; +pub mod toolbar; +pub mod track_header; +pub mod visualizer; diff --git a/src/gui/editor/new_track_wizard.rs b/src/gui/editor/new_track_wizard.rs new file mode 100644 index 0000000..ba296da --- /dev/null +++ b/src/gui/editor/new_track_wizard.rs @@ -0,0 +1,72 @@ +// File: audio-oxide/src/gui/editor/new_track_wizard.rs + +use crate::track::{TrackConfig, TrackType}; +use iced::widget::{button, column, container, pick_list, row, text, text_input}; +use iced::{Alignment, Background, Border, Element, Length, Theme}; + +#[derive(Debug, Clone)] +pub struct State { + pub config: TrackConfig, +} + +impl Default for State { + fn default() -> Self { + Self { + config: TrackConfig::default(), + } + } +} + +#[derive(Debug, Clone)] +pub enum Message { + NameChanged(String), + TrackTypeSelected(TrackType), + Cancel, + Create, +} + +pub fn view(state: &State) -> Element<'_, Message> { + let title = text("Create New Track").size(24); + + let name_input = text_input("Track Name", &state.config.name) + .on_input(Message::NameChanged); + + let type_picker = pick_list( + &TrackType::ALL[..], + Some(state.config.track_type), + Message::TrackTypeSelected, + ); + + let controls = column![ + row![text("Name:").width(80), name_input].spacing(10).align_y(Alignment::Center), + row![text("Type:").width(80), type_picker].spacing(10).align_y(Alignment::Center), + ] + .spacing(15); + + let action_buttons = row![ + button("Cancel").on_press(Message::Cancel), + button("Create").on_press(Message::Create), + ] + .spacing(10); + + let content = column![title, controls, action_buttons] + .spacing(20) + .padding(20) + .align_x(Alignment::Center); + + container(content) + .max_width(400) + .height(Length::Shrink) // This tells the container to wrap its content. + .style(|theme: &Theme| container::Style { + background: Some(Background::from( + theme.extended_palette().background.weak.color, + )), + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + ..container::Style::default() + }) + .into() +} + diff --git a/src/gui/editor/timeline.rs b/src/gui/editor/timeline.rs new file mode 100644 index 0000000..aae0b3e --- /dev/null +++ b/src/gui/editor/timeline.rs @@ -0,0 +1,314 @@ +use crate::config::ProjectConfig; +use crate::editor::Tool; +use crate::timing::{MusicalTime, TICKS_PER_BEAT}; +use crate::track::{Track, TRACK_HEIGHT}; +use iced::widget::canvas::{self, Path, Stroke, Text}; +use iced::widget::Canvas; +use iced::{alignment, mouse, Color, Element, Length, Point, Rectangle, Renderer, Size, Theme}; + +const RULER_HEIGHT: f32 = 30.0; +const ZOOM_SENSITIVITY: f32 = 0.005; + +#[derive(Debug, Clone, Copy)] +pub enum Message { + ClickAt(Point), + ZoomChanged(f32, f32), +} + +pub fn view<'a>( + project_config: &'a ProjectConfig, + tracks: &'a [Track], + playhead_position: MusicalTime, + active_tool: Tool, + h_zoom: f32, + v_zoom: f32, +) -> Element<'a, Message> { + let effective_track_height = TRACK_HEIGHT * v_zoom; + let timeline_height = tracks.len() as f32 * effective_track_height; + + Canvas::new(Timeline { + config: project_config, + tracks, + playhead_position, + _active_tool: active_tool, + h_zoom, + v_zoom, + }) + .width(Length::Fill) + .height(timeline_height + RULER_HEIGHT) + .into() +} + +#[derive(Debug)] +pub struct Timeline<'a> { + config: &'a ProjectConfig, + tracks: &'a [Track], + playhead_position: MusicalTime, + _active_tool: Tool, + h_zoom: f32, + v_zoom: f32, +} + +pub struct TimelineState { + right_drag_start: Option, + right_drag_zoom_start: (f32, f32), +} + +impl Default for TimelineState { + fn default() -> Self { + Self { + right_drag_start: None, + right_drag_zoom_start: (100.0, 1.0), + } + } +} + +impl<'a> canvas::Program for Timeline<'a> { + type State = TimelineState; + + fn update( + &self, + state: &mut Self::State, + event: canvas::Event, + bounds: Rectangle, + cursor: mouse::Cursor, + ) -> (canvas::event::Status, Option) { + match event { + canvas::Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Right)) => { + if let Some(pos) = cursor.position_in(bounds) { + state.right_drag_start = Some(pos); + state.right_drag_zoom_start = (self.h_zoom, self.v_zoom); + return (canvas::event::Status::Captured, None); + } + } + canvas::Event::Mouse(mouse::Event::CursorMoved { .. }) => { + if let (Some(start), Some(pos)) = (state.right_drag_start, cursor.position_in(bounds)) { + let dx = pos.x - start.x; + let dy = start.y - pos.y; + let (start_h, start_v) = state.right_drag_zoom_start; + let new_h = (start_h * (1.0 + dx * ZOOM_SENSITIVITY)).clamp(10.0, 1000.0); + let new_v = (start_v * (1.0 + dy * ZOOM_SENSITIVITY)).clamp(0.3, 5.0); + return (canvas::event::Status::Captured, Some(Message::ZoomChanged(new_h, new_v))); + } + } + canvas::Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Right)) => { + if state.right_drag_start.is_some() { + state.right_drag_start = None; + return (canvas::event::Status::Captured, None); + } + } + _ => {} + } + (canvas::event::Status::Ignored, None) + } + + fn draw( + &self, + _state: &Self::State, + renderer: &Renderer, + theme: &Theme, + bounds: Rectangle, + _cursor: mouse::Cursor, + ) -> Vec { + let mut frame = canvas::Frame::new(renderer, bounds.size()); + let palette = theme.palette(); + + self.draw_track_backgrounds(&mut frame, bounds, &palette); + self.draw_grid(&mut frame, bounds); + self.draw_regions(&mut frame, bounds); + self.draw_ruler(&mut frame, bounds, &palette); + self.draw_playhead(&mut frame, bounds); + + vec![frame.into_geometry()] + } +} + +impl<'a> Timeline<'a> { + fn beats_per_bar(&self) -> f32 { + self.config.time_signature_numerator as f32 + } + + fn effective_track_height(&self) -> f32 { + TRACK_HEIGHT * self.v_zoom + } + + fn time_to_x(&self, time: &MusicalTime) -> f32 { + let total_beats = (time.bar as f32 - 1.0) * self.beats_per_bar() + + (time.beat as f32 - 1.0) + + time.tick as f32 / TICKS_PER_BEAT as f32; + total_beats * self.h_zoom + } + + fn draw_track_backgrounds( + &self, + frame: &mut canvas::Frame, + bounds: Rectangle, + palette: &iced::theme::Palette, + ) { + let th = self.effective_track_height(); + for (i, track) in self.tracks.iter().enumerate() { + let y = RULER_HEIGHT + (i as f32 * th); + let track_bounds = + Rectangle::new(Point::new(0.0, y), Size::new(bounds.width, th)); + + let bg_color = if i % 2 == 1 { + Color::from_rgb8(0x25, 0x28, 0x2A) + } else { + Color::from_rgb8(0x20, 0x22, 0x24) + }; + frame.fill( + &Path::rectangle(track_bounds.position(), track_bounds.size()), + bg_color, + ); + + if track.selected { + frame.stroke( + &Path::rectangle(track_bounds.position(), track_bounds.size()), + Stroke::default() + .with_width(2.0) + .with_color(Color::from_rgb8(0x00, 0x7A, 0xFF)), + ); + } + + let line_path = Path::line( + Point::new(0.0, y + th), + Point::new(bounds.width, y + th), + ); + frame.stroke( + &line_path, + Stroke::default() + .with_width(1.0) + .with_color(palette.background), + ); + } + } + + fn draw_grid(&self, frame: &mut canvas::Frame, bounds: Rectangle) { + let ppb = self.h_zoom; + let beats_per_bar = self.beats_per_bar(); + + let show_beats = ppb >= 20.0; + let show_8th = (ppb / 2.0) >= 20.0; + let show_16th = (ppb / 4.0) >= 20.0; + + let subdiv: f32 = if show_16th { + 4.0 + } else if show_8th { + 2.0 + } else if show_beats { + 1.0 + } else { + beats_per_bar + }; + + let step = ppb / subdiv; + let count = (bounds.width / step).ceil() as i32; + + for i in 0..=count { + let x = i as f32 * step; + let beat_index = i as f32 / subdiv; + let is_bar = beat_index > 0.0 && beat_index % beats_per_bar == 0.0; + let is_beat = beat_index.fract() == 0.0; + + let (width, alpha) = if is_bar { + (1.5, 0.4) + } else if is_beat { + (1.0, 0.2) + } else { + (0.5, 0.1) + }; + + let line = Path::line(Point::new(x, RULER_HEIGHT), Point::new(x, bounds.height)); + frame.stroke( + &line, + Stroke::default() + .with_width(width) + .with_color(Color::from_rgba(0.0, 0.0, 0.0, alpha)), + ); + } + } + + fn draw_ruler( + &self, + frame: &mut canvas::Frame, + bounds: Rectangle, + palette: &iced::theme::Palette, + ) { + let ruler_bg = Path::rectangle(Point::new(0.0, 0.0), Size::new(bounds.width, RULER_HEIGHT)); + frame.fill(&ruler_bg, Color::from_rgb8(0x1E, 0x1E, 0x1E)); + let beats_per_bar = self.config.time_signature_numerator as u32; + let last_bar = + ((bounds.width / self.h_zoom) / beats_per_bar as f32).ceil() as u32 + 1; + + for bar in 1..=last_bar { + let x = (bar - 1) as f32 * beats_per_bar as f32 * self.h_zoom; + if x > bounds.width { + break; + } + let label = Text { + content: bar.to_string(), + position: Point::new(x, 5.0), + color: palette.text, + horizontal_alignment: alignment::Horizontal::Center, + ..Text::default() + }; + frame.fill_text(label); + } + } + + fn draw_regions(&self, frame: &mut canvas::Frame, _bounds: Rectangle) { + let th = self.effective_track_height(); + for (i, track) in self.tracks.iter().enumerate() { + let track_y = RULER_HEIGHT + (i as f32 * th); + let region_color = Color::from_rgba8( + track.color.r, + track.color.g, + track.color.b, + 0.7, + ); + + for region in &track.regions { + let x = self.time_to_x(®ion.start_time); + let w = self.time_to_x(®ion.duration); + let y = track_y + 4.0; + let h = th - 8.0; + + frame.fill( + &Path::rectangle(Point::new(x, y), Size::new(w.max(4.0), h)), + region_color, + ); + + if region.selected { + frame.stroke( + &Path::rectangle(Point::new(x, y), Size::new(w.max(4.0), h)), + Stroke::default() + .with_width(2.0) + .with_color(Color::WHITE), + ); + } + } + } + } + + fn draw_playhead(&self, frame: &mut canvas::Frame, bounds: Rectangle) { + let x = self.time_to_x(&self.playhead_position); + if x < 0.0 || x > bounds.width { + return; + } + let line = Path::line(Point::new(x, 0.0), Point::new(x, bounds.height)); + frame.stroke( + &line, + Stroke::default() + .with_width(2.0) + .with_color(Color::from_rgb8(0xFF, 0x30, 0x30)), + ); + + let tri = Path::new(|b| { + b.move_to(Point::new(x - 5.0, 0.0)); + b.line_to(Point::new(x + 5.0, 0.0)); + b.line_to(Point::new(x, 8.0)); + b.close(); + }); + frame.fill(&tri, Color::from_rgb8(0xFF, 0x30, 0x30)); + } +} diff --git a/src/gui/editor/toolbar.rs b/src/gui/editor/toolbar.rs new file mode 100644 index 0000000..83f223f --- /dev/null +++ b/src/gui/editor/toolbar.rs @@ -0,0 +1,42 @@ +use crate::editor::{Message, Tool}; +use crate::gui::icon_button::{button_group, IconButton}; +use crate::gui::icons::{Icon, IconSet}; +use iced::widget::container; +use iced::{Background, Color, Element, Length, Theme}; + +fn tool_icon(tool: &Tool) -> Icon { + match tool { + Tool::Pointer => Icon::ToolPointer, + Tool::Pencil => Icon::ToolPencil, + Tool::Eraser => Icon::ToolEraser, + Tool::Scissors => Icon::ToolScissors, + Tool::Glue => Icon::ToolGlue, + Tool::Zoom => Icon::ToolZoom, + } +} + +pub fn view<'a>(active_tool: &Tool, icons: &'a IconSet) -> Element<'a, Message> { + let buttons: Vec> = Tool::ALL + .iter() + .map(|tool| { + let icon = tool_icon(tool); + let (u, f) = icons.get(icon); + IconButton::new(u, f, Message::ToolSelected(*tool)) + .size(32.0) + .toggled(tool == active_tool) + .hint(tool.hint()) + .into() + }) + .collect(); + + let tool_group = button_group(buttons); + + container(tool_group) + .width(Length::Fill) + .padding([6, 14]) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x22, 0x24, 0x26))), + ..container::Style::default() + }) + .into() +} diff --git a/src/gui/editor/track_header.rs b/src/gui/editor/track_header.rs new file mode 100644 index 0000000..fc4419c --- /dev/null +++ b/src/gui/editor/track_header.rs @@ -0,0 +1,130 @@ +use crate::gui::icon_button::IconButton; +use crate::gui::icons::{Icon, IconSet}; +use crate::track::Track; +use iced::widget::{button, column, container, row, slider, text}; +use iced::{Alignment, Background, Color, Element, Length, Theme}; + +#[derive(Debug, Clone, Copy)] +pub enum Message { + MuteToggled, + SoloToggled, + RecordArmToggled, + VolumeChanged(f32), + PanChanged(f32), + Delete, + Select, +} + +pub fn view<'a>(track: &'a Track, icons: &'a IconSet, height: f32) -> Element<'a, Message> { + let color_strip = container(text("").width(3).height(Length::Fill)) + .height(Length::Fill) + .style(move |_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8( + track.color.r, + track.color.g, + track.color.b, + ))), + ..container::Style::default() + }); + + let track_name = text(&track.name).size(15).width(Length::Fill); + let track_type_label = text(format!("{}", track.track_type)) + .size(9) + .color(Color::from_rgb8(0x77, 0x77, 0x77)); + + let (mute_u, mute_f) = icons.get(Icon::Mute); + let (solo_u, solo_f) = icons.get(Icon::Solo); + let (rec_u, rec_f) = icons.get(Icon::RecordArm); + + let mute_btn: Element<'a, Message> = IconButton::new(mute_u, mute_f, Message::MuteToggled) + .size(28.0) + .toggled(track.muted) + .active_tint(Color::from_rgb8(0xCC, 0xA7, 0x00)) + .hint("Mute") + .into(); + let solo_btn: Element<'a, Message> = IconButton::new(solo_u, solo_f, Message::SoloToggled) + .size(28.0) + .toggled(track.soloed) + .active_tint(Color::from_rgb8(0x00, 0x7A, 0xFF)) + .hint("Solo") + .into(); + let rec_btn: Element<'a, Message> = + IconButton::new(rec_u, rec_f, Message::RecordArmToggled) + .size(28.0) + .toggled(track.record_armed) + .active_tint(Color::from_rgb8(0xCC, 0x33, 0x33)) + .hint("Record Arm") + .into(); + + let controls = row![mute_btn, solo_btn, rec_btn].spacing(2); + + let volume_slider = slider(0.0..=1.0, track.volume, Message::VolumeChanged) + .step(0.01) + .width(Length::Fill); + let pan_slider = slider(-1.0..=1.0, track.pan, Message::PanChanged) + .step(0.01) + .width(Length::Fill); + + let del_btn = button(text("x").size(9)) + .on_press(Message::Delete) + .padding([1, 4]) + .style(|_theme: &Theme, _status| button::Style { + background: Some(Background::Color(Color::TRANSPARENT)), + text_color: Color::from_rgb8(0x66, 0x66, 0x66), + ..button::Style::default() + }); + + let info = column![ + row![track_name, del_btn].align_y(Alignment::Center), + row![track_type_label, controls] + .spacing(6) + .align_y(Alignment::Center), + row![text("Vol").size(9), volume_slider] + .spacing(4) + .align_y(Alignment::Center), + row![text("Pan").size(9), pan_slider] + .spacing(4) + .align_y(Alignment::Center), + ] + .spacing(4) + .padding([6, 8]) + .width(Length::Fill); + + let inner = row![color_strip, info]; + + let content = button(inner) + .on_press(Message::Select) + .width(Length::Fill) + .style(|_theme: &Theme, _status: button::Status| button::Style { + background: Some(Background::Color(Color::TRANSPARENT)), + text_color: Color::from_rgb8(0xCC, 0xCC, 0xCC), + ..button::Style::default() + }); + + container(content) + .style(move |theme: &Theme| { + if track.selected { + container::Style { + border: iced::Border { + color: theme.extended_palette().primary.strong.color, + width: 2.0, + radius: 2.0.into(), + }, + background: Some(Background::Color(Color::from_rgb8(0x22, 0x28, 0x30))), + ..container::Style::default() + } + } else { + container::Style { + border: iced::Border { + color: Color::from_rgb8(0x2A, 0x2C, 0x2E), + width: 1.0, + radius: 0.0.into(), + }, + ..container::Style::default() + } + } + }) + .width(Length::Fill) + .height(height) + .into() +} diff --git a/src/gui/editor/visualizer/mod.rs b/src/gui/editor/visualizer/mod.rs new file mode 100644 index 0000000..21052e5 --- /dev/null +++ b/src/gui/editor/visualizer/mod.rs @@ -0,0 +1,6 @@ +pub mod spiral; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum VisualizerKind { + Spiral, +} diff --git a/src/gui/editor/visualizer/shaders/spiral.wgsl b/src/gui/editor/visualizer/shaders/spiral.wgsl new file mode 100644 index 0000000..af2c71a --- /dev/null +++ b/src/gui/editor/visualizer/shaders/spiral.wgsl @@ -0,0 +1,28 @@ +struct Uniforms { + mvp: mat4x4, +}; + +@group(0) @binding(0) var uniforms: Uniforms; + +struct VertexInput { + @location(0) position: vec3, + @location(1) color: vec4, +}; + +struct VertexOutput { + @builtin(position) clip_position: vec4, + @location(0) frag_color: vec4, +}; + +@vertex +fn vs_main(in: VertexInput) -> VertexOutput { + var out: VertexOutput; + out.clip_position = uniforms.mvp * vec4(in.position, 1.0); + out.frag_color = in.color; + return out; +} + +@fragment +fn fs_main(in: VertexOutput) -> @location(0) vec4 { + return in.frag_color; +} diff --git a/src/gui/editor/visualizer/spiral.rs b/src/gui/editor/visualizer/spiral.rs new file mode 100644 index 0000000..05fa876 --- /dev/null +++ b/src/gui/editor/visualizer/spiral.rs @@ -0,0 +1,420 @@ +use iced::widget::shader; +use iced::widget::shader::wgpu; +use iced::{mouse, Element, Length, Rectangle}; + +use crate::editor::Message as EditorMessage; +use crate::modules::{PhasePoint, VisualizationFrame}; + +// Vertex: [x, y, z, r, g, b, a] = 7 floats = 28 bytes +const VERTEX_SIZE: u64 = 28; +const MAX_VERTICES: u64 = 8192; + +pub struct SpiralProgram { + frame: Option, + rotation: f32, +} + +impl SpiralProgram { + pub fn new(frame: Option<&VisualizationFrame>, rotation: f32) -> Self { + Self { + frame: frame.cloned(), + rotation, + } + } +} + +#[derive(Debug)] +pub struct SpiralPrimitive { + vertices_l: Vec<[f32; 7]>, + vertices_r: Vec<[f32; 7]>, + rotation: f32, + aspect: f32, +} + +#[derive(Default)] +pub struct SpiralState { + drag_start: Option<(f32, f32)>, + rotation: f32, +} + +impl shader::Program for SpiralProgram { + type State = SpiralState; + type Primitive = SpiralPrimitive; + + fn draw( + &self, + state: &Self::State, + _cursor: mouse::Cursor, + bounds: Rectangle, + ) -> Self::Primitive { + let aspect = if bounds.height > 0.0 { + bounds.width / bounds.height + } else { + 1.0 + }; + + let (verts_l, verts_r) = match &self.frame { + Some(frame) => ( + points_to_vertices(&frame.left, &GRADIENT_BLUE), + points_to_vertices(&frame.right, &GRADIENT_PINK), + ), + None => (Vec::new(), Vec::new()), + }; + + SpiralPrimitive { + vertices_l: verts_l, + vertices_r: verts_r, + rotation: self.rotation + state.rotation, + aspect, + } + } + + fn update( + &self, + state: &mut Self::State, + event: shader::Event, + bounds: Rectangle, + cursor: mouse::Cursor, + _shell: &mut iced::advanced::Shell<'_, EditorMessage>, + ) -> (iced::event::Status, Option) { + match event { + shader::Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { + if let Some(pos) = cursor.position_in(bounds) { + state.drag_start = Some((pos.x, pos.y)); + return (iced::event::Status::Captured, None); + } + } + shader::Event::Mouse(mouse::Event::CursorMoved { position }) => { + if let Some((start_x, _)) = state.drag_start { + let dx = position.x - bounds.x - start_x; + state.rotation = dx * 0.01; + return (iced::event::Status::Captured, None); + } + } + shader::Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => { + state.drag_start = None; + } + _ => {} + } + (iced::event::Status::Ignored, None) + } + + fn mouse_interaction( + &self, + state: &Self::State, + _bounds: Rectangle, + _cursor: mouse::Cursor, + ) -> mouse::Interaction { + if state.drag_start.is_some() { + mouse::Interaction::Grabbing + } else { + mouse::Interaction::default() + } + } +} + +struct SpiralPipeline { + pipeline: wgpu::RenderPipeline, + vertex_buffer: wgpu::Buffer, + uniform_buffer: wgpu::Buffer, + bind_group: wgpu::BindGroup, +} + +impl shader::Primitive for SpiralPrimitive { + fn prepare( + &self, + device: &wgpu::Device, + queue: &wgpu::Queue, + format: wgpu::TextureFormat, + storage: &mut shader::Storage, + _bounds: &Rectangle, + _viewport: &shader::Viewport, + ) { + if !storage.has::() { + let shader_module = device.create_shader_module(wgpu::ShaderModuleDescriptor { + label: Some("spiral_shader"), + source: wgpu::ShaderSource::Wgsl(include_str!("shaders/spiral.wgsl").into()), + }); + + let bind_group_layout = + device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("spiral_bind_group_layout"), + entries: &[wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::VERTEX, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }], + }); + + let pipeline_layout = + device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("spiral_pipeline_layout"), + bind_group_layouts: &[&bind_group_layout], + push_constant_ranges: &[], + }); + + let vertex_buffer = device.create_buffer(&wgpu::BufferDescriptor { + label: Some("spiral_vertex_buffer"), + size: MAX_VERTICES * VERTEX_SIZE, + usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST, + mapped_at_creation: false, + }); + + let uniform_buffer = device.create_buffer(&wgpu::BufferDescriptor { + label: Some("spiral_uniform_buffer"), + size: 64, // mat4x4 + usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, + mapped_at_creation: false, + }); + + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("spiral_bind_group"), + layout: &bind_group_layout, + entries: &[wgpu::BindGroupEntry { + binding: 0, + resource: uniform_buffer.as_entire_binding(), + }], + }); + + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("spiral_pipeline"), + layout: Some(&pipeline_layout), + vertex: wgpu::VertexState { + module: &shader_module, + entry_point: "vs_main", + buffers: &[wgpu::VertexBufferLayout { + array_stride: VERTEX_SIZE, + step_mode: wgpu::VertexStepMode::Vertex, + attributes: &[ + wgpu::VertexAttribute { + offset: 0, + shader_location: 0, + format: wgpu::VertexFormat::Float32x3, + }, + wgpu::VertexAttribute { + offset: 12, + shader_location: 1, + format: wgpu::VertexFormat::Float32x4, + }, + ], + }], + }, + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::LineStrip, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: None, + unclipped_depth: false, + polygon_mode: wgpu::PolygonMode::Fill, + conservative: false, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState::default(), + fragment: Some(wgpu::FragmentState { + module: &shader_module, + entry_point: "fs_main", + targets: &[Some(wgpu::ColorTargetState { + format, + blend: Some(wgpu::BlendState::ALPHA_BLENDING), + write_mask: wgpu::ColorWrites::ALL, + })], + }), + multiview: None, + }); + + storage.store(SpiralPipeline { + pipeline, + vertex_buffer, + uniform_buffer, + bind_group, + }); + } + + let pipeline_data = storage.get_mut::().unwrap(); + + // Update uniform (MVP matrix) + let mvp = build_mvp(self.rotation, self.aspect); + queue.write_buffer(&pipeline_data.uniform_buffer, 0, cast_mat4(&mvp)); + + // Upload vertices + let mut all_verts: Vec<[f32; 7]> = Vec::new(); + all_verts.extend_from_slice(&self.vertices_l); + // Separator (degenerate) between L and R channels + if !self.vertices_l.is_empty() && !self.vertices_r.is_empty() { + let last_l = *self.vertices_l.last().unwrap(); + let first_r = self.vertices_r[0]; + // Degenerate vertices with zero alpha for line strip break + all_verts.push([last_l[0], last_l[1], last_l[2], 0.0, 0.0, 0.0, 0.0]); + all_verts.push([first_r[0], first_r[1], first_r[2], 0.0, 0.0, 0.0, 0.0]); + } + all_verts.extend_from_slice(&self.vertices_r); + + let vert_count = all_verts.len().min(MAX_VERTICES as usize); + if vert_count > 0 { + let byte_data = cast_vertex_slice(&all_verts[..vert_count]); + queue.write_buffer(&pipeline_data.vertex_buffer, 0, byte_data); + } + } + + fn render( + &self, + encoder: &mut wgpu::CommandEncoder, + storage: &shader::Storage, + target: &wgpu::TextureView, + clip_bounds: &Rectangle, + ) { + let pipeline_data = storage.get::().unwrap(); + + let total_verts = self.vertices_l.len() + self.vertices_r.len() + + if !self.vertices_l.is_empty() && !self.vertices_r.is_empty() { 2 } else { 0 }; + let vert_count = total_verts.min(MAX_VERTICES as usize) as u32; + if vert_count == 0 { + return; + } + + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("spiral_render_pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + timestamp_writes: None, + occlusion_query_set: None, + }); + + pass.set_scissor_rect( + clip_bounds.x, + clip_bounds.y, + clip_bounds.width, + clip_bounds.height, + ); + pass.set_pipeline(&pipeline_data.pipeline); + pass.set_bind_group(0, &pipeline_data.bind_group, &[]); + pass.set_vertex_buffer(0, pipeline_data.vertex_buffer.slice(..)); + pass.draw(0..vert_count, 0..1); + } +} + +// Amplitude-mapped color gradient: purple -> blue -> green -> yellow -> red +const GRADIENT_BLUE: [(f32, f32, f32); 5] = [ + (0.5, 0.0, 1.0), // purple + (0.0, 0.3, 1.0), // blue + (0.0, 1.0, 0.3), // green + (1.0, 1.0, 0.0), // yellow + (1.0, 0.0, 0.0), // red +]; + +const GRADIENT_PINK: [(f32, f32, f32); 5] = [ + (0.6, 0.0, 0.8), + (0.8, 0.2, 0.6), + (1.0, 0.4, 0.4), + (1.0, 0.7, 0.2), + (1.0, 0.2, 0.2), +]; + +fn amplitude_color(amp: f32, gradient: &[(f32, f32, f32); 5]) -> (f32, f32, f32, f32) { + let t = amp.clamp(0.0, 1.0) * 4.0; + let idx = (t as usize).min(3); + let frac = t - idx as f32; + let (r0, g0, b0) = gradient[idx]; + let (r1, g1, b1) = gradient[idx + 1]; + ( + r0 + (r1 - r0) * frac, + g0 + (g1 - g0) * frac, + b0 + (b1 - b0) * frac, + 0.8, + ) +} + +fn points_to_vertices(points: &[PhasePoint], gradient: &[(f32, f32, f32); 5]) -> Vec<[f32; 7]> { + let total = points.len().max(1) as f32; + points + .iter() + .enumerate() + .map(|(i, p)| { + let z = (i as f32 / total) * 2.0 - 1.0; // map to [-1, 1] + let (r, g, b, a) = amplitude_color(p.amplitude, gradient); + [p.x, p.y, z, r, g, b, a] + }) + .collect() +} + +fn build_mvp(rotation_y: f32, aspect: f32) -> [f32; 16] { + let fov = std::f32::consts::FRAC_PI_4; + let near = 0.1; + let far = 100.0; + let f = 1.0 / (fov / 2.0).tan(); + + // Perspective projection + let proj = [ + f / aspect, 0.0, 0.0, 0.0, + 0.0, f, 0.0, 0.0, + 0.0, 0.0, (far + near) / (near - far), -1.0, + 0.0, 0.0, (2.0 * far * near) / (near - far), 0.0, + ]; + + // View: translate back + let view = [ + 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, -3.0, 1.0, + ]; + + // Y-axis rotation + let cos = rotation_y.cos(); + let sin = rotation_y.sin(); + let rot = [ + cos, 0.0, sin, 0.0, + 0.0, 1.0, 0.0, 0.0, + -sin, 0.0, cos, 0.0, + 0.0, 0.0, 0.0, 1.0, + ]; + + // MVP = proj * view * rot + let vr = mat4_mul(&view, &rot); + mat4_mul(&proj, &vr) +} + +fn mat4_mul(a: &[f32; 16], b: &[f32; 16]) -> [f32; 16] { + let mut out = [0.0f32; 16]; + for row in 0..4 { + for col in 0..4 { + let mut sum = 0.0; + for k in 0..4 { + sum += a[row + k * 4] * b[k + col * 4]; + } + out[row + col * 4] = sum; + } + } + out +} + +fn cast_vertex_slice(data: &[[f32; 7]]) -> &[u8] { + unsafe { + std::slice::from_raw_parts(data.as_ptr() as *const u8, data.len() * std::mem::size_of::<[f32; 7]>()) + } +} + +fn cast_mat4(data: &[f32; 16]) -> &[u8] { + unsafe { + std::slice::from_raw_parts(data.as_ptr() as *const u8, std::mem::size_of::<[f32; 16]>()) + } +} + +pub fn view(frame: Option<&VisualizationFrame>, rotation: f32) -> Element<'_, EditorMessage> { + shader::Shader::new(SpiralProgram::new(frame, rotation)) + .width(Length::Fill) + .height(Length::Fill) + .into() +} diff --git a/src/gui/first_run_wizard.rs b/src/gui/first_run_wizard.rs new file mode 100644 index 0000000..63e0938 --- /dev/null +++ b/src/gui/first_run_wizard.rs @@ -0,0 +1,20 @@ +use crate::entry::Message; +use iced::widget::{button, column, text, text_input}; +use iced::{Alignment, Element}; +use std::path::PathBuf; + +pub fn view(project_dir: &PathBuf) -> Element<'static, Message> { + let current_path_str = project_dir.to_str().unwrap_or("").to_string(); + + let content = column![ + text("Welcome to Audio Oxide").size(30), + text("Please choose a directory to store your projects."), + text_input("Project Directory", ¤t_path_str) + .on_input(Message::FirstRunProjectDirChanged), + button("Continue").on_press(Message::FirstRunComplete), + ] + .spacing(15) + .align_x(Alignment::Center); + + content.into() +} \ No newline at end of file diff --git a/src/gui/icon_button.rs b/src/gui/icon_button.rs new file mode 100644 index 0000000..26efeac --- /dev/null +++ b/src/gui/icon_button.rs @@ -0,0 +1,436 @@ +use iced::advanced::layout::{self, Layout}; +use iced::advanced::overlay; +use iced::advanced::renderer::{self, Quad}; +use iced::advanced::text::Renderer as TextRenderer; +use iced::advanced::widget::tree::{self, Tree}; +use iced::advanced::widget::Widget; +use iced::advanced::Renderer as _; +use iced::advanced::{Clipboard, Shell, Text as AdvText}; +use iced::event::{self, Event}; +use iced::keyboard::{self, Key}; +use iced::mouse; +use iced::widget::svg; +use iced::{ + Border, Color, Element, Font, Length, Point, Radians, Rectangle, Shadow, Size, Theme, Vector, +}; +use std::time::{Duration, Instant}; + +const FLASH_DURATION: Duration = Duration::from_millis(100); +const CANCEL_MARGIN: f32 = 0.2; +const TOOLTIP_DELAY: Duration = Duration::from_secs(3); + +pub struct IconButton<'a, Message> { + unfilled: &'a svg::Handle, + filled: &'a svg::Handle, + on_press: Message, + tint: Color, + active_tint: Color, + size: f32, + toggled: bool, + hint: Option<&'a str>, +} + +impl<'a, Message: Clone> IconButton<'a, Message> { + pub fn new( + unfilled: &'a svg::Handle, + filled: &'a svg::Handle, + on_press: Message, + ) -> Self { + Self { + unfilled, + filled, + on_press, + tint: Color::from_rgb8(0xCC, 0xCC, 0xCC), + active_tint: Color::from_rgb8(0x00, 0x7A, 0xFF), + size: 34.0, + toggled: false, + hint: None, + } + } + + pub fn tint(mut self, color: Color) -> Self { + self.tint = color; + self + } + + pub fn active_tint(mut self, color: Color) -> Self { + self.active_tint = color; + self + } + + pub fn size(mut self, size: f32) -> Self { + self.size = size; + self + } + + pub fn toggled(mut self, toggled: bool) -> Self { + self.toggled = toggled; + self + } + + pub fn hint(mut self, hint: &'a str) -> Self { + self.hint = Some(hint); + self + } +} + +#[derive(Debug)] +struct State { + is_pressed: bool, + cancelled: bool, + flash_until: Option, + hover_start: Option, + show_help: bool, +} + +impl Default for State { + fn default() -> Self { + Self { + is_pressed: false, + cancelled: false, + flash_until: None, + hover_start: None, + show_help: false, + } + } +} + +impl<'a, Message> Widget for IconButton<'a, Message> +where + Message: Clone, +{ + fn tag(&self) -> tree::Tag { + tree::Tag::of::() + } + + fn state(&self) -> tree::State { + tree::State::new(State::default()) + } + + fn size(&self) -> Size { + Size::new(Length::Fixed(self.size), Length::Fixed(self.size)) + } + + fn layout( + &self, + _tree: &mut Tree, + _renderer: &iced::Renderer, + _limits: &layout::Limits, + ) -> layout::Node { + layout::Node::new(Size::new(self.size, self.size)) + } + + fn draw( + &self, + tree: &Tree, + renderer: &mut iced::Renderer, + _theme: &Theme, + _style: &renderer::Style, + layout: Layout<'_>, + _cursor: mouse::Cursor, + _viewport: &Rectangle, + ) { + let state = tree.state.downcast_ref::(); + let bounds = layout.bounds(); + + let now = Instant::now(); + let flashing = state.flash_until.is_some_and(|t| now < t); + let pressed = state.is_pressed && !state.cancelled; + + let bg_color = if pressed { + Color::from_rgba8(0xFF, 0xFF, 0xFF, 0.1) + } else if flashing { + Color { + a: 0.3, + ..self.active_tint + } + } else if self.toggled { + self.active_tint + } else { + Color::TRANSPARENT + }; + + renderer.fill_quad( + Quad { + bounds, + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + shadow: Shadow::default(), + }, + bg_color, + ); + + let show_filled = pressed || self.toggled; + let handle = if show_filled { + self.filled + } else { + self.unfilled + }; + + let icon_size = self.size - 4.0; + let icon_bounds = Rectangle { + x: bounds.x + (bounds.width - icon_size) / 2.0, + y: bounds.y + (bounds.height - icon_size) / 2.0, + width: icon_size, + height: icon_size, + }; + + let tint = if self.toggled && !pressed { + Color::WHITE + } else { + self.tint + }; + + use iced::advanced::svg::Renderer as _; + renderer.draw_svg( + iced::advanced::svg::Svg { + handle: handle.clone(), + color: Some(tint), + rotation: Radians(0.0), + opacity: 1.0, + }, + icon_bounds, + ); + } + + fn on_event( + &mut self, + tree: &mut Tree, + event: Event, + layout: Layout<'_>, + cursor: mouse::Cursor, + _renderer: &iced::Renderer, + _clipboard: &mut dyn Clipboard, + shell: &mut Shell<'_, Message>, + _viewport: &Rectangle, + ) -> event::Status { + let state = tree.state.downcast_mut::(); + let bounds = layout.bounds(); + let over = cursor.is_over(bounds); + + // Hover tracking + match &event { + Event::Mouse(mouse::Event::CursorMoved { .. }) => { + if over { + if state.hover_start.is_none() { + state.hover_start = Some(Instant::now()); + } + } else { + state.hover_start = None; + state.show_help = false; + } + } + Event::Mouse(mouse::Event::CursorLeft) => { + state.hover_start = None; + state.show_help = false; + } + _ => {} + } + + // ? key toggles help + if over { + if let Event::Keyboard(keyboard::Event::KeyPressed { + key: Key::Character(ref c), + .. + }) = event + { + if c.as_str() == "?" { + state.show_help = !state.show_help; + return event::Status::Captured; + } + } + } + + match event { + Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { + if over { + state.is_pressed = true; + state.cancelled = false; + return event::Status::Captured; + } + } + Event::Mouse(mouse::Event::CursorMoved { .. }) => { + if state.is_pressed && !state.cancelled { + let margin = bounds.width * CANCEL_MARGIN; + let expanded = Rectangle { + x: bounds.x - margin, + y: bounds.y - margin, + width: bounds.width + margin * 2.0, + height: bounds.height + margin * 2.0, + }; + if !cursor.is_over(expanded) { + state.cancelled = true; + } + } + } + Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => { + if state.is_pressed { + if !state.cancelled { + shell.publish(self.on_press.clone()); + if !self.toggled { + state.flash_until = Some(Instant::now() + FLASH_DURATION); + } + } + state.is_pressed = false; + state.cancelled = false; + return event::Status::Captured; + } + } + _ => {} + } + event::Status::Ignored + } + + fn mouse_interaction( + &self, + _tree: &Tree, + layout: Layout<'_>, + cursor: mouse::Cursor, + _viewport: &Rectangle, + _renderer: &iced::Renderer, + ) -> mouse::Interaction { + if cursor.is_over(layout.bounds()) { + mouse::Interaction::Pointer + } else { + mouse::Interaction::None + } + } + + fn overlay<'b>( + &'b mut self, + tree: &'b mut Tree, + layout: Layout<'_>, + _renderer: &iced::Renderer, + translation: Vector, + ) -> Option> { + let hint = self.hint?; + let state = tree.state.downcast_ref::(); + + let show_tooltip = state.show_help + || state + .hover_start + .is_some_and(|t| t.elapsed() >= TOOLTIP_DELAY); + + if !show_tooltip { + return None; + } + + let bounds = layout.bounds(); + let anchor = Point::new( + bounds.x + bounds.width / 2.0 + translation.x, + bounds.y + bounds.height + translation.y + 4.0, + ); + + Some(overlay::Element::new(Box::new(TooltipOverlay { + text: hint, + anchor, + is_help: state.show_help, + }))) + } +} + +impl<'a, Message: Clone + 'a> From> for Element<'a, Message> { + fn from(btn: IconButton<'a, Message>) -> Self { + Element::new(btn) + } +} + +struct TooltipOverlay<'a> { + text: &'a str, + anchor: Point, + is_help: bool, +} + +impl<'a, Message> overlay::Overlay for TooltipOverlay<'a> { + fn layout(&mut self, _renderer: &iced::Renderer, bounds: Size) -> layout::Node { + let padding = if self.is_help { 8.0 } else { 6.0 }; + let font_size = if self.is_help { 13.0 } else { 11.0 }; + + let char_width = font_size * 0.6; + let w = self.text.len() as f32 * char_width + padding * 2.0; + let h = font_size + padding * 2.0; + + let x = (self.anchor.x - w / 2.0).clamp(0.0, (bounds.width - w).max(0.0)); + let y = self.anchor.y.min((bounds.height - h).max(0.0)); + + layout::Node::new(Size::new(w, h)).move_to(Point::new(x, y)) + } + + fn draw( + &self, + renderer: &mut iced::Renderer, + _theme: &Theme, + _style: &renderer::Style, + layout: Layout<'_>, + _cursor: mouse::Cursor, + ) { + let bounds = layout.bounds(); + let font_size = if self.is_help { 13.0 } else { 11.0 }; + + renderer.fill_quad( + Quad { + bounds, + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + shadow: Shadow::default(), + }, + Color::from_rgba8(0x1A, 0x1A, 0x1A, 0.95), + ); + + let padding = if self.is_help { 8.0 } else { 6.0 }; + renderer.fill_text( + AdvText { + content: self.text.to_string(), + bounds: Size::new(bounds.width - padding * 2.0, bounds.height - padding * 2.0), + size: iced::Pixels(font_size), + line_height: iced::advanced::text::LineHeight::default(), + font: Font::DEFAULT, + horizontal_alignment: iced::alignment::Horizontal::Left, + vertical_alignment: iced::alignment::Vertical::Top, + shaping: iced::advanced::text::Shaping::Basic, + wrapping: iced::advanced::text::Wrapping::None, + }, + Point::new(bounds.x + padding, bounds.y + padding), + Color::from_rgb8(0xDD, 0xDD, 0xDD), + bounds, + ); + } + + fn is_over( + &self, + _layout: Layout<'_>, + _renderer: &iced::Renderer, + _cursor_position: Point, + ) -> bool { + self.is_help + } +} + +pub fn button_group<'a, Message: Clone + 'a>( + buttons: Vec>, +) -> Element<'a, Message> { + use iced::widget::{container, Row}; + use iced::Alignment; + + let row = buttons + .into_iter() + .fold(Row::new().spacing(3).align_y(Alignment::Center), |r, btn| { + r.push(btn) + }); + + container(row) + .padding([3, 5]) + .style(|_theme: &Theme| container::Style { + border: Border { + color: Color::from_rgb8(0x3A, 0x3C, 0x3E), + width: 1.0, + radius: 8.0.into(), + }, + ..container::Style::default() + }) + .into() +} diff --git a/src/gui/icons.rs b/src/gui/icons.rs new file mode 100644 index 0000000..ab65228 --- /dev/null +++ b/src/gui/icons.rs @@ -0,0 +1,244 @@ +use iced::widget::svg; +use std::collections::HashMap; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum Icon { + // Transport + Play, + Stop, + Record, + Rewind, + FastForward, + Pause, + ReturnToZero, + // Mode toggles + Cycle, + Metronome, + CountIn, + // Tools + ToolPointer, + ToolPencil, + ToolEraser, + ToolScissors, + ToolGlue, + ToolZoom, + // Track controls + Mute, + Solo, + RecordArm, + InputMonitor, + Freeze, + Lock, + // Track types + TrackAudio, + TrackMidi, + TrackAux, + TrackBus, + // View toggles + ViewInspector, + ViewEditor, + ViewMixer, + ViewLibrary, + ViewToolbar, + ViewNotepad, + // Mixer + Eq, + Send, + Insert, + Io, + Automation, + Pan, + // General + Add, + Remove, + Close, + Settings, + Search, + Undo, + Redo, + Cut, + Copy, + Paste, + Folder, + Save, +} + +pub struct IconSet { + unfilled: HashMap, + filled: HashMap, +} + +fn make_filled(bytes: &[u8]) -> Vec { + let s = String::from_utf8_lossy(bytes); + s.replace( + r#"class="fillable" fill="none""#, + r#"class="fillable" fill="currentColor""#, + ) + .into_bytes() +} + +impl IconSet { + pub fn load() -> Self { + let entries: &[(Icon, &[u8])] = &[ + // Transport + (Icon::Play, include_bytes!("../../assets/icons/play.svg")), + (Icon::Stop, include_bytes!("../../assets/icons/stop.svg")), + (Icon::Record, include_bytes!("../../assets/icons/record.svg")), + (Icon::Rewind, include_bytes!("../../assets/icons/rewind.svg")), + ( + Icon::FastForward, + include_bytes!("../../assets/icons/fast-forward.svg"), + ), + (Icon::Pause, include_bytes!("../../assets/icons/pause.svg")), + ( + Icon::ReturnToZero, + include_bytes!("../../assets/icons/rtz.svg"), + ), + // Mode toggles + (Icon::Cycle, include_bytes!("../../assets/icons/cycle.svg")), + ( + Icon::Metronome, + include_bytes!("../../assets/icons/metronome.svg"), + ), + ( + Icon::CountIn, + include_bytes!("../../assets/icons/count-in.svg"), + ), + // Tools + ( + Icon::ToolPointer, + include_bytes!("../../assets/icons/tool-pointer.svg"), + ), + ( + Icon::ToolPencil, + include_bytes!("../../assets/icons/tool-pencil.svg"), + ), + ( + Icon::ToolEraser, + include_bytes!("../../assets/icons/tool-eraser.svg"), + ), + ( + Icon::ToolScissors, + include_bytes!("../../assets/icons/tool-scissors.svg"), + ), + ( + Icon::ToolGlue, + include_bytes!("../../assets/icons/tool-glue.svg"), + ), + ( + Icon::ToolZoom, + include_bytes!("../../assets/icons/tool-zoom.svg"), + ), + // Track controls + (Icon::Mute, include_bytes!("../../assets/icons/mute.svg")), + (Icon::Solo, include_bytes!("../../assets/icons/solo.svg")), + ( + Icon::RecordArm, + include_bytes!("../../assets/icons/record-arm.svg"), + ), + ( + Icon::InputMonitor, + include_bytes!("../../assets/icons/input-monitor.svg"), + ), + ( + Icon::Freeze, + include_bytes!("../../assets/icons/freeze.svg"), + ), + (Icon::Lock, include_bytes!("../../assets/icons/lock.svg")), + // Track types + ( + Icon::TrackAudio, + include_bytes!("../../assets/icons/track-audio.svg"), + ), + ( + Icon::TrackMidi, + include_bytes!("../../assets/icons/track-midi.svg"), + ), + ( + Icon::TrackAux, + include_bytes!("../../assets/icons/track-aux.svg"), + ), + ( + Icon::TrackBus, + include_bytes!("../../assets/icons/track-bus.svg"), + ), + // View toggles + ( + Icon::ViewInspector, + include_bytes!("../../assets/icons/view-inspector.svg"), + ), + ( + Icon::ViewEditor, + include_bytes!("../../assets/icons/view-editor.svg"), + ), + ( + Icon::ViewMixer, + include_bytes!("../../assets/icons/view-mixer.svg"), + ), + ( + Icon::ViewLibrary, + include_bytes!("../../assets/icons/view-library.svg"), + ), + ( + Icon::ViewToolbar, + include_bytes!("../../assets/icons/view-toolbar.svg"), + ), + ( + Icon::ViewNotepad, + include_bytes!("../../assets/icons/view-notepad.svg"), + ), + // Mixer + (Icon::Eq, include_bytes!("../../assets/icons/eq.svg")), + (Icon::Send, include_bytes!("../../assets/icons/send.svg")), + ( + Icon::Insert, + include_bytes!("../../assets/icons/insert.svg"), + ), + (Icon::Io, include_bytes!("../../assets/icons/io.svg")), + ( + Icon::Automation, + include_bytes!("../../assets/icons/automation.svg"), + ), + (Icon::Pan, include_bytes!("../../assets/icons/pan.svg")), + // General + (Icon::Add, include_bytes!("../../assets/icons/add.svg")), + ( + Icon::Remove, + include_bytes!("../../assets/icons/remove.svg"), + ), + (Icon::Close, include_bytes!("../../assets/icons/close.svg")), + ( + Icon::Settings, + include_bytes!("../../assets/icons/settings.svg"), + ), + ( + Icon::Search, + include_bytes!("../../assets/icons/search.svg"), + ), + (Icon::Undo, include_bytes!("../../assets/icons/undo.svg")), + (Icon::Redo, include_bytes!("../../assets/icons/redo.svg")), + (Icon::Cut, include_bytes!("../../assets/icons/cut.svg")), + (Icon::Copy, include_bytes!("../../assets/icons/copy.svg")), + (Icon::Paste, include_bytes!("../../assets/icons/paste.svg")), + ( + Icon::Folder, + include_bytes!("../../assets/icons/folder.svg"), + ), + (Icon::Save, include_bytes!("../../assets/icons/save.svg")), + ]; + + let mut unfilled = HashMap::with_capacity(entries.len()); + let mut filled = HashMap::with_capacity(entries.len()); + + for &(icon, bytes) in entries { + unfilled.insert(icon, svg::Handle::from_memory(bytes)); + filled.insert(icon, svg::Handle::from_memory(make_filled(bytes))); + } + + Self { unfilled, filled } + } + + pub fn get(&self, icon: Icon) -> (&svg::Handle, &svg::Handle) { + (&self.unfilled[&icon], &self.filled[&icon]) + } +} diff --git a/src/gui/mod.rs b/src/gui/mod.rs new file mode 100644 index 0000000..29ccfd0 --- /dev/null +++ b/src/gui/mod.rs @@ -0,0 +1,8 @@ +pub mod editor; +pub mod first_run_wizard; +pub mod icon_button; +pub mod icons; +pub mod new_project; +pub mod project_viewer; +pub mod settings; +pub mod time_utility; diff --git a/src/gui/new_project.rs b/src/gui/new_project.rs new file mode 100644 index 0000000..91450a0 --- /dev/null +++ b/src/gui/new_project.rs @@ -0,0 +1,119 @@ +use crate::config::ProjectConfig; +use crate::entry::Message; +use cpal::traits::{DeviceTrait, HostTrait}; +use iced::widget::{button, column, container, pick_list, row, slider, text, text_input}; +use iced::{Alignment, Element}; +use std::collections::BTreeSet; + +#[derive(Debug, Clone)] +pub struct State { + pub config: ProjectConfig, + pub available_devices: BTreeSet, +} + +impl Default for State { + fn default() -> Self { + let host = cpal::default_host(); + let devices = host + .output_devices() + .ok() + .into_iter() + .flatten() + .filter_map(|d| d.name().ok()) + .collect(); + + Self { + config: ProjectConfig { + name: "New Project".to_string(), + sample_rate: 48000, + buffer_size: 512, + audio_device: "Default".to_string(), + audio_input_device: "Default".to_string(), + tempo: 120.0, + time_signature_numerator: 4, + time_signature_denominator: 4, + }, + available_devices: devices, + } + } +} + +pub fn view(state: &State) -> Element<'static, Message> { + let config = &state.config; + + let sample_rates = vec![44100, 48000, 96000]; + let buffer_sizes = vec![256, 512, 1024]; + let available_devices: Vec = state.available_devices.iter().cloned().collect(); + + let controls = column![ + row![ + text("Project Name:").width(150), + text_input("My Awesome Track", &config.name).on_input(Message::ProjectNameChanged) + ] + .spacing(10), + row![ + text("Sample Rate:").width(150), + pick_list( + sample_rates, + Some(config.sample_rate), + Message::SampleRateSelected + ) + ] + .spacing(10), + row![ + text("Buffer Size:").width(150), + pick_list( + buffer_sizes, + Some(config.buffer_size), + Message::BufferSizeSelected + ) + ] + .spacing(10), + row![ + text("Audio Device:").width(150), + pick_list( + available_devices, + Some(config.audio_device.clone()), + Message::AudioDeviceSelected + ) + ] + .spacing(10), + row![ + text("Time Signature:").width(150), + text_input("4", &config.time_signature_numerator.to_string()) + .on_input(Message::TimeSignatureNumeratorChanged) + .width(50), + text("/").width(20).align_x(Alignment::Center), + text_input("4", &config.time_signature_denominator.to_string()) + .on_input(Message::TimeSignatureDenominatorChanged) + .width(50), + ] + .spacing(10) + .align_y(Alignment::Center), + row![ + text("Tempo (BPM):").width(150), + slider(40.0..=240.0, config.tempo, Message::TempoChanged).step(0.1), + text(format!("{:.1}", config.tempo)) + ] + .spacing(10), + // --- New "Time Utility" button --- + container(row![ + button("Time Utility").on_press(Message::ViewTimeUtility) + ]) + .align_x(Alignment::End), + ] + .spacing(10); + + column![ + text("Create New Project").size(30), + controls, + row![ + button("Create Project").on_press(Message::CreateProject), + button("Cancel").on_press(Message::ViewRecentProjects) + ] + .spacing(10) + ] + .spacing(20) + .align_x(Alignment::Center) + .into() +} \ No newline at end of file diff --git a/src/gui/project_viewer.rs b/src/gui/project_viewer.rs new file mode 100644 index 0000000..f816783 --- /dev/null +++ b/src/gui/project_viewer.rs @@ -0,0 +1,154 @@ +// File: audio-oxide/src/gui/project_viewer.rs + +use crate::entry::{Message, ProjectInfo, ProjectViewState}; +use iced::widget::{button, column, container, row, scrollable, stack, text, text_input}; +use iced::{alignment, Alignment, Background, Border, Color, Element, Length, Padding, Theme}; +use std::path::PathBuf; + +// Helper function for the main navigation button style +fn nav_button_style(theme: &Theme, status: button::Status) -> button::Style { + let mut style = button::Style { + background: Some(Background::Color(Color::from_rgba(0.1, 0.1, 0.1, 0.5))), + border: Border { + radius: 8.0.into(), + ..Border::default() + }, + text_color: theme.palette().text, + ..button::Style::default() + }; + + if let button::Status::Hovered = status { + style.background = Some(Background::Color( + theme.extended_palette().primary.weak.color, + )); + style.text_color = theme.extended_palette().primary.weak.text; + } + + style +} + +// Helper function for the project list item style +fn project_list_item_style(theme: &Theme, status: button::Status) -> button::Style { + let mut style = button::Style { + background: Some(Background::Color(Color::from_rgba(1.0, 1.0, 1.0, 0.05))), + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + ..button::Style::default() + }; + + if let button::Status::Hovered = status { + style.background = Some(Background::Color( + theme.extended_palette().primary.weak.color, + )); + style.text_color = theme.extended_palette().primary.weak.text; + } + + style +} + +pub fn view<'a>(state: &'a ProjectViewState) -> Element<'a, Message> { + let main_content = container(match state { + ProjectViewState::Recent { projects } => view_recent_projects(projects), + ProjectViewState::Find { path_input } => view_find_project(path_input), + }) + .width(Length::Fill) + .height(Length::Fill) + .padding(Padding { + top: 30.0, + right: 30.0, + bottom: 30.0, + left: 300.0, // This padding pushes the content to the right. + }); + + let nav_panel = { + let recent_button = button(text("Recent Projects").size(24)) + .on_press(Message::ViewRecentProjects) + .style(nav_button_style) + .padding(20); + + let find_button = button(text("Find Project").size(24)) + .on_press(Message::ViewFindProject) + .style(nav_button_style) + .padding(20); + + let new_button = button(text("New Project...").size(24)) + .on_press(Message::ViewNewProject) + .style(nav_button_style) + .padding(20); + + container( + column![ + container(recent_button).padding(Padding { top: 0.0, right: 0.0, bottom: 0.0, left: 0.0 }), + container(find_button).padding(Padding { top: 0.0, right: 0.0, bottom: 0.0, left: 40.0 }), + container(new_button).padding(Padding { top: 0.0, right: 0.0, bottom: 0.0, left: 80.0 }), + ] + .spacing(15) + .align_x(Alignment::Start), + ) + .padding(80) + }; + + stack![main_content, nav_panel].into() +} + +fn view_recent_projects<'a>(projects: &'a [ProjectInfo]) -> Element<'a, Message> { + let title = text("Recent Projects").size(40); + + if projects.is_empty() { + return column![ + title, + text("No projects found. Create one to get started!") + ] + .spacing(20) + .padding(20) + .into(); + } + + let project_list = projects.iter().fold(column!().spacing(10), |col, p| { + let project_entry = button( + row![ + text(&p.name).size(20).width(Length::Fill), + text(format!("Modified: {}", p.modified.format("%Y-%m-%d %H:%M"))), + ] + .align_y(Alignment::Center) + .padding(15), + ) + .width(Length::Fill) + .on_press(Message::OpenProject(p.path.clone())) + .style(project_list_item_style); + + col.push(project_entry) + }); + + column![title, scrollable(project_list)] + .spacing(30) + .padding(20) + .into() +} + +fn view_find_project<'a>(path_input: &'a str) -> Element<'a, Message> { + let title = text("Find Project").size(40); + let path_input_field = text_input("Enter path to project .xtc directory...", path_input) + .on_input(Message::FindPathChanged) + .padding(10) + .size(20); + + let open_button = button("Open Project") + .on_press(Message::OpenProject(PathBuf::from(path_input.to_string()))) + .padding(10); + + column![ + title, + text("Enter the full path to a project directory to open it."), + path_input_field, + container(open_button) + .width(Length::Fill) + .align_x(alignment::Horizontal::Right), + ] + .spacing(20) + .padding(20) + .max_width(600) + .into() +} \ No newline at end of file diff --git a/src/gui/settings.rs b/src/gui/settings.rs new file mode 100644 index 0000000..8676d6f --- /dev/null +++ b/src/gui/settings.rs @@ -0,0 +1,348 @@ +use crate::config::{AudioOxideConfig, RecordingFormat}; +use iced::widget::{ + button, column, container, horizontal_rule, pick_list, row, text, text_input, toggler, Space, +}; +use iced::{Alignment, Background, Border, Color, Element, Length, Theme}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum SettingsTab { + General, + Audio, + Display, + Advanced, +} + +impl SettingsTab { + pub const ALL: [SettingsTab; 4] = [ + SettingsTab::General, + SettingsTab::Audio, + SettingsTab::Display, + SettingsTab::Advanced, + ]; + + fn label(&self) -> &'static str { + match self { + SettingsTab::General => "General", + SettingsTab::Audio => "Audio", + SettingsTab::Display => "Display", + SettingsTab::Advanced => "Advanced", + } + } +} + +#[derive(Debug, Clone)] +pub struct State { + pub config: AudioOxideConfig, + pub active_tab: SettingsTab, +} + +impl State { + pub fn new(config: &AudioOxideConfig) -> Self { + Self { + config: config.clone(), + active_tab: SettingsTab::General, + } + } +} + +#[derive(Debug, Clone)] +pub enum Message { + TabSelected(SettingsTab), + // General + ProjectDirChanged(String), + AutoSaveToggled(bool), + AutoSaveIntervalChanged(String), + AskToSaveToggled(bool), + // Audio + DefaultSampleRateSelected(u32), + DefaultBufferSizeSelected(u32), + DefaultAudioDeviceChanged(String), + RecordingFormatSelected(RecordingFormat), + RecordingBitDepthSelected(u16), + // Display + DefaultTrackHeightChanged(String), + ShowToolbarOnOpenToggled(bool), + ShowInspectorOnOpenToggled(bool), + // Actions + Save, + Cancel, +} + +fn section_header(label: &str) -> Element<'_, Message> { + column![ + text(label) + .size(13) + .color(Color::from_rgb8(0x88, 0x88, 0x88)), + horizontal_rule(1), + ] + .spacing(4) + .into() +} + +fn setting_row<'a>( + label: &'a str, + control: Element<'a, Message>, +) -> Element<'a, Message> { + row![ + text(label).size(13).width(200), + control, + ] + .spacing(12) + .align_y(Alignment::Center) + .into() +} + +fn tab_button<'a>(tab: SettingsTab, active: SettingsTab) -> Element<'a, Message> { + let is_active = tab == active; + let btn = button(text(tab.label()).size(13)) + .on_press(Message::TabSelected(tab)) + .padding([6, 16]); + if is_active { + btn.style(|_theme: &Theme, _status| button::Style { + background: Some(Background::Color(Color::from_rgb8(0x00, 0x7A, 0xFF))), + text_color: Color::WHITE, + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + ..button::Style::default() + }) + .into() + } else { + btn.style(|_theme: &Theme, _status| button::Style { + background: Some(Background::Color(Color::from_rgb8(0x30, 0x32, 0x34))), + text_color: Color::from_rgb8(0xAA, 0xAA, 0xAA), + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + ..button::Style::default() + }) + .into() + } +} + +fn view_general(config: &AudioOxideConfig) -> Element<'_, Message> { + let project_dir_input = text_input( + "Project directory", + config.project_dir.to_str().unwrap_or(""), + ) + .on_input(Message::ProjectDirChanged) + .width(300); + + let auto_save_toggle = toggler(config.auto_save) + .on_toggle(Message::AutoSaveToggled) + .width(Length::Shrink); + + let auto_save_interval = text_input( + "seconds", + &config.auto_save_interval_secs.to_string(), + ) + .on_input(Message::AutoSaveIntervalChanged) + .width(80); + + let ask_save_toggle = toggler(config.ask_to_save_on_close) + .on_toggle(Message::AskToSaveToggled) + .width(Length::Shrink); + + column![ + section_header("Project Handling"), + setting_row("Default project directory", project_dir_input.into()), + setting_row("Auto-save", auto_save_toggle.into()), + setting_row("Auto-save interval (sec)", auto_save_interval.into()), + setting_row("Ask to save on close", ask_save_toggle.into()), + ] + .spacing(10) + .padding(16) + .into() +} + +fn view_audio(config: &AudioOxideConfig) -> Element<'_, Message> { + let sample_rates: Vec = vec![22050, 44100, 48000, 88200, 96000, 176400, 192000]; + let sr_picker = pick_list( + sample_rates, + Some(config.default_sample_rate), + Message::DefaultSampleRateSelected, + ) + .width(120); + + let buffer_sizes: Vec = vec![32, 64, 128, 256, 512, 1024, 2048, 4096]; + let bs_picker = pick_list( + buffer_sizes, + Some(config.default_buffer_size), + Message::DefaultBufferSizeSelected, + ) + .width(120); + + let device_input = text_input("Audio device", &config.default_audio_device) + .on_input(Message::DefaultAudioDeviceChanged) + .width(200); + + let format_picker = pick_list( + &RecordingFormat::ALL[..], + Some(config.recording_format), + Message::RecordingFormatSelected, + ) + .width(120); + + let bit_depths: Vec = vec![16, 24, 32]; + let bd_picker = pick_list( + bit_depths, + Some(config.recording_bit_depth), + Message::RecordingBitDepthSelected, + ) + .width(120); + + column![ + section_header("Devices"), + setting_row("Default audio device", device_input.into()), + setting_row("Default sample rate", sr_picker.into()), + setting_row("Default buffer size", bs_picker.into()), + section_header("Recording"), + setting_row("File format", format_picker.into()), + setting_row("Bit depth", bd_picker.into()), + ] + .spacing(10) + .padding(16) + .into() +} + +fn view_display(config: &AudioOxideConfig) -> Element<'_, Message> { + let track_height_input = text_input("pixels", &format!("{:.0}", config.default_track_height)) + .on_input(Message::DefaultTrackHeightChanged) + .width(80); + + let toolbar_toggle = toggler(config.show_toolbar_on_open) + .on_toggle(Message::ShowToolbarOnOpenToggled) + .width(Length::Shrink); + + let inspector_toggle = toggler(config.show_inspector_on_open) + .on_toggle(Message::ShowInspectorOnOpenToggled) + .width(Length::Shrink); + + column![ + section_header("Layout"), + setting_row("Default track height (px)", track_height_input.into()), + setting_row("Show toolbar on open", toolbar_toggle.into()), + setting_row("Show inspector on open", inspector_toggle.into()), + ] + .spacing(10) + .padding(16) + .into() +} + +fn view_advanced(_config: &AudioOxideConfig) -> Element<'_, Message> { + column![ + section_header("Engine"), + text("Engine configuration options will appear here.") + .size(12) + .color(Color::from_rgb8(0x66, 0x66, 0x66)), + section_header("Plugins"), + text("Module/plugin scan paths and loading options will appear here.") + .size(12) + .color(Color::from_rgb8(0x66, 0x66, 0x66)), + ] + .spacing(10) + .padding(16) + .into() +} + +pub fn view(state: &State) -> Element<'_, Message> { + let title = text("Settings").size(20); + + // Tab bar + let tabs = SettingsTab::ALL.iter().fold( + row![].spacing(4), + |r, tab| r.push(tab_button(*tab, state.active_tab)), + ); + + // Tab content + let content: Element<_> = match state.active_tab { + SettingsTab::General => view_general(&state.config), + SettingsTab::Audio => view_audio(&state.config), + SettingsTab::Display => view_display(&state.config), + SettingsTab::Advanced => view_advanced(&state.config), + }; + + let content_area = container(content) + .width(Length::Fill) + .height(Length::Fill) + .style(|_theme: &Theme| container::Style { + background: Some(Background::Color(Color::from_rgb8(0x22, 0x24, 0x26))), + border: Border { + radius: 4.0.into(), + color: Color::from_rgb8(0x35, 0x37, 0x39), + width: 1.0, + }, + ..container::Style::default() + }); + + // Action buttons + let cancel_btn = button(text("Cancel").size(13)).on_press(Message::Cancel); + let save_btn = button(text("Save").size(13)) + .on_press(Message::Save) + .style(|_theme: &Theme, _status| button::Style { + background: Some(Background::Color(Color::from_rgb8(0x00, 0x7A, 0xFF))), + text_color: Color::WHITE, + border: Border { + radius: 4.0.into(), + ..Border::default() + }, + ..button::Style::default() + }); + + let actions = row![Space::new(Length::Fill, 0), cancel_btn, save_btn] + .spacing(8) + .align_y(Alignment::Center); + + let dialog = column![title, tabs, content_area, actions] + .spacing(12) + .padding(20); + + container(dialog) + .max_width(600) + .max_height(500) + .style(|theme: &Theme| container::Style { + background: Some(Background::Color( + theme.extended_palette().background.weak.color, + )), + border: Border { + radius: 8.0.into(), + color: Color::from_rgb8(0x40, 0x42, 0x44), + width: 1.0, + }, + ..container::Style::default() + }) + .into() +} + +pub fn handle_message(state: &mut State, message: Message) -> bool { + match message { + Message::TabSelected(tab) => state.active_tab = tab, + Message::ProjectDirChanged(p) => state.config.project_dir = p.into(), + Message::AutoSaveToggled(v) => state.config.auto_save = v, + Message::AutoSaveIntervalChanged(s) => { + if let Ok(v) = s.parse::() { + state.config.auto_save_interval_secs = v; + } + } + Message::AskToSaveToggled(v) => state.config.ask_to_save_on_close = v, + Message::DefaultSampleRateSelected(sr) => state.config.default_sample_rate = sr, + Message::DefaultBufferSizeSelected(bs) => state.config.default_buffer_size = bs, + Message::DefaultAudioDeviceChanged(d) => state.config.default_audio_device = d, + Message::RecordingFormatSelected(f) => state.config.recording_format = f, + Message::RecordingBitDepthSelected(bd) => state.config.recording_bit_depth = bd, + Message::DefaultTrackHeightChanged(s) => { + if let Ok(v) = s.parse::() { + if v > 0.0 { + state.config.default_track_height = v; + } + } + } + Message::ShowToolbarOnOpenToggled(v) => state.config.show_toolbar_on_open = v, + Message::ShowInspectorOnOpenToggled(v) => state.config.show_inspector_on_open = v, + Message::Save => return true, + Message::Cancel => return true, + } + false +} diff --git a/src/gui/time_utility.rs b/src/gui/time_utility.rs new file mode 100644 index 0000000..7baa4e5 --- /dev/null +++ b/src/gui/time_utility.rs @@ -0,0 +1,365 @@ +use crate::entry::Message; +use iced::widget::{button, column, mouse_area, row, text}; +use iced::{Alignment, Element, Length, Task}; +use std::time::{Duration, Instant}; +use tokio::time::sleep; + +// --- State for the Time Utility --- + +/// Represents a single tap event, capturing its start and end time. +#[derive(Debug, Clone, Copy)] +pub struct TapEvent { + pub start_time: Instant, + pub end_time: Instant, +} + +/// Holds the results of the tempo analysis. +#[derive(Debug, Clone)] +pub struct AnalysisResult { + pub bpm: u32, + pub grid_name: String, + pub grid_fraction: String, + pub suggested_time_signature: String, +} + +/// Contains all state related to the tempo tapping feature. +#[derive(Default, Debug, Clone)] +pub struct State { + pub tap_events: Vec, + pub tap_start_time: Option, + pub result: Option, +} + +/// Extracts the primary time signature from a suggestion string like "6/8 or 3/4". +fn get_primary_time_signature(suggestion: &str) -> String { + suggestion.split_whitespace().next().unwrap_or("").to_string() +} + +// --- View for the Time Utility --- + +pub fn view(state: &State) -> Element<'static, Message> { + let tapper_button = mouse_area( + button( + text("Tap and Hold Rhythm Here") + .width(Length::Fill) + .align_x(Alignment::Center), + ) + .width(Length::Fill) + .padding(15), + ) + .on_press(Message::TimeUtilityTapPressed) + .on_release(Message::TimeUtilityTapReleased); + + let (result_display, action_buttons) = if let Some(result) = &state.result { + let display: Element<_> = column![ + text(format!("Detected Tempo: {} BPM", result.bpm)).size(24), + text(format!( + "Rhythmic Grid: {} ({})", + result.grid_name, result.grid_fraction + )) + .size(16), + text(format!( + "Suggested Time Signature: {}", + result.suggested_time_signature + )) + .size(16), + ] + .align_x(Alignment::Center) + .spacing(10) + .into(); + + let primary_sig = get_primary_time_signature(&result.suggested_time_signature); + + let set_tempo_button = button("Set Tempo").on_press(Message::TimeUtilitySet(result.bpm)); + let set_sig_button = button("Set Time Sig") + .on_press(Message::TimeUtilitySetTimeSignature(primary_sig.clone())); + let set_both_button = + button("Set Both").on_press(Message::TimeUtilitySetBoth(result.bpm, primary_sig)); + let cancel_button = button("Cancel").on_press(Message::TimeUtilityCancel); + + let buttons: Element<_> = row![ + set_tempo_button, + set_sig_button, + set_both_button, + cancel_button + ] + .spacing(10) + .into(); + + (display, buttons) + } else { + let message = { + let tap_count = state.tap_events.len(); + if tap_count < 3 { + format!("Tap and hold at least {} more time(s)...", 3 - tap_count) + } else { + "Tap again to refine...".to_string() + } + }; + let display: Element<_> = column![text(message).size(16)] + .align_x(Alignment::Center) + .spacing(10) + .into(); + + let cancel_button = button("Cancel").on_press(Message::TimeUtilityCancel); + let buttons: Element<_> = row![cancel_button].spacing(10).into(); + + (display, buttons) + }; + + let content = column![ + text("Time Utility").size(40), + text("Tap a rhythm to detect its tempo and feel.").size(20), + tapper_button, + result_display, + action_buttons, + ] + .spacing(25) + .align_x(Alignment::Center) + .max_width(500); + + content.into() +} + +// --- Time Utility Logic & Event Handlers --- + +/// Helper function to handle the logic for a tap press. +pub fn handle_tap_pressed(tapper_state: &mut State) { + if tapper_state.tap_start_time.is_none() { + tapper_state.tap_start_time = Some(Instant::now()); + } +} + +/// Helper function to handle the logic for a tap release. +pub fn handle_tap_released(tapper_state: &mut State) -> Task { + if let Some(start_time) = tapper_state.tap_start_time.take() { + let event = TapEvent { + start_time, + end_time: Instant::now(), + }; + tapper_state.tap_events.push(event); + return Task::perform(sleep(Duration::from_millis(350)), |_| { + Message::RunTimeUtilityAnalysis + }); + } + Task::none() +} + +// --- Full, Correct Tempo Analysis Logic --- + +const MIN_TAPS_FOR_ANALYSIS: usize = 3; +const TOLERANCE_FACTOR: f64 = 0.15; +const MIN_TOLERANCE_MS: f64 = 20.0; +const MAX_TOLERANCE_MS: f64 = 75.0; +const OFF_GRID_WEIGHT: f64 = 10.0; +const RESOLUTION_WEIGHT: f64 = 0.08; +const MAX_NUMERATOR: u32 = 64; +const MAX_DENOMINATOR: u32 = 256; + +pub fn run_analysis(events: &[TapEvent]) -> Option { + if events.len() < MIN_TAPS_FOR_ANALYSIS { + return None; + } + + let tempo = calculate_tempo(events)?; + let durations_ms = get_durations_for_analysis(events); + if durations_ms.is_empty() { + return None; + } + + let (num, den, name) = determine_base_subdivision(&durations_ms, tempo as f64)?; + + let suggested_sig = suggest_time_signature(num, den); + + Some(AnalysisResult { + bpm: tempo, + grid_name: name, + grid_fraction: format!("{}/{}", num, den), + suggested_time_signature: suggested_sig, + }) +} + +fn calculate_tempo(events: &[TapEvent]) -> Option { + if events.len() < 2 { + return None; + } + let mut intervals: Vec = events + .windows(2) + .map(|w| w[1].start_time.duration_since(w[0].start_time).as_millis() as f64) + .filter(|&i| i > 60.0 && i < 3500.0) + .collect(); + + if intervals.is_empty() { + return None; + } + intervals.sort_by(|a, b| a.partial_cmp(b).unwrap()); + let median_interval = intervals[intervals.len() / 2]; + + if median_interval <= 0.0 { + return None; + } + Some((60_000.0 / median_interval).round() as u32) +} + +fn get_durations_for_analysis(events: &[TapEvent]) -> Vec { + let mut durations = Vec::new(); + for event in events { + let hold_duration = event.end_time.duration_since(event.start_time).as_millis() as f64; + if hold_duration > 15.0 { + durations.push(hold_duration); + } + } + for window in events.windows(2) { + let rest_duration = window[1] + .start_time + .duration_since(window[0].end_time) + .as_millis() as f64; + if rest_duration > 15.0 { + durations.push(rest_duration); + } + } + durations +} + +fn gcd(a: u32, b: u32) -> u32 { + if b == 0 { + a + } else { + gcd(b, a % b) + } +} + +fn get_subdivision_name(num: u32, den: u32) -> String { + match (num, den) { + (1, 1) => "Quarter Note".to_string(), + (1, 2) => "8th Note".to_string(), + (1, 3) => "Triplet Quarter".to_string(), + (1, 4) => "16th Note".to_string(), + (1, 5) => "Quintuplet 8th".to_string(), + (1, 6) => "Triplet 8th".to_string(), + (1, 7) => "Septuplet 8th".to_string(), + (1, 8) => "32nd Note".to_string(), + (1, 12) => "Triplet 16th".to_string(), + (1, 16) => "64th Note".to_string(), + (3, 2) => "Dotted Half".to_string(), + (3, 4) => "Dotted Quarter".to_string(), + (3, 8) => "Dotted 8th".to_string(), + (3, 16) => "Dotted 16th".to_string(), + _ => format!("{}/{} QN", num, den), + } +} + +fn suggest_time_signature(_numerator: u32, denominator: u32) -> String { + if denominator % 3 == 0 || denominator % 6 == 0 || denominator % 12 == 0 { + "6/8 or 3/4".to_string() + } else if denominator % 5 == 0 { + "5/4 or 5/8".to_string() + } else if denominator % 7 == 0 { + "7/4 or 7/8".to_string() + } else { + "4/4".to_string() + } +} + +fn determine_base_subdivision( + all_durations_ms: &[f64], + bpm: f64, +) -> Option<(u32, u32, String)> { + if all_durations_ms.is_empty() { + return None; + } + + let min_duration_ms = all_durations_ms + .iter() + .filter(|&&d| d > 0.0) + .min_by(|a, b| a.partial_cmp(b).unwrap()) + .copied() + .unwrap_or(f64::MAX); + + if min_duration_ms == f64::MAX { + return None; + } + + let beat_ms = 60000.0 / bpm; + let mut best_score = f64::INFINITY; + let mut best_candidate = None; + + for denominator in 1..=MAX_DENOMINATOR { + let step = if denominator > 128 { + 8 + } else if denominator > 64 { + 4 + } else if denominator > 32 { + 2 + } else { + 1 + }; + + let common_denominators = [1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 24]; + if denominator % step != 0 && !common_denominators.contains(&denominator) { + continue; + } + + for numerator in 1..=MAX_NUMERATOR { + let common_divisor = gcd(numerator, denominator); + let (simple_num, simple_den) = (numerator / common_divisor, denominator / common_divisor); + let qn_val = simple_num as f64 / simple_den as f64; + let base_note_ms = beat_ms * qn_val; + + if base_note_ms <= 5.0 || !base_note_ms.is_finite() { + continue; + } + + let tolerance = (base_note_ms * TOLERANCE_FACTOR) + .max(MIN_TOLERANCE_MS) + .min(MAX_TOLERANCE_MS); + + if base_note_ms > min_duration_ms * 2.0 + tolerance { + continue; + } + if base_note_ms < tolerance / 2.0 && beat_ms < 400.0 { + continue; + } + + let mut off_grid = 0.0; + let mut total_error = 0.0; + let mut count = 0; + + for &d in all_durations_ms { + if d <= 0.0 { + continue; + } + count += 1; + let num_units = (d / base_note_ms).round(); + if num_units < 1.0 { + continue; + } + let quantized_duration = num_units * base_note_ms; + let error = (d - quantized_duration).abs(); + if error > tolerance { + off_grid += 1.0; + } + total_error += error; + } + + if count == 0 { + continue; + } + + let avg_error = total_error / count as f64; + let complexity_penalty = (1.0 / base_note_ms) * (simple_den as f64 / 8.0); + let score = + avg_error + (off_grid * OFF_GRID_WEIGHT) + (complexity_penalty * RESOLUTION_WEIGHT); + + if score < best_score { + best_score = score; + best_candidate = Some(( + simple_num, + simple_den, + get_subdivision_name(simple_num, simple_den), + )); + } + } + } + best_candidate +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..80c1b9c --- /dev/null +++ b/src/main.rs @@ -0,0 +1,18 @@ +// File: audio-oxide/src/main.rs + +mod behaviors; +mod config; +mod editor; +mod engine; +mod entry; +mod first_run; +mod gui; +mod modules; +mod region; +mod timing; +mod track; +mod triggers; + +pub fn main() -> iced::Result { + entry::main() +} \ No newline at end of file diff --git a/src/modules/complex_stream.rs b/src/modules/complex_stream.rs new file mode 100644 index 0000000..f31f974 --- /dev/null +++ b/src/modules/complex_stream.rs @@ -0,0 +1,133 @@ +use std::sync::Arc; + +use oxforge::mdk::{GlobalConfig, OxideModule, Ports, ProcessContext}; +use rustfft::num_complex::Complex; +use rustfft::{Fft, FftPlanner}; + +use super::AnalyticSignal; + +const FFT_SIZE: usize = 2048; + +pub struct ComplexStream { + fft_size: usize, + hop_size: usize, + history_l: Vec, + history_r: Vec, + forward: Arc>, + inverse: Arc>, + // Scratch buffers to avoid per-call allocation + fft_buf: Vec>, + ifft_buf: Vec>, +} + +impl OxideModule for ComplexStream { + fn new(_config: &GlobalConfig) -> Self { + let mut planner = FftPlanner::new(); + let forward = planner.plan_fft_forward(FFT_SIZE); + let inverse = planner.plan_fft_inverse(FFT_SIZE); + + Self { + fft_size: FFT_SIZE, + hop_size: 0, + history_l: vec![0.0; FFT_SIZE], + history_r: vec![0.0; FFT_SIZE], + forward, + inverse, + fft_buf: vec![Complex::new(0.0, 0.0); FFT_SIZE], + ifft_buf: vec![Complex::new(0.0, 0.0); FFT_SIZE], + } + } + + fn process(&mut self, ports: Ports, _context: &ProcessContext) { + let input = match ports.main_audio_in { + Some(ref ai) => ai.buffer(), + None => return, + }; + + // Deinterleave stereo into L/R + let frame_count = input.len() / 2; + if frame_count == 0 { + return; + } + + if self.hop_size == 0 { + self.hop_size = frame_count; + } + + let mut left_hop = Vec::with_capacity(frame_count); + let mut right_hop = Vec::with_capacity(frame_count); + for i in 0..frame_count { + left_hop.push(input[i * 2]); + right_hop.push(input[i * 2 + 1]); + } + + let result_l = self.hilbert_channel(&left_hop, true); + let result_r = self.hilbert_channel(&right_hop, false); + + let signal = AnalyticSignal { + left: result_l, + right: result_r, + }; + + // Send analytic signal via chain output + if let Some(mut chain_out) = ports.chain_out { + chain_out.send(signal); + } + + // Passthrough audio + if let Some(mut audio_out) = ports.main_audio_out { + let out = audio_out.buffer_mut(); + let len = out.len().min(input.len()); + out[..len].copy_from_slice(&input[..len]); + } + } +} + +impl ComplexStream { + fn hilbert_channel(&mut self, hop: &[f32], is_left: bool) -> Vec<(f32, f32)> { + let history = if is_left { + &mut self.history_l + } else { + &mut self.history_r + }; + let hop_size = hop.len(); + + // Shift history and append new samples + history.copy_within(hop_size.., 0); + history[self.fft_size - hop_size..].copy_from_slice(hop); + + // Forward FFT: real input -> complex + for (i, &s) in history.iter().enumerate() { + self.fft_buf[i] = Complex::new(s, 0.0); + } + self.forward.process(&mut self.fft_buf); + + // Hilbert filter in frequency domain + let n = self.fft_size; + let nyquist = n / 2; + // DC bin: multiply by 1 (unchanged) + // Positive frequencies (1..nyquist): multiply by 2 + for i in 1..nyquist { + self.fft_buf[i] *= 2.0; + } + // Nyquist bin: multiply by 1 (unchanged) + // Negative frequencies: zero out + for i in (nyquist + 1)..n { + self.fft_buf[i] = Complex::new(0.0, 0.0); + } + + // Inverse FFT + self.ifft_buf.copy_from_slice(&self.fft_buf); + self.inverse.process(&mut self.ifft_buf); + + // Normalize and extract last hop_size samples + let norm = 1.0 / n as f32; + let offset = n - hop_size; + let mut result = Vec::with_capacity(hop_size); + for i in 0..hop_size { + let c = self.ifft_buf[offset + i]; + result.push((c.re * norm, c.im * norm)); + } + result + } +} diff --git a/src/modules/mod.rs b/src/modules/mod.rs new file mode 100644 index 0000000..40762a4 --- /dev/null +++ b/src/modules/mod.rs @@ -0,0 +1,64 @@ +pub mod complex_stream; +pub mod registry; +pub mod spiral_visualizer; + +#[derive(Debug, Clone)] +pub struct AnalyticSignal { + pub left: Vec<(f32, f32)>, + pub right: Vec<(f32, f32)>, +} + +#[derive(Debug, Clone)] +pub struct VisualizationFrame { + pub left: Vec, + pub right: Vec, +} + +#[derive(Debug, Clone, Copy)] +pub struct PhasePoint { + pub x: f32, + pub y: f32, + pub amplitude: f32, +} + +impl VisualizationFrame { + pub fn serialize(&self) -> Vec { + let mut buf = Vec::new(); + serialize_points(&self.left, &mut buf); + serialize_points(&self.right, &mut buf); + buf + } + + pub fn deserialize(data: &[u8]) -> Option { + let mut offset = 0; + let left = deserialize_points(data, &mut offset)?; + let right = deserialize_points(data, &mut offset)?; + Some(Self { left, right }) + } +} + +fn serialize_points(points: &[PhasePoint], buf: &mut Vec) { + buf.extend_from_slice(&(points.len() as u32).to_le_bytes()); + for p in points { + buf.extend_from_slice(&p.x.to_le_bytes()); + buf.extend_from_slice(&p.y.to_le_bytes()); + buf.extend_from_slice(&p.amplitude.to_le_bytes()); + } +} + +fn deserialize_points(data: &[u8], offset: &mut usize) -> Option> { + if *offset + 4 > data.len() { return None; } + let count = u32::from_le_bytes(data[*offset..*offset + 4].try_into().ok()?) as usize; + *offset += 4; + let needed = count * 12; + if *offset + needed > data.len() { return None; } + let mut points = Vec::with_capacity(count); + for _ in 0..count { + let x = f32::from_le_bytes(data[*offset..*offset + 4].try_into().ok()?); + let y = f32::from_le_bytes(data[*offset + 4..*offset + 8].try_into().ok()?); + let amplitude = f32::from_le_bytes(data[*offset + 8..*offset + 12].try_into().ok()?); + *offset += 12; + points.push(PhasePoint { x, y, amplitude }); + } + Some(points) +} diff --git a/src/modules/registry.rs b/src/modules/registry.rs new file mode 100644 index 0000000..4ab5d77 --- /dev/null +++ b/src/modules/registry.rs @@ -0,0 +1,36 @@ +use oxforge::mdk::GlobalConfig; + +use crate::engine::host::ModuleHost; + +use super::complex_stream::ComplexStream; +use super::spiral_visualizer::SpiralVisualizer; + +pub struct ModuleDescriptor { + pub type_name: &'static str, + pub display_name: &'static str, + pub description: &'static str, + pub requires: Option<&'static str>, +} + +pub const BUILTIN_MODULES: &[ModuleDescriptor] = &[ + ModuleDescriptor { + type_name: "complex_stream", + display_name: "Complex Stream", + description: "Streaming Hilbert transform producing analytic signal", + requires: None, + }, + ModuleDescriptor { + type_name: "spiral_visualizer", + display_name: "Spiral Visualizer", + description: "3D phase-space spiral visualization", + requires: Some("complex_stream"), + }, +]; + +pub fn load_builtin(host: &mut ModuleHost, type_name: &str, config: &GlobalConfig) -> Option { + match type_name { + "complex_stream" => Some(host.load_builtin::("ComplexStream", config)), + "spiral_visualizer" => Some(host.load_builtin::("SpiralVisualizer", config)), + _ => None, + } +} diff --git a/src/modules/spiral_visualizer.rs b/src/modules/spiral_visualizer.rs new file mode 100644 index 0000000..890a190 --- /dev/null +++ b/src/modules/spiral_visualizer.rs @@ -0,0 +1,86 @@ +use oxforge::mdk::{GlobalConfig, OxideModule, Ports, ProcessContext, ToGuiMessage}; + +use super::{AnalyticSignal, PhasePoint, VisualizationFrame}; + +const MAX_POINTS: usize = 4096; +const SEND_INTERVAL: u32 = 1470; // ~30fps at 44100Hz with 1024-sample buffers + +pub struct SpiralVisualizer { + buffer_l: Vec, + buffer_r: Vec, + frame_counter: u32, + send_interval: u32, +} + +impl OxideModule for SpiralVisualizer { + fn new(config: &GlobalConfig) -> Self { + let buffers_per_second = config.sample_rate / config.buffer_size as f32; + let interval = (buffers_per_second / 30.0).max(1.0) as u32; + + Self { + buffer_l: Vec::with_capacity(MAX_POINTS), + buffer_r: Vec::with_capacity(MAX_POINTS), + frame_counter: 0, + send_interval: if interval > 0 { interval } else { SEND_INTERVAL }, + } + } + + fn process(&mut self, ports: Ports, context: &ProcessContext) { + // Read analytic signal from chain input + if let Some(ref chain_in) = ports.chain_in { + if let Some(signal) = chain_in.get::() { + for &(re, im) in &signal.left { + let amp = (re * re + im * im).sqrt(); + self.buffer_l.push(PhasePoint { + x: re, + y: im, + amplitude: amp, + }); + } + for &(re, im) in &signal.right { + let amp = (re * re + im * im).sqrt(); + self.buffer_r.push(PhasePoint { + x: re, + y: im, + amplitude: amp, + }); + } + + // Trim to max + if self.buffer_l.len() > MAX_POINTS { + let excess = self.buffer_l.len() - MAX_POINTS; + self.buffer_l.drain(..excess); + } + if self.buffer_r.len() > MAX_POINTS { + let excess = self.buffer_r.len() - MAX_POINTS; + self.buffer_r.drain(..excess); + } + } + } + + // Passthrough audio + if let (Some(audio_in), Some(mut audio_out)) = + (ports.main_audio_in, ports.main_audio_out) + { + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + out[..len].copy_from_slice(&inp[..len]); + } + + // Send visualization frame at ~30fps + self.frame_counter += 1; + if self.frame_counter >= self.send_interval { + self.frame_counter = 0; + + let frame = VisualizationFrame { + left: self.buffer_l.clone(), + right: self.buffer_r.clone(), + }; + + let _ = context.to_gui.send(ToGuiMessage::VisualizationData { + data: frame.serialize(), + }); + } + } +} diff --git a/src/region.rs b/src/region.rs new file mode 100644 index 0000000..adaa979 --- /dev/null +++ b/src/region.rs @@ -0,0 +1,22 @@ +use crate::timing::MusicalTime; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Region { + pub id: Uuid, + pub start_time: MusicalTime, + pub duration: MusicalTime, + pub selected: bool, +} + +impl Region { + pub fn new(start_time: MusicalTime, duration: MusicalTime) -> Self { + Self { + id: Uuid::new_v4(), + start_time, + duration, + selected: false, + } + } +} \ No newline at end of file diff --git a/src/timing.rs b/src/timing.rs new file mode 100644 index 0000000..a2dc7e8 --- /dev/null +++ b/src/timing.rs @@ -0,0 +1,47 @@ +use serde::{Deserialize, Serialize}; +use std::ops::{Add, Sub}; + +pub const TICKS_PER_BEAT: u32 = 960; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Default)] +pub struct MusicalTime { + pub bar: u32, + pub beat: u32, + pub tick: u32, +} + +impl MusicalTime { + pub fn new(bar: u32, beat: u32, tick: u32) -> Self { + Self { bar, beat, tick } + } + + pub fn as_total_ticks(&self, beats_per_bar: u32) -> u64 { + let bar_ticks = + (self.bar.saturating_sub(1)) as u64 * beats_per_bar as u64 * TICKS_PER_BEAT as u64; + let beat_ticks = (self.beat.saturating_sub(1)) as u64 * TICKS_PER_BEAT as u64; + let tick_ticks = self.tick as u64; + bar_ticks + beat_ticks + tick_ticks + } +} + +impl Add for MusicalTime { + type Output = Self; + fn add(self, rhs: Self) -> Self::Output { + Self { + bar: self.bar + rhs.bar, + beat: self.beat + rhs.beat, + tick: self.tick + rhs.tick, + } + } +} + +impl Sub for MusicalTime { + type Output = Self; + fn sub(self, rhs: Self) -> Self::Output { + Self { + bar: self.bar.saturating_sub(rhs.bar), + beat: self.beat.saturating_sub(rhs.beat), + tick: self.tick.saturating_sub(rhs.tick), + } + } +} \ No newline at end of file diff --git a/src/track.rs b/src/track.rs new file mode 100644 index 0000000..8622c15 --- /dev/null +++ b/src/track.rs @@ -0,0 +1,111 @@ +use crate::region::Region; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +pub const TRACK_HEIGHT: f32 = 160.0; + +const TRACK_COLORS: [(u8, u8, u8); 12] = [ + (0x3D, 0x9A, 0xFC), + (0x4C, 0xD9, 0x64), + (0xFF, 0x6B, 0x6B), + (0xFF, 0xC1, 0x07), + (0xAB, 0x47, 0xBC), + (0x26, 0xC6, 0xDA), + (0xFF, 0x8A, 0x65), + (0xEC, 0x40, 0x7A), + (0x8D, 0x6E, 0x63), + (0x78, 0x90, 0x9C), + (0x7C, 0xB3, 0x42), + (0xEF, 0x53, 0x50), +]; + +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub struct TrackColor { + pub r: u8, + pub g: u8, + pub b: u8, +} + +impl TrackColor { + pub fn from_index(index: usize) -> Self { + let (r, g, b) = TRACK_COLORS[index % TRACK_COLORS.len()]; + Self { r, g, b } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum TrackType { + Audio, + Midi, +} + +impl TrackType { + pub const ALL: [TrackType; 2] = [TrackType::Audio, TrackType::Midi]; +} + +impl std::fmt::Display for TrackType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + TrackType::Audio => "Audio", + TrackType::Midi => "MIDI", + } + ) + } +} + +#[derive(Debug, Clone)] +pub struct TrackConfig { + pub name: String, + pub track_type: TrackType, +} + +impl Default for TrackConfig { + fn default() -> Self { + Self { + name: "New Track".to_string(), + track_type: TrackType::Audio, + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Track { + pub id: Uuid, + pub name: String, + pub track_type: TrackType, + pub color: TrackColor, + pub muted: bool, + pub soloed: bool, + pub record_armed: bool, + pub volume: f32, + pub pan: f32, + pub regions: Vec, + pub selected: bool, + pub bus_name: String, + pub module_chain: Vec, +} + +impl Track { + pub fn new(config: TrackConfig, color_index: usize) -> Self { + let id = Uuid::new_v4(); + let bus_name = format!("track_{}", id.as_simple()); + Self { + id, + name: config.name, + track_type: config.track_type, + color: TrackColor::from_index(color_index), + muted: false, + soloed: false, + record_armed: false, + volume: 1.0, + pan: 0.0, + regions: Vec::new(), + selected: false, + bus_name, + module_chain: Vec::new(), + } + } +} diff --git a/src/triggers.rs b/src/triggers.rs new file mode 100644 index 0000000..fda9071 --- /dev/null +++ b/src/triggers.rs @@ -0,0 +1,107 @@ +use crate::behaviors::Action; +use crate::entry::AppState; +use iced::keyboard::{key, Key, Modifiers}; + +pub fn map_key_press_to_action( + app_state: &AppState, + key: Key, + modifiers: Modifiers, +) -> Option { + let cmd = modifiers.command(); + let shift = modifiers.shift(); + + // Global shortcuts (work from any state) + if cmd { + match &key { + Key::Character(c) => match c.as_str() { + "," => return Some(Action::OpenSettings), + "n" => return Some(Action::NewProject), + "o" => return Some(Action::OpenProject), + _ => {} + }, + _ => {} + } + } + + match app_state { + AppState::TimeUtility { .. } => match key { + Key::Named(key::Named::Space) => Some(Action::TimeUtilityTapPressed), + _ => None, + }, + + AppState::Editor(_) => { + // Cmd+key shortcuts + if cmd && shift { + if let Key::Character(ref c) = key { + match c.as_str() { + "z" => return Some(Action::Redo), + "s" => return Some(Action::SaveProjectAs), + _ => {} + } + } + return None; + } + + if cmd { + match &key { + Key::Character(c) => match c.as_str() { + "z" => return Some(Action::Undo), + "x" => return Some(Action::Cut), + "c" => return Some(Action::Copy), + "v" => return Some(Action::Paste), + "d" => return Some(Action::Duplicate), + "a" => return Some(Action::SelectAll), + "s" => return Some(Action::SaveProject), + "w" => return Some(Action::CloseProject), + _ => {} + }, + Key::Named(named) => match named { + key::Named::ArrowRight => return Some(Action::ZoomInH), + key::Named::ArrowLeft => return Some(Action::ZoomOutH), + key::Named::ArrowUp => return Some(Action::ZoomInV), + key::Named::ArrowDown => return Some(Action::ZoomOutV), + _ => {} + }, + _ => {} + } + return None; + } + + // Unmodified keys + match key { + Key::Named(key::Named::Space) => Some(Action::EditorTogglePlayback), + Key::Named(key::Named::Enter) => Some(Action::EditorPlayFromBeginning), + Key::Named(key::Named::Delete) | Key::Named(key::Named::Backspace) => { + Some(Action::Delete) + } + Key::Character(ref c) => match c.as_str() { + "r" => Some(Action::EditorToggleRecord), + "i" => Some(Action::EditorToggleInspector), + "e" => Some(Action::EditorToggleBottomPanel), + "x" => Some(Action::EditorToggleMixer), + "c" => Some(Action::EditorToggleCycle), + "k" => Some(Action::EditorToggleMetronome), + "," => Some(Action::EditorRewind), + _ => None, + }, + _ => None, + } + } + + _ => None, + } +} + +pub fn map_key_release_to_action( + app_state: &AppState, + key: Key, + _modifiers: Modifiers, +) -> Option { + match app_state { + AppState::TimeUtility { .. } => match key { + Key::Named(key::Named::Space) => Some(Action::TimeUtilityTapReleased), + _ => None, + }, + _ => None, + } +}