Moved widget rendering back into display system

This commit is contained in:
Silas Bartha 2024-06-05 10:53:49 -04:00
parent 8fe2406277
commit 10b09a1748
Signed by: soaos
GPG Key ID: 9BD3DCC0D56A09B2
3 changed files with 14 additions and 25 deletions

View File

@ -2,16 +2,16 @@ use bevy::{
prelude::*,
render::render_resource::{Extent3d, TextureFormat},
};
use crossterm::event::Event;
use bevy_framebuffer_extract::{
components::FramebufferExtractDestination, render_assets::FramebufferExtractSource,
};
use crossterm::event::Event;
use ratatui::{
style::Stylize,
widgets::{Paragraph, Wrap},
};
use crate::input::events::TerminalInputEvent;
use crate::{input::events::TerminalInputEvent, widgets::components::Widget};
use super::resources::Terminal;
@ -28,6 +28,7 @@ const BRAILLE_DOT_BIT_POSITIONS: [u8; 8] = [0, 1, 2, 6, 3, 4, 5, 7];
pub fn print_to_terminal(
mut terminal: ResMut<Terminal>,
image_exports: Query<&FramebufferExtractDestination>,
mut widgets: Query<&mut Widget>,
) {
for image_export in image_exports.iter() {
let mut image = image_export
@ -77,6 +78,15 @@ pub fn print_to_terminal(
.wrap(Wrap { trim: true }),
frame.size(),
);
let mut active_widgets = widgets
.iter_mut()
.filter(|widget| widget.enabled)
.collect::<Vec<_>>();
active_widgets.sort_by(|a, b| a.depth.cmp(&b.depth));
for mut widget in active_widgets {
widget.widget.render(frame, frame.size());
}
})
.expect("Failed to draw terminal frame");
}

View File

@ -83,11 +83,7 @@ impl Plugin for TerminalDisplayPlugin {
(
input::systems::input_handling,
display::systems::resize_handling,
(
display::systems::print_to_terminal,
widgets::systems::draw_widgets,
)
.chain(),
display::systems::print_to_terminal,
widgets::systems::widget_input_handling,
),
)

View File

@ -1,26 +1,9 @@
use bevy::prelude::*;
use crate::{display::resources::Terminal, input::events::TerminalInputEvent};
use crate::input::events::TerminalInputEvent;
use super::components::Widget;
/// Invokes every enabled widget's `render` method
pub fn draw_widgets(mut terminal: ResMut<Terminal>, mut widgets: Query<&mut Widget>) {
terminal
.0
.draw(|frame| {
let mut active_widgets = widgets
.iter_mut()
.filter(|widget| widget.enabled)
.collect::<Vec<_>>();
active_widgets.sort_by(|a, b| a.depth.cmp(&b.depth));
for mut widget in active_widgets {
widget.widget.render(frame, frame.size());
}
})
.unwrap();
}
/// Invokes every enabled widget's `handle_events` methods for each incoming input event
pub fn widget_input_handling(
mut widgets: Query<&mut Widget>,