Crate embedded_layout
source ·Expand description
Enable simple layout operations in embedded-graphics
This crate extends embedded-graphics with tools that ease positioning of drawable objects.
embedded-layout consists of three main parts:
- alignments that can be used to position two objects relative to one another
horizontalNoAlignment,Left,Right,CenterLeftToRight,RightToLeft
verticalNoAlignment,Top,Bottom,CenterTopToBottom,BottomToTop
- layouts that can be used to arrange multiple views
LinearLayout
- view groups which are collections of view objects
Chainto create ad-hoc collections (can hold views of different types)Viewsto create view groups from arrays and slices (can only hold views of a single type)derive(ViewGroup)to turn any plain old Rust struct into a view group
Views
The term “view” refers to anything embedded-layout can work with. Basically, a view is an
object that can be displayed. View is the most basic trait in embedded-layout. Views
implement the View trait to enable translation and alignment operations on them, and also to
allow them to be used with layouts.
View is implemented for embedded-graphics display objects. There’s also an example about
how you can implement custom View objects.
Examples
The examples are based on the embedded-graphics simulator. The simulator is built on top of
SDL2. See the simulator README for more information.
Draw some text to the center of the display
use embedded_graphics::{
mono_font::{ascii::FONT_6X9, MonoTextStyle},
pixelcolor::BinaryColor,
prelude::*,
text::Text,
};
use embedded_layout::prelude::*;
// Create a Rectangle from the display's dimensions
let display_area = display.bounding_box();
let text_style = MonoTextStyle::new(&FONT_6X9, BinaryColor::On);
Text::new("Hello!", Point::zero(), text_style)
// align text to the center of the display
.align_to(&display_area, horizontal::Center, vertical::Center)
.draw(&mut display)
.unwrap();Use LinearLayout to arrange multiple objects
use embedded_graphics::{
mono_font::{ascii::FONT_6X9, MonoTextStyle},
pixelcolor::BinaryColor,
prelude::*,
text::Text,
};
use embedded_layout::{layout::linear::LinearLayout, prelude::*};
let display_area = display.bounding_box();
let text_style = MonoTextStyle::new(&FONT_6X9, BinaryColor::On);
LinearLayout::vertical(
Chain::new(Text::new("Vertical", Point::zero(), text_style))
.append(Text::new("Linear", Point::zero(), text_style))
.append(Text::new("Layout", Point::zero(), text_style))
)
.with_alignment(horizontal::Center)
.arrange()
.align_to(&display_area, horizontal::Center, vertical::Center)
.draw(&mut display)
.unwrap();Modules
- Alignment operations
- Layouts - arrange multiple views
- Create static chains of objects with different types.
- The essentials. Also contains most of
embedded-graphics'prelude. - Utility collection module
- ViewGroup definition and implementation for common types.
Macros
- Creates an object chain from the argument types.
Traits
- A
Viewis the base unit for most of theembedded-layoutoperations.