A (forked) rust crate for using Ratatui in a Bevy application.
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}