Struct kas::draw::DrawIface

source ·
pub struct DrawIface<'a, DS>
where 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(&mut 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);
        }
    }
}

Note that this object is little more than a mutable reference to application shared draw state. 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> DrawIface<'a, DS>
where DS: DrawSharedImpl,

source

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

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> Draw for DrawIface<'a, DS>
where DS: DrawSharedImpl,

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, rect: Rect, text: &TextDisplay, col: Rgba)

Draw text with a colour Read more
source§

fn text_effects( &mut self, rect: Rect, text: &TextDisplay, col: Rgba, effects: &[Effect<()>] )

Draw text with a single color and effects Read more
source§

fn text_effects_rgba( &mut self, rect: Rect, text: &TextDisplay, effects: &[Effect<Rgba>] )

Draw text with effects (including Rgba color) Read more
source§

impl<'a, DS> DrawRounded for DrawIface<'a, DS>
where DS: DrawSharedImpl, <DS as DrawSharedImpl>::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
source§

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

source§

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

Add a shaded square to the draw buffer Read more
source§

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

Add a shaded circle to the draw buffer Read more
source§

fn shaded_square_frame( &mut self, outer: Quad, inner: Quad, norm: (f32, f32), outer_col: Rgba, inner_col: Rgba )

Add a shaded frame with square corners to the draw buffer
source§

fn shaded_round_frame( &mut self, outer: Quad, inner: Quad, norm: (f32, f32), col: Rgba )

Add a shaded frame with rounded corners to the draw buffer

Auto Trait Implementations§

§

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

§

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

§

impl<'a, DS> Sync for DrawIface<'a, DS>
where DS: Sync, <DS as DrawSharedImpl>::Draw: 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
§

impl<S, T> Cast<T> for S
where T: Conv<S>,

§

fn cast(self) -> T

Cast from Self to T Read more
§

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

Try converting from Self to T Read more
§

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

§

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

Try approximate conversion from Self to T Read more
§

fn cast_approx(self) -> T

Cast approximately from Self to T Read more
§

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

§

fn cast_trunc(self) -> T

Cast to integer, truncating Read more
§

fn cast_nearest(self) -> T

Cast to the nearest integer Read more
§

fn cast_floor(self) -> T

Cast the floor to an integer Read more
§

fn cast_ceil(self) -> T

Cast the ceiling to an integer Read more
§

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

Try converting to integer with truncation Read more
§

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

Try converting to the nearest integer Read more
§

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

Try converting the floor to an integer Read more
§

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

Try convert the ceiling to an integer Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

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

§

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.
§

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.
§

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.
§

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.
§

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

§

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

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.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

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>,

§

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>,

§

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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSync for T
where T: Sync,