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
horizontal
NoAlignment
,Left
,Right
,Center
LeftToRight
,RightToLeft
vertical
NoAlignment
,Top
,Bottom
,Center
TopToBottom
,BottomToTop
- layouts that can be used to arrange multiple views
LinearLayout
- view groups which are collections of view objects
Chain
to create ad-hoc collections (can hold views of different types)Views
to 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
View
is the base unit for most of theembedded-layout
operations.