Component params

This commit is contained in:
2026-01-30 19:02:26 +01:00
parent 2799faaa73
commit 1f64b4f6e2
7 changed files with 75 additions and 53 deletions
+7 -9
View File
@@ -2,7 +2,11 @@ use std::{io::stdout, sync::Arc, time::Instant};
use crossterm::{cursor::MoveTo, execute, terminal::Clear};
use crate::{prelude::Context, render::Area, DrawContext, View};
use crate::{
prelude::{ComponentImpl, Context},
render::Area,
DrawContext, View,
};
use super::Engine;
@@ -24,10 +28,7 @@ impl<T: Engine> Benchmark<T> {
}
impl<T: Engine> Engine<BenchmarkResult> for Benchmark<T> {
fn run<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> crate::Result<BenchmarkResult> {
fn run<F: ComponentImpl + 'static>(&self, component: F) -> crate::Result<BenchmarkResult> {
let mut times: Vec<u128> = Vec::new();
let cx = self.init(component);
@@ -59,10 +60,7 @@ impl<T: Engine> Engine<BenchmarkResult> for Benchmark<T> {
})
}
fn init<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> Arc<Context> {
fn init<F: ComponentImpl + 'static>(&self, component: F) -> Arc<Context> {
self.0.init(component)
}
+3 -9
View File
@@ -7,7 +7,7 @@ use crossterm::{cursor::MoveTo, execute, terminal::Clear};
use crate::{
engine::{commands, CommandExecutor},
prelude::Context,
prelude::{ComponentImpl, Context},
render::Area,
DrawContext, View,
};
@@ -79,10 +79,7 @@ impl Engine for Console {
));
}
fn init<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> Arc<Context> {
fn init<C: ComponentImpl + 'static>(&self, component: C) -> Arc<Context> {
let cx = Context::new(component, self.executor.clone());
cx.refresh();
@@ -102,10 +99,7 @@ impl Engine for Console {
self.executor.clone()
}
fn run<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> crate::Result<()> {
fn run<F: ComponentImpl + 'static>(&self, component: F) -> crate::Result<()> {
let cx = self.init(component);
while self.executor.is_running() {
+7 -10
View File
@@ -7,18 +7,15 @@ pub use console::*;
use std::{any::Any, sync::Arc};
use crate::{prelude::Context, render::Area, DrawContext, View};
use crate::{
prelude::{ComponentImpl, Context},
render::Area,
DrawContext, View,
};
pub trait Engine<Output = ()> {
fn run<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> crate::Result<Output>;
fn init<F: Fn(&Arc<Context>) -> View + Send + Sync + 'static>(
&self,
component: F,
) -> Arc<Context>;
fn run<C: ComponentImpl + 'static>(&self, component: C) -> crate::Result<Output>;
fn init<C: ComponentImpl + 'static>(&self, component: C) -> Arc<Context>;
fn render(&self, cx: &Arc<Context>);
fn render_delay(&self) {
std::thread::sleep(std::time::Duration::from_millis(16))