1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use view::{View, ViewWrapper, SizeRequest, DimensionRequest};
use vec::Vec2;

/// Simple wrapper view that asks for all the space it can get.
pub struct FullView<T: View> {
    view: T,
}

impl<T: View> FullView<T> {
    /// Wraps the given view into a new FullView.
    pub fn new(view: T) -> Self {
        FullView { view: view }
    }
}

impl<T: View> ViewWrapper for FullView<T> {
    wrap_impl!(&self.view);

    fn wrap_get_min_size(&self, req: SizeRequest) -> Vec2 {
        let w = match req.w {
            DimensionRequest::Fixed(w) => w,
            DimensionRequest::AtMost(w) => w,
            DimensionRequest::Unknown => self.view.get_min_size(req).x,
        };
        let h = match req.h {
            DimensionRequest::Fixed(h) => h,
            DimensionRequest::AtMost(h) => h,
            DimensionRequest::Unknown => self.view.get_min_size(req).y,
        };

        Vec2::new(w, h)
    }
}