use embedded_graphics::{
geometry::Size,
image::{ImageRaw, ImageRawBE},
mock_display::MockDisplay,
pixelcolor::Rgb565,
prelude::{Point, RgbColor},
primitives::Rectangle,
};
use faststep::{
EdgeInsets, ImageAlignment, ImageView, ImageViewStyle, RichTextView, ScrollView, TextAlignment,
TextRunStyle, TextSpan, TextVerticalAlignment, TextView, TextViewStyle, TextWrap, TouchEvent,
TouchPhase,
};
#[test]
fn scroll_indicator_stays_hidden_until_scrolling_starts() {
let viewport = Rectangle::new(Point::zero(), Size::new(120, 80));
let mut scroll = ScrollView::new();
scroll.begin_drag(TouchEvent::new(Point::new(12, 12), TouchPhase::Start, 1));
assert!(scroll.scroll_bar(viewport, 320).is_none());
assert!(!scroll.tick(16, 320, viewport.size.height));
assert!(scroll.scroll_bar(viewport, 320).is_none());
assert!(scroll.drag(
TouchEvent::new(Point::new(12, 28), TouchPhase::Move, 2),
320,
viewport.size.height,
));
assert!(scroll.scroll_bar(viewport, 320).is_some());
}
#[test]
fn image_view_draws_centered_image() {
let image_data = [
0xF8, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0xF8, 0x00, ];
let image: ImageRawBE<Rgb565> = ImageRaw::new(&image_data, 2);
let mut display: MockDisplay<Rgb565> = MockDisplay::new();
ImageView::new(Rectangle::new(Point::new(4, 4), Size::new(24, 24)), &image)
.with_style(
ImageViewStyle::new()
.with_alignment(ImageAlignment::Center)
.with_insets(EdgeInsets::all(2)),
)
.draw(&mut display);
assert_ne!(display.affected_area().size, Size::zero());
}
#[test]
fn text_views_draw_single_and_multiline_content() {
let mut single: MockDisplay<Rgb565> = MockDisplay::new();
TextView::new(
Rectangle::new(Point::zero(), Size::new(120, 28)),
"Status OK",
TextRunStyle::body(Rgb565::BLACK),
)
.with_view_style(
TextViewStyle::new()
.with_alignment(TextAlignment::Center)
.with_vertical_alignment(TextVerticalAlignment::Center),
)
.draw(&mut single);
assert_ne!(single.affected_area().size, Size::zero());
let spans = [
TextSpan::new("Device ", TextRunStyle::body(Rgb565::BLACK)),
TextSpan::new("Online", TextRunStyle::body_strong(Rgb565::GREEN)),
TextSpan::new("\nReady for use", TextRunStyle::caption(Rgb565::BLUE)),
];
let mut rich: MockDisplay<Rgb565> = MockDisplay::new();
RichTextView::new(Rectangle::new(Point::new(0, 0), Size::new(140, 64)), &spans)
.with_view_style(
TextViewStyle::new()
.with_wrap(TextWrap::Multiline)
.with_insets(EdgeInsets::all(4)),
)
.draw(&mut rich);
assert_ne!(rich.affected_area().size, Size::zero());
}