Skip to main content

Shader

Struct Shader 

Source
pub struct Shader { /* private fields */ }
Expand description

A live effect viewport that renders a Program into half-block cells.

The program advances on the shared presentation clock and repaints at FRAME cadence while presented; a still program paints once and requests nothing. Unlit cells stay transparent, so set bg for a backdrop. Mount it in dom! as an expression child, or register a factory for a <shader> markup tag through crate::Elements.

use omp_tui::{components::Shader, dom, scene::vec3};

// A still radial glow; animated effects implement `shader::Program`.
let glow = |x: f32, y: f32| {
	let (dx, dy) = (x - 12.0, y - 8.0);
	let fall = 1.0 - ((dx * dx + dy * dy).sqrt() / 10.0).min(1.0);
	(vec3(0.4, 0.8, 1.0) * fall, fall)
};
let tree = dom! {
	<col>
		{Shader::new(glow).size(24, 8).still()}
	</col>
};

Implementations§

Source§

impl Shader

Source

pub fn new(program: impl Program + 'static) -> Self

Creates a 24×8-cell viewport over program.

Examples found in repository?
examples/gallery/eclipse.rs (line 14)
11pub(crate) fn pane(viewport: Size, rows: u16) -> Box<dyn Component> {
12	dom! {
13		<col>
14			{Shader::new(Eclipse::default()).size(viewport.width, rows)}
15			<text dim>{"stencil.so eclipse"}</text>
16		</col>
17	}
18	.into_component()
19}
Source

pub const fn size(self, cols: u16, rows: u16) -> Self

Sets the viewport size in terminal cells.

A live w (in cells) or h prop overrides this, so a host resizes the viewport with crate::Ui::set_prop / crate::Ui::set_height instead of rebuilding the tree.

Examples found in repository?
examples/gallery/eclipse.rs (line 14)
11pub(crate) fn pane(viewport: Size, rows: u16) -> Box<dyn Component> {
12	dom! {
13		<col>
14			{Shader::new(Eclipse::default()).size(viewport.width, rows)}
15			<text dim>{"stencil.so eclipse"}</text>
16		</col>
17	}
18	.into_component()
19}
Source

pub const fn still(self) -> Self

Paints once instead of animating — for programs that ignore the clock.

Source

pub fn with(self, prop: Prop, value: impl Into<PropValue>) -> Self

Sets one shader property.

Trait Implementations§

Source§

impl Component for Shader

Source§

fn props(&self) -> &Props

Component properties.
Source§

fn props_mut(&mut self) -> &mut Props

Mutable component properties.
Source§

fn slot(&self) -> Slot

Stable identity.
Source§

fn measure(&mut self, _ctx: &UiContext) -> (u16, u16)

Content width bounds, exclusive of this component’s chrome.
Source§

fn height(&mut self, _ctx: &UiContext, _width: u16) -> u16

Content height at the supplied content width.
Source§

fn paint(&mut self, pc: &mut PaintCtx<'_>, rect: Rect)

Paints content inside the supplied content rectangle.
Source§

fn kind(&self) -> &'static str

Concrete implementation name for debug tooling; defaults to the type’s full path via std::any::type_name. The OMP_TUI_DEBUG tree dump trims it to the trailing path segment.
Source§

fn children(&self) -> &[Cached]

Every owned child, including embedded inactive subtrees.
Source§

fn children_mut(&mut self) -> &mut [Cached]

Every owned child, including embedded inactive subtrees.
Source§

fn place(&mut self, ctx: &UiContext, content: Rect)

Places children inside the supplied content rectangle.
Source§

fn paints_border(&self) -> bool

Whether Cached should paint this component’s border property as chrome.
Source§

fn paints_background(&self) -> bool

Whether Cached should paint this component’s background property across its rectangle. Components that own a partial background fill opt out and paint it themselves.
Source§

fn gradient_bounds(&self, content: Rect) -> Option<Rect>

A narrowed projection frame for two-stop fg=/bg= ramps, given the painted content rectangle. None projects across the full chrome; content-sized leaves (crate::components::Pre) return their authored extent so the ramp completes across the glyphs instead of the stretched layout width.
Source§

fn resize_tail(&mut self) -> Option<ResizeTail<'_>>

Opt-in viewport-tail provider for resize drags: children a drag frame may compose bottom-up, with the vertical gap between them. None — the default — renders this component whole. Read more
Source§

fn validation_error(&self) -> Option<String>

A validation error blocking submission — an unmet required or match= constraint owned by this component’s internal records; None when valid. Component-level props are checked by the caller.
Source§

fn stretch_in_row(&self) -> bool

Whether a row should stretch this component across its cross axis.
Source§

fn focusable(&self) -> bool

Whether this component contributes its own slot to the focus ring. The default honors the focus flag, so any container can opt into keyboard navigation from markup.
Source§

fn enter(&mut self, forward: bool)

Positions internal selection when focus enters from either direction.
Source§

fn ring(&self, out: &mut Vec<Slot>)

Appends focusable slots in document order.
Source§

fn key(&mut self, ec: &mut EventCtx<'_>, key: Key) -> Flow

Handles a keyboard event.
Source§

fn mouse( &mut self, ec: &mut EventCtx<'_>, tag: HitTag, at: (u16, u16), rect: Rect, mouse: Mouse, ) -> Flow

Handles a mouse gesture over one of this component’s hit regions.
Source§

fn paste(&mut self, ec: &mut EventCtx<'_>, text: &str) -> Flow

Pastes text into this component: Flow::Consumed repaints, Flow::Event additionally surfaces a crate::UiEvent, and Flow::Skip leaves the paste unhandled.
Source§

fn paste_raw(&mut self, ec: &mut EventCtx<'_>, text: &str) -> Flow

Pastes text verbatim, bypassing any smart-paste interpretation the component applies in Component::paste (drop classification, large-paste collapse). Defaults to Component::paste for components without such interpretation.
Source§

fn value(&self, out: &mut Map<String, Value>)

Adds this component’s named value to an output object.
Source§

fn set_text(&mut self, ctx: &UiContext, text: Str) -> bool

Replaces text content where supported.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Shader

§

impl !Send for Shader

§

impl !Sync for Shader

§

impl !UnwindSafe for Shader

§

impl Freeze for Shader

§

impl Unpin for Shader

§

impl UnsafeUnpin for Shader

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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoChildren for T
where T: IntoComponent,

Source§

fn extend_children(self, out: &mut Vec<Cached>)

Appends all represented children to out.
Source§

impl<T> IntoComponent for T
where T: Component + 'static,

Source§

fn into_component(self) -> Box<dyn Component>

Performs the conversion.
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, 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.