Add iced widget helper to display the iced logo ☄️
This commit is contained in:
parent
70f44a6e26
commit
5e6c9eeb7e
7 changed files with 56 additions and 30 deletions
|
|
@ -7,3 +7,4 @@ publish = false
|
|||
|
||||
[dependencies]
|
||||
iced.workspace = true
|
||||
iced.features = ["svg"]
|
||||
|
|
|
|||
|
|
@ -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,31 +29,26 @@ 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),
|
||||
)
|
||||
column![v_slider, h_slider, text, iced(self.value as f32),]
|
||||
.width(Length::Fill)
|
||||
.align_items(Alignment::Center)
|
||||
.spacing(20)
|
||||
.padding(20)
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
widget/assets/iced-logo.svg
Normal file
2
widget/assets/iced-logo.svg
Normal file
|
|
@ -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>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue