10个不稳定版本 (4个破坏性更新)
0.4.1 | 2023年10月10日 |
---|---|
0.4.0 | 2023年10月10日 |
0.3.2 | 2023年8月23日 |
0.3.1 | 2023年5月14日 |
0.0.2 | 2020年6月25日 |
#145 in 嵌入式开发
343 每月下载量
在 2 crates 中使用
105KB
2K SLoC
嵌入式布局
嵌入式布局
扩展了 嵌入式图形
的基本布局功能。
嵌入式布局
包含三个主要部分
- 可用于定位两个对象相对位置的定位方式
水平
NoAlignment
,Left
,Right
,Center
LeftToRight
,RightToLeft
垂直
NoAlignment
,Top
,Bottom
,Center
TopToBottom
,BottomToTop
- 可用于排列多个视图的布局
线性布局
- 视图组,是视图对象的集合
Chain
用于创建临时的集合(可以包含不同类型的视图)Views
从数组和切片创建视图组(只能包含单个类型的视图)derive(ViewGroup)
将任何普通的Rust结构体转换为视图组
示例
示例基于 嵌入式图形模拟器。模拟器建立在 SDL2
之上。有关更多信息,请参阅 模拟器README。
use embedded_graphics_simulator::{
BinaryColorTheme, OutputSettingsBuilder, SimulatorDisplay, Window,
};
use embedded_graphics::{
mono_font::{ascii::FONT_6X9, MonoTextStyle},
pixelcolor::BinaryColor,
prelude::*,
primitives::{Circle, PrimitiveStyle, Triangle},
text::Text,
};
use embedded_layout::{layout::linear::LinearLayout, prelude::*};
fn main() -> Result<(), core::convert::Infallible> {
let mut display: SimulatorDisplay<BinaryColor> = SimulatorDisplay::new(Size::new(128, 64));
let output_settings = OutputSettingsBuilder::new()
.theme(BinaryColorTheme::OledBlue)
.build();
// Create a Rectangle from the display's dimensions
let display_area = display.bounding_box();
// Style objects
let text_style = MonoTextStyle::new(&FONT_6X9, BinaryColor::On);
let thin_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1);
let thick_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 3);
let fill_on = PrimitiveStyle::with_fill(BinaryColor::On);
let fill_off = PrimitiveStyle::with_fill(BinaryColor::Off);
// Primitives to be displayed
let triangle = Triangle::new(Point::new(0, 0), Point::new(12, 0), Point::new(6, 12))
.into_styled(thin_stroke);
let circle = Circle::new(Point::zero(), 11).into_styled(thick_stroke);
let circle2 = Circle::new(Point::zero(), 15).into_styled(fill_on);
let triangle2 =
Triangle::new(Point::new(0, 0), Point::new(10, 0), Point::new(5, 8)).into_styled(fill_off);
let text = Text::new("embedded-layout", Point::zero(), text_style);
// The layout
LinearLayout::vertical(
Chain::new(text)
.append(LinearLayout::horizontal(Chain::new(triangle).append(circle)).arrange())
.append(
Chain::new(triangle2.align_to(&circle2, horizontal::Center, vertical::Top))
.append(circle2),
),
)
.with_alignment(horizontal::Center)
.arrange()
.align_to(&display_area, horizontal::Center, vertical::Center)
.draw(&mut display)
.unwrap();
Window::new("Layout example", &output_settings).show_static(&display);
Ok(())
}
开发环境设置
最低支持的Rust版本
嵌入式布局最低支持的Rust版本是1.61.0或更高。
安装
对于一般设置,请遵循 嵌入式图形
的安装说明。
在Windows上安装SDL2,请参阅 https://github.com/Rust-SDL2/rust-sdl2#windows-msvc
依赖关系
~4MB
~52K SLoC