new rendering engine

This commit is contained in:
2026-06-19 02:55:33 +02:00
parent 0a90d6a5d7
commit 81a4167382
53 changed files with 1668 additions and 378 deletions

View File

@@ -15,6 +15,7 @@ pub use ports::{
EventPublisher, PasswordHashPort, SecretStore, WidgetStateReader,
};
pub use value_objects::{
ContainerNode, Direction, DisplayHint, KeyMapping, Layout, LayoutChild, LayoutNode,
LayoutValidationError, Sizing, Value, WidgetError, WidgetState,
AlignItems, ContainerNode, Direction, DisplayHint, DisplayHintKind, HAlign, JustifyContent,
KeyMapping, Layout, LayoutChild, LayoutNode, LayoutValidationError, Sizing, VAlign, Value,
WidgetError, WidgetState,
};

View File

@@ -1,5 +1,5 @@
use crate::entities::WidgetId;
use crate::value_objects::{Layout, WidgetState};
use crate::value_objects::{DisplayHint, Layout, WidgetState};
use std::future::Future;
pub trait BroadcastPort {
@@ -8,11 +8,11 @@ pub trait BroadcastPort {
fn push_screen_update(
&self,
layout: &Layout,
widgets: &[(WidgetId, WidgetState)],
widgets: &[(WidgetId, DisplayHint, WidgetState)],
) -> impl Future<Output = Result<(), Self::Error>> + Send;
fn push_data_update(
&self,
updates: &[(WidgetId, WidgetState)],
updates: &[(WidgetId, DisplayHint, WidgetState)],
) -> impl Future<Output = Result<(), Self::Error>> + Send;
}

View File

@@ -13,11 +13,30 @@ pub enum Direction {
Column,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum JustifyContent {
Start,
Center,
End,
SpaceBetween,
SpaceEvenly,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AlignItems {
Start,
Center,
End,
Stretch,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ContainerNode {
pub direction: Direction,
pub gap: u8,
pub padding: u8,
pub justify_content: JustifyContent,
pub align_items: AlignItems,
pub children: Vec<LayoutChild>,
}

View File

@@ -5,7 +5,8 @@ mod widget_state;
pub use key_mapping::KeyMapping;
pub use layout::{
ContainerNode, Direction, Layout, LayoutChild, LayoutNode, LayoutValidationError, Sizing,
AlignItems, ContainerNode, Direction, JustifyContent, Layout, LayoutChild, LayoutNode,
LayoutValidationError, Sizing,
};
pub use value::Value;
pub use widget_state::{DisplayHint, WidgetError, WidgetState};
pub use widget_state::{DisplayHint, DisplayHintKind, HAlign, VAlign, WidgetError, WidgetState};

View File

@@ -13,8 +13,39 @@ pub enum WidgetError {
ExtractionFailed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HAlign {
Left,
Center,
Right,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VAlign {
Top,
Middle,
Bottom,
}
#[derive(Debug, Clone, PartialEq)]
pub enum DisplayHint {
pub struct DisplayHint {
pub kind: DisplayHintKind,
pub h_align: HAlign,
pub v_align: VAlign,
}
impl DisplayHint {
pub fn new(kind: DisplayHintKind) -> Self {
Self {
kind,
h_align: HAlign::Left,
v_align: VAlign::Top,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DisplayHintKind {
IconValue,
TextBlock,
KeyValue,