diff --git a/input/src/input_dsl.rs b/input/src/input_dsl.rs index cc54282..f4cd98f 100644 --- a/input/src/input_dsl.rs +++ b/input/src/input_dsl.rs @@ -62,7 +62,7 @@ impl EventMap { /// Create event map from path to text file. pub fn load_from_path <'s> ( &'s mut self, path: impl AsRef - ) -> Usually<&mut Self> where Self: DslInto + DslInto { + ) -> Usually<&'s mut Self> where Self: DslInto + DslInto { if exists(path.as_ref())? { let source = read_to_string(&path)?; let path: Arc = Arc::new(path.as_ref().into()); @@ -81,7 +81,7 @@ impl EventMap { /// Load one event binding into the event map. pub fn load_from_source_one <'s> ( &'s mut self, dsl: impl Dsl, path: &Option<&Arc> - ) -> Usually<&mut Self> where Self: DslInto + DslInto { + ) -> Usually<&'s mut Self> where Self: DslInto + DslInto { if let Some(exp) = dsl.head()?.exp()? && let Some(sym) = exp.head()?.sym()? && let Some(tail) = exp.tail()? @@ -117,10 +117,10 @@ impl EventMap { } impl Binding { pub fn from_dsl (dsl: impl Dsl) -> Usually { - let mut command: Option = None; - let mut condition: Option = None; - let mut description: Option> = None; - let mut source: Option> = None; + let command: Option = None; + let condition: Option = None; + let description: Option> = None; + let source: Option> = None; if let Some(command) = command { Ok(Self { command, condition, description, source }) } else { diff --git a/output/src/ops.rs b/output/src/ops.rs index a1c3de3..f16d971 100644 --- a/output/src/ops.rs +++ b/output/src/ops.rs @@ -777,27 +777,15 @@ pub struct Stack { callback: F } impl)->())->()> Stack { + pub fn north (callback: F) -> Self { Self::new(North, callback) } + pub fn south (callback: F) -> Self { Self::new(South, callback) } + pub fn east (callback: F) -> Self { Self::new(East, callback) } + pub fn west (callback: F) -> Self { Self::new(West, callback) } + pub fn above (callback: F) -> Self { Self::new(Above, callback) } + pub fn below (callback: F) -> Self { Self::new(Below, callback) } pub fn new (direction: Direction, callback: F) -> Self { Self { direction, callback, __: Default::default(), } } - pub fn north (callback: F) -> Self { - Self::new(North, callback) - } - pub fn south (callback: F) -> Self { - Self::new(South, callback) - } - pub fn east (callback: F) -> Self { - Self::new(East, callback) - } - pub fn west (callback: F) -> Self { - Self::new(West, callback) - } - pub fn above (callback: F) -> Self { - Self::new(Above, callback) - } - pub fn below (callback: F) -> Self { - Self::new(Below, callback) - } } impl)->())->()> Content for Stack { fn layout (&self, to: E::Area) -> E::Area { @@ -808,6 +796,8 @@ impl)->())->()> Content for St (self.callback)(&mut move |component: &dyn Render|{ let [_, _, w, h] = component.layout([x, y, w_remaining, h_remaining].into()).xywh(); match self.direction { + North | West => { todo!() }, + Above | Below => {}, South => { y = y.plus(h); h_used = h_used.plus(h); h_remaining = h_remaining.minus(h); @@ -816,16 +806,12 @@ impl)->())->()> Content for St w_used = w_used.plus(w); w_remaining = w_remaining.minus(w); h_used = h_used.max(h); }, - North | West => { todo!() }, - Above | Below => {}, - _ => unreachable!(), } }); match self.direction { North | West => { todo!() }, South | East => { [to.x(), to.y(), w_used.into(), h_used.into()].into() }, Above | Below => { [to.x(), to.y(), to.w(), to.h()].into() }, - _ => unreachable!(), } } fn render (&self, to: &mut E) { @@ -836,25 +822,16 @@ impl)->())->()> Content for St (self.callback)(&mut move |component: &dyn Render|{ let layout = component.layout([x, y, w_remaining, h_remaining].into()); match self.direction { - South => { - y = y.plus(layout.h()); - h_remaining = h_remaining.minus(layout.h()); - h_used = h_used.plus(layout.h()); - to.place(layout, component); - }, - East => { - x = x.plus(layout.w()); - w_remaining = w_remaining.minus(layout.w()); - w_used = w_used.plus(layout.h()); - to.place(layout, component); - }, - Above | Below => { - to.place(layout, component); - } - North | West => { - todo!() - }, - _ => unreachable!() + Above | Below => { to.place(layout, component); } + North | West => { todo!() }, + South => { y = y.plus(layout.h()); + h_remaining = h_remaining.minus(layout.h()); + h_used = h_used.plus(layout.h()); + to.place(layout, component); }, + East => { x = x.plus(layout.w()); + w_remaining = w_remaining.minus(layout.w()); + w_used = w_used.plus(layout.h()); + to.place(layout, component); }, } }); }