document some stuff

This commit is contained in:
griffi-gh 2024-03-25 18:13:10 +01:00
parent 9e61c08706
commit e9078ade10
5 changed files with 22 additions and 2 deletions

View file

@ -4,6 +4,7 @@ use proc_macro::TokenStream;
use quote::quote; use quote::quote;
use syn::{parse_macro_input, DeriveInput}; use syn::{parse_macro_input, DeriveInput};
/// Implements `Signal` trait for the given type
#[proc_macro_derive(Signal)] #[proc_macro_derive(Signal)]
pub fn signal(input: TokenStream) -> TokenStream { pub fn signal(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput); let input = parse_macro_input!(input as DeriveInput);

View file

@ -1,3 +1,5 @@
//! modular procedural background system
use glam::Vec2; use glam::Vec2;
use crate::draw::UiDrawCommandList; use crate::draw::UiDrawCommandList;
@ -9,6 +11,7 @@ mod impls;
pub use rect::FrameRect; pub use rect::FrameRect;
/// Trait for a drawable frame
pub trait Frame { pub trait Frame {
/// Draw the frame at the given position and size /// Draw the frame at the given position and size
fn draw(&self, draw: &mut UiDrawCommandList, position: Vec2, parent_size: Vec2); fn draw(&self, draw: &mut UiDrawCommandList, position: Vec2, parent_size: Vec2);

View file

@ -1,16 +1,26 @@
use glam::{vec2, UVec2, Vec2, Vec4}; //! nine-patch frame implementation
//!
//! A 9-patch image is an image that can be scaled in a way that preserves the corners and edges of the image while scaling the center.
//! This is useful for creating scalable UI elements like buttons, windows, etc.
use glam::{vec2, UVec2, Vec2};
use crate::{color, draw::{ImageHandle, UiDrawCommand}, rect::{Corners, FillColor, Rect}}; use crate::{color, draw::{ImageHandle, UiDrawCommand}, rect::{Corners, FillColor, Rect}};
use super::Frame; use super::Frame;
/// Represents a 9-patch image asset
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
pub struct NinePatchAsset { pub struct NinePatchAsset {
pub image: ImageHandle, pub image: ImageHandle,
//TODO: remove this //TODO: remove this:
pub size: (u32, u32), pub size: (u32, u32),
pub scalable_region: Rect, pub scalable_region: Rect,
} }
//TODO allow scaling/moving corners //TODO allow scaling/moving corners
/// A 9-patch frame
///
/// Can optionally be tinted with a color (works well with grayscale assets)
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
pub struct NinePatchFrame { pub struct NinePatchFrame {
pub asset: NinePatchAsset, pub asset: NinePatchAsset,

View file

@ -1,3 +1,5 @@
//! frame-relative positioning/size
use glam::{Vec2, vec2}; use glam::{Vec2, vec2};
use derive_more::{Add, AddAssign, Sub, SubAssign}; use derive_more::{Add, AddAssign, Sub, SubAssign};
use crate::layout::{Size, Size2d}; use crate::layout::{Size, Size2d};

View file

@ -1,7 +1,10 @@
//! allows stacking two frames on top of each other
use glam::Vec2; use glam::Vec2;
use crate::draw::UiDrawCommandList; use crate::draw::UiDrawCommandList;
use super::Frame; use super::Frame;
/// A frame that draws two frames on top of each other
pub struct FrameStack(pub Box<dyn Frame>, pub Box<dyn Frame>); pub struct FrameStack(pub Box<dyn Frame>, pub Box<dyn Frame>);
impl Frame for FrameStack { impl Frame for FrameStack {
@ -17,6 +20,7 @@ impl Frame for FrameStack {
} }
pub trait FrameStackExt: Frame { pub trait FrameStackExt: Frame {
/// Stack another frame on top of this one
fn stack(self, other: impl Frame + 'static) -> FrameStack; fn stack(self, other: impl Frame + 'static) -> FrameStack;
} }