mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-23 17:35:00 +00:00
Rename View::get_min_size
-> required_size
This commit is contained in:
parent
451d27b58e
commit
d7eaa5a086
@ -15,7 +15,7 @@
|
|||||||
//! `View::layout()` on its own children.
|
//! `View::layout()` on its own children.
|
||||||
//!
|
//!
|
||||||
//! In order to determine how much space should be given each child, parents
|
//! In order to determine how much space should be given each child, parents
|
||||||
//! can use `View::get_min_size()` on them.
|
//! can use `View::required_size()` on them.
|
||||||
//!
|
//!
|
||||||
//!
|
//!
|
||||||
//! ### Contracts
|
//! ### Contracts
|
||||||
@ -31,9 +31,9 @@
|
|||||||
//!
|
//!
|
||||||
//! In this case, it is safe to omit the call to `View::layout()`.
|
//! In this case, it is safe to omit the call to `View::layout()`.
|
||||||
//!
|
//!
|
||||||
//! * The value returned by `get_min_size` should be an actually viable size,
|
//! * The value returned by `required_size` should be an actually viable size,
|
||||||
//! no matter what the request is. This means calling `View::layout()` with
|
//! no matter what the request is. This means calling `View::layout()` with
|
||||||
//! a size returned by `get_min_size` is **never** an error.
|
//! a size returned by `required_size` is **never** an error.
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod view_wrapper;
|
mod view_wrapper;
|
||||||
@ -85,7 +85,7 @@ pub trait View {
|
|||||||
/// It's also fine to ignore it and return a fixed value.
|
/// It's also fine to ignore it and return a fixed value.
|
||||||
///
|
///
|
||||||
/// Default implementation always return `(1,1)`.
|
/// Default implementation always return `(1,1)`.
|
||||||
fn get_min_size(&mut self, constraint: Vec2) -> Vec2 {
|
fn required_size(&mut self, constraint: Vec2) -> Vec2 {
|
||||||
let _ = constraint;
|
let _ = constraint;
|
||||||
Vec2::new(1, 1)
|
Vec2::new(1, 1)
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ pub trait View {
|
|||||||
/// * Views can ignore it and always return true (default implementation).
|
/// * Views can ignore it and always return true (default implementation).
|
||||||
/// They will always be assumed to have changed.
|
/// They will always be assumed to have changed.
|
||||||
/// * View Groups can ignore it and always re-layout their children.
|
/// * View Groups can ignore it and always re-layout their children.
|
||||||
/// * If they call `get_min_size` or `layout` with stable parameters,
|
/// * If they call `required_size` or `layout` with stable parameters,
|
||||||
/// the children may cache the result themselves and speed up the
|
/// the children may cache the result themselves and speed up the
|
||||||
/// process anyway.
|
/// process anyway.
|
||||||
fn needs_relayout(&self) -> bool {
|
fn needs_relayout(&self) -> bool {
|
||||||
|
@ -30,9 +30,9 @@ pub trait ViewWrapper {
|
|||||||
self.get_view().draw(printer);
|
self.get_view().draw(printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps the `get_min_size` method.
|
/// Wraps the `required_size` method.
|
||||||
fn wrap_get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn wrap_required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
self.get_view_mut().get_min_size(req)
|
self.get_view_mut().required_size(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wraps the `on_event` method.
|
/// Wraps the `on_event` method.
|
||||||
@ -66,8 +66,8 @@ impl<T: ViewWrapper> View for T {
|
|||||||
self.wrap_draw(printer);
|
self.wrap_draw(printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
self.wrap_get_min_size(req)
|
self.wrap_required_size(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_event(&mut self, ch: Event) -> EventResult {
|
fn on_event(&mut self, ch: Event) -> EventResult {
|
||||||
|
@ -152,10 +152,10 @@ impl<T: View> BoxView<T> {
|
|||||||
impl<T: View> ViewWrapper for BoxView<T> {
|
impl<T: View> ViewWrapper for BoxView<T> {
|
||||||
wrap_impl!(self.view: T);
|
wrap_impl!(self.view: T);
|
||||||
|
|
||||||
fn wrap_get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn wrap_required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
|
|
||||||
let req = self.size.zip_map(req, SizeConstraint::available);
|
let req = self.size.zip_map(req, SizeConstraint::available);
|
||||||
let child_size = self.view.get_min_size(req);
|
let child_size = self.view.required_size(req);
|
||||||
let result = self.size
|
let result = self.size
|
||||||
.zip_map(child_size.zip(req), SizeConstraint::result);
|
.zip_map(child_size.zip(req), SizeConstraint::result);
|
||||||
|
|
||||||
@ -191,57 +191,57 @@ mod tests {
|
|||||||
fn min_size() {
|
fn min_size() {
|
||||||
let mut min_w = DummyView.full_screen().min_width(5);
|
let mut min_w = DummyView.full_screen().min_width(5);
|
||||||
|
|
||||||
assert_eq!(Vec2::new(5, 1), min_w.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(5, 1), min_w.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(5, 10), min_w.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(5, 10), min_w.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(10, 1), min_w.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(10, 1), min_w.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(10, 10), min_w.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(10, 10), min_w.required_size(Vec2::new(10, 10)));
|
||||||
|
|
||||||
let mut min_h = DummyView.full_screen().min_height(5);
|
let mut min_h = DummyView.full_screen().min_height(5);
|
||||||
|
|
||||||
assert_eq!(Vec2::new(1, 5), min_h.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(1, 5), min_h.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(1, 10), min_h.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(1, 10), min_h.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(10, 5), min_h.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(10, 5), min_h.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(10, 10), min_h.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(10, 10), min_h.required_size(Vec2::new(10, 10)));
|
||||||
|
|
||||||
let mut min_s = DummyView.full_screen().min_size((5, 5));
|
let mut min_s = DummyView.full_screen().min_size((5, 5));
|
||||||
|
|
||||||
assert_eq!(Vec2::new(5, 5), min_s.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(5, 5), min_s.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(5, 10), min_s.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(5, 10), min_s.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(10, 5), min_s.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(10, 5), min_s.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(10, 10), min_s.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(10, 10), min_s.required_size(Vec2::new(10, 10)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn max_size() {
|
fn max_size() {
|
||||||
let mut max_w = DummyView.full_screen().max_width(5);
|
let mut max_w = DummyView.full_screen().max_width(5);
|
||||||
|
|
||||||
assert_eq!(Vec2::new(1, 1), max_w.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(1, 1), max_w.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(1, 10), max_w.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(1, 10), max_w.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(5, 1), max_w.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(5, 1), max_w.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(5, 10), max_w.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(5, 10), max_w.required_size(Vec2::new(10, 10)));
|
||||||
|
|
||||||
let mut max_h = DummyView.full_screen().max_height(5);
|
let mut max_h = DummyView.full_screen().max_height(5);
|
||||||
|
|
||||||
assert_eq!(Vec2::new(1, 1), max_h.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(1, 1), max_h.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(1, 5), max_h.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(1, 5), max_h.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(10, 1), max_h.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(10, 1), max_h.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(10, 5), max_h.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(10, 5), max_h.required_size(Vec2::new(10, 10)));
|
||||||
|
|
||||||
let mut max_s = DummyView.full_screen().max_size((5, 5));
|
let mut max_s = DummyView.full_screen().max_size((5, 5));
|
||||||
|
|
||||||
assert_eq!(Vec2::new(1, 1), max_s.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(1, 1), max_s.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(1, 5), max_s.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(1, 5), max_s.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(5, 1), max_s.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(5, 1), max_s.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(5, 5), max_s.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(5, 5), max_s.required_size(Vec2::new(10, 10)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn full_screen() {
|
fn full_screen() {
|
||||||
let mut full = DummyView.full_screen();
|
let mut full = DummyView.full_screen();
|
||||||
|
|
||||||
assert_eq!(Vec2::new(1, 1), full.get_min_size(Vec2::new(1, 1)));
|
assert_eq!(Vec2::new(1, 1), full.required_size(Vec2::new(1, 1)));
|
||||||
assert_eq!(Vec2::new(1, 10), full.get_min_size(Vec2::new(1, 10)));
|
assert_eq!(Vec2::new(1, 10), full.required_size(Vec2::new(1, 10)));
|
||||||
assert_eq!(Vec2::new(10, 1), full.get_min_size(Vec2::new(10, 1)));
|
assert_eq!(Vec2::new(10, 1), full.required_size(Vec2::new(10, 1)));
|
||||||
assert_eq!(Vec2::new(10, 10), full.get_min_size(Vec2::new(10, 10)));
|
assert_eq!(Vec2::new(10, 10), full.required_size(Vec2::new(10, 10)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ impl View for Button {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, _: Vec2) -> Vec2 {
|
fn required_size(&mut self, _: Vec2) -> Vec2 {
|
||||||
// Meh. Fixed size we are.
|
// Meh. Fixed size we are.
|
||||||
Vec2::new(2 + self.label.width(), 1)
|
Vec2::new(2 + self.label.width(), 1)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ pub struct Canvas<T> {
|
|||||||
|
|
||||||
draw: Box<Fn(&Printer, &T)>,
|
draw: Box<Fn(&Printer, &T)>,
|
||||||
on_event: Box<FnMut(Event, &mut T) -> EventResult>,
|
on_event: Box<FnMut(Event, &mut T) -> EventResult>,
|
||||||
get_min_size: Box<FnMut(Vec2, &mut T) -> Vec2>,
|
required_size: Box<FnMut(Vec2, &mut T) -> Vec2>,
|
||||||
layout: Box<FnMut(Vec2, &mut T)>,
|
layout: Box<FnMut(Vec2, &mut T)>,
|
||||||
take_focus: Box<FnMut(Direction, &mut T) -> bool>,
|
take_focus: Box<FnMut(Direction, &mut T) -> bool>,
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ impl<T> Canvas<T> {
|
|||||||
state: state,
|
state: state,
|
||||||
draw: Box::new(|_, _| ()),
|
draw: Box::new(|_, _| ()),
|
||||||
on_event: Box::new(|_, _| EventResult::Ignored),
|
on_event: Box::new(|_, _| EventResult::Ignored),
|
||||||
get_min_size: Box::new(|_, _| Vec2::new(1, 1)),
|
required_size: Box::new(|_, _| Vec2::new(1, 1)),
|
||||||
layout: Box::new(|_, _| ()),
|
layout: Box::new(|_, _| ()),
|
||||||
take_focus: Box::new(|_, _| false),
|
take_focus: Box::new(|_, _| false),
|
||||||
}
|
}
|
||||||
@ -73,20 +73,20 @@ impl<T> Canvas<T> {
|
|||||||
self.with(|s| s.set_on_event(f))
|
self.with(|s| s.set_on_event(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the closure for `get_min_size(Vec2)`
|
/// Sets the closure for `required_size(Vec2)`
|
||||||
pub fn set_get_min_size<F>(&mut self, f: F)
|
pub fn set_required_size<F>(&mut self, f: F)
|
||||||
where F: 'static + FnMut(Vec2, &mut T) -> Vec2
|
where F: 'static + FnMut(Vec2, &mut T) -> Vec2
|
||||||
{
|
{
|
||||||
self.get_min_size = Box::new(f);
|
self.required_size = Box::new(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the closure for `get_min_size(Vec2)`
|
/// Sets the closure for `required_size(Vec2)`
|
||||||
///
|
///
|
||||||
/// Chainable variant.
|
/// Chainable variant.
|
||||||
pub fn with_get_min_size<F>(self, f: F) -> Self
|
pub fn with_required_size<F>(self, f: F) -> Self
|
||||||
where F: 'static + FnMut(Vec2, &mut T) -> Vec2
|
where F: 'static + FnMut(Vec2, &mut T) -> Vec2
|
||||||
{
|
{
|
||||||
self.with(|s| s.set_get_min_size(f))
|
self.with(|s| s.set_required_size(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the closure for `layout(Vec2)`
|
/// Sets the closure for `layout(Vec2)`
|
||||||
@ -131,8 +131,8 @@ impl <T> View for Canvas<T> {
|
|||||||
(self.on_event)(event, &mut self.state)
|
(self.on_event)(event, &mut self.state)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, constraint: Vec2) -> Vec2 {
|
fn required_size(&mut self, constraint: Vec2) -> Vec2 {
|
||||||
(self.get_min_size)(constraint, &mut self.state)
|
(self.required_size)(constraint, &mut self.state)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layout(&mut self, size: Vec2) {
|
fn layout(&mut self, size: Vec2) {
|
||||||
|
@ -105,7 +105,7 @@ impl Checkbox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl View for Checkbox {
|
impl View for Checkbox {
|
||||||
fn get_min_size(&mut self, _: Vec2) -> Vec2 {
|
fn required_size(&mut self, _: Vec2) -> Vec2 {
|
||||||
Vec2::new(3, 1)
|
Vec2::new(3, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ impl View for Dialog {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// Padding and borders are not available for kids.
|
// Padding and borders are not available for kids.
|
||||||
let nomans_land = self.padding.combined() + self.borders.combined();
|
let nomans_land = self.padding.combined() + self.borders.combined();
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ impl View for Dialog {
|
|||||||
buttons_size.x += self.buttons.len() - 1;
|
buttons_size.x += self.buttons.len() - 1;
|
||||||
}
|
}
|
||||||
for button in &mut self.buttons {
|
for button in &mut self.buttons {
|
||||||
let s = button.view.get_min_size(req);
|
let s = button.view.required_size(req);
|
||||||
buttons_size.x += s.x;
|
buttons_size.x += s.x;
|
||||||
buttons_size.y = max(buttons_size.y, s.y + 1);
|
buttons_size.y = max(buttons_size.y, s.y + 1);
|
||||||
}
|
}
|
||||||
@ -270,7 +270,7 @@ impl View for Dialog {
|
|||||||
}
|
}
|
||||||
let content_req = req - taken;
|
let content_req = req - taken;
|
||||||
|
|
||||||
let content_size = self.content.get_min_size(content_req);
|
let content_size = self.content.required_size(content_req);
|
||||||
|
|
||||||
// On the Y axis, we add buttons and content.
|
// On the Y axis, we add buttons and content.
|
||||||
// On the X axis, we take the max.
|
// On the X axis, we take the max.
|
||||||
@ -300,7 +300,7 @@ impl View for Dialog {
|
|||||||
// Buttons are kings, we give them everything they want.
|
// Buttons are kings, we give them everything they want.
|
||||||
let mut buttons_height = 0;
|
let mut buttons_height = 0;
|
||||||
for button in self.buttons.iter_mut().rev() {
|
for button in self.buttons.iter_mut().rev() {
|
||||||
let size = button.get_min_size(size);
|
let size = button.required_size(size);
|
||||||
buttons_height = max(buttons_height, size.y + 1);
|
buttons_height = max(buttons_height, size.y + 1);
|
||||||
button.layout(size);
|
button.layout(size);
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,8 @@ struct Child {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Child {
|
impl Child {
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
self.size = self.view.get_min_size(req);
|
self.size = self.view.required_size(req);
|
||||||
self.size
|
self.size
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ impl View for LinearLayout {
|
|||||||
fn layout(&mut self, size: Vec2) {
|
fn layout(&mut self, size: Vec2) {
|
||||||
// If we can get away without breaking a sweat, you can bet we will.
|
// If we can get away without breaking a sweat, you can bet we will.
|
||||||
if self.get_cache(size).is_none() {
|
if self.get_cache(size).is_none() {
|
||||||
self.get_min_size(size);
|
self.required_size(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
let o = self.orientation;
|
let o = self.orientation;
|
||||||
@ -202,7 +202,7 @@ impl View for LinearLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// Did anything change since last time?
|
// Did anything change since last time?
|
||||||
if let Some(size) = self.get_cache(req) {
|
if let Some(size) = self.get_cache(req) {
|
||||||
return size;
|
return size;
|
||||||
@ -211,7 +211,7 @@ impl View for LinearLayout {
|
|||||||
// First, make a naive scenario: everything will work fine.
|
// First, make a naive scenario: everything will work fine.
|
||||||
let sizes: Vec<Vec2> = self.children
|
let sizes: Vec<Vec2> = self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.map(|c| c.get_min_size(req))
|
.map(|c| c.required_size(req))
|
||||||
.collect();
|
.collect();
|
||||||
// println_stderr!("Ideal sizes: {:?}", sizes);
|
// println_stderr!("Ideal sizes: {:?}", sizes);
|
||||||
let ideal = self.orientation.stack(sizes.iter());
|
let ideal = self.orientation.stack(sizes.iter());
|
||||||
@ -233,7 +233,7 @@ impl View for LinearLayout {
|
|||||||
// See how they like it that way
|
// See how they like it that way
|
||||||
let min_sizes: Vec<Vec2> = self.children
|
let min_sizes: Vec<Vec2> = self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.map(|c| c.get_min_size(budget_req))
|
.map(|c| c.required_size(budget_req))
|
||||||
.collect();
|
.collect();
|
||||||
let desperate = self.orientation.stack(min_sizes.iter());
|
let desperate = self.orientation.stack(min_sizes.iter());
|
||||||
// println_stderr!("Min sizes: {:?}", min_sizes);
|
// println_stderr!("Min sizes: {:?}", min_sizes);
|
||||||
@ -298,7 +298,7 @@ impl View for LinearLayout {
|
|||||||
let final_sizes: Vec<Vec2> = self.children
|
let final_sizes: Vec<Vec2> = self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, c)| c.get_min_size(final_lengths[i]))
|
.map(|(i, c)| c.required_size(final_lengths[i]))
|
||||||
.collect();
|
.collect();
|
||||||
// println_stderr!("Final sizes2: {:?}", final_sizes);
|
// println_stderr!("Final sizes2: {:?}", final_sizes);
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ impl View for ListView {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
let label_size = self.children
|
let label_size = self.children
|
||||||
.iter()
|
.iter()
|
||||||
.map(Child::label)
|
.map(Child::label)
|
||||||
@ -206,7 +206,7 @@ impl View for ListView {
|
|||||||
let view_size = self.children
|
let view_size = self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.filter_map(Child::view)
|
.filter_map(Child::view)
|
||||||
.map(|v| v.get_min_size(req).x)
|
.map(|v| v.required_size(req).x)
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ impl View for MenuPopup {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// We can't really shrink our items here, so it's not flexible.
|
// We can't really shrink our items here, so it's not flexible.
|
||||||
let w = 4 +
|
let w = 4 +
|
||||||
self.menu
|
self.menu
|
||||||
|
@ -242,7 +242,7 @@ impl View for Menubar {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, _: Vec2) -> Vec2 {
|
fn required_size(&mut self, _: Vec2) -> Vec2 {
|
||||||
// TODO: scroll the options if the screen is too small?
|
// TODO: scroll the options if the screen is too small?
|
||||||
|
|
||||||
// We add 2 to the length of every label for marin.
|
// We add 2 to the length of every label for marin.
|
||||||
|
@ -18,9 +18,9 @@ impl<V: View> Panel<V> {
|
|||||||
impl<V: View> ViewWrapper for Panel<V> {
|
impl<V: View> ViewWrapper for Panel<V> {
|
||||||
wrap_impl!(self.view: V);
|
wrap_impl!(self.view: V);
|
||||||
|
|
||||||
fn wrap_get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn wrap_required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// TODO: make borders conditional?
|
// TODO: make borders conditional?
|
||||||
self.view.get_min_size(req - (2, 2)) + (2, 2)
|
self.view.required_size(req - (2, 2)) + (2, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn wrap_draw(&self, printer: &Printer) {
|
fn wrap_draw(&self, printer: &Printer) {
|
||||||
|
@ -139,7 +139,7 @@ impl<T> RadioButton<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T> View for RadioButton<T> {
|
impl<T> View for RadioButton<T> {
|
||||||
fn get_min_size(&mut self, _: Vec2) -> Vec2 {
|
fn required_size(&mut self, _: Vec2) -> Vec2 {
|
||||||
if self.label.is_empty() {
|
if self.label.is_empty() {
|
||||||
Vec2::new(3, 1)
|
Vec2::new(3, 1)
|
||||||
} else {
|
} else {
|
||||||
|
@ -377,7 +377,7 @@ impl<T: 'static> View for SelectView<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// Items here are not compressible.
|
// Items here are not compressible.
|
||||||
// So no matter what the horizontal requirements are,
|
// So no matter what the horizontal requirements are,
|
||||||
// we'll still return our longest item.
|
// we'll still return our longest item.
|
||||||
|
@ -47,10 +47,10 @@ impl<T: View> ShadowView<T> {
|
|||||||
impl<T: View> ViewWrapper for ShadowView<T> {
|
impl<T: View> ViewWrapper for ShadowView<T> {
|
||||||
wrap_impl!(self.view: T);
|
wrap_impl!(self.view: T);
|
||||||
|
|
||||||
fn wrap_get_min_size(&mut self, req: Vec2) -> Vec2 {
|
fn wrap_required_size(&mut self, req: Vec2) -> Vec2 {
|
||||||
// Make sure req >= offset
|
// Make sure req >= offset
|
||||||
let offset = self.padding().or_min(req);
|
let offset = self.padding().or_min(req);
|
||||||
self.view.get_min_size(req - offset) + offset
|
self.view.required_size(req - offset) + offset
|
||||||
}
|
}
|
||||||
|
|
||||||
fn wrap_layout(&mut self, size: Vec2) {
|
fn wrap_layout(&mut self, size: Vec2) {
|
||||||
|
@ -125,7 +125,7 @@ impl View for SliderView {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, _: Vec2) -> Vec2 {
|
fn required_size(&mut self, _: Vec2) -> Vec2 {
|
||||||
self.orientation.make_vec(self.max_value, 1)
|
self.orientation.make_vec(self.max_value, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ impl View for StackView {
|
|||||||
|
|
||||||
for layer in &mut self.layers {
|
for layer in &mut self.layers {
|
||||||
// Give each guy what he asks for, within the budget constraints.
|
// Give each guy what he asks for, within the budget constraints.
|
||||||
let size = Vec2::min(size, layer.view.get_min_size(size));
|
let size = Vec2::min(size, layer.view.required_size(size));
|
||||||
layer.size = size;
|
layer.size = size;
|
||||||
layer.view.layout(layer.size);
|
layer.view.layout(layer.size);
|
||||||
|
|
||||||
@ -164,12 +164,12 @@ impl View for StackView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, size: Vec2) -> Vec2 {
|
fn required_size(&mut self, size: Vec2) -> Vec2 {
|
||||||
// The min size is the max of all children's
|
// The min size is the max of all children's
|
||||||
|
|
||||||
self.layers
|
self.layers
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.map(|layer| layer.view.get_min_size(size))
|
.map(|layer| layer.view.required_size(size))
|
||||||
.fold(Vec2::new(1, 1), Vec2::max)
|
.fold(Vec2::new(1, 1), Vec2::max)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ impl View for TextView {
|
|||||||
self.last_size.is_none()
|
self.last_size.is_none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_min_size(&mut self, size: Vec2) -> Vec2 {
|
fn required_size(&mut self, size: Vec2) -> Vec2 {
|
||||||
self.compute_rows(size);
|
self.compute_rows(size);
|
||||||
|
|
||||||
// This is what we'd like
|
// This is what we'd like
|
||||||
|
Loading…
Reference in New Issue
Block a user