#嵌入式图形 #布局 #图形 #线性布局

无std 嵌入式布局

扩展嵌入式图形的基本布局功能

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 嵌入式开发

Download history 151/week @ 2024-03-11 155/week @ 2024-03-18 171/week @ 2024-03-25 367/week @ 2024-04-01 55/week @ 2024-04-08 107/week @ 2024-04-15 82/week @ 2024-04-22 32/week @ 2024-04-29 103/week @ 2024-05-06 96/week @ 2024-05-13 115/week @ 2024-05-20 51/week @ 2024-05-27 75/week @ 2024-06-03 94/week @ 2024-06-10 50/week @ 2024-06-17 121/week @ 2024-06-24

343 每月下载量
2 crates 中使用

MIT 许可证

105KB
2K SLoC

嵌入式布局

嵌入式布局 扩展了 嵌入式图形 的基本布局功能。

嵌入式布局 包含三个主要部分

  • 可用于定位两个对象相对位置的定位方式
    • 水平
      • NoAlignment, Left, Right, Center
      • LeftToRight, RightToLeft
    • 垂直
      • NoAlignment, Top, Bottom, Center
      • TopToBottom, BottomToTop
  • 可用于排列多个视图的布局
    • 线性布局
  • 视图组,是视图对象的集合
    • Chain 用于创建临时的集合(可以包含不同类型的视图)
    • Views 从数组和切片创建视图组(只能包含单个类型的视图)
    • derive(ViewGroup) 将任何普通的Rust结构体转换为视图组

示例

示例基于 嵌入式图形模拟器。模拟器建立在 SDL2 之上。有关更多信息,请参阅 模拟器README

embedded-layout example

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