use crate::math::Xform; pub struct TransformStack { stack: Vec, } impl TransformStack { pub fn new() -> TransformStack { TransformStack { stack: Vec::new() } } pub fn clear(&mut self) { self.stack.clear(); } pub fn push(&mut self, xform: Xform) { match self.stack.last() { None => self.stack.push(xform), Some(prev_xform) => self.stack.push(xform.compose(prev_xform)), } } pub fn pop(&mut self) -> Option { self.stack.pop() } pub fn top(&self) -> Option<&Xform> { self.stack.last() } }