A (forked) rust crate for using Ratatui in a Bevy application.
at main 54 lines 1.5 kB view raw
1use std::fmt::Debug; 2 3use bevy::prelude::*; 4 5use ratatui::Terminal; 6 7use crate::context::TerminalContext; 8use soft_ratatui::embedded_graphics_unicodefonts::{ 9 mono_8x13_atlas, mono_8x13_bold_atlas, mono_8x13_italic_atlas, 10}; 11use soft_ratatui::{EmbeddedGraphics, SoftBackend}; 12 13use super::plugin::WindowedPlugin; 14 15/// Ratatui context that will set up a window and render the ratatui buffer using a 2D texture, 16/// instead of drawing to a terminal buffer. 17#[derive(Deref, DerefMut)] 18pub struct WindowedContext(Terminal<SoftBackend<EmbeddedGraphics>>); 19 20impl Debug for WindowedContext { 21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 22 write!(f, "WindowedContext()") 23 } 24} 25 26impl TerminalContext<SoftBackend<EmbeddedGraphics>> for WindowedContext { 27 fn init() -> Result<Self> { 28 let font_regular = mono_8x13_atlas(); 29 let font_italic = mono_8x13_italic_atlas(); 30 let font_bold = mono_8x13_bold_atlas(); 31 let backend = SoftBackend::<EmbeddedGraphics>::new( 32 100, 33 50, 34 font_regular, 35 Some(font_bold), 36 Some(font_italic), 37 ); 38 let terminal = Terminal::new(backend)?; 39 Ok(Self(terminal)) 40 } 41 42 fn restore() -> Result<()> { 43 Ok(()) 44 } 45 46 fn configure_plugin_group( 47 _group: &crate::RatatuiPlugins, 48 mut builder: bevy::app::PluginGroupBuilder, 49 ) -> bevy::app::PluginGroupBuilder { 50 builder = builder.add(WindowedPlugin); 51 52 builder 53 } 54}