GradientStop

Struct GradientStop 

Source
pub struct GradientStop {
    pub color: Rgba<u8>,
    pub pos: f64,
}
Available on crate feature winio only.
Expand description

A transition point in a gradient.

Fields§

§color: Rgba<u8>

Color of the stop.

§pos: f64

Relative position of the stop, from 0 to 1.

Implementations§

Source§

impl GradientStop

Source

pub fn new(color: Rgba<u8>, pos: f64) -> GradientStop

Create GradientStop.

Examples found in repository?
examples/test/widgets.rs (line 319)
257    fn render(&mut self, _sender: &ComponentSender<Self>) {
258        let csize = self.window.client_size();
259        {
260            let mut cred_panel = layout! {
261                Grid::from_str("auto,1*,auto", "1*,auto,auto,1*").unwrap(),
262                self.ulabel => { column: 0, row: 1, valign: VAlign::Center },
263                self.uentry => { column: 1, row: 1, margin: Margin::new_all_same(4.0) },
264                self.plabel => { column: 0, row: 2, valign: VAlign::Center },
265                self.pentry => { column: 1, row: 2, margin: Margin::new_all_same(4.0) },
266                self.pcheck => { column: 2, row: 2 },
267            };
268
269            let mut rgroup_panel = layout! {
270                Grid::from_str("auto", "1*,auto,auto,auto,1*").unwrap(),
271                self.r1 => { row: 1 },
272                self.r2 => { row: 2 },
273                self.r3 => { row: 3 },
274            };
275
276            let mut buttons_panel = layout! {
277                StackPanel::new(Orient::Vertical),
278                self.push_button => { margin: Margin::new_all_same(4.0) },
279                self.pop_button  => { margin: Margin::new_all_same(4.0) },
280                self.show_button => { margin: Margin::new_all_same(4.0) },
281            };
282
283            let mut root_panel = layout! {
284                Grid::from_str("1*,1*,1*", "1*,auto,1*").unwrap(),
285                cred_panel    => { column: 1, row: 0 },
286                rgroup_panel  => { column: 2, row: 0, halign: HAlign::Center },
287                self.canvas   => { column: 0, row: 1, row_span: 2 },
288                self.combo    => { column: 1, row: 1, halign: HAlign::Center },
289                self.progress => { column: 2, row: 1 },
290                self.mltext   => { column: 1, row: 2, margin: Margin::new_all_same(8.0) },
291                buttons_panel => { column: 2, row: 2 },
292            };
293
294            root_panel.set_size(csize);
295        }
296
297        let size = self.canvas.size();
298        let is_dark = ColorTheme::current() == ColorTheme::Dark;
299        let back_color = if is_dark {
300            Color::new(255, 255, 255, 255)
301        } else {
302            Color::new(0, 0, 0, 255)
303        };
304        let brush = SolidColorBrush::new(back_color);
305        let pen = BrushPen::new(&brush, 1.0);
306        let mut ctx = self.canvas.context();
307        let cx = size.width / 2.0;
308        let cy = size.height / 2.0;
309        let r = cx.min(cy) - 2.0;
310        ctx.draw_pie(
311            &pen,
312            Rect::new(Point::new(cx - r, cy - r), Size::new(r * 2.0, r * 2.0)),
313            std::f64::consts::PI,
314            std::f64::consts::PI * 2.0,
315        );
316
317        let brush2 = LinearGradientBrush::new(
318            [
319                GradientStop::new(Color::new(0x87, 0xCE, 0xEB, 0xFF), 0.0),
320                GradientStop::new(back_color, 1.0),
321            ],
322            RelativePoint::zero(),
323            RelativePoint::new(0.0, 1.0),
324        );
325        let pen2 = BrushPen::new(&brush2, 1.0);
326        ctx.draw_round_rect(
327            &pen2,
328            Rect::new(
329                Point::new(cx - r - 1.0, cy - r - 1.0),
330                Size::new(r * 2.0 + 2.0, r * 1.618 + 2.0),
331            ),
332            Size::new(r / 10.0, r / 10.0),
333        );
334        let mut path = ctx.create_path_builder(Point::new(cx + r + 1.0 - r / 10.0, cy));
335        path.add_arc(
336            Point::new(cx, cy + r * 0.618 + 1.0),
337            Size::new(r + 1.0 - r / 10.0, r * 0.382 / 2.0),
338            0.0,
339            std::f64::consts::PI,
340            true,
341        );
342        path.add_line(Point::new(cx - r - 1.0 + r / 10.0, cy));
343        let path = path.build(false);
344        ctx.draw_path(&pen, &path);
345        let brush3 = RadialGradientBrush::new(
346            [
347                GradientStop::new(Color::new(0xF5, 0xF5, 0xF5, 0xFF), 0.0),
348                GradientStop::new(
349                    Color::accent().unwrap_or(Color::new(0xFF, 0xC0, 0xCB, 0xFF)),
350                    1.0,
351                ),
352            ],
353            RelativePoint::new(0.5, 0.5),
354            RelativePoint::new(0.2, 0.5),
355            RelativeSize::new(0.5, 0.5),
356        );
357        let font = DrawingFontBuilder::new()
358            .family("Arial")
359            .size(r / 5.0)
360            .halign(HAlign::Center)
361            .valign(VAlign::Bottom)
362            .build();
363        ctx.draw_str(&brush3, font, Point::new(cx, cy), "Hello world!");
364    }

Trait Implementations§

Source§

impl Clone for GradientStop

Source§

fn clone(&self) -> GradientStop

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GradientStop

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl From<(Rgba<u8>, f64)> for GradientStop

Source§

fn from(_: (Rgba<u8>, f64)) -> GradientStop

Converts to this type from the input type.
Source§

impl PartialEq for GradientStop

Source§

fn eq(&self, other: &GradientStop) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for GradientStop

Source§

impl StructuralPartialEq for GradientStop

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more