macro_rules! layout {
($context:expr, $view:expr, left_to_left_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, left_to_right_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, right_to_left_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, top_to_bottom_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, bottom_to_top_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, top_to_top_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, bottom_to_bottom_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, right_to_right_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, right_to_right_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, right_to_left_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, bottom_to_bottom_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, bottom_to_top_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, left_to_left_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, left_to_right_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, top_to_top_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerh_to_centerh_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerh_to_left_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerh_to_right_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerv_to_centerv_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerv_to_top_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, centerv_to_bottom_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, left_to_centerh_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, right_to_centerh_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, left_to_centerh_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, right_to_centerh_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, top_to_centerv_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, bottom_to_centerv_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, top_to_centerv_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, bottom_to_centerv_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, top_to_bottom_of $pivot:expr $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, fill_width $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, fill_height $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_left $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_top $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_right $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_bottom $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_left $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_top $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_right $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_bottom $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_centerh $(, $offset:expr)?) => { ... };
($context:expr, $view:expr, align_centerv $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_centerh $(, $offset:expr)?) => { ... };
($context:expr, grow $view:expr, align_centerv $(, $offset:expr)?) => { ... };
($context:expr, centerh $view:expr, between $first:expr, $second:expr $(, $offset:expr)?) => { ... };
($context:expr, centerv $view:expr, between $first:expr, $second:expr $(, $offset:expr)?) => { ... };
}
Expand description
Position and size a view relative to the parent or another view
§Format
layout!(context, [command] view, alignment [pivot_view],[second_pivot_view][, offset]);
Views must impl PixelView and to use grow
they must also impl LayoutView
offset
replaces the default offset from context (if it was set)
§Usage
ⓘ
let mut view1 = Button::new(...);
let mut view2 = Button::new(...);
let context = LayoutContext::new(Rect::new((0,0), (200,200)));
layout!(context, view1, left_to_left_of view2);
§Examples
Move a button below another with some spacing
ⓘ
let button1 = Button::new(...);
let button2 = Button::new(...);
let context = LayoutContext::new(...);
layout!(context, button2, top_to_bottom_of button1, px(8));
Move a button to the edge of the screen and grow it’s right side to match another view
ⓘ
let button1 = Button::new(...);
let button2 = Button::new(...);
let context = LayoutContext::new(...);
layout!(context, button2, align_left);
layout!(context, grow button1, right_to_right_of button1);
§Command
grow
- Moves the edge of the view, but not the position
§Alignment
View
left_to_left_of
- Makes view.x = pivot_view.xtop_to_top_of
- Makes view.y = pivot_view.yright_to_right_of
- Makes view.x = pivot_view.right - view.widthbottom_to_bottom_of
- Makes view.y = pivot_view.bottom - view.heightleft_to_right_of
- Makes view.x = pivot_view.x + pivot_view.widthright_to_left_of
- Makes view.x = pivot_view.x - view.widthtop_to_bottom_of
- Makes view.y = pivot_view.bottombottom_to_top_of
- Makes view.y = pivot_view.y - view.heightcenterh_to_centerh_of
- Makes view.center.x = pivot_view.center.x (grow
not supported)centerv_to_centerv_of
- Makes view.center.y = pivot_view.center.y (grow
not supported)centerv_to_top_of
- Makes view.center.y = pivot_view.y (grow
not supported)centerv_to_bottom_of
- Makes view.center.y = pivot_view.bottom (grow
not supported)centerh_to_left_of
- Makes view.center.x = pivot_view.left (grow
not supported)centerh_to_right_of
- Makes view.center.x = pivot_view.right (grow
not supported)left_to_centerh_of
- Makes view.x = pivot_view.center.xright_to_centerh_of
- Makes view.x = pivot_view.center.x - view.widthtop_to_centerv_of
- Makes view.y = pivot_view.center.ybottom_to_centerv_of
- Makes view.y = pivot_view.center.y - view.heightcenter_between_horz
- Make view.center.x = pivot_view.right midpoint second_pivot_view.leftcenter_between_vert
- Make view.center.y = pivot_view.bottom midpoint second_pivot_view.top
Parent
fill_width
- Set x to context.left, width to context.width (grow
only)fill_height
- Set y to context.top, height to context.height (grow
only)align_left
- Set x to context.leftalign_right
- Set x to (context.right - view.width)align_top
- Set y to context.topalign_bottom
- Set y to (context.bottom - view.height)align_centerh
- Set x to context.center.x (when usinggrow
moves view.left or view.right instead)align_centerv
- Set y to context.center.y (when usinggrow
moves view.top or view.bottom instead)