summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-11 04:33:19 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-07-11 04:33:19 +0200
commit5e6c9eeb7e6f9ee985257853a140c19ec7ca1de0 (patch)
treeef2cc74dd64df8df899105f4fa5c82431fa5a02d
parent70f44a6e264f7307531935bf0fb9e33a5ebd81c1 (diff)
downloadiced-5e6c9eeb7e6f9ee985257853a140c19ec7ca1de0.tar.gz
iced-5e6c9eeb7e6f9ee985257853a140c19ec7ca1de0.tar.bz2
iced-5e6c9eeb7e6f9ee985257853a140c19ec7ca1de0.zip
Add `iced` widget helper to display the iced logo :comet:
-rw-r--r--examples/slider/Cargo.toml1
-rw-r--r--examples/slider/src/main.rs43
-rw-r--r--widget/Cargo.toml1
-rw-r--r--widget/assets/iced-logo.svg2
-rw-r--r--widget/src/helpers.rs35
-rw-r--r--widget/src/slider.rs2
-rw-r--r--widget/src/vertical_slider.rs2
7 files changed, 56 insertions, 30 deletions
diff --git a/examples/slider/Cargo.toml b/examples/slider/Cargo.toml
index fad8916e..05e74d2c 100644
--- a/examples/slider/Cargo.toml
+++ b/examples/slider/Cargo.toml
@@ -7,3 +7,4 @@ publish = false
[dependencies]
iced.workspace = true
+iced.features = ["svg"]
diff --git a/examples/slider/src/main.rs b/examples/slider/src/main.rs
index 0b4c29aa..fd312763 100644
--- a/examples/slider/src/main.rs
+++ b/examples/slider/src/main.rs
@@ -1,5 +1,5 @@
-use iced::widget::{center, column, container, slider, text, vertical_slider};
-use iced::{Element, Length};
+use iced::widget::{column, container, iced, slider, text, vertical_slider};
+use iced::{Alignment, Element, Length};
pub fn main() -> iced::Result {
iced::run("Slider - Iced", Slider::update, Slider::view)
@@ -12,19 +12,11 @@ pub enum Message {
pub struct Slider {
value: u8,
- default: u8,
- step: u8,
- shift_step: u8,
}
impl Slider {
fn new() -> Self {
- Slider {
- value: 50,
- default: 50,
- step: 5,
- shift_step: 1,
- }
+ Slider { value: 50 }
}
fn update(&mut self, message: Message) {
@@ -37,32 +29,27 @@ impl Slider {
fn view(&self) -> Element<Message> {
let h_slider = container(
- slider(0..=100, self.value, Message::SliderChanged)
- .default(self.default)
- .step(self.step)
- .shift_step(self.shift_step),
+ slider(1..=100, self.value, Message::SliderChanged)
+ .default(50)
+ .shift_step(5),
)
.width(250);
let v_slider = container(
- vertical_slider(0..=100, self.value, Message::SliderChanged)
- .default(self.default)
- .step(self.step)
- .shift_step(self.shift_step),
+ vertical_slider(1..=100, self.value, Message::SliderChanged)
+ .default(50)
+ .shift_step(5),
)
.height(200);
let text = text(self.value);
- center(
- column![
- container(v_slider).center_x(Length::Fill),
- container(h_slider).center_x(Length::Fill),
- container(text).center_x(Length::Fill)
- ]
- .spacing(25),
- )
- .into()
+ column![v_slider, h_slider, text, iced(self.value as f32),]
+ .width(Length::Fill)
+ .align_items(Alignment::Center)
+ .spacing(20)
+ .padding(20)
+ .into()
}
}
diff --git a/widget/Cargo.toml b/widget/Cargo.toml
index 3c9f6a54..498a768b 100644
--- a/widget/Cargo.toml
+++ b/widget/Cargo.toml
@@ -31,6 +31,7 @@ iced_renderer.workspace = true
iced_runtime.workspace = true
num-traits.workspace = true
+once_cell.workspace = true
rustc-hash.workspace = true
thiserror.workspace = true
unicode-segmentation.workspace = true
diff --git a/widget/assets/iced-logo.svg b/widget/assets/iced-logo.svg
new file mode 100644
index 00000000..459b7fbb
--- /dev/null
+++ b/widget/assets/iced-logo.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="140" height="140" fill="none" version="1.1" viewBox="35 31 179 171"><rect x="42" y="31.001" width="169.9" height="169.9" rx="49.815" fill="url(#paint1_linear)"/><path d="m182.62 65.747-28.136 28.606-6.13-6.0291 28.136-28.606 6.13 6.0291zm-26.344 0.218-42.204 42.909-6.13-6.029 42.204-42.909 6.13 6.0291zm-61.648 23.913c5.3254-5.3831 10.65-10.765 21.569-21.867l6.13 6.0291c-10.927 11.11-16.258 16.498-21.587 21.885-4.4007 4.4488-8.8009 8.8968-16.359 16.573l31.977 8.358 25.968-26.402 6.13 6.0292-25.968 26.402 8.907 31.908 42.138-42.087 6.076 6.083-49.109 49.05-45.837-12.628-13.394-45.646 1.7714-1.801c10.928-11.111 16.258-16.499 21.588-21.886zm28.419 70.99-8.846-31.689-31.831-8.32 9.1945 31.335 31.482 8.674zm47.734-56.517 7.122-7.1221-6.08-6.0797-7.147 7.1474-30.171 30.674 6.13 6.029 30.146-30.649z" clip-rule="evenodd" fill="url(#paint2_linear)" fill-rule="evenodd"/><defs><filter id="filter0_f" x="55" y="47.001" width="144" height="168" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur" stdDeviation="2"/></filter><linearGradient id="paint0_linear" x1="127" x2="127" y1="51.001" y2="211" gradientUnits="userSpaceOnUse"><stop offset=".052083"/><stop stop-opacity=".08" offset="1"/></linearGradient><linearGradient id="paint1_linear" x1="212" x2="57.5" y1="31.001" y2="189" gradientUnits="userSpaceOnUse"><stop stop-color="#00A3FF" offset="0"/><stop stop-color="#30f" offset="1"/></linearGradient><linearGradient id="paint2_linear" x1="86.098" x2="206.01" y1="158.28" y2="35.327" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" offset="1"/></linearGradient></defs></svg>
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index 9056d191..d7631959 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -890,6 +890,41 @@ where
crate::Svg::new(handle)
}
+/// Creates an [`Element`] that displays the iced logo with the given `text_size`.
+///
+/// Useful for showing some love to your favorite GUI library in your "About" screen,
+/// for instance.
+#[cfg(feature = "svg")]
+pub fn iced<'a, Message, Theme, Renderer>(
+ text_size: impl Into<Pixels>,
+) -> Element<'a, Message, Theme, Renderer>
+where
+ Message: 'a,
+ Renderer: core::Renderer
+ + core::text::Renderer<Font = core::Font>
+ + core::svg::Renderer
+ + 'a,
+ Theme: text::Catalog + crate::svg::Catalog + 'a,
+{
+ use crate::core::{Alignment, Font};
+ use crate::svg;
+ use once_cell::sync::Lazy;
+
+ static LOGO: Lazy<svg::Handle> = Lazy::new(|| {
+ svg::Handle::from_memory(include_bytes!("../assets/iced-logo.svg"))
+ });
+
+ let text_size = text_size.into();
+
+ row![
+ svg(LOGO.clone()).width(text_size * 1.3),
+ text("iced").size(text_size).font(Font::MONOSPACE)
+ ]
+ .spacing(text_size.0 / 3.0)
+ .align_items(Alignment::Center)
+ .into()
+}
+
/// Creates a new [`Canvas`].
///
/// [`Canvas`]: crate::Canvas
diff --git a/widget/src/slider.rs b/widget/src/slider.rs
index a8f1d192..74e6f8d3 100644
--- a/widget/src/slider.rs
+++ b/widget/src/slider.rs
@@ -237,7 +237,7 @@ where
let steps = (percent * (end - start) / step).round();
let value = steps * step + start;
- T::from_f64(value)
+ T::from_f64(value.min(end))
};
new_value
diff --git a/widget/src/vertical_slider.rs b/widget/src/vertical_slider.rs
index defb442f..33c591f5 100644
--- a/widget/src/vertical_slider.rs
+++ b/widget/src/vertical_slider.rs
@@ -239,7 +239,7 @@ where
let steps = (percent * (end - start) / step).round();
let value = steps * step + start;
- T::from_f64(value)
+ T::from_f64(value.min(end))
};
new_value