VideoStreamDrawableBuilder

Struct VideoStreamDrawableBuilder 

Source
pub struct VideoStreamDrawableBuilder { /* private fields */ }

Implementations§

Source§

impl VideoStreamDrawableBuilder

Source

pub fn new() -> Self

Source

pub fn position(self, position: impl Into<Point<i32>>) -> Self

Examples found in repository?
examples/screens.rs (line 157)
113pub fn main() -> Result<(), AppError> {
114    init_terminal!();
115    init_logger("./screens_showcase.log")?;
116
117    let (cols, rows) = size()?;
118    let renderer = Renderer::<DefaultScreenBuffer<CrosstermCellDrawer>, Instant>::create_renderer(
119        (cols, rows),
120    );
121    let (mut r, ev_handler, _ev_manager) = start_renderer_with_input(renderer);
122    r.set_update_interval(1)?;
123
124    let mut hook = ev_handler.create_hook();
125
126    let mut ad_screens = AdjustableScreens::new_uniform_grid(WIDTH, HEIGHT, &mut r)?;
127
128    for screen in &mut ad_screens {
129        let builder = DrawObjectBuilder::default();
130        let d_key = builder
131            .layer(100)
132            .rect_drawable(|r| {
133                r.border_style(
134                ltrender::terminal_buffer::standard_drawables::rect_drawable::BorderStyle::Custom {
135                    top: TerminalChar::from_char('T'),
136                    bottom: TerminalChar::from_char('B'),
137                    left: TerminalChar::from_char('L'),
138                    right: TerminalChar::from_char('R'),
139                },
140            )
141            .border_thickness(1)
142            .fill_style(' ')
143            .rect(Rect::from_coords(0, 0, 2, 2))
144            .screen_fit(ScreenFitType::Full)
145            })?
146            .add_lifetime(ObjectLifetime::ExplicitRemove)
147            .screen(screen)
148            .build(&mut r)?;
149        info!("manually rendering drawable: {:?}", d_key);
150        r.render_drawable(d_key)?;
151    }
152
153    let (s, recv) = mpsc::channel();
154    let builder = DrawObjectBuilder::default();
155    let text_stream = builder
156        .layer(200)
157        .videostream_drawable(|b| b.position((0, 0)).recv(recv))?
158        .add_lifetime(ObjectLifetime::ExplicitRemove)
159        .screen(0)
160        .build(&mut r)?;
161    let callback_hook = ev_handler.create_hook();
162    let callback_renderh: RenderHandle<Instant> = r.clone();
163    hook.on_mouse_button_press(MouseButtons::Left, move |_| {
164        if let TargetScreen::Screen(id) = callback_hook.current_selected_screen() {
165            let msg = format!("selected_screen: {} ", id);
166            info!("{}", msg);
167            let mut data = Vec::new();
168            for chr in msg.chars() {
169                data.push(Some(TerminalChar::from_char(chr)));
170            }
171            let _ = s.send(StreamFrame {
172                size: (data.len() as u16, 1),
173                data,
174            });
175            let _ = callback_renderh.render_drawable(text_stream);
176        }
177    })?;
178    loop {
179        if hook.is_pressed(InputButton::Key(KeyCode::Char('c'))) {
180            info!("breaking out of the loop");
181            break;
182        }
183
184        let cur_size = size()?;
185        let rendered_size = r.get_terminal_size()?;
186        if cur_size != rendered_size {
187            info!(
188                "redrawing with cur_size: {:?}, rendered: {:?}",
189                cur_size, rendered_size
190            );
191            r.handle_resize(cur_size)?;
192            ad_screens.place_screens_uniformly(&mut r)?;
193        }
194    }
195    restore_terminal()?;
196    info!("returning with ok");
197    Ok(())
198}
Source

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

Source

pub fn recv(self, receiver: Receiver<StreamFrame>) -> Self

Examples found in repository?
examples/screens.rs (line 157)
113pub fn main() -> Result<(), AppError> {
114    init_terminal!();
115    init_logger("./screens_showcase.log")?;
116
117    let (cols, rows) = size()?;
118    let renderer = Renderer::<DefaultScreenBuffer<CrosstermCellDrawer>, Instant>::create_renderer(
119        (cols, rows),
120    );
121    let (mut r, ev_handler, _ev_manager) = start_renderer_with_input(renderer);
122    r.set_update_interval(1)?;
123
124    let mut hook = ev_handler.create_hook();
125
126    let mut ad_screens = AdjustableScreens::new_uniform_grid(WIDTH, HEIGHT, &mut r)?;
127
128    for screen in &mut ad_screens {
129        let builder = DrawObjectBuilder::default();
130        let d_key = builder
131            .layer(100)
132            .rect_drawable(|r| {
133                r.border_style(
134                ltrender::terminal_buffer::standard_drawables::rect_drawable::BorderStyle::Custom {
135                    top: TerminalChar::from_char('T'),
136                    bottom: TerminalChar::from_char('B'),
137                    left: TerminalChar::from_char('L'),
138                    right: TerminalChar::from_char('R'),
139                },
140            )
141            .border_thickness(1)
142            .fill_style(' ')
143            .rect(Rect::from_coords(0, 0, 2, 2))
144            .screen_fit(ScreenFitType::Full)
145            })?
146            .add_lifetime(ObjectLifetime::ExplicitRemove)
147            .screen(screen)
148            .build(&mut r)?;
149        info!("manually rendering drawable: {:?}", d_key);
150        r.render_drawable(d_key)?;
151    }
152
153    let (s, recv) = mpsc::channel();
154    let builder = DrawObjectBuilder::default();
155    let text_stream = builder
156        .layer(200)
157        .videostream_drawable(|b| b.position((0, 0)).recv(recv))?
158        .add_lifetime(ObjectLifetime::ExplicitRemove)
159        .screen(0)
160        .build(&mut r)?;
161    let callback_hook = ev_handler.create_hook();
162    let callback_renderh: RenderHandle<Instant> = r.clone();
163    hook.on_mouse_button_press(MouseButtons::Left, move |_| {
164        if let TargetScreen::Screen(id) = callback_hook.current_selected_screen() {
165            let msg = format!("selected_screen: {} ", id);
166            info!("{}", msg);
167            let mut data = Vec::new();
168            for chr in msg.chars() {
169                data.push(Some(TerminalChar::from_char(chr)));
170            }
171            let _ = s.send(StreamFrame {
172                size: (data.len() as u16, 1),
173                data,
174            });
175            let _ = callback_renderh.render_drawable(text_stream);
176        }
177    })?;
178    loop {
179        if hook.is_pressed(InputButton::Key(KeyCode::Char('c'))) {
180            info!("breaking out of the loop");
181            break;
182        }
183
184        let cur_size = size()?;
185        let rendered_size = r.get_terminal_size()?;
186        if cur_size != rendered_size {
187            info!(
188                "redrawing with cur_size: {:?}, rendered: {:?}",
189                cur_size, rendered_size
190            );
191            r.handle_resize(cur_size)?;
192            ad_screens.place_screens_uniformly(&mut r)?;
193        }
194    }
195    restore_terminal()?;
196    info!("returning with ok");
197    Ok(())
198}
Source

pub fn build(self) -> Result<Box<dyn Drawable>, DrawObjectBuilderError>

Trait Implementations§

Source§

impl Default for VideoStreamDrawableBuilder

Source§

fn default() -> VideoStreamDrawableBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

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

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

Performs the conversion.
§

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

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

Performs the conversion.