Skip to main content

Scene

Struct Scene 

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

A live 3D viewport that rasterizes a Trace scene into braille cells.

Use crate::scene::PathTracer for physical geometry and materials, or implement Trace for procedural shading and animated scene state.

The scene advances on the shared presentation clock and repaints at FRAME cadence while presented; a still scene 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 <scene> markup tag through crate::Elements.

use omp_tui::{
	components::Scene,
	dom,
	scene::{Ray, Vec3, vec3},
};

// A still orb; animated scenes implement `scene::Trace` instead.
let orb = |ray: Ray| -> (Vec3, f32) {
	let along = -ray.origin.dot(ray.dir);
	let nearest = ray.origin + ray.dir * along;
	let glow = 1.0 - nearest.dot(nearest);
	(vec3(0.4, 0.8, 1.0) * (0.4 + 0.6 * glow), if glow > 0.0 { 1.0 } else { 0.0 })
};
let tree = dom! {
	<col>
		{Scene::new(orb).size(24, 8).still()}
	</col>
};

Implementations§

Source§

impl Scene

Source

pub fn new(scene: impl Trace + 'static) -> Self

Creates a 24×8-cell viewport over scene.

Source

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

Sets the viewport size in terminal cells.

Source

pub const fn still(self) -> Self

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

Source

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

Sets one scene property.

Trait Implementations§

Source§

impl Component for Scene

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 Scene

§

impl !Send for Scene

§

impl !Sync for Scene

§

impl !UnwindSafe for Scene

§

impl Freeze for Scene

§

impl Unpin for Scene

§

impl UnsafeUnpin for Scene

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.