DrawIface

Struct DrawIface 

Source
pub struct DrawIface<'a, DS: DrawSharedImpl> { /* private fields */ }
Expand description

Draw interface object

Draw and extension traits such as DrawRounded provide draw functionality over this object.

This type is used to present a unified mid-level draw interface, as available from crate::theme::DrawCx::draw_device. A concrete DrawIface object may be obtained via downcast, e.g.:

impl CircleWidget {
    fn draw(&self, mut draw: DrawCx) {
        // This type assumes usage of kas_wgpu without a custom draw pipe:
        type DrawIface = DrawIface<kas_wgpu::draw::DrawPipe<()>>;
        if let Some(mut draw) = DrawIface::downcast_from(draw.draw_device()) {
            draw.circle(self.rect.into(), 0.9, Rgba::BLACK);
        }
    }
}

This object is effectively a fat pointer to draw state (both window-local and shared components). As such, it is normal to pass a new copy created via DrawIface::re as a method argument. (Note that Rust automatically “reborrows” reference types passed as method arguments, but cannot do so automatically for structs containing references.)

Implementations§

Source§

impl<'a, DS: DrawSharedImpl> DrawIface<'a, DS>

Source

pub fn downcast_from(obj: &'a mut dyn Draw) -> Option<Self>

Attempt to downcast a &mut dyn Draw to a concrete DrawIface object

Note: Rust does not (yet) support trait-object-downcast: it not possible to cast from &mut dyn Draw to (for example) &mut dyn DrawRounded. Instead, the target type must be the implementing object, which is provided by the graphics backend (e.g. kas_wgpu). See documentation on this type for an example, or examine clock.rs.

Source

pub fn re<'b>(&'b mut self) -> DrawIface<'b, DS>
where 'a: 'b,

Reborrow with a new lifetime

Source

pub fn new_pass( &mut self, rect: Rect, offset: Offset, class: PassType, ) -> DrawIface<'_, DS>

Add a draw pass

Adds a new draw pass. Passes affect draw order (operations in new passes happen after their parent pass), may clip drawing to a “clip rect” (see Draw::get_clip_rect) and may offset (translate) draw operations.

Case class == PassType::Clip: the new pass is derived from parent_pass; rect and offset are specified relative to this parent and the intersecton of rect and the parent’s “clip rect” is used. be clipped to rect (expressed in the parent’s coordinate system).

Case class == PassType::Overlay: the new pass is derived from the base pass (i.e. the window). Draw operations still happen after those in parent_pass.

Trait Implementations§

Source§

impl<'a, DS: DrawSharedImpl> Draw for DrawIface<'a, DS>

Source§

fn shared(&mut self) -> &mut dyn DrawShared

Access shared draw state
Source§

fn animate(&mut self)

Request redraw at the next frame time Read more
Source§

fn animate_at(&mut self, time: Instant)

Request a redraw at a specific time Read more
Source§

fn get_pass(&self) -> PassId

Get the current draw pass
Source§

fn new_dyn_pass<'b>( &'b mut self, rect: Rect, offset: Offset, class: PassType, ) -> Box<dyn Draw + 'b>

Add a draw pass Read more
Source§

fn get_clip_rect(&self) -> Rect

Get drawable rect for a draw pass Read more
Source§

fn rect(&mut self, rect: Quad, col: Rgba)

Draw a rectangle of uniform colour Read more
Source§

fn frame(&mut self, outer: Quad, inner: Quad, col: Rgba)

Draw a frame of uniform colour Read more
Source§

fn image(&mut self, id: ImageId, rect: Quad)

Draw the image in the given rect
Source§

fn text(&mut self, pos: Vec2, bb: Quad, text: &TextDisplay, col: Rgba)

Draw text with a colour Read more
Source§

fn text_effects( &mut self, pos: Vec2, bb: Quad, text: &TextDisplay, effects: &[Effect], colors: &[Rgba], )

Draw text with effects Read more
Source§

impl<'a, DS: DrawSharedImpl> DrawRounded for DrawIface<'a, DS>
where DS::Draw: DrawRoundedImpl,

Source§

fn rounded_line(&mut self, p1: Vec2, p2: Vec2, radius: f32, col: Rgba)

Draw a line with rounded ends and uniform colour Read more
Source§

fn circle(&mut self, rect: Quad, inner_radius: f32, col: Rgba)

Draw a circle or oval of uniform colour Read more
Source§

fn circle_2col(&mut self, rect: Quad, col1: Rgba, col2: Rgba)

Draw a circle or oval with two colours Read more
Source§

fn rounded_frame( &mut self, outer: Quad, inner: Quad, inner_radius: f32, col: Rgba, )

Draw a frame with rounded corners and uniform colour Read more
Source§

fn rounded_frame_2col(&mut self, outer: Quad, inner: Quad, c1: Rgba, c2: Rgba)

Draw a frame with rounded corners with two colours Read more

Auto Trait Implementations§

§

impl<'a, DS> Freeze for DrawIface<'a, DS>

§

impl<'a, DS> RefUnwindSafe for DrawIface<'a, DS>

§

impl<'a, DS> Send for DrawIface<'a, DS>
where <DS as DrawSharedImpl>::Draw: Send, DS: Send,

§

impl<'a, DS> Sync for DrawIface<'a, DS>
where <DS as DrawSharedImpl>::Draw: Sync, DS: Sync,

§

impl<'a, DS> Unpin for DrawIface<'a, DS>

§

impl<'a, DS> !UnwindSafe for DrawIface<'a, DS>

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<S, T> Cast<T> for S
where T: Conv<S>,

Source§

fn cast(self) -> T

Cast from Self to T Read more
Source§

fn try_cast(self) -> Result<T, Error>

Try converting from Self to T Read more
Source§

impl<S, T> CastApprox<T> for S
where T: ConvApprox<S>,

Source§

fn try_cast_approx(self) -> Result<T, Error>

Try approximate conversion from Self to T Read more
Source§

fn cast_approx(self) -> T

Cast approximately from Self to T Read more
Source§

impl<S, T> CastFloat<T> for S
where T: ConvFloat<S>,

Source§

fn cast_trunc(self) -> T

Cast to integer, truncating Read more
Source§

fn cast_nearest(self) -> T

Cast to the nearest integer Read more
Source§

fn cast_floor(self) -> T

Cast the floor to an integer Read more
Source§

fn cast_ceil(self) -> T

Cast the ceiling to an integer Read more
Source§

fn try_cast_trunc(self) -> Result<T, Error>

Try converting to integer with truncation Read more
Source§

fn try_cast_nearest(self) -> Result<T, Error>

Try converting to the nearest integer Read more
Source§

fn try_cast_floor(self) -> Result<T, Error>

Try converting the floor to an integer Read more
Source§

fn try_cast_ceil(self) -> Result<T, Error>

Try convert the ceiling to an integer Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn 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§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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, 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