Fix LinearLayout children width

Now properly gives the full width to every children.
This commit is contained in:
Alexandre Bury 2016-07-26 10:49:37 -07:00
parent 0643c50bd5
commit eb6b5d5728
4 changed files with 28 additions and 10 deletions

View File

@ -89,9 +89,21 @@ impl XY<usize> {
/// Returns a new `Vec2` with the axis `o` set to `value`. /// Returns a new `Vec2` with the axis `o` set to `value`.
pub fn with_axis(&self, o: Orientation, value: usize) -> Self { pub fn with_axis(&self, o: Orientation, value: usize) -> Self {
let mut other = *self; let mut new = *self;
*o.get_ref(&mut other) = value; *o.get_ref(&mut new) = value;
other new
}
/// Returns a new `Vec2` with the axis `o` set to the value from `other`.
pub fn with_axis_from(&self, o: Orientation, other: &Vec2) -> Self {
let mut new = *self;
new.set_axis_from(o, other);
new
}
/// Sets the axis `o` on `self` to the value from `other`.
pub fn set_axis_from(&mut self, o: Orientation, other: &Vec2) {
*o.get_ref(self) = o.get(other);
} }
} }

View File

@ -192,8 +192,11 @@ impl View for LinearLayout {
self.get_min_size(size); self.get_min_size(size);
} }
let o = self.orientation;
for child in &mut self.children { for child in &mut self.children {
child.view.layout(child.size); child.size.set_axis_from(o.swap(), &size);
child.view.layout(size.with_axis_from(o, &child.size));
} }
} }

View File

@ -207,6 +207,15 @@ impl SizeCache {
/// Creates a new bi-dimensional cache. /// Creates a new bi-dimensional cache.
/// ///
/// It will stay valid for the same request, and compatible ones.
///
/// A compatible request is one where, for each axis, either:
///
/// * the request is equal to the cached size, or
/// * the request is larger than the cached size and the cache is unconstrained
///
/// Notes:
///
/// * `size` must fit inside `req`. /// * `size` must fit inside `req`.
/// * for each dimension, `constrained = (size == req)` /// * for each dimension, `constrained = (size == req)`
fn build(size: Vec2, req: Vec2) -> XY<Self> { fn build(size: Vec2, req: Vec2) -> XY<Self> {

View File

@ -3,9 +3,7 @@ use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::atomic::{AtomicUsize, Ordering};
use {Cursive, Printer}; use {Cursive, Printer};
use vec::Vec2;
use align::HAlign; use align::HAlign;
use direction::Orientation;
use theme::{ColorStyle, Effect}; use theme::{ColorStyle, Effect};
use view::View; use view::View;
@ -120,8 +118,4 @@ impl View for ProgressBar {
printer.print((offset, 0), &label); printer.print((offset, 0), &label);
}); });
} }
fn get_min_size(&mut self, size: Vec2) -> Vec2 {
size.with_axis(Orientation::Vertical, 1)
}
} }