Pipeline and structure
This commit is contained in:
+1
-45
@@ -1,17 +1,4 @@
|
|||||||
#[derive(Debug, Clone, Copy)]
|
use crate::unit::{Rect, Size};
|
||||||
pub enum Size {
|
|
||||||
Fixed(u16),
|
|
||||||
Flex(u16),
|
|
||||||
Percent(u16),
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
|
||||||
pub struct Rect {
|
|
||||||
pub x: u16,
|
|
||||||
pub y: u16,
|
|
||||||
pub width: u16,
|
|
||||||
pub height: u16,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum LayoutItem {
|
pub enum LayoutItem {
|
||||||
@@ -91,37 +78,6 @@ impl LayoutItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Size {
|
|
||||||
pub fn get_fixed(&self, alloc: u16) -> u16 {
|
|
||||||
match self {
|
|
||||||
Self::Fixed(v) => *v,
|
|
||||||
Self::Percent(v) => alloc * (*v) / 100,
|
|
||||||
Self::Flex(_) => 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_flex(&self) -> u16 {
|
|
||||||
match self {
|
|
||||||
Self::Flex(f) => *f,
|
|
||||||
_ => 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get(&self, alloc: u16, remaining: u16, total_weight: u16) -> u16 {
|
|
||||||
match self {
|
|
||||||
Self::Fixed(v) => *v,
|
|
||||||
Self::Percent(v) => alloc * (*v) / 100,
|
|
||||||
Self::Flex(v) => {
|
|
||||||
if total_weight == 0 {
|
|
||||||
0
|
|
||||||
} else {
|
|
||||||
remaining * v / total_weight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Rect {
|
impl Rect {
|
||||||
pub fn allocate(&self, layout: &LayoutItem) -> Allocation {
|
pub fn allocate(&self, layout: &LayoutItem) -> Allocation {
|
||||||
let mut widget_alloc = Vec::new();
|
let mut widget_alloc = Vec::new();
|
||||||
|
|||||||
@@ -1 +1,4 @@
|
|||||||
pub mod layout;
|
pub mod layout;
|
||||||
|
pub mod render;
|
||||||
|
pub mod widget;
|
||||||
|
pub mod unit;
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
|
use crate::unit::{Point, Rect};
|
||||||
|
|
||||||
|
pub enum Instr {
|
||||||
|
DrawText(Point, String),
|
||||||
|
DrawOutline(Rect),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RenderScope {
|
||||||
|
pub rect: Rect,
|
||||||
|
draw_instructions: Vec<Instr>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RenderScope {
|
||||||
|
pub fn draw_text<P: Into<Point>, T: Display>(&mut self, at: P, text: T) {
|
||||||
|
self.draw_instructions
|
||||||
|
.push(Instr::DrawText(at.into(), text.to_string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn draw_outline<P: Into<Point>>(&mut self, rect: Rect) {
|
||||||
|
self.draw_instructions.push(Instr::DrawOutline(rect));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RenderScope {
|
||||||
|
pub fn new(rect: Rect) -> Self {
|
||||||
|
Self {
|
||||||
|
rect,
|
||||||
|
draw_instructions: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<(u16, u16)> for Point {
|
||||||
|
fn from(value: (u16, u16)) -> Self {
|
||||||
|
Self {
|
||||||
|
x: value.0,
|
||||||
|
y: value.1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Rect> for Point {
|
||||||
|
fn from(value: Rect) -> Self {
|
||||||
|
Self {
|
||||||
|
x: value.x,
|
||||||
|
y: value.y,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub struct Point {
|
||||||
|
pub x: u16,
|
||||||
|
pub y: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub enum Size {
|
||||||
|
Fixed(u16),
|
||||||
|
Flex(u16),
|
||||||
|
Percent(u16),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub struct Rect {
|
||||||
|
pub x: u16,
|
||||||
|
pub y: u16,
|
||||||
|
pub width: u16,
|
||||||
|
pub height: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Size {
|
||||||
|
pub fn get_fixed(&self, alloc: u16) -> u16 {
|
||||||
|
match self {
|
||||||
|
Self::Fixed(v) => *v,
|
||||||
|
Self::Percent(v) => alloc * (*v) / 100,
|
||||||
|
Self::Flex(_) => 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_flex(&self) -> u16 {
|
||||||
|
match self {
|
||||||
|
Self::Flex(f) => *f,
|
||||||
|
_ => 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get(&self, alloc: u16, remaining: u16, total_weight: u16) -> u16 {
|
||||||
|
match self {
|
||||||
|
Self::Fixed(v) => *v,
|
||||||
|
Self::Percent(v) => alloc * (*v) / 100,
|
||||||
|
Self::Flex(v) => {
|
||||||
|
if total_weight == 0 {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
remaining * v / total_weight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
use crate::render::RenderScope;
|
||||||
|
|
||||||
|
pub trait Widget {
|
||||||
|
fn render(&self, scope: &mut RenderScope);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user