From 5056e70a6199019025a465f983b9259439884a59 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 12:20:53 +0100 Subject: [PATCH 01/26] Bump dependencies to released alpha/beta versions --- eg-next/Cargo.toml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/eg-next/Cargo.toml b/eg-next/Cargo.toml index 5a19a60..af997ac 100644 --- a/eg-next/Cargo.toml +++ b/eg-next/Cargo.toml @@ -6,13 +6,8 @@ publish = false [dependencies] chrono = "0.4.19" -embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } -embedded-graphics-simulator = { git = "https://github.com/embedded-graphics/simulator.git" } +embedded-graphics = "0.7.0-beta.1" +embedded-graphics-simulator = "0.3.0-beta.2" tinybmp = { git = "https://github.com/embedded-graphics/tinybmp.git" } tinytga = { git = "https://github.com/embedded-graphics/tinytga.git" } -[patch.crates-io] -embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } -embedded-graphics-core = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } -tinybmp = { git = "https://github.com/embedded-graphics/tinybmp.git" } -tinytga = { git = "https://github.com/embedded-graphics/tinytga.git" } From e3950ffe3dced7a4ac33b22ba3066936334b87ee Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 12:23:47 +0100 Subject: [PATCH 02/26] Reposition fill demo to a squarer aspect ratio Originally did this for the simulator screenshot collage but I think it looks nicer like this. --- eg-next/examples/primitives-fill.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eg-next/examples/primitives-fill.rs b/eg-next/examples/primitives-fill.rs index 65da4d1..95f359b 100644 --- a/eg-next/examples/primitives-fill.rs +++ b/eg-next/examples/primitives-fill.rs @@ -24,7 +24,7 @@ where .into_styled(style) .draw(target)?; - Rectangle::new(Point::new(96, 0), Size::new(64, 64)) + Rectangle::new(Point::new(97, 0), Size::new(64, 64)) .into_styled(style) .draw(target)?; @@ -33,7 +33,7 @@ where .into_styled(style) .draw(target)?; - Ellipse::new(Point::new(96 * 3, 0), ELLIPSE_SIZE) + Ellipse::new(Point::new(0 + 24, 97), ELLIPSE_SIZE) .into_styled(style) .draw(target)?; @@ -41,13 +41,13 @@ where Rectangle::new(Point::new(32, 0), Size::new(64, 64)), CornerRadii::new(Size::new(16, 16)), ) - .translate(Point::new(96 * 4, 0)) + .translate(Point::new(96 + 24, 97)) .into_styled(style) .draw(target) } fn main() -> Result<(), Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(512, 128)); + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(300, 200)); let stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1); @@ -73,7 +73,7 @@ fn main() -> Result<(), Infallible> { stroke_off_fill_off, )?; - let output_settings = OutputSettingsBuilder::new().scale(2).build(); + let output_settings = OutputSettingsBuilder::new().scale(1).build(); Window::new("Filled primitives", &output_settings).show_static(&display); Ok(()) From 307399f827eb505ff6c7d1c59dd27e0e5a335910 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 12:25:16 +0100 Subject: [PATCH 03/26] Thicken "heartbeat" polyline demo --- eg-next/examples/primitives-polyline.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/eg-next/examples/primitives-polyline.rs b/eg-next/examples/primitives-polyline.rs index 78669e7..3cb9c6c 100644 --- a/eg-next/examples/primitives-polyline.rs +++ b/eg-next/examples/primitives-polyline.rs @@ -9,15 +9,14 @@ use embedded_graphics::{ }; use embedded_graphics_simulator::{OutputSettings, SimulatorDisplay, Window}; -const PADDING: i32 = 16; +const PADDING: i32 = 8; fn main() -> Result<(), core::convert::Infallible> { - let (w, h) = (320i32, 256i32); + let (w, h) = (176i32, 256i32); - let mut display: SimulatorDisplay = - SimulatorDisplay::new(Size::new(w as u32, h as u32)); + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(w as u32, 170)); - let line_style = PrimitiveStyle::with_stroke(Rgb888::GREEN, 1); + let line_style = PrimitiveStyle::with_stroke(Rgb888::GREEN, 7); let points = [ Point::new(PADDING, h / 2), @@ -29,7 +28,7 @@ fn main() -> Result<(), core::convert::Infallible> { Point::new(100, PADDING), Point::new(110, h / 2 + 20), Point::new(120, h / 2), - Point::new(w - PADDING, h / 2), + Point::new(160, h / 2), ]; Polyline::new(&points) From b022cb9e0b9e4d6f8e15c871becc3c4b5e3b71e7 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 12:25:43 +0100 Subject: [PATCH 04/26] Add nice colours to stroked primitives demo --- eg-next/examples/primitives-stroke.rs | 30 ++++++++++++--------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/eg-next/examples/primitives-stroke.rs b/eg-next/examples/primitives-stroke.rs index ea945b9..df352d9 100644 --- a/eg-next/examples/primitives-stroke.rs +++ b/eg-next/examples/primitives-stroke.rs @@ -3,7 +3,7 @@ //! This example demonstrates the different stroke styles available for primitives. use embedded_graphics::{ - pixelcolor::BinaryColor, + pixelcolor::Rgb888, prelude::*, primitives::{ Circle, CornerRadii, Ellipse, Line, PrimitiveStyle, Rectangle, RoundedRectangle, Triangle, @@ -14,27 +14,27 @@ use embedded_graphics_simulator::{OutputSettings, SimulatorDisplay, Window}; const PADDING: i32 = 16; /// Draws all embedded-graphics primitives. -fn draw_primitives(target: &mut D, style: PrimitiveStyle) -> Result<(), D::Error> +fn draw_primitives(target: &mut D, w: u32) -> Result<(), D::Error> where - D: DrawTarget, + D: DrawTarget, { Triangle::new(Point::new(0, 64), Point::new(64, 0), Point::new(64, 64)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_ORANGE_RED, w)) .draw(target)?; Rectangle::new(Point::new(0, 0), Size::new(64, 64)) .translate(Point::new(64 + PADDING, 0)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_GOLD, w)) .draw(target)?; Line::new(Point::new(0, 0), Point::new(64, 64)) .translate(Point::new((64 + PADDING) * 2, 0)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_SEA_GREEN, w)) .draw(target)?; Circle::new(Point::new(0, 0), 64) .translate(Point::new((64 + PADDING) * 3, 0)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_TEAL, w)) .draw(target)?; RoundedRectangle::new( @@ -42,21 +42,17 @@ where CornerRadii::new(Size::new(16, 16)), ) .translate(Point::new((64 + PADDING) * 4, 0)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_STEEL_BLUE, w)) .draw(target)?; Ellipse::new(Point::new(0, 0), Size::new(96, 64)) .translate(Point::new((64 + PADDING) * 5, 0)) - .into_styled(style) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::CSS_FUCHSIA, w)) .draw(target) } fn main() -> Result<(), core::convert::Infallible> { - let mut display = SimulatorDisplay::::new(Size::new(512, 256)); - - let thin_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1); - let medium_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 3); - let thick_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 10); + let mut display = SimulatorDisplay::::new(Size::new(512, 256)); // Draw the primitives using a thin stroke. // @@ -64,15 +60,15 @@ fn main() -> Result<(), core::convert::Infallible> { // using `display.translated(position)`. This translates all drawing operations in `draw_shapes` // by 10 pixels in the x and y direction. let mut position = Point::new(10, 10); - draw_primitives(&mut display.translated(position), thin_stroke)?; + draw_primitives(&mut display.translated(position), 1)?; // Draw the primitives using a medium stroke. position.y += 64 + PADDING; - draw_primitives(&mut display.translated(position), medium_stroke)?; + draw_primitives(&mut display.translated(position), 3)?; // Draw the primitives using a thick stroke. position.y += 64 + PADDING; - draw_primitives(&mut display.translated(position), thick_stroke)?; + draw_primitives(&mut display.translated(position), 10)?; Window::new("Strokes", &OutputSettings::default()).show_static(&display); From 67f298889191f7a63dbc0028e8132080f19cff2e Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 12:26:12 +0100 Subject: [PATCH 05/26] Move rectangle intersection "demo" to debug tools repo --- eg-next/examples/rectangle-intersection.rs | 77 ---------------------- 1 file changed, 77 deletions(-) delete mode 100644 eg-next/examples/rectangle-intersection.rs diff --git a/eg-next/examples/rectangle-intersection.rs b/eg-next/examples/rectangle-intersection.rs deleted file mode 100644 index 4013290..0000000 --- a/eg-next/examples/rectangle-intersection.rs +++ /dev/null @@ -1,77 +0,0 @@ -//! # Example: Rectangle intersection -//! -//! This example draws the intersection of two base rectangles (red and green) in blue. - -use embedded_graphics::{pixelcolor::Rgb888, prelude::*, primitives::*}; -use embedded_graphics_simulator::{ - OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window, -}; - -fn draw( - base_rectangle: Rectangle, - moving_rectangle: Rectangle, - display: &mut SimulatorDisplay, -) { - display.clear(Rgb888::BLACK).unwrap(); - - base_rectangle - .into_styled(PrimitiveStyle::with_fill(Rgb888::RED)) - .draw(display) - .unwrap(); - - moving_rectangle - .into_styled(PrimitiveStyle::with_fill(Rgb888::GREEN)) - .draw(display) - .unwrap(); - - let intersection = base_rectangle.intersection(&moving_rectangle); - - if intersection.size != Size::zero() { - intersection - .into_styled(PrimitiveStyle::with_fill(Rgb888::BLUE)) - .draw(display) - .unwrap() - } -} - -fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(200, 200)); - let output_settings = OutputSettingsBuilder::new() - .scale(2) - .pixel_spacing(1) - .build(); - let mut window = Window::new("Intersection", &output_settings); - - let mut mouse_down = false; - - let base_rectangle = Rectangle::with_corners(Point::new(20, 20), Point::new(100, 100)); - let mut moving_rectangle = Rectangle::with_corners(Point::new(80, 80), Point::new(150, 150)); - - draw(base_rectangle, moving_rectangle, &mut display); - - 'running: loop { - window.update(&display); - - for event in window.events() { - match event { - SimulatorEvent::Quit => break 'running, - SimulatorEvent::MouseButtonDown { point, .. } => { - mouse_down = true; - - moving_rectangle = Rectangle::with_corners(point, Point::new(100, 100)); - } - SimulatorEvent::MouseButtonUp { .. } => mouse_down = false, - SimulatorEvent::MouseMove { point, .. } => { - if mouse_down { - moving_rectangle = Rectangle::with_corners(point, Point::new(150, 150)); - } - } - _ => {} - } - - draw(base_rectangle, moving_rectangle, &mut display); - } - } - - Ok(()) -} From f92bf1ff2029cd5b4b23e7bdf686a2e4db7f0174 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 16:29:35 +0100 Subject: [PATCH 06/26] Rename examples for consistency --- eg-next/examples/{analog-clock.rs => demo-clock.rs} | 0 eg-next/examples/{pacman.rs => demo-pacman.rs} | 0 eg-next/examples/{progress.rs => demo-progress.rs} | 0 .../examples/{input-handling.rs => simulator-input-handling.rs} | 0 .../examples/{text-fonts-signs.rs => text-extended-characters.rs} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename eg-next/examples/{analog-clock.rs => demo-clock.rs} (100%) rename eg-next/examples/{pacman.rs => demo-pacman.rs} (100%) rename eg-next/examples/{progress.rs => demo-progress.rs} (100%) rename eg-next/examples/{input-handling.rs => simulator-input-handling.rs} (100%) rename eg-next/examples/{text-fonts-signs.rs => text-extended-characters.rs} (100%) diff --git a/eg-next/examples/analog-clock.rs b/eg-next/examples/demo-clock.rs similarity index 100% rename from eg-next/examples/analog-clock.rs rename to eg-next/examples/demo-clock.rs diff --git a/eg-next/examples/pacman.rs b/eg-next/examples/demo-pacman.rs similarity index 100% rename from eg-next/examples/pacman.rs rename to eg-next/examples/demo-pacman.rs diff --git a/eg-next/examples/progress.rs b/eg-next/examples/demo-progress.rs similarity index 100% rename from eg-next/examples/progress.rs rename to eg-next/examples/demo-progress.rs diff --git a/eg-next/examples/input-handling.rs b/eg-next/examples/simulator-input-handling.rs similarity index 100% rename from eg-next/examples/input-handling.rs rename to eg-next/examples/simulator-input-handling.rs diff --git a/eg-next/examples/text-fonts-signs.rs b/eg-next/examples/text-extended-characters.rs similarity index 100% rename from eg-next/examples/text-fonts-signs.rs rename to eg-next/examples/text-extended-characters.rs From 4b7803e4afac29f45a62cfbed6f2275ef2b5f482 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 17:04:51 +0100 Subject: [PATCH 07/26] Show triangles with different styles --- eg-next/examples/primitives-triangles.rs | 106 +++++++++++++++-------- 1 file changed, 71 insertions(+), 35 deletions(-) diff --git a/eg-next/examples/primitives-triangles.rs b/eg-next/examples/primitives-triangles.rs index ecb1abc..447847c 100644 --- a/eg-next/examples/primitives-triangles.rs +++ b/eg-next/examples/primitives-triangles.rs @@ -1,60 +1,96 @@ //! # Example: Triangles //! -//! Shows multiple triangles with different properties +//! Shows multiple triangles with different styles. use embedded_graphics::{ - pixelcolor::BinaryColor, + pixelcolor::Rgb888, prelude::*, - primitives::{PrimitiveStyle, Triangle}, + primitives::{PrimitiveStyle, PrimitiveStyleBuilder, StrokeAlignment, Triangle}, }; use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Window}; -const PAD: i32 = 10; - fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(512, 128)); + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(600, 128)); - let style = PrimitiveStyle::with_stroke(BinaryColor::On, 1); + let padding = Point::new(10, 20); + let size = display.bounding_box().size.height as i32 - (padding.y * 2); + let half_size = size / 2; + let offset = size + 10; - // No straight lines - Triangle::new(Point::new(0, 0), Point::new(64, 10), Point::new(15, 64)) - .translate(Point::new(PAD, 0)) - .into_styled(style) - .draw(&mut display)?; + // Triangle pointing up + let base_triangle = Triangle::new( + Point::new(0, size), + Point::new(half_size, 0), + Point::new(size, size), + ) + .translate(padding); + + // Triangle pointing down + let flipped_triangle = Triangle::new( + Point::new(0, 0), + Point::new(size, 0), + Point::new(half_size, size), + ) + .translate(padding); - // Flat top - Triangle::new(Point::new(5, 0), Point::new(30, 64), Point::new(64, 0)) - .translate(Point::new(64 + PAD, 0)) - .into_styled(style) + // Inside thick stroke, no fill + base_triangle + .into_styled( + PrimitiveStyleBuilder::new() + .stroke_alignment(StrokeAlignment::Inside) + .stroke_width(10) + .stroke_color(Rgb888::CSS_SALMON) + .build(), + ) .draw(&mut display)?; - // Flat left - Triangle::new(Point::new(0, 0), Point::new(0, 64), Point::new(64, 30)) - .translate(Point::new((64 + PAD) * 2, 0)) - .into_styled(style) + // Center stroke alignment with fill + flipped_triangle + .translate(Point::new(offset, 0)) + .into_styled( + PrimitiveStyleBuilder::new() + .stroke_width(10) + .stroke_color(Rgb888::CSS_AQUAMARINE) + .fill_color(Rgb888::CSS_CADET_BLUE) + .build(), + ) .draw(&mut display)?; - // Flat bottom - Triangle::new(Point::new(22, 0), Point::new(0, 64), Point::new(64, 64)) - .translate(Point::new((64 + PAD) * 3, 0)) - .into_styled(style) + // Outside stroke alignment with fill + base_triangle + .translate(Point::new(offset * 2, 0)) + .into_styled( + PrimitiveStyleBuilder::new() + .stroke_alignment(StrokeAlignment::Outside) + .stroke_width(9) + .stroke_color(Rgb888::CSS_FIRE_BRICK) + .fill_color(Rgb888::CSS_WHITE_SMOKE) + .build(), + ) .draw(&mut display)?; - // Flat right - Triangle::new(Point::new(0, 22), Point::new(64, 0), Point::new(64, 64)) - .translate(Point::new((64 + PAD) * 4, 0)) - .into_styled(style) + // Fill only + flipped_triangle + .translate(Point::new(offset * 3, 0)) + .into_styled(PrimitiveStyle::with_fill(Rgb888::CSS_CORAL)) .draw(&mut display)?; - // Draw filled above stroke, should not be visible - Triangle::new(Point::new(0, 22), Point::new(64, 0), Point::new(64, 64)) - .translate(Point::new((64 + PAD) * 5, 0)) - .into_styled(style) + // 1px stroke, no fill + base_triangle + .translate(Point::new(offset * 4, 0)) + .into_styled(PrimitiveStyle::with_stroke(Rgb888::WHITE, 1)) .draw(&mut display)?; - Triangle::new(Point::new(0, 22), Point::new(64, 0), Point::new(64, 64)) - .translate(Point::new((64 + PAD) * 5, 0)) - .into_styled(style) + // Really thick stroke with inside alignment + flipped_triangle + .translate(Point::new(offset * 5, 0)) + .into_styled( + PrimitiveStyleBuilder::new() + .stroke_alignment(StrokeAlignment::Inside) + .stroke_width(20) + .stroke_color(Rgb888::CSS_DARK_TURQUOISE) + .build(), + ) .draw(&mut display)?; let output_settings = OutputSettingsBuilder::new().scale(2).build(); From 00d0f64ae4b58a133782af99b5a12a72c6e60425 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 17:39:08 +0100 Subject: [PATCH 08/26] Add text styling demo --- eg-next/examples/text-styles.rs | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 eg-next/examples/text-styles.rs diff --git a/eg-next/examples/text-styles.rs b/eg-next/examples/text-styles.rs new file mode 100644 index 0000000..fa809a8 --- /dev/null +++ b/eg-next/examples/text-styles.rs @@ -0,0 +1,71 @@ +//! # Example: Multiline text +//! +//! Exercise the font renderer to demonstrate rendering of multiline text + +use embedded_graphics::{ + mono_font::{ + ascii::{FONT_8X13, FONT_8X13_BOLD, FONT_8X13_ITALIC}, + MonoTextStyleBuilder, + }, + pixelcolor::Rgb888, + prelude::*, + text::Text, +}; +use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Window}; + +fn main() -> Result<(), core::convert::Infallible> { + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(512, 128)); + + let normal = MonoTextStyleBuilder::new() + .font(&FONT_8X13) + .text_color(Rgb888::WHITE) + .build(); + + let underline = MonoTextStyleBuilder::from(&normal) + .text_color(Rgb888::CSS_YELLOW) + .underline() + .build(); + + let strikethrough = MonoTextStyleBuilder::from(&normal) + .strikethrough_with_color(Rgb888::RED) + .build(); + + let background = MonoTextStyleBuilder::from(&normal) + .background_color(Rgb888::CSS_WHEAT) + .text_color(Rgb888::CSS_TOMATO) + .build(); + + let bold = MonoTextStyleBuilder::from(&normal) + .font(&FONT_8X13_BOLD) + .build(); + + let italic = MonoTextStyleBuilder::from(&normal) + .font(&FONT_8X13_ITALIC) + .build(); + + // First line + let position = + Text::new("A sentence with normal, ", Point::new(15, 15), normal).draw(&mut display)?; + let position = Text::new("yellow underline", position, underline).draw(&mut display)?; + let position = Text::new(", ", position, normal).draw(&mut display)?; + let position = Text::new("red strikethrough", position, strikethrough).draw(&mut display)?; + Text::new(", ", position, normal).draw(&mut display)?; + + // Second line + let position = Text::new( + "bold", + Point::new(15, 15 + FONT_8X13.character_size.height as i32), + bold, + ) + .draw(&mut display)?; + let position = Text::new(", ", position, normal).draw(&mut display)?; + let position = Text::new("highlighted", position, background).draw(&mut display)?; + let position = Text::new(" and ", position, normal).draw(&mut display)?; + let position = Text::new("italic", position, italic).draw(&mut display)?; + Text::new(" text!", position, normal).draw(&mut display)?; + + let output_settings = OutputSettingsBuilder::new().scale(2).build(); + Window::new("Fonts", &output_settings).show_static(&display); + + Ok(()) +} From 13e642e6c06b3d11d3c1ddc78fd03a30e742ea52 Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 17:39:13 +0100 Subject: [PATCH 09/26] Add text alignment demo --- eg-next/examples/text-alignment.rs | 60 ++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 eg-next/examples/text-alignment.rs diff --git a/eg-next/examples/text-alignment.rs b/eg-next/examples/text-alignment.rs new file mode 100644 index 0000000..1f20973 --- /dev/null +++ b/eg-next/examples/text-alignment.rs @@ -0,0 +1,60 @@ +//! # Example: Text alignment +//! +//! Draw left/center/right aligned text in a containing box. + +use embedded_graphics::{ + mono_font::{ascii::FONT_8X13, MonoTextStyleBuilder}, + pixelcolor::Rgb888, + prelude::*, + text::{Alignment, Baseline, Text, TextStyleBuilder}, +}; +use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Window}; + +fn main() -> Result<(), core::convert::Infallible> { + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(512, 128)); + + let bounding_box = display.bounding_box(); + + let character_style = MonoTextStyleBuilder::new() + .font(&FONT_8X13) + .text_color(Rgb888::CSS_TOMATO) + .build(); + + Text::with_text_style( + "Left aligned text, origin top left", + bounding_box.top_left, + character_style, + TextStyleBuilder::new() + .alignment(Alignment::Left) + .baseline(Baseline::Top) + .build(), + ) + .draw(&mut display)?; + + Text::with_text_style( + "Left aligned text, origin center center", + bounding_box.center(), + character_style, + TextStyleBuilder::new() + .alignment(Alignment::Center) + .baseline(Baseline::Middle) + .build(), + ) + .draw(&mut display)?; + + Text::with_text_style( + "Right aligned text, origin bottom right", + bounding_box.bottom_right().unwrap(), + character_style, + TextStyleBuilder::new() + .alignment(Alignment::Right) + .baseline(Baseline::Bottom) + .build(), + ) + .draw(&mut display)?; + + let output_settings = OutputSettingsBuilder::new().scale(2).build(); + Window::new("Fonts", &output_settings).show_static(&display); + + Ok(()) +} From f7e72f62a50773931fc3a63a071c618fb975dd6d Mon Sep 17 00:00:00 2001 From: James Waples Date: Sat, 22 May 2021 17:58:02 +0100 Subject: [PATCH 10/26] Add generated example screenshots --- doc/assets/0.6/analog-clock.png | Bin 0 -> 9543 bytes doc/assets/0.6/chaining.png | Bin 0 -> 3828 bytes doc/assets/0.6/hello-world.png | Bin 0 -> 3828 bytes doc/assets/0.6/image-bmp.png | Bin 0 -> 3165 bytes doc/assets/0.6/image-tga.png | Bin 0 -> 3165 bytes doc/assets/0.6/input-handling.png | Bin 0 -> 3391 bytes doc/assets/0.6/line-thickness.png | Bin 0 -> 7334 bytes doc/assets/0.6/primitives-fill-macros.png | Bin 0 -> 5325 bytes doc/assets/0.6/primitives-fill.png | Bin 0 -> 5023 bytes doc/assets/0.6/primitives-stroke.png | Bin 0 -> 5641 bytes doc/assets/0.6/primitives-triangles.png | Bin 0 -> 7101 bytes doc/assets/0.6/text-custom-font.png | Bin 0 -> 6013 bytes doc/assets/0.6/text-fonts-signs.png | Bin 0 -> 19125 bytes doc/assets/0.6/text-fonts.png | Bin 0 -> 9957 bytes doc/assets/0.6/text-multiline.png | Bin 0 -> 3569 bytes doc/assets/0.6/text-transparent.png | Bin 0 -> 8477 bytes doc/assets/next/demo-clock.png | Bin 0 -> 8779 bytes doc/assets/next/demo-pacman.png | Bin 0 -> 2785 bytes doc/assets/next/demo-progress.png | Bin 0 -> 1320 bytes doc/assets/next/hello-world.png | Bin 0 -> 3924 bytes doc/assets/next/image-bmp.png | Bin 0 -> 3165 bytes doc/assets/next/image-sub-image.png | Bin 0 -> 13429 bytes doc/assets/next/image-tga.png | Bin 0 -> 3165 bytes doc/assets/next/line-thickness.png | Bin 0 -> 7334 bytes doc/assets/next/primitives-ellipse.png | Bin 0 -> 5532 bytes doc/assets/next/primitives-fill.png | Bin 0 -> 4053 bytes doc/assets/next/primitives-polyline.png | Bin 0 -> 1640 bytes .../next/primitives-rounded-rectangle.png | Bin 0 -> 4496 bytes .../next/primitives-stroke-alignment.png | Bin 0 -> 25365 bytes doc/assets/next/primitives-stroke.png | Bin 0 -> 8892 bytes doc/assets/next/primitives-triangles.png | Bin 0 -> 7882 bytes doc/assets/next/simulator-input-handling.png | Bin 0 -> 3381 bytes doc/assets/next/text-alignment.png | Bin 0 -> 6486 bytes doc/assets/next/text-custom-font.png | Bin 0 -> 6011 bytes doc/assets/next/text-extended-characters.png | Bin 0 -> 10672 bytes doc/assets/next/text-fonts.png | Bin 0 -> 5512 bytes doc/assets/next/text-multiline.png | Bin 0 -> 1999 bytes doc/assets/next/text-styles.png | Bin 0 -> 5861 bytes doc/assets/next/text-transparent.png | Bin 0 -> 7019 bytes justfile | 27 ++++++++++++++++++ 40 files changed, 27 insertions(+) create mode 100644 doc/assets/0.6/analog-clock.png create mode 100644 doc/assets/0.6/chaining.png create mode 100644 doc/assets/0.6/hello-world.png create mode 100644 doc/assets/0.6/image-bmp.png create mode 100644 doc/assets/0.6/image-tga.png create mode 100644 doc/assets/0.6/input-handling.png create mode 100644 doc/assets/0.6/line-thickness.png create mode 100644 doc/assets/0.6/primitives-fill-macros.png create mode 100644 doc/assets/0.6/primitives-fill.png create mode 100644 doc/assets/0.6/primitives-stroke.png create mode 100644 doc/assets/0.6/primitives-triangles.png create mode 100644 doc/assets/0.6/text-custom-font.png create mode 100644 doc/assets/0.6/text-fonts-signs.png create mode 100644 doc/assets/0.6/text-fonts.png create mode 100644 doc/assets/0.6/text-multiline.png create mode 100644 doc/assets/0.6/text-transparent.png create mode 100644 doc/assets/next/demo-clock.png create mode 100644 doc/assets/next/demo-pacman.png create mode 100644 doc/assets/next/demo-progress.png create mode 100644 doc/assets/next/hello-world.png create mode 100644 doc/assets/next/image-bmp.png create mode 100644 doc/assets/next/image-sub-image.png create mode 100644 doc/assets/next/image-tga.png create mode 100644 doc/assets/next/line-thickness.png create mode 100644 doc/assets/next/primitives-ellipse.png create mode 100644 doc/assets/next/primitives-fill.png create mode 100644 doc/assets/next/primitives-polyline.png create mode 100644 doc/assets/next/primitives-rounded-rectangle.png create mode 100644 doc/assets/next/primitives-stroke-alignment.png create mode 100644 doc/assets/next/primitives-stroke.png create mode 100644 doc/assets/next/primitives-triangles.png create mode 100644 doc/assets/next/simulator-input-handling.png create mode 100644 doc/assets/next/text-alignment.png create mode 100644 doc/assets/next/text-custom-font.png create mode 100644 doc/assets/next/text-extended-characters.png create mode 100644 doc/assets/next/text-fonts.png create mode 100644 doc/assets/next/text-multiline.png create mode 100644 doc/assets/next/text-styles.png create mode 100644 doc/assets/next/text-transparent.png diff --git a/doc/assets/0.6/analog-clock.png b/doc/assets/0.6/analog-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..b7797b9efda9708439d8cbfac0b1a3d67843fecd GIT binary patch literal 9543 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 W>-yo_+3+^&$9yeehwQhRfBY-ctd2tf literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/hello-world.png b/doc/assets/0.6/hello-world.png new file mode 100644 index 0000000000000000000000000000000000000000..88de7a4c347979e7a737375880a03f0f65039cd9 GIT binary patch literal 3828 zcmeHKeN>az8OPGebb!aXogUbLt%s6>Jyo}uSq*`0+EY_0=|Du7$fv|WCzh`OF}&?; zp;W6Yp-00En z{&C-rd!PGzKJM>%?!C2dCA=QAI&`(4pI;Dj=Z-`_zZC#}gYQ2FpNA)Rru+E?E0{Ze zv%9=$&T#YN$lkTD-As?jeSfk#@YGuDldYqzAFkN2>0#biGPNx7fk@2%S$1mf=BQs! zijgH;g#?17>k$CcWB_-ZJu_T=v|`hmMz$0jgYW6fF+Xi+_H2aj(*gFw2R-(aDz{q> zcGjgmoCDcj;hMas3p*96$kNHX;3_dUGdy@W0leT<@akr|JA+g-J@FSS7h%pGMCUd# z@BDyW{%NzPuH?m$`So=7OEWu~CX#(98FdL?hU`BeRYf*`NL3CcAk1xRp|l&_$P8O_ zo|3G4r#fY9W+RjGb)fvb)+epPcO|~w=L0Ikc8%7)I?!f)TZ2f=mYu|)FRho z_Z@SOGYZ1-&l(&wYZmlPl@lSmT7`;eC;7i0#zLK)LkYmtwdQtq99PqDy{{vWAH>^x zz-RX|fQ4<<7*kc(_9u_c0J?J`&1yzd<8lym1fw}ypFqGu@M5lB-j%W(HB}ud($h{d z#u?meu`#a{WU^YVkK_`Cv~)OU4Oi3LwT5*g)F6Ptet8Dvq}vSx#$vX0Kzn|rQ!-TL zIwd)A1Wy??YQLE7s!^Cn3^l@~V3aDLbyAYcuxA}u=0lARm+1>KO=TM6JW5>*9!H{} zb-ST&1GD@T3$3$IVLnvu5*`Ua;{^1a2xv0Ma`d%1LJd8};w?%%zR%w!9)!j(y9xdd zG8&`GZqIZ3x`OZxZEiRkzF zNmb8@C{xf+82o1+!HpSp+h$!(6~3QqQ_-Dl*Z2xsFYwTJ zU2iU~Di_r&CXA5#syjy9cEUZz;P&I^mY$Dc4Z%hDCXV_4HLzO`=0J<$$ShZUobeCJ z$}rPRk_ykY4x+vO_qI$??pGwD)m)giAVG{7DLJe%P1t;2bleJ!plFMdx18iEt+dKD zXb=z_;0>8-RgFb#>vot_T>|Pr^YT|HcZEhb8D;z%e6t zDq=t28wd($Ch3QPa6ANm3$8J@;@Jj#E3CSq9kEAS2T;hdtSHq{T%8+aWkL&0QylZ+ zkDOU9h`&i-y3EfbGb{nv7P{?6R^y#KXz}Sm+x=K-sy{E$TL9RX+}y494Q8dkt&bQl zPt*5{h%{NHXtD<@aYD-khm@BBinVBjK97<~Dm_4G^_52Oe)>p7z&*aJUECGNWxGRp z$_(zI>HjqAnkQ}@*Z`MaZn#8AX$Gx) z8Kiwl4iMKOr@Tma%ySyMq^Yx7IJ)g@sEn$~Lh6cg-y@@oTyhydz@oJc@o(QW`}si8<;}*XwQl zriQ`I7e?S;G^JfQ$ZVY;5UKL7K_iscOu~vpY&t*hNb-(Iz4K~maB?jzT9e73o^{aY zd-8rc+)kRhsvxhZF8^}^QQh_!oP%#FQFOh|RXXn?j=&briPGsvox~BTla^)&QO}Z( z<-d3Mw4^jvBICADAZ!TXh`U9SN*R?xrIm2`MY>q=6+0~IVBv%RKLlA3Vhe#Tp2J`| zh_)|dxLz;VErw0wAi7gKGA@3Bw6ZL=`y#4vw6bniTe;AUg^W|Dq!VK>v~meXIw;S3 z!@`7e%vLj&f3929u9v47<8)F7_pnCj!>>ql2cp6S?fl!snIn-;Mkxg@0E{DS#bn_2 zSW-Gr@vIi3e{PP4Km>kFN7YJK{356Pvu`*CPU!d~0zVB}$RahfENy#SsU1iFq*ju* z+l<90irb61qgRDP|2=u1Q47L|Xed_|z&)S+b9A6bG>VPMl zH(*fXMVGO9c4t)-!ShuGiSSpr^!!W=#~n6a>~&WY&mjBj*Xh-h%ggg0DkYDM&I)`N zs~>qG+LnEtS`ZHUh@$`UW7~^U>DKbR;RmK3czox452Q%QxBZ+X?yyW?-B9~;%<4mX1g8uy%M<| W>-yo_+3+^&$9yeehwQhRfBY-ctd2tf literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/image-bmp.png b/doc/assets/0.6/image-bmp.png new file mode 100644 index 0000000000000000000000000000000000000000..d276c08a64251d8232ea0f028f2bf1995788077b GIT binary patch literal 3165 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 literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/image-tga.png b/doc/assets/0.6/image-tga.png new file mode 100644 index 0000000000000000000000000000000000000000..d276c08a64251d8232ea0f028f2bf1995788077b GIT binary patch literal 3165 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 literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/input-handling.png b/doc/assets/0.6/input-handling.png new file mode 100644 index 0000000000000000000000000000000000000000..6346a0871af1ebb7228992f77b2e1822c66afa97 GIT binary patch literal 3391 zcmeH~TTqkv8OHzLmq3DYrU4Q#93s$4mV|>qx?xce0*ivEH9bk*)4xSLyyc&j5R6Qm- z;hWl``#Ot$#(|{ZPQ$Zh5lfH^$~(FBi!T5-u;$>vVFUsl@8SQ^g!F+o6Ro)Q6=2!t z-rY~;-=19g5T@r_h-u6_^{sPDSmiBd^wxrX_^Oxo1W4&H^j@00C)S7ns1L~ z4e_*G;PRBxTmf-ctNv(-HfTJPqhr}Qv#GjDduDKZa_LE%jXFrcD0#-Qx;4bo@_QM?LnaL@`stvoX`=J`DRjSr|> z9vHvY^4XOr8+1hw_nLL8P#>V~f~b^0?hGHGHQh6wH->IgA@mAwhCDcAW{ClW)E^A$ z8|tJuU`qZnr0gUungEzR$1}L|^M(2tlqF!fe9V1RlMK=-S*pu}LjjdI&@DLV!s2o- z7lJf&Zrbn0P~4~<2w_^YzrO3DI04pu?sYlTH=LH3gWTRS&1duTf%>}Wq&iYo+0wG7 z8d9>zBK9%1SDYuf&>y04o1Y)1;?PuqV`L!m;tw-GZP4G5RNnv<2d(1?#fL2t+1IOf|cSq3qv#tIapI^ zy9Wt*5?9oKp>-8@+VJ%e|1a`_xf%y|%!v4Dlqu&zZyz{2z04aVOiDb^JKmc_VW$_> z0C862`g1ju7|cjf^`tRpt7inPy`04j5+28RXB zm~wWIQ8?Qg$pX`iRU;G54(h(`Z0OEJN5?m&vF1fYvYh{VD;*ZK>l-1S=d`w2o%wtt zgwE313U?AdE1+!)+{$=aV$9jwXN2st(Bg&vD&X!iKpeppmv0{2bdzh}Zx6&oYu2RUN7 zJ+A<)eD^8|YtEoxE4!1UD3Ttcot&AnNfHJq@X&1fm_@yF=%+=X-FtC2*4#A<405j#2Ea1$1G1}_>TmPI*2`PAOCczSVr>j5O)^h2y=S9FxE#QV}7SbthVGv?HE z7($^2)oC2ybvUe`0O1}L~ ztOTm*ERKF{cV2FuQMMCyN-Dm#)0(`bk=>$G<8 zP6{W992{{H%#Ye|cn5uSUApdY9y3yqZ}WB~N*_V|wkN3x)ZAD;*i2iof<-n&EBQy` zTg6>dR^_@90?(HsS^xYd#P1xXB~n{si)_(E&Vl^5EzC!N$!6d4rCf@W`5UC1q?`S zL~AQcXxz@Exo4bwqA9S+wy0$x2Ju1Qf{H8HC*EI5fYi9K_NK(f=)-ulUuHdFTNZFY9CssD6w%&N(8woslZ2^ zMbX8`Qw21agE22IHUo7?ZE?c@$AY&HY}K--{XB-Zle>b_jZ}C7?>BXJfBt}9 z8ljB`E^TGsR$RR~1o_u0oyn@ZN;?lko4hVAFT^-XC5De0yEz Q?O_Ch140ko^+PWH1E%I_N&o-= literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/line-thickness.png b/doc/assets/0.6/line-thickness.png new file mode 100644 index 0000000000000000000000000000000000000000..af32e186244910337ba1292f361ec2f17d9a20c7 GIT binary patch literal 7334 zcmeHMYfw{X8vXzk(W+b7EjNKGt#Ni;&?<&YxYVlXun?(OZ(wwB0i}|{5=aUp!RlgH zB5U&_RW4ymtqKxrBUKY5sh1$*0#?N=5J->+a!Z0J3FP9w=bWUw)0y3wo$1bWX7htT z=e+OpKJW8A-<$6{e7ZF;Zoxd?c?h8eTQ+ZaA0f9P>~F3sJh@p}H;T}b!&^4Io6M{n zSAEAD+ngVp#BH6HjzfpAY@n^*TBmC_F&WZt&-&kHQi3is;)fjOV9g8R%BRQsqxBXS5xeNESQ} zbwQeiyFC#au^B#@Xzf%hWOEQACyj>;(A*HW;{23g;*txJCnTHinUn}=mOohx!ED{t zDXa}kUPoaNLd$GhJ4ic9|Jx_G-$v+>wV$l#*WbchtfX|d?n3DAruU+RDgFvf295SY zVmk<^2ppN#j;z9^B2gK+Zy>bppH)|evFi9@guY%H?1E~tKQPk;yV+?^fawp*=ToP|7osO3}J*QI`3 zYt9ZxY_ATRmYT)p`a)8M3sny1NT zn#x!}jh@zi`0y-Qq95$nj(y6PNn@lkNdc@TGn}RXaSO(;PW3(t0Dq&B5l3 zJ{oR5PsFUP)epvJ7|Hrew$CTLVZV?QF$)THTHaKKafdOnz4@N)w2|=sEYx>buo}$b zZ~bCQBu+3xpChCQRxN?BsjPI#=ovqA1y$sVV#apQdQBhEbA?lD7O}tJlO=c;hi)_P zUKU-yESuK;8X0bhHp&e@2~d%b8;p%cq3%xv7xq!>Z_4V^K&}UEf&E$@7`CO!u(TzP z2a3m&-B5vaYGZUtgjB}jybKzn?N9Ls>VjMS^x6y^m&{Yu@3#16EgY zwj$__u^jmaco5$3wcu=o0wvrUv;CCXstO6T8u`QOmzMpGO zsXiSagwz4AZHPOR#Gux~JgkoEjN%<~N6dij#ku;7vzyr~6cwk0% zE;I}$N6IHJ#XKCEe+pmC& z*0NvcD4|x!U$M|flTx^eFg@_lYIUQ?LmrP;dub8Dm1FOE`>DsoP=q`=1y5`z54oEd zn}XvY%@hfIl|I*(?1BnBvo8klQ>39!I8dtYzvw=BbwR%{(dZxK1a1i-~a z$~?F|dk`739k=PgefBawP-fAp+;I3}Vps!#f&1|0H5rf}Ehorz04#p#W}cZi!31eE zJrGGV?ZMg0=^&nl&cij4!C99p3&jyE>l|$rJv4bxpcP6vyrui%Yg!E| z$;m`k2Zm6A%Th7~^5b1;NM*F!u#ECJ=+odyye$V0!VA1s;Jbi8^~TYnk2ns`dNR@0 z>rlLpj;nSY17PE1V~+v@qaU8L?1!#a5nX*02p$Pc$8)Y>R2LCisxYdhgqAvo`{cD{ zLODhc?2XC^%_^}%D+pD7^q6SL=!<)=1Y@ozRC*0~vM=HC@59my2}wS2^kXR`Ty9wp zfhHp^L%-Mi<47(e<1)+s0-?4WID+YzqbJR5Vox#W0KF!{F%%4RFX5zWpnyUMhjoCc z_>MwX{bEYgS4AG>Uv|52dx(7>umvKo`W-G-OO{hU1B7gH_e?V*f%%qwN1;rg7$J<6 zqjA70_8vY~44Z*%rVl<=aDd+i-41EUx*6p7S|lg=#E9U-1CCPk*{R{QR8Krmc;LXy zP67*JPDeiu?LXyc>R-PzIgfwNlg$UgwA{cnE& literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/primitives-fill-macros.png b/doc/assets/0.6/primitives-fill-macros.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8fc366c76d91cae64644b0acb4dff472aceb3c GIT binary patch literal 5325 zcmeHLc~sJQyQi$z$@k4>Dzn9OW=btJG#Rrr#L3D9(_DZMmu6BaF=|vqC8e5aI+fbE zWu!>Cq=MjxDfz>tvNRP%4O}9!nN$Q9GWP|2@yFab_nvp=&Rzbx=iI;Ge4mHsvpmoD z`EhBkQc$mVp{qhI^RWRG@9BHkY? z{ad?Kx!hj9%(T>Zs~Wvyab@+33h2X!oyn_yeeyxLTrtx}T~;aU@QZV>r~6Gwwf5Qg zXUfz$4E1iu8cLS=;6J*3=o8Xk4sS}x6x7YvCvG1-&q>9|EHi-%CKaeAe$jG`$Y@Y} z_CjPvwH>ue6b~zAyS+W8QWh*(l}e@$=r?xFBJ-Ve%aQBFqfiAk^ZWpBd4u5B%B0qe zGMlCOp`YqUyq!q=Tl0M(xVh0~t@5ovS(QnyETjWbPxRhj0sL1Yd-{6(*YEFMyZ^%A zt^zkjr2dqVGN83jWiV8H2@|>Zxj&}9nsz(gtXLQzqE?e_s56oG3sVDHk9{h9teZp5 zW#wCkMf|%T1!E#Vdk*7#FQX5c6(`<%b4=Ap!Ay`5+HpV(CUWib3FuWkW6ZwzMwmL} z{Mu&}&RAvlI0jk1I9_f3uD5W(BP@42*=spv+Lt24U)F_6I>lWH6%)02x-;H?b=uRJ zp`S2NeqHAcQq_3SPnO5fZs4CrU;?Kygob7pEvJm$pQYbUFx;vXCHQ?jRi$grsL}e1 z!xq(}x20VrP4^1NoK!4&@dsMpT4sC|ZOelAo(*aEZiWj-vXs{0ZG2e(#he zCwY2pJ+%4mDrO}ne#1pJbtD*VYw^L$+}9F+Ng<#2S=P}*v1dKrB~ruB+&NG(_J@(Y z0=Tl*=F;?k%>ScPp5$ym>69qWVamUxI4*}(XVjw{HS`k^;1xNZaD4(ZN2X9}PgD5U zhb_W9;u>j+d>3Y8?TKs?IkBn*kdAb--eNy=ndUiQTAja9Oae{XJohBjWpJI zk0MuQx%)|r!Mc`|S&?3A)$us?HxV(ax$1`OJziT&f%5p^hK6i1wM4~OlRV!N2qz6h za8d#ZcMSrm4yF4|-8MI{#=?zgW&34PBf_%jmAoY`MtG_!J2$JBHE%}ZIAC(E0!jFV zmx)P-luM@;5bF%4GHc=*ng=#Z1%YBrapcr*Y@I{H1+g=Yua{ll6$Mdj7P!XCSOHGP z7FEw%+;|ovrjLI9%4R8_@qRFf_cngxY+Gqkb8{;{w28W9qAS+irqlrmLfOBJN2|^w>B9e`b$dUTn^tq{66P_SvZ5n6XRApeh3`~usJs~HY_eB#qHpsT} zEY={dm`Ymub4+e%)3j@7@gf>HNsk3Fl^IpQOk(Mwep6*QVqNw)A(I{!yf+=M;gxzr5e)=aIP(PG97o{NUkq3KHeIx#+i#R3NjaKANE4<+o+>t!T3_F$ z3isMlD)TnxWlW7A^Xo9MB4QyDO^IqT2%RiHhON#)X1qanm0PBa`Qq<_()hu- z03C`Q?bsK2w?nukWE|Ls;(iH`Ogr-wZ@_W14-74qRHcf&q#mmx=Xx0>K|GQh`Y3Pg zXq+z{2hwe9u^`!FxOPm*-qTPjH%7W;FLs=XFJzX3b2bt~DrOC*mPY8OtI`3N5837v?ZtSRYd0olaBK?J+(M|`Jsp%B%a&7;&pVsyBBYh zF$)IJKMCy^T9xkJQ|j5xgt@Ma$cPIqmuTvS#z)zICU~ZG_S<*>O?L(1oSQe3?7g^l zd6FBaw-`EZ8h%xwaM!3jK3FKhrixJjU3Y#0a_`3i%7t;nBSl|CeluC1gnqa2#asW{T) z(c+WzLo?0&QNs~jX8UM)Rs*Ni2z84u&AME?;(NKko9}QWA@wGp%jBZDnO(_jK``Q zFeQbPWx)0u-Vf{|$5LtXuD)OtTT=YMbi;kiq|#HK@-rlxjRi+YgKvysuh?}>Oh2BF zlc%Ahc4DbFRUHiZZw74-U*7oLmR;tsyr^=(4TNoIc@#Aq&fQ*&TYG=UhWpg5SlYIN zEU|je>4<5tz=s7me45xrY6g+UKvXYYh6$k363!`5@woLqsa;mdaRqwSP=nTx<#F_x zXn82<1xP9}^PIe^H`vCTr{idg*pWJ5P;PZY{OYdGVOIbfzynR+72*L*eT9`4;B4;S zW=LP&OvYwBSDbTSo3mRDf&)QPtWBkH_e#b(+1uM2g~Z@vER3;N9MfUJr=Un^bakin-g(Q;erFCm#WEpv>dV*-^vixB!wD=4gcAr|7W*Gmgq1 z&WnV1a?ssYUS_`dwym_Eh*Ed-&M4MDqCS-CVMPjK*K{J&Qxz^hM_RvWr4NZI>*QUn z!Q!uZ&5qg#T*@(aVCqqM-h8#WizmyRwnvW%!za4C@Q5ZXT>$kryV>5G7GYDVyWNb$ zvVgDS`~sRl;b(%603;Ze)XuhUe_G0Z33RdDYU{oSU>p-Tn}Y|1htZOV@ftRh;{;po zBhuf~l*;>Ki7Z!7)-VWF=ogxYGfG2gOU<<67hfk?oPY7GKg+)8ptQNOSHUz{ncLz! zy+d7%8pcL-(YuhiGOM{kT{90JH>wg~g61$o4ggd8HFO$Fr7t_t7VfokfqJqp>1@t< zkc}PfCUNI)-b@gjxPTrZ?LsZ)MU@MlMaWvwUFh*J7pJWuBV7z};y&qyde%-ryK}Cw z)kx1kBt@_pK(f*xwFVv7{r5|wAN%c<5u?~1H$2Nc`_BtSRuep*vebpzz(QuhhQJh5 zQ|MLD^lrkXQJn$%M*j5XYIUJuO`#)$4{*v<&>nb=G|gfHbu0bC4kdFj)>JJl5)`IG zyH2b@f=!>CjP~RTF#Eh~&sVcP%IJR#CV@9u2UWPtRi<#7vxRD(!!-K=ZSnxutpTIg zNbi(PqK4IAa;9L;LJbxTf)PSC0;GK!*1d>I<6H3w#UJ6j=t3I&j|-{J;J7`qOtU^% z=UjI0u0Jaj!tcSO2@7y>TYr<6Je<@D4y(U0teqXy#QdI^ab;<#3?`X!C_gPx7Dt&*xj4gf<)%gk0)1>B4I`{U zPqxJ(x#dnDdpdxaozjNJIDpqMR-VA~Fb3~W=yx%Z+-YYFv<@|T7M-2>Kh7B+7!01f z4Gm0SwRK!NXbER?E`h>eoijwZM!aC4Mb)HtF-r9jM@k;7k5%9K0no@s&g0I0lihue&huk?%l)8f55DZ=2*Ie*3{)>qw9ZIgx7i!W} zkhC)Yy%b0*u^U2fyW0_hOK1Hu;Ww!MTi;mVq24gd;D+gQZRC?o!H!wwwN&oG)XORa zc(Y5%NV<9_E`c4ZO-m*ZduW6m*T2v)eKm%cD-rq+1XwWDkAUBl`Nm1vmKtTT0o6ze z;a6!c5fPa|E-Si2{5NS{auTn0H`ud56c;IJ`IQvFTaJ4>JOlFvu+nQFC+C80>3ph& zH>L@C-ttyANxC!~TiPddQ9n2I!RLlSMj&|@sUa0Oz<*S8kPAo{*_q0I=pWxJ(VKP2%U@76-VjOk;Tv@P@rhBdvG6w8-BW`+jjb zcJ9Dfssoz*1=zC$c?2(6BP^6GIUYb_Ki)i+@q5@%et{RL3FrJ$Spz5{zO#8_9$zwc z1nd;NvyWKg0(SFoeJh2ubaN%V^M4Z_zNC#nQipT<7pjl}_`0;%p)}OTRc3Fh17w!l z^`FFTKZK1&j|{Etzjx|sM{$pE@lz5kI-T~z{@3SUcMx8NlwHm9DPzoip$Hw>16z0I zE9oOuW=hMqYZqj{?3r*9wf1<0ZfrOUoLjKmmH9$vT3GKjc)cjAEKjgIu_Nx)bdW12 z5idckbEX+69uDt$^~tV^w>*`8+O7A!)1J?~Os)fRyXLQ+xojGdSwd;OfHn|FpN?rTwAu2C#S&G|e^2KL%D zi@w&L{uFX5S^HDS&juSlhnzlS=m>cdariRi@<5FGeOAjjWHsc@`&DZo7L8h;{D0#A eZF^+PtG?_r%@p;US*u@DLR^n|9OWE2ef6JTlc5O! literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/primitives-fill.png b/doc/assets/0.6/primitives-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..704f2c17fc4eb547742786f61d1278dd532271b6 GIT binary patch literal 5023 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 OlCwR;uHwYm}^s1lkG0@9nHM@6Iv2uL$D>5_od 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 WpEp*r2ma!vxvX!dSANkk;=ce}8TZNn literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/primitives-triangles.png b/doc/assets/0.6/primitives-triangles.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd2b6a7cd7a2a9f7204f2887a1181c63e93cb57 GIT binary patch literal 7101 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 literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/text-custom-font.png b/doc/assets/0.6/text-custom-font.png new file mode 100644 index 0000000000000000000000000000000000000000..ee36b43cee56a209d5056e4955dab0274b3d2135 GIT binary patch literal 6013 zcmeI0e{2(F7{`km6$0^(B^m@YLm8Pu2P>}W25p3);#_Me5rK_i2J0%Y>MGQ^vQtAe zMrS6Qlv}r5RIo9?h;Fi!ZY!w4b?sVVx@BW)qiL_=*h;Q$cOe!&tz{F2`mEE zZh5_Kc<@5yigi7Ue<+Z4+-qB~P$>3(_~%u9r^PGRhLw97aHXb^;uw!ss z!;gCS?}<69J{Y^_*fZmIK6gAcC*^WjkfbKwe6Lw{KD++lF(DqprN$?v{pW@^(VEg zrq~?GaF50-B2rC*nf_*(PWtMi;B-?oi4sGgfRrUu{KdM`b;0G{py!yfQAK|^=FfAV zcTiO>qEK#bV3QbD<4EllX`dd~3N^cEMTg(I+LY(w=CYiat{EcDpW%FXjj7*jkgX(o z#QvHg3#VqA+9jqu&z_NDBC~AhAluET4r%4)b~|-cHe}Rxj^@Kqrs|fG86HBpRn9j2 zwEJk?rs{2_DY;;-O4Dq||BGzo8ZxV&YHL;J;{VH3mv_TRvk%P%;{VKudcD7YPdL@z zWapGll>tiQs`vDjzq*3tbb$Tc@}iWlEHkl=N_}`yP##>E*-vFr?Uks`>S>V}6=GJG z>epgoM1M1bhI-Z2x&}}=2G&rYM5<8#uHIy%gs>+~}v%Cwa8P1TF2bVCRlJynO zO10~0Nk0{+66la(Q_3ywK&aVCY#%PuM7_VgJN8fN@ z;9{I98nWA_Ys{B^T&^QYMzd=&LO!KgXCPDgyAPtOmb=fznxFt(^Oe6)t?;>1f>#(z zNxBZyp{%=B|JaQT(sR^vpc-P`XE*kEmF5;3cb023I+ox?NtNbl`U^AHPIq$()!CLy zxA=5}Q*|W9TfEsA^Z66(mXZDG)|J+w6i`T{t9|wxr((UunKc>2r){QEO*Olp%@@Nb z-^eoDh&utc|6VSXZCsO zl#KzDISac4`!%h{S~P;O`03zk^JWHC|IYgYLy@BB}$~ zON_R=hVyVdv)?;?TV59?KZz81S@j{znsUv3U}A*ve2slk=2`Q_e% z>q2XOSa>UAU~2Xnl#PUz_T-GqlKHoF>@cJ2!+MJ@hnu-=7Dy7Kh~J4-2nHe4%nmPU z#L|jz;*a;oi1nb5){PBjtTTwl-mwsn%L36qL%V?~F2+$UWKMhe;pn95* zR3%tD5Z3*i20;N8k26JTq38e|y}dCLz8-=>J_%{#?Twl6^(NvDdN=($6OK6>lG~iI z*(`}msL7BVyj7vBsm>+*){068_DLQgVTf=M(aBy*=N?DJ13Rl|K}XGT`4qd&j0p4C z!P+*K6w`|028t>xq=Qfvwbp*lfgqEtk6>C-t=|s}$F2pLq0eNs)|1>yY!9E1cPMPCiNo3mS@HQy$TyXcCtevI z+RFkPUt3cij6~qqVxBN?Cl3|6)l%&vu;sn=ad2fr#QjxoRo;x%SY%M6Yo=I4B91*FJ_IX=6M2PyL+gHSpI3K1m z>up(MCT;RQhY6Qm$v9%*4k_~!A=tud&skW^#2uXum07SVW= z_|S4O)ptT`#O`>jk7yIC{#3f1?mMA1qSy2s=W)D7d6v2crjmS|?}XNf)Z?aZ5_#i% zC$vW7JALYA)1oc+KTZow%+Xd7q?Zo37`L9Fh7`*+gF+CIQyOP#uMR3;&{s1QgVfRf zRFs5JYic6poWAj`(LNVoP!XUOYLZRzbNDc9(4m9nfGr$!z!J8{ragvoD2sai0lO-^ zS#BA(HHx3N6vT!F_$E jv)Kmif8Ll56>Q}1$}G6~%`eba7i`)n&u(15>+L@Qf6FH& literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/text-fonts-signs.png b/doc/assets/0.6/text-fonts-signs.png new file mode 100644 index 0000000000000000000000000000000000000000..5286ce75e55668f03c832f16290657ba3479d6d1 GIT binary patch literal 19125 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 literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/text-fonts.png b/doc/assets/0.6/text-fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..235196b8c7ee24b578ba0e5428787df28a9e1861 GIT binary patch literal 9957 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
    je(hzexV4uav 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 K+x3h0fA#OyBrqoc literal 0 HcmV?d00001 diff --git a/doc/assets/0.6/text-multiline.png b/doc/assets/0.6/text-multiline.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cb5046e673e6bcbb537feb5c4ad97e3be7e77b GIT binary patch literal 3569 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

    Kfm)WjCxeEvQgbow^WY#J(&zLiA| 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/demo-clock.png b/doc/assets/next/demo-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..6a84745292e3ad497c9c6cc74f76843eec75ffac GIT binary patch literal 8779 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/demo-pacman.png b/doc/assets/next/demo-pacman.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6cb1b254d9c367f7c5db7da8f38b8c55708b7f GIT binary patch literal 2785 zcmbW3dsGuw9>+5TqK2UmP`RLifV@vyM6Zf1ojxaq)IhQd> z@u;Vrz4)YP`7K;W>bdS}Yg4=VIpvf>o9mVe@MGx+&h7Wf?7ed8#%#U5<0Ce_0!R&j zry3SZz(ia`%tMj_i(g*PRytv05Ie!*KgOTr=Oea1-YAZ3to$up!{|1N?G@Pfon}F# zV#CL9!Oi3^oycCy=DXF>aMz;#|C&0LO{%yif>P0Tv6kN z7r!XUKOmGtV*}rer|h(KA^05ZVbXJhx(6 znk)8*P{>!ERkil0MiaP6Uw}ecFx-2Lm$0cvi9Za7*y!9COiXP+p=OQ#za=TO^ATn> ztu9wF3-xRz5XSs?&o)gZrbWTeHt5t2rUZQO1n@q~+hu2N-L^s@bM>!TE}{D` znzNa>e3B$1g$C7MvuB%Zb=WjV-b_g9TTK}V^e=MlDEy#yoGeY7CuZpFzGX9* zCq#<21ep&9r(9C)xe&Es4Y-?^CHWldYll$ixZwLxdAtt>TKNmmR(pay?nM9i`|Z6S zc6PZ}c!QxvQhbiHa%h1DpB6fPVe{ z0h6wi!n)+LmR<89A8P&|bag&Nt6|LtGlKdfTh7DCclB43CxNFOZ`_xB(jZw8UFd?f z`t^PYmWS==ae5w=g>2DtxZjTCJ)X*(?DSnD?Ts2UkDC)cFgSnjXw@AOT5PbyRWTxg z5_m0?P)crmH9e(Le<*4-)*7<3Rco&OdvrtwL_6B)-=8{RiE+1Fu?Q|nbV3LvB>QaBt{2{!JcvemDq_gXB4A)qW>T8D zTMDRt49{Tlbw0w(m+(ur?a^X$%{EXzIKQq!)% zZa6Cl51t(oAiW+ko6@;cG7xLR%44K%W5IWIDtyb_$Ou0}_l-}PrDX)HZQlPEMu7j{ zfsv1FV`+i-JH+{-U~jOCV^gH+=s24OH%;{&0n$EtNsdDLgvyr+z07+uu0_BZdf7hr zv;(Bz3zI7sl139$MCY-$>$i1OzNg?{W`#}%fYgM3DyM~PixwlKyn#y032V(4_`VJO z2bmr1Co`Wef0K!9vFOi9>PV0SL!AmQ*IhD%PoP`pw5*Iniy_jv0lV#M+0ita>9ik7 z4v3^zc}d^oe>RA*@VA++6P-g|`iaBdo;J~E-@W8eJuvQJgT>m##W%e=8-^C^#HBPv zWt{$O@TaH$`30BoRZB=tU+n)(@=1eqIrWjnB7bTHJHd){qvTAyF2>a))t1aWA$_g} zM05?ar$5>Nyjc+B%_-HyaNZ1BaQN#qgr>Vn#K@~*ey;u+s6krZoN_})LRJLDW3g%$ zB9!wI;mViX~YqhX#nBK)cvuYK2g_?_?CMq%aiVZxb0qrfn_O z9~*GlDbmM-$^EO^?i#^6JKt!yz!2+=;%WwMJo53pL*{~g-dF3-Ghr+Db|1r$BXTYH#-4n_3pef{mmOo(ly1QyL!wA2{@lL)-^WcqOIQ3~9#vz$pYQAcknZ=-t}g_J)&IVK$K!AMf0=vP?&aLP zI3RyoNvi$Da=+h8%6C;R{bwC@Y3g5>`<8Df-+TFNDlkz0`Tx3qv-Xnp-S97Ud%td8dHDI=K%M?k{@*>{m&9NEefR3;cdshV*IzlW2UPk0 z+&iFI`xbrQz502$S^BI0OH@nefARY+y7zvp?fy-c!T;5DSAuL`|KjhvS3jqooe8qF z9Asm(aLoPJUxrh`zw)S{@3DWk{f_>XW`2DIFnsHm z|6dF?LH(DX`FEi9u&W>^)Gc~nQam4Md?=D6MEOc25kkuUFZsXzuKM1~zzBG`Zr*&e z^;iCTzJ3XesCPi?%D?{Ef(T|{lKHhce_|7HJXPzcU{VI5xfb&vGd`fEwx z`03nNoC=Jc!2jvG%TN?-_W4`>W&h_>Acq4L0K;>||9RJnK`8-fEHDD|uGIU#-nj{A zA~ZH%rO*6TzY6I4`7)9edV8gWXdC-tel6y5|F{u)z4*} HQ$iB}+m=3s literal 0 HcmV?d00001 diff --git a/doc/assets/next/hello-world.png b/doc/assets/next/hello-world.png new file mode 100644 index 0000000000000000000000000000000000000000..ee68a600c016a319b9c875d5b693a319a9a47702 GIT binary patch literal 3924 zcmeHKeN`K4TkEN&mC^LMyY0u1q{%+g5uh*Tms=Li+41ZQTwLRzGR~E?Q-#CZ6 zZ3ynH=%?cY6}Vf5;2ym7eD;6PuF6+_ zlF#iKiDHnRy;V_(`ieR}2VbLq3}s!B_=?W_wEg);Dz<)P?~VS0)4j<>(G&Kd>7(Q# zW@A_qPl2qHd`hls2?_|9X1WhNy!dSbfNA}^E@;Y}L*N0J5!uc;T4o8%*m~v9fUuXe zydVIW8G}IBOIl_L@&IOGoo9}gS6b{y*o}7uytV=DK@g<>_7GSdF3Vc(e3or5aZsg( zno42Qq_Xl6&Y~6Mj?)CK?g+zhVgfSYit8D{Nm6}%mXw-;6%J39tIgxTFB=Uk1i4>N zw&l?b5mig1&HRML26+n;U*>FAI|+>NtVk6vlqLcx*<_+tJ#CsaZ9UN^R)0Zx9{U2J zXj*E$)FIJ=UI|TLD&nRgASy{Yyp=_NJj^muN;u)~>eKzkt==F{`lftW#9Wsaj_-_pU<@ z;6X*}uV z6~0ZDJ}J~LwhJOF&f3Jy5oyRl&{p1~mr-v|JHfWR)-0}jO#?*=?qcyE8x!Ya8YUs? z06?Yo2_b?{Y+B?@pUaB^JO*3hNS|UTR7O9sFwV17S2_bnR7^ud^^~_dIdEyIqOYXAAIn z22;mA9j?w`o8;Pc_TkiE91`RW5)Q?X)BJ-P}WZeh}}a zOv+bv-U^pC&&xjj_yvkOKL99c-qe?q;*U>oKEN$}o9ic1eIcmMn4wi^F&hN>dN366 z4XX0t#H{7>>QkYiz-$;~Jww|EK~HQ9PDVWcNT=&{dtMXh%6`6ZDUwbB&HWe9W2-Y0hF8`)=Qb`A zPwnPOSbb0D_PQT%40f7%lCKA@q4(?25->aB{{bcoXcAaoc%tD=XTwLGcgYFA0F#B7 zRiRXkYqQBy2!_$IYV{u=w!baDs}atK9!ZW+PsJTmb`+1&S}~vt!>j zAg1KUxDJt1KFK#-pyR*6R+BFW^&3! z$1u*g35;&!w@$M51SZHE-mEHDTvr(I5ma`G2q3;nCu=@pLu^z*!pWFkTAq&u<8ic_ z+0uF0bF~5fz?(~KOP6{LgBpj~A<=$WiRoFHyAI*v=&<%rNz)KnV60J&|5B!CHp_`V#KJ) zq<}5da0z~Ii148tP6VZa$fIwr?G!_|=-?$(8b_Mm!YNys%a+~~ru^DLdR~*Vt*yiV zd7a}{`wh9@R_5C1>j6CUA!FJ}P_B59wK(SxB)#VgkW2jHMi~KJvb*MM&D%Nt&!P@} zbb68BR%lVpKpet{tFJ!T<1flF9d4w^eI#ou!^&{1b10(!S|Dco;iPgOA#SCOOTL*? zZ?*~yg2i0Li#KOqz#6$p@Y7y`lRsi$i}wfEjZict5v|J+x#VQ%;_5h zZF#|_^dFJGc`SgRfo4d_`MJXoDANV1IF(^zI0VnHlf@}kBGGMARV1PXc714w^+!Mf zum2w1i3$4^i2uWy!&psPHJ+H6pb+N6#9`?GeA;2YZ}g@1@FeaqA8|;E!kUfnn_LgV zyP9EzX8v=HV*KI9k)fgh!V7bo;a4rfL!<2{Q$9<_-LayzaAzE_Jro zQ~v)u2I!dY;zHHdi?zYzz*RBy+gC*<{x)&LJfFRDd+>a*;EnRt&G2{PcE0Ck^R`jI QZ8?PTE9PF!`$y0H8)ECuDF6Tf literal 0 HcmV?d00001 diff --git a/doc/assets/next/image-bmp.png b/doc/assets/next/image-bmp.png new file mode 100644 index 0000000000000000000000000000000000000000..d276c08a64251d8232ea0f028f2bf1995788077b GIT binary patch literal 3165 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/image-sub-image.png b/doc/assets/next/image-sub-image.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ab8f4dd00ced0f864a72e83bcd26dc8e0c676f GIT binary patch literal 13429 zcmeHucT`hpzb-SVs0?5kMU99fUH(1vKlZm|YNe$1>mNU2a@sE*?2x6M z_N9x)H|pR_mK3gdv0X>Ec~2$G&OOC$XF^Ty(xDyLmb@+M;Eq@#Qn3~uzcyrJ5aW4V zRNC)XS2Qg-y~<)q;oZ9_Z0{R!VClS(*08>nc~riryk@S}yT7|a5mo+JmELF zKR@Ppx|CG^DxB1w5SsLLlL{rNAGUF&ep`i+k-8ZIm)dZI{oTv0J@Qh^R{y78xpWR= z5x%}OUK{yfed)6ebjM*u%$>Cr9hyB{=;7@DfB4b}k!$#MM)QxU{I=&no?~uVj-wXp zA$84cxS&r)cuYWg9F3H1ZfnUPW#=|C7)+Ed7f5z2K2PF>`Vx`KojMkX#1MGRHg4c* zTp9F`^^nGoGeEFPi|hrfEi7W!MLVRB;!!eEbETf7Kzde?VljrSp}$Eu+$lcPO@wT zY|fC#)+RmPR~P;P3gfsfbEa&U^%%ZnJuWt9tLSJ%ZP)B1MIDZ9(HRYgkG7N=`DRg1 zK6GRATSgn@XFU|a(k!p5H0~GMB<jcN`1FCBzA^jB!>#5pYQXq85YVb`u~~`7C=`2i<&x7CHj~1OhLmmHmD>#u z56gZ!DNA-JJbuRj&DLll1S_)Q3JIOg^`+}xy^40uK?l724lq8?OKa(KUU)%uY2SyQ z%~#?Jn;a=VW)~M4(9Em^oss%#(G&W$KH5X03ME&`QDIcMms0e5owP56V8?DMpqkH| z0gOAM)PZ$XTe3mSC>`)pO?oDW=Rdwfj>|1PidgWhGT7tM_B~o8E#qFE7%-^}h#d6o z|F+0_8jjv8kFFnCyW0hp#5LNbbh458s5<`CQ z>Mb45#v(<^`Ssx~bB8`1!dgDr%Xs9y7FRe>*GdJS;~Z@KC*y!3)x?HnsKh{fRu0Y^ z-IkS|)5I{G&!fg~|A|YKBUrO?&BJv(xpDQVveKC!NSc4`)oOTIMGm{Clgsv@XzO-7 zkz>)ZB;Is=fF%suMJhlk=nd~ixAl)GD~vi_3ZllhN8mY8X6|l@a}RaqY|b@{4qD)c z0a4T67pTsqZ}Br`_0f9CE~Bo5-IpgROjP-0VZ#L>w*%-)54Z6P2x;8 zk7iiqQI2f|n*zJNV-)F3-Dix?W8!+`Ro|;}2faGTHwS7OZ7y;~bQ@Y4k{zQ0;CaDm z<`nBYHSw9?0lz#QPq3bl(~%f3^i;n+3_o_dhA3ZVfggEQg)EPqvf8B$_TeeG5(5)) z>ieAW`quKLbBZnTW49Gi<=9eQEU&gPl~Q;mc8>{bpeKytGMej<8PF^1+z^#MaStEB zJI@Og4vA24wvjnaSWkKx)jPd3^EB#LW{vW5v^}*kcR+=L z$eSk2hGEb1$_?IItm#>pDAq(O`wMZv9cpK)y7DKND0YS(A`i2RIRQ9Vv+$;1v}2yJ zpzhILz@J=Sx`CxBcxaoQ{PnMb zJVfx)vjTzRLP297;JFmL)im^LGFusJ|9q_N*axfj9rZLBLg*k_Rm&>6ulHpZ7br!0 zkj;Dz?eVW)#Z>V?w(c~>$-dwizBA&1U>?=}>F`|l7 z=oewZ5fBu&t`F?(98e%MVD);Iqubu3CpP6M8#xu{+PgVFQhF3{U+3BL9LwU7Fy|JX z(($8N`fU;T-`@Ow7U*tObuXumbfzfj6elqhd*t&&AgdV2Oq!%LB_k6ad4_d(5aUeLnxxnqJT%V)68+ia>l+a5g)yyMi>L#9lF(cky zcPloHh>shQ>6d$Sz#6vRe-*E;ubP5E;u}nWkBHTta{|t(%oe<&5t%Eu`X)`<1X<16On1SNZBAuA z>Dcx>7vMBc#l-*kA$BqKW88_fg+Tj$xeog?pzwUI*21hTsP0jgt!^N;G8{_XkWU=2 zeosq>UulrP#yg9y9$~u7LaQu2fg66Rr0*7?GykeRNLSU0!HwU4eApZc1o}`YARFwE z5nklSqn+M0UBfj(F0K+PFU8K1Rqo>o2)dI5dbTG0G>n?7e2boYIp7j60?Iw!0fXlD z&Yo2PcE!yUBVmmJ5P{Z1l`}^Dt>8U_uk4*A(F&bERM5MR?CcGE`|K9GJpF>^fi>9QxX>&P4SI_T?+=TP%C(H^}ybrFTxi$U>R`}vY z_?_GT+HRV!^f}vDTES+$)9{bXGRD*FEV7G-SD|UK2e6+6mv;6uft9Sg)P^VOr*vHD ziv*g~>S?&@Ls6+voh0B zZtZQcQ*PPHt(5!|58kL>hLQQQM*QD`$F`MK^vulTaprn-er5T9*{Ix-fe%Hx1dOB1 z?VlFmq@Zef-8*0Jg`Oh$m50SBG4PB(yBxZFOm+4XZr}dPtwY7>rz7`B zmBDT%y)Z&o)9>`wxwen=SNFSyGrBtSKE`zWr0|zb9IRUN37CnJ9Qgfuoh4n?K_Abj z@|T(2$W6V0FHdm`t`F^my&c$WzBuHqHwH6$s|?nxi_g!!;c-+MW|%lUd_7F%6*H(S z&tUcdG>T6Ymtlzt~il-^{VC z%<=xE#FetnKhbpke{Pr`--8>lJ0!7T%w72RCKc#AaOF=c*A1b`NH(h3<8@@!l+;;; zRS=dJ8*_QjmcJ^{w-2p-AKl2t`_N|(99q0#DIGs5#&2eSNGjL;3zES4d8637{%wBJ zq-zCJTesjZ$e^R^NE9@S+Q0=`lRK!w!{BS%PNrc|vW+ZGlIzmU*wu@nLwTT3{Q*Bu z>jY8_JI=6Xum8fHd>$a!0#@gGGA!w%Xz)Sqg@~;h5`!>9@CPNut+?Uoi3fAD;jMtR ziohK~K|NMK8gMw3muvN`)oDyvK;E%f&X)E#?UYP7K6jyh7Z@N4ctm~btV)v2RcECL zn<~vI2vi(-#}8sV8#q+^(&@Fc(S!AP z)oq&XHgP(~k88lSCSMPRb6_dq_AmBN{#-MtSoXBztnJ&dq*rSV^SMTc5FP2MI-XS# zdf+=Z&4!%zrVP^si3KWExRH{Zl~ai+;q3+8xotyHBnohUpd=%}1CdJIFhFEm;h9zu zEl->AGC`_tP~L!6t+@r0>mb?4xqGly6a0WhOxID1*cYb-sRA93-idi{qcqStpC6W8 zZR^=8FB;0W{~)Q~PCxWG4KB{?=XWw3Td{&pc0uG@y`55~7{hYk*d!TsUZ~MmpD>e5xeSwgWpT>g2?tNJQqAz_Hco#D$zWhe8}M_yG!zIFdl{a9`M#Q2 z3dCr-F1VW*F3z--8yO+a(@u{}IQ-YE8#>0zP#^>2j>7aJ(EQca_94 zpV$1?n}^wG$pv50^#pHe>*O}gj5YlCl3StX514|WMYABvS{?C?G!uxhC^l-bNt%iO zc3sQ_jw!zH;vHo9&@hZ*5M0}uGA~I>vY)4z-x#AXOdAX)it-{F&+oIUu0cdzy}PXM zo@AQOdlVK^8|sp@9at%qon;2zN#rB=YH0*nBi`t;5xQkE%!5*`yWjo3!lKneiscs1 zy=3mAHE{D9Hvy!N^&~;B@U_R&Y;0JgxDpjM@|1pm^Y1FW7@c_?3A-3o_Z&XCh z&iL1PH_0wA9WGflx z`ShZ|EQ@f!fAiUnlkjnw7&XGsSPqbZPj^fFy%4+0>g|s=BzQ)#$0=0e`-r zK{Izeugwa!&flLmDZB5dg{l&DfN9f;;&iZ+K_>jcgo;AFKJTN7meurTEpi++Kwtx8 z+z#8vJP5+7DW5W_Mg@J1#AAAWn;w%W54@{OW;O;KeoosR==%UWr5lCBF|?7^8zeR; z3Bh0dNsRuASLvH-jR$W6pI1#aJPlh=aWCOg6NSFp{5&OJV_uxA%)pz2;B~E;zg3gx2;J;@z{sv0ONF6Zw z*O}q}8h-h|$bkygc5M=QOZk*qr`Dl%G`P@;3jIX4pu@-J+>W0+Qe&fcg`D5YMkiU9iQ zn1KXUSw{ z%5N)8_xIs=zone#`#EaJzqsDU!!T-39H)h0Fn&wt*U717XzzHBavMkANGh-U4h5>t zDkQ|K8wdK=gu8w_j>N5z9p_ft?&vMDoP5pMKCj(#(hK8_;}!z3ab8Wqpi{ApU~a%L zT@F6RKu}~7e4}(ceR#w>I8B-{0?MyVMU~rfj=b?r=)YZNKI2hwTO3OF8S3k6Rrg8O zY<$Vpa9~NSk=8Ch&nfG|h}1oO>-kO!`pMvBHU`MUaF9P{q;6#0( z4T~I5Ox0hFt6;q7@7=(Lz4f)+dO$15=lj~EjqCJv<}w_rpjrY2shOvGwQ59V(%Mp8 z=+?RUo!N}F^{lf@ty&T-z1X)|zAo^s?-^cgptOaY9B{F{K-$Bu=rqjtZA}bBx5#*u zGZy9t0I)sX>-}2sSh6YY{+q*$RQgE*F&GEpWUYbFl!5Yk1H{c*(e;{!|h z%PuE0mvpUctm@Z`c>U0dtw7`Ifv*&uGUQm$UI1M)BBQ?v`FaUDDNK_QOfS2f#tYZ< zHxbJ}VuK|eSWmFL?pWgaOWt-GbLMAgn@SiUmX+A9RUFs-&FWVLv)z0PGlK^y+hX<_l!zk9AC&YVxg1eH8S`BAvv za2*7;pfEJ_y(qIN|bL9Zyz@DNs;<&g)td)x=KVtFxr1;Cpb6WOA%!G@@}^W zwJRdaHw_Pwt4n80(Y-M5C-0@d%6tBmbW_m+@QP@dg>KA>)EOyPf|E@mWSjK_!Al0$ ztCL-ZUl1CR)zeIm>hJ#kr8!S#Ek1I-uhv1C49a56#6+o>MTii~HPFcYgXt9T8lMr> z`FhfdiJ{3zu?o=7`yi znNNvXl{*IA6GKnFG3a=F6Wfqqk3zVX$uE9agwO@M4*HP073$QG1i2D+x(f5yd$;s!x(FG&}&G>8|b@NX#Y?W-p=# z7rn#`67%LiQH|aQuVi2watS00+cU^=2K#atmPtn1&oMAxq75{@Vy!Z zA{!(X=hMcTD(DDal^i}E6AYao$f8u|58_BwEt!BCB8c@I>4EO@y;-j1A*E3qeT&QzMoPeP{J5JUn%;f2-a$Tf?H4pETZkp8$fr?+## z!?~GPJpQJo>g?6Zb$~%T@tsC^V7{9N%huMToa*ZA72q~vhu-;VF6j!TQfSg{J+Awf zuN>(AVaV}MP}9HE*$}^B#$8q2|Lopt#p@wP?SCYM`_rDUz1f;ZAI$)7Ir=Y%M{k}U zMLPy0P^qOh#Te!?P|R>!J;VPZ7^5PAi6dWuq7y{CVQ1$86+4vufTDn=|2>J`zeSU| zp?WEhG7|{adOJQ=m-&05S`-ilp2ei1ox-ljq6Ib}rGr1512$*cv$CMnx$D@xdOha} zozR?M|22q)@Db-!nHl^;t^rw)Rn*rFtdRCSEhpETp0^$!?b(_baQFXIrps_DS}@)R23dABA?;G5YPTpKWX7Gx?) zmYkZA(zo*B*4XN<`H$nq5_C{0ONicsR&)2DkxQ>V38`dlQP$aJ8_dpsS zef1W$Khp}C>b+e@nAA)z$PsFaMa$=u-8ly!Smtoq(TIupF&I)>X4WC9CFlae9YI}U zfUzF}7&FgZ1lN@I*JIg)s};_as_BDHFlx3}G*6ZQd+f-`6Zb5bd78?m#HihWMGtZq zSaL&a@}O$Ne2jH>RWLa0+n^80LEX0ESK9rzeF2`jtQ#kNl+0X4Dh>R0^_$({JT>5T zLE68?oN8n&Z-NfMI}?+k-VYUORNvaFp86FWm{h@pJ4Qwi!#OQVcLbr2m#tXK_hLW`Xqnzc>KXEn71b^^eF$w7b?!yMa#Mjpl zajQ;AvfgNIAyDn46n!EMtBr1g`f9$qDc!@5ML)8{Pvk?ij$NxGs{kF&%cwK+usU#H zvaK{h@YJx*e0V*w9&zOb6dhmP#C+JYctKE}vVV^kSa>H~(s0uudjEqYe4zk2Kk6K9 zyj$W|cu~=kb1rah(8j~A$UC-4$#Se0_%LkSNZ{WJJ(LBK8Uo4Kxp!qvM;(p$_TXrN zWh38{B1S^*LIv@w z&B=7$C`k_Q+2>5=oHevTT>FG$dgP%T5r52*on(N#O-0<{0(nO2cssaD>us_2d<+sF zBg8Hp35A{Gnx0OIDF;$%`OWLy5oah(!L>63n&g6K!W=5p7x4vDfp$R1y_Uke@slD% zDkd6eM4m9n7g&8WWCBQ2@W2)E(v#l#@4!~+C{bL7ai!@><5RzhgG&On7MGZ}iSIpK zvN!TXIDGyPxNyH<^Ky2+`(12L(J&b*>|&(*8N=xJb~f1M2ArGjg*qp4P^loBnok}5 zE~x>F($~42a!a__KEpU_#YCEJOW~xAkI_eorIM9 zclilFn6Q^j;JlJ&&YMe_3aHg4pikRR=&q*Zp@tyA|1{@C;akYV5}2ULb>Y5rb^cX@#A z8&-Db_z4c9>%G(|cjVpE4f-?cVw3=!go9Gx zST7!xYV(Z!RM-td7=-?Cl&H1Ex%mWqu<9m7dQLexJa(bFMmu+I@R~YrokV;5i!l$w zwa3ILT6)iSu0pr`krt!sVp%q$4b~MMa+?1kaV*AHv>F&PgfbA+T#2+Y#0Oz(qmKS5 zoc*QM^{CGs{zq}6qIH2MsWn1>z!XHVHc=`M5I#WCS>WX-ItiWd<@yItEi&-qA^1Lt z(x`Zzogojvz27gmTJQ&GlJz|W#|*ChQ-{Daw27YcqK!61w8){nezBq9CxhTzk(XK1?G z+I(rdMn$(9lc`nG5J{~oMS)FP0#Dpv?qZs4U0>q2b@%g$e3C0Um3I7UJC&{_X&Vk#?zv;Eo`$gPjq~zwcr8Fh!n1eXHNp{=0oHiZWY4w zOWgW>ER$!od{*TA+IAk&xSSwe?C_1AEjt$C$LQh?h+_*ks<^|czZ*ez^gI)I1TSx zD%LqgA&Xqp=Qknq{I-j0yaA(G)8cW>qyAual8z@rhpSydKeQ-f{-qoKrJ{aTBzLwe zo~{ooNj||=ll1I8V_H zu6GM>gN|+3Cl&eg6yt6e44?Hrg&8iC>m4P&(^uE>KGVN*(?czZD}EkpY7{sGConFd z!`9sRnS>qT zcOI)m*Mx$U2csLZ!i#1mZUaVjBI7WBi7~=V*lJ1=0eAy(-iiROD3^y?DBEZV{6|IS zmNyjeUf1h7kS>0c`nQl-R3CeX(|sE{7kX7F*18>~c6jD!0kU`BXiz!j<}xfJ zm}FOY2JSiX9|-aIL1GfahCi4ghv0KHz(zNXCf6kGo$qafDb1Z)m<(zbYIN%_#omS3 z*AM0X6iM}aoC+n$vodb1wdTRkwglD5TgO}SCp%jgSOvCFkNb1q{sPg1vKj}1aV>ON zQi2bYRRb>u@kr?KZwA4{Xm6kF4Xsj+o3*aYn5{2M7uJPmQ?hlmQInVpzUE+s@`arF z%<^JXDmNkV>Y;uhQ~#$^%Oxk}5Q2yLmc$A7;;;N&pmMtMW3c_a5&HDlczeC(+gmfr zlT>$S#F^{>oX<_F^XM<{iTe7JZK=c>{Z^lv1}}gIB9N);HQqZ6kiB;^ziH559=}6n zSeB|!_P9;SRrb7?X|(_vId)Kk1@oH%!aX$hV{HWtMXuV?d^k>H4tL4Xu|G4;sNVk+ zd_i^8-CAF~Q970&M3A5zwM2*|B&a6W+#l|__uRi=etJId=bX>`Ip=+zb3U)neGj;^ zin69M001g3=Nx_k0MOPE1SrXEm3}qb69BN|u#1EJrC)RBM-ej?p4#n8`%HTsKg%26 zICL;&58ce*)2oy-5A~IQzFJuE2@DyTIl576pr)x9RE;OY8jXeYJ^Ni(G zehm1@pl;^oZ9aY)pWnW)+68S{=;E!9W{HwozQ(`lf=Y7NnNZ!PjYb=qikb$9-^n4BkN^X6|}>5OdS9oE^6`6sqeJF zK}AA1CR>bP?dTnw3RoWwmmTU3l(=9NGTMg%-JGWqFE{~5S$c4QmIgc;OtR0GpO2yp zyW!I-nlk586hRu5H|AJl6UV8+_%HT=lRzgUgff!vmaMMy_A0pGC^*PYlCb;U4tC!fQ7ncoPNh>Y#(^f?w^*_EfPxy)Qt2&G z7|$~N<9n02JkuLVsEkY9^e;qS64Gb!IDwNBppYA*7TT%ZYBtD5kLpfZGm5TpJjZkV z{ypVeh57a{+k@T2A2{=RePahzcB&CU+jUxXK;G#Epc(10?wjJH7%^+CdM+YtE>{$K zZW!7>91*pZN>3zV1eTfSo|=b~?l=YuwaS@K)e8fp`rUnXx{uo^O+uI~v!o&Vg66a3 z2=sczAKO5daIIrcUCcUD_92V|zBfxz9yXGf=DR4kG>g)rd1arKvUE4P z708nG*b%kVQG6E1eUR^ywA;uins1@=Y~#4E?`KxdRDvX?0iWDcCY((>63wsIeL}B* zWp=m`SV>CPgxs}Ve{IX~4AA2C?6P!Ye+*cfDL%Ux?bvfi|M9K@2U@=VD6ymZDQC>U9oOT>dh_cP zj}9F9kqA+;J8pO19mhE?Um&|%+_`L)&U`_}%}pPX^e=YNVnMElfxAjX&&&5;(@(we zqFTjSB)MuHRw+)ZT1of=&zX(M+svJ8S)SP6pcA!QBL1s5 zl+s}q<>p9HBc7c^y8@RSDgMDS)dBgHs5vVq6w>JRhkm)oIoR5A$T>9t^7;d~02yG9 zj1}4j6h~s0@l*`rXkMu@xFC-IE>C=gl~C>x14KRxvHMnIt~mGU+JZShH&}$MW3lHq zCj%kcK0nAsTh{Pk?pC40o4YHo$HE8=99L(r!ZzUgv*LZdHu~KF%tjlHFLjw-feB~% z5i}$P{qp)|n>z8s5?_P6b+dFl28jr*WgOQ=QzlMTWdhexPo{Q6t+X)d{9~A%#S2)% zk?z31cL)2DFbZ+UeRza=H_Yz$ji9==e=S}ZJs@Yg64+ReS@4ddRV%%HU%u__Yf4N) zk?d}R;zkQ;dWhgbY`)I~ZTobs?Ll}m(cULMV7*G-Q zN08;iP}=Guhctq81!xs`cg<(wJsAH@9Jzz?je?Ob-ZHOUgRI&z*m^+dQcuEhaL}E3 z#R5UgXHzeM^xC_+b;-)a?RBNgLdt)Suwy#Z@=>xhpiWSB1n=jDGBJN})?;-17xFD`LN*nplo$em_0$hs zgKUJ3-5Z%5UQb0|Z24-;GxN(L7=<(G8!?kQ?ew0*6*G6W^6ZBpWaudhEivx2b34Jn zx|X!gshN5yuzd-(`)zjV=@l5RnQzRq4NW5$2|~Zq6W4x8)WT8&tDC+2k<PTei(zG7{q$aooQ3akW`djjde8Bd zo8dmHVw8L1mk`X+4SR_DV7yuEI%#_Ro@Ut4pW6Levcj(J2-QSk{W3LJort?|Rt1J4 zGxGHN38V9zER*S^dTM8z3#JP$xUabrp<*$oMie;%UbDFGg%=X94@UcUkh>#pR|czG zlQj5jMT1sV0a;e@k|MpZt4-5!xa;PCrh*$4GS7x=jIacq>wY16Hj(9)l|1c8|2)rm zHR43a=$AIO51X0#P+NPyLh6ISK8`DOjqzmoo~nu0NACt0?~PT($U&f;)c7H_qNZHh zJEZrAbAR9kF+C|sI%X8vYLVm^?$O+%QeH_8B>2x=U}{I=N1JU3lgW<2o{OH=dsk5)&`bPy(>bh4obTUJT7f7aF4r&rZ(O%l(N zD2&fz_ZrU|xrxTvacorK0ib_vA*^wh>cN98_n!9TqrX6lx74ep2h)$sTh1)?eo95A zA5m>*;(VmRLH(!4a;2(@uj5zgHzF|Eq1la;`Z@>ib= zcVTH!Stn?eZB!{$b{uss7S3jRC8QvX<17b~^pl8g$Wpl91S_n{-7v`kjqELr>}t%&4wph8{7_dD}CQmpNu{4eLmNoi1BF`R`z z0O-U(_EMkAXW;y%)Q2TgZHC=A)wuI;Aw#{j(!UF;C1y07a1-&8wVyu4M}h4j1a6Gs zK+0Ej#xSAo4f96bx%OODKS!a?-18dVj@XCZwa;;eN_Ost1`X*_HC-g6(9$Gtv;GBY zaL}NHN@DzuXW+<^79H^Ct4tA~PDF3pPvjKWk4){sc#gofp5rvQP2BvKCattdvfw`p0#4Q@F9lfOxa(p!f~ zbm{*!57DPWFrM5dW9+Oq+SD0hYiZT<&U#RztFJ>9USx(MhpRSUx+^*h!0!MrLH~G| f{a+p*k%6|EUpDSjTz|LqZ2(*x;SN=2f^Pi_;1|%B literal 0 HcmV?d00001 diff --git a/doc/assets/next/line-thickness.png b/doc/assets/next/line-thickness.png new file mode 100644 index 0000000000000000000000000000000000000000..48ef6b19b4c1259d84caafae1798906d5f93cf0f GIT binary patch literal 7334 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/primitives-fill.png b/doc/assets/next/primitives-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7162ce975a8860876f2e8f67f7cbc9125d38d4 GIT binary patch literal 4053 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 O&CJBo_yxo*{yzW%FxFfE literal 0 HcmV?d00001 diff --git a/doc/assets/next/primitives-polyline.png b/doc/assets/next/primitives-polyline.png new file mode 100644 index 0000000000000000000000000000000000000000..6243774aeb0855c918d96a2894d79b39f8724f6e GIT binary patch literal 1640 zcmbW2dpHwn9LMK=X{_VYg=~AGIJsNGaoxgH?mE;~44tW^^yIdoB@+)06Nhba4npY3 zEv=LZMPhSlheJHEGTU*B*(zh~>^$fEamv#_=a2V&pWpBOen0Q~{_}ma{C$xc>U!z` z06^oImwTXWZIX?9s`9cqjT$Hd0F*6{xx-K5OPAQE8z!xQO2Y}#oXbD94#Rr7;t>S9;ha&0BkY`eSke4NK&+n^S z%Xb1y>5QIaY2xeJBGlCTc4^!Bk>lnuf+^|Q!?^0=$M|Kbg&sYSiDrDhzB?CHH)}q% z(UId>KeD=Od2`yMG8jk5`TQ+R`Kb?H0&2tuZt>lq4ABCpuus`Ep|R>J29#^!G)*eqHf%mBEbFweMRku8m}efL)cw zs>vup|4a?%sVKlSlpxVLLvg|Nn3BH%5%mwnvi&k+0S_#$>GUt6d(GsUWKJ*3mn?pP4^=a@C6Pd!x-nvFJpmb4J+K@n-)1)6BNIF|CZ&6{-Mvd zx-rB95H+P5(vTTcT9jg>Q>w{Q0@4krVb-p<$m#Oz8xEUCFRAb{S$W7Ox0);I5amB{O;L zZ*s*wQ2txIqCO=iZ-ecqK??(F{jI(z=H0IepzpQC`%wx z!aj#i%3SE;7|o>H2a>~K91B=@{?cWqG;^k%iu120KJ6c}CSV^yM`fywq8MKSYW`yy zrO60}&Yzd5Hv8>roaU0+@dkuGZ(Z&a8NOw8;5$ET^OPy}3hSR%r{(nGr#41Jn8~Pj zwU8QKmt=Xnibxmf>_9Y&aGkXcBTh)(e;$JS6_fAX9J#Yv0CtB$uuS(Tx#ZbrLM(Fr)R|Y6Ta%0xf&B8EviJ zbd`LYGVBLin7+^>=-{NXTfYR*KEaI^<)Cavm9HGyO#O-8_r@%SR#0~&HE1rX^l?e) zfLJ%kW(ZuKz4`MK4mTRhFs4O;{CkM3<{55u9>&k6@5u1{CbgNzjrKeTrJd71|M9Yk zy=v#2d@(~`7Q9n%Ox~`R`FdG0TY=;g8k%k{lT_eoE~?y${bSG6z>4*Qc5*HOE30;0 zBxpETam!xdI4%cDOP_(FSPwk3!+K@yeeM)^!W=34Kk@!$U`mvFYE7QHB^0O2eh|Ph L4`25N1Sah-8qy&! literal 0 HcmV?d00001 diff --git a/doc/assets/next/primitives-rounded-rectangle.png b/doc/assets/next/primitives-rounded-rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad666ac11fb323b30546c93e94a2da7b9092719 GIT binary patch literal 4496 zcmeAS@N?(olHy`uVBq!ia0y~yUiho}u3mCLk=<;L;pXH;FV`MC^!_{3TjT%#>lr4T;$oU`df4H8@9ZDHumA5@Sk16; z55xM^<{@|F9CY*<7-7H1|Me25;UB|>_(ws^6SS*XU%!s)c=(jzooH?AYf<5(3d@G-orf5nc*Pw2)gqo$ zk<4)2bI;DNX`F_83>#kW*vatZ*I&^!@4wV;^okMvd`IHI!@B?Tu2pZ*59?f=G*6n@ zVoo)e!@Bvg2Y*S_hp!Q0G(5kZwP4x&z4N~Q+M^xT*)ZezZ6=G!uQ?so#YZ3f_2u8` z2-PDW_Qkg!2&{V>b}jnz^o?E}2e}UQ7ilw|_?oR95r1d>Q7y$b`=d7TJP$PXmubIV zTd5lc^nvEHpGgevg&<|h+7a@%`je A0gBKAmyS19!dTy*fw&2U1xSuHV&;n12;4 z_&aIdd8QwWcE3;9tBfR|R4&jEQ@%c-*4Mr()QRVPccmTogYI|xn!onhAPL-YWGIT= z+4NQLuLjT^Z+bwgKCjzT^)(Bu$~qZjxJ@{JLrnO(gj(xzkh{{8=dES1dw*(m_W zpspITXE(VXe2%eYD7w3)>FdcqAfteSKXn@VcfLG!Rr({6K;dJC6Q!5Au1zljYqbVx zP0rg@_|>fhWcGHj*~faB6|VaN!|T*sP>8;rk**Cj>S8C*Gxz%{w=w;YFz0KC5nq!~ zs{r;PP|%J$VLP{8)Lss7H~@`0&vfIgE6^xb?TGtFK}HqCo!KmUAWuAIOO>D%FmfL5 z0U3Qa#snA&8=Ahx-T@i^{HRSd=MwL7E+ezr_HJl_SWioRn3soj@? zt4K%wL7FCvPXM;++Hbg?S2ky_W7&8+8x*ylD~-5^r56J^!EhUwe+uG z$7Y@R9Lb>mW8&!u{nJPS1(J}qoct}qZ8>n0uU-<^hWPhOJ%P1gO8oArU$6a1T_cpV zq3OfoJ6;S$f8TIjTmF4_(o~L)%6+;G#(&>@U32|;>_#t^BR2QN4$O@42deqUb?x|% zeG#hbx+?Q{9u(}a_kV4BOMLZ_P{Z@Rj56nJSrx(`aa}9lC2&}pd57Plvun-0J0A8j z#vDHjl=;GSO?{8R;nR$Fw1073*H%07p@`voQ7hw#RM!6s_q}VC_$P5dzi{RMg>hEE zrYYM8@0cuxqR4~wf%_R;z^(58;$Nk@&M?%?&gOH_)BdsR*G`2zeuZh`4@$qbb=_v} wc*@EEY?rf);?Xb|O#`E8U_jHr^?F9Rt?tD)OP^@~M_L#>UHx3vIVCg!0PW)RPXGV_ literal 0 HcmV?d00001 diff --git a/doc/assets/next/primitives-stroke-alignment.png b/doc/assets/next/primitives-stroke-alignment.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8a9ab8d12454b5d089d4596cf3a92a8bdfb73d GIT binary patch literal 25365 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 DlC$c0 literal 0 HcmV?d00001 diff --git a/doc/assets/next/primitives-stroke.png b/doc/assets/next/primitives-stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa106e58ad102a000faadf1564faba96005c0e4 GIT binary patch literal 8892 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/text-alignment.png b/doc/assets/next/text-alignment.png new file mode 100644 index 0000000000000000000000000000000000000000..bd162cd19b63a88a75e11ea6cdfc532be0cfcd12 GIT binary patch literal 6486 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 S2dLdp?(59`y?_7q&;ApUgDxKc literal 0 HcmV?d00001 diff --git a/doc/assets/next/text-custom-font.png b/doc/assets/next/text-custom-font.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2a8dd2645e5a3664df5d92ffdd7fa3a75a48e2 GIT binary patch literal 6011 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 Sckm|WKC??!rui2fLjMaO*aQav literal 0 HcmV?d00001 diff --git a/doc/assets/next/text-fonts.png b/doc/assets/next/text-fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..000b56b7db834c2f72c36c5b9b54d9b3685f092e GIT binary patch literal 5512 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/text-styles.png b/doc/assets/next/text-styles.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8a71326d47026df94924b8203282f925558bbb GIT binary patch literal 5861 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 literal 0 HcmV?d00001 diff --git a/doc/assets/next/text-transparent.png b/doc/assets/next/text-transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..87ae28156a17a0e93ab8f41c17d82907c4f32289 GIT binary patch literal 7019 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 Date: Sat, 22 May 2021 18:20:34 +0100 Subject: [PATCH 11/26] Add Just commands to generate example screenshots --- README.md | 3 + doc/assets/0.6/analog-clock.png | Bin 9543 -> 8777 bytes doc/assets/next/demo-clock.png | Bin 8779 -> 9155 bytes eg-0.6/README.md | 66 ++++++++++++++++++++++ eg-next/README.md | 94 ++++++++++++++++++++++++++++++++ justfile | 61 +++++++++++++++++++-- 6 files changed, 218 insertions(+), 6 deletions(-) create mode 100644 eg-0.6/README.md create mode 100644 eg-next/README.md diff --git a/README.md b/README.md index acd76a0..926dbfa 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ # Embedded graphics examples + +- [development (`eg-next`)](./eg-next) +- [0.6 (`eg-0.6`)](./eg-0.6) diff --git a/doc/assets/0.6/analog-clock.png b/doc/assets/0.6/analog-clock.png index b7797b9efda9708439d8cbfac0b1a3d67843fecd..ed03a8c9be20ed823e6ca7ae5e1529f392f17e58 100644 GIT binary patch literal 8777 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 KMo&(;{_$VIQR*T9 literal 9543 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 gBGH*35rqtu+&RPfO$EF`i=p0N^C- zwz>`gz({X00*>tc`0(7!2LOb^VCvWPo~A7Jj}%O1p9=auwoLm{BM~`(G12Q`I>EJ3 z7p?;ee|A*}>%YSacp~Bl0DRNg1_0`_HW&Z_nxsPjK;nlh}VVwB+QSI1HG%?h$+Y1?%SH?T6=Ci$m1uHmxs)CyA|b zjFYeGi$KIf210wxS?@)^|1DP;r>Wml^84dd(H#naa+~*e3hFe{Z&z=+o&VNW8P;5) z6Pk9~K9MzLE~O&l@wgm0uW`7AqY|}~GD&@&v!YB1$<0m7_ge^Bef7Ck@UngyUO-!) zQrsV16C2{LW3o_J&!NV&GpO|T(cF}EhMv%sK~QcPL2~*J<4h+1d$fw-^_v;s zC6l_DGqN74An19Hjc2?n;))ZslyEI=i*@uPCh0&;)r*Q07?3?RugMG9Y$yy!^pkd* zLu&~u8b*>kqY7`=XW6Q7ApOtx1(tM)D$Z8%ZU(TI`+-!B&D9Sh&!n!7o%B@;HK}97 z1;lx~jO5%x`g*Q%XQaswk%lAxNErFn_~~)mecyDMTD>~PfgfpQ zA3wk7#uRO;+n{p%nBO)+vYL*+P{6!Tdtei!)Af=ovI-WNc+6GQ22#;;EGtd+Dvu}n zOd*H04q>x5%N@QWZo%Xz0x}bB&#b24HRmy#hD}FC;TI87(Lay<#*`%~XKGA_Ett)G zyes^N-7_kta>&i516btq`mlV_P;cH3bM{CQB0yBAN53EkD5AK^`hEl%SCbEf7oPf8Whlr00 zhh%Sw`v`edaF3mk0~UX^YG}LmjD1B|PT{M#$KCEWLWrp&RQ?d=YJB%^{k0jMAI)ra zw83wneTvKPHEmXF`Hd5LCFO=Y!(XbPOl)4Fkq$=}uvKBUYiqfxtd#>H zM=r8v6-fj_Tn)ANM5nJ0stBQ4pji9Qzjck4>Q$6afCkddacoMK8F$Ji-yxTbb4N!= zXY9HQS!=tz(B41whj^)D~_Bv5Di4y&J30AU?$7O=^IbL(r6&nUM!)zeZ$Jf=*f z1nDTJ81C6r(ezr07I^!DYSw!REX1{>+o&4cDSK+nOFik`ajQ}Z9K_YNC$t)^#Tj0! zd=WYnRQxreE3HCdR-FLDhu<>a4FLS6(dOW5P!}~Gt~H(N-6P;eWDPmxkvTemq|9&B z%(xM9fQ#2Pc7wh=^lba-<7n5Eavex3P0uVJmlDXwF4wBs!|rT{w3w z^jEh)MK!SA3u7C%t-eEYTYv;mNI4I3k6^4mvDW|{bwaIz;;U&F1Jr

    z3mMv*g`veAF}W&vi0VI*I>go%6Zn(U%!iQ+A>|hDSMCnyO)K@=dN{31wy9WXRP$%V zJGGfX#&ZlNMrsT*)_-h8_>!X9zmF%@c-QLYTaQDR8`rtFe(+;I)k*nKP|3#Y4x}hl z`S`44ZPfbQ^nkc0iQsv8x;A>5tu%1}G(D#<^>b%Di|nIk<6*y4`#<31)tem=tCI0F zx9ZZ|JvY~!D1=KZ&oNrGX&;=1qz$0Fchx7dQYL9(-5v}6Yn$y+4r8Xn3Ov6mbNg?DVk8Hi4+K-TA)TY7It zdTr)aM}ug_Dr}Hu)UKrT_zgl^yX0Nv=;dvtvCo4fvystFqx1?y34ta?u^`%HHYxAu zr!~F*zj61pdDx8SplIW>9=1)YktlD0EbE=@JqLlBF^Fn>-JF5}Nj{D&DLr7hBEMu` zOIvnRlAXXoRUpwiC4PT7mC$QW;mh0LZS~@uwOx@wr$j25cpXQ$DJ@TAG@&dL=M!QhNycwknM~Hue$Za8E!Y2lpoa`i>Ni z7@N&Aeu>nv;!o+i`up;l(%7wzjX!4;F|jv`%V|?85Gk9?>gd51m-b$=C!%DPFN4~d z2wC@!cWD>@c$)Vdw2O{u3)HK?I$ze@_ECjJVq<7IBV+F<++2loi&xD1J28I zZ>#W*VndbNZEm}7^U>{6{tsfHxfz?gT@RE=rt}>~=n-{2J->WMyusK!aMlL?FX^GS zVFR;94Cz{rJgbjuuR>SXb?0x>YAEv)dclS03$VLzGFW)#*!?v^2r`S_xT-SKk z((Z7>`0=$yrFgV|-2kDxt>$hTw4S{FyDv#=k~m&i>iOQq35{p_xn1+nyjoX*x^B0~ zpFcW6v|&>Amm1<+*3;VEG4|2;yw=&v`0#8EGm)lM>1z}pC|mXNMDXE(9uu|Q<;;;p zeeU}ud96>LK9u-(EbsDE%iby~zY8NU#`%M->XUK7!&}%B%`AI*R-E3PcuFQ;@llI5vAi%}EU)2p0y!`j+{pk>{EA@Bso zKQ211_yU+i`hbI_O|?}6HXMUJihbXkJHg;JBXOSgH2rx?N=p0Cr*>7Ym`DQSN;D82 z(%#w{0cqcU#^5DN6Bb;?aA461+&)Rv!-rPx?ZQ+DAfPl*;?w$1jW`85i9Uc8l9mDq zinLysv)+vjuwOkFgR0ims_w>eS5=ZUczn6e1NZRCV$N}=VvF*UvB3;3dp_2_X%oB8 zg!SS&&pU}DW~50AWuU&5GyDYi2OFU%O$-@CwU*gtuhA!6FzK57!S59 zv&5k3zKQm3i;$O8%@~l~<(fDJAZBi(QSY_=EFXkH^X;bi04*>okoq`dyXC`~NV=2) zAO^jHSm}mRW1T@fr3F}5za8IU8VesoIZqNZiD)l%?Q~1^f**!58R0B0IxDTp>7v@w7Y#|`FS~CYQUFmc1++1u z+_8Dz&T1qcw|qk%PJ>Q?u$*bE9o9LBkqV;EN)bjp^sXV%*!sb1HEXyEw)qG=vBCPX ziv+mf-g&SHuHAwuOY;%6cLm^ zsfii75txEO^+Y*iu1bkHUCm2!7GcDKsG0l|q84U)ghvKfYa6nE1Z-na($U=*nb0hwF$+E9rjEq82y)Aw&3#q9E}b;=hp z(`_yi`SL^qdvKo!)JtXO&x5m4Q!LJk+}m^=QW|eK$3)CbK|gt$#RvE2IRKG@ab=Gx z#oU}lSPX6t=>)XXW4Ndj80c)P<<=bzeWn;3J<5v>>=A`v?Qu5gVE}2}PS~}TdzZ3+ z*hTPNJvKG#Hie@a0&SVA!X>_MLd6(c?kE7ix7@^H(k#omWVCMqu%KySJ}*&p54wE~ zdnxw_efgz47h<*2@s1l-=~X|=VEKj)iun2t93ee|e3^YQAcYd%xSwP$Y2rYVO4V8nxStb4n0y=!DpZ)=1(l7@ghDAp*c@#jn z9(2zE2wtmXJt5$vuD8zD0}vVZXj@_?3XXvDBB2hfmivADTe!(1lc}WLNcu{1(23l} z=-X)8f9C70yBdQozMC71D;9GIb--F|%F{oIGMMa&u0fVWk%a3VT9cYqn_LdmuPyhz zNSRgC>^N5oY!4K|D88(rto`Z^@1bGQej<0(y+>IR?{Jn7JW z<~aU|ytWd-LZF)54(M;MKtzm6(sqx%O}B)bs2t2X73HXjfDOFG*D>aaVtW$0 z4irdOeNd_4k)o6YIB$Z7_owD<)`>y9;Y60-xhq=!mky*$G2hEpZ42J#16Jp|e%qgq zcL~y?31%JfWoHBYb`+SX(o;XW z%vk@!VY9dY*C3*`3O!=GeZI@>%-a4!hkWC?8+9$2UBsc{U(?9Fb&z*qJxZ$OUk#_0 zqrmD}+54M85@I$LXR;_x_H5=(*Xi5;(%SK>1s(aeF{SYjrLfZiAn5#=k+MKQ`%^*K&$RqmoT{I{^oE6*OLq`$J*Uw zfrqRTGk=-wz>c(+UN|J8?(Nd^%dB;0z8I$6{ZVbU{a+@qu6f5qTvL;z#CU(1SeC5N zFD=&W-~x)V{##m9#aOwEx;9HD@aSKB|B6;yp}$kS4El0uZtY-$qhbiYu6dhQ&G)6)+=Y_B_{C zFZ|7gor8VfRkVCs#9%s(tQ9=8wYYzHOx<(r(por)td3mL+jJ`1KQEGQRzQ@B$-g+0#wtja1 zki8Pcu4xeDNW?3}WhaO2AG2HeX zMYl`IY~>t(>%wKL-bj?@au)i_rX?kGQ^*bUj7^@sB#hJu(+jOX0>2E(zg{??L#xTI z3Zd&0XXCmaDv~8T({DUi$LY>_HE(<4Mh2V-dd~o61987IGjeA_QE)#XIjw0Vl11se z`q~K`IgdJsVlG?7W6HGGp9@6E6^tB2IzST&tJ)}TXIrs}RU zGks)2k?(J1JAJU%IH8F7Cq!e_i8khR(JUhPoM~j1Ut35)(|+W&sta#LUasWP+`+J! zM(#&vGk8o~7h9jn>rW7nQuOnRUn97N^2>wB(p zr+;SYAdK5nHchYmd|51ndP@1-ng~x|%Q^(X=)@_Yy(QgtQOzv1VZ` zJ2TUcr}|I(hzKd3tNRhHS|8FAD9{FMeGs%;r|WO|An_nleVl=cYuBHlDN!_<+->?Q ztveY4Jn$>YKF7}xa_;JvmAY|6Nj`MYGbLMnG@0qJmzb2Fe;N2S$LppvbE zYK9WDd>~I(X)SPQ15Oo2d(A+JQ$8f$80Rsr(xqtC_74^Sa}d^28lUW>flTb?=c=lt z$KbEh;$W9tE2$oC9^7Mr2Z8$B9vgTpcGOiDjDQ?O<`5C|9qTtraXyZ=Q#s8Aj@!Rk zuEqxNz%SX11}$l7)yVooxqW-+@>C5*TTyJLGiRlg0%c&E+iDfoT(CRADz|xC?W9$l z%+hU7AaLy4wrj_J2J%x2D;%lRGu8@|zealiUb{kOWvSM^1e;jWs?eTk!n~Wk^v3wT~WocVmyBuUh zaXq(B?FC?9u);w`1hWwiZc($rV6iFmyeb%j)nHc6ie-8vG5IAK+v=r+E&XqVosC0X z%3|L@!NRBQK*7?gktOS3JJu5+F1Hzr5?n;dz1Qez9_wXt^hwcROICXLNZ6L?By?F` zlY7M%2YH*$sO|N z{p{8;;~xnPayRlQh0l0n&b>|lljomFTX;M_#MK!r65Rd@s%QK@YPE2{$(Q*J9`rA$ zQ+B$wQHSAhHtKbHV)iwzx9-MU%GspCyHrI1QP3^oVG4%ZMpKJ+tZ2aSCzmDSzTIPJJmY>-vtT%+8F}lG!sbQ!)2kqjbUfyuc7(lCdi_->g?2qbQx0Me-FYHQuEqqks)60Gi<*S#U;|FDc&?uR5jjT77CeCzvKCQ4Bi{B)1dd;0>3~}%BoFJB9eI(h{ zFg~@s^bBP>ZJz1NM43|~6)00~Di$DD?knD@`n}7+@c1i2>Ugk8r_ECJLxAkkw#ulB z)`Zmkr3z~R!f{uc-g70(9(w9RPW+zWx;u&*1}N9Ec%}|KnFKs9{Ah~b`Tip?nZz8! z+hza3@0&G>f!GA5oo4(dS4|=8--LWP=~Uyn-0FXX>B%9&YR}@dd;{YL1}E>?H8Sn= zsc(AKV~CkQR6~wD5hEk*UZ_%Aoaq?dQC^i)|wm|FnCpM9ce zRo%#L?JXeU3+_(-y*VR}<(UOFA;x@J9|Hh%2Jyx~l=3#z)6FAJdeqz^|7>k1qqVJO zj#hr#~$BI#EU(Xly%;_SFIPLfcjf>Iv%LM9@M2g zH*>XvGUoN+_5QqQmC~&RAi4)z=t;?NHPFDHk_LSwvsrs*$L>`u!k@X=3-NY$4iee$ zc-6OP#p*N-{y4&)(bC|O0RrxKVk%=RyuX@@X95Sn#)tN!;{=~kXZ$W!3tv0x)ft_9 z`#C2I@In{WnFB^zd8k43kQ#;SRNo$As~9_89>-J2;c?x-vtcZ=Ni)bark~$ge&ieT zO*u;!&(U7Fr^7KPv7`L!??ud%-`-f$`XkjLH1Tv^Obz-8a>U2`LeL;P}Vp zGBwNxa;|XoANw_bY|TrQ*AVAg9q{K;cg9jvD^7Z%n9Vl++uMOKM1bOxHSSwLU(cI@ z_kIjWHELYvzqS>Tj;^hG%_{0VpS`Kp0>d3m-OS_&?bM&BE}0N#571QQ{(s*x_&@oi zp^h9a_v;4PF8Jw0s9pMbSRQ5I*5o_SnVR0T1Z+HF$*4c4DicR@&G-)wDoodQuKb60 z8BAN7N6FTHo&VvH$D29ocD%PrNNy&Qxm!_tbDm)?R_;#xv}+FB+u(FQM^>G{D*>CE z7mEaYQ#Kle{(fmPbpM6m36+^4&f&%;`r8xl7}Njj^OpbkU?zul=!KY|#Ju@o3;N?6 O0PL2Qdclo{zyBABN>rZ! literal 8779 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 diff --git a/eg-0.6/README.md b/eg-0.6/README.md new file mode 100644 index 0000000..57a4b09 --- /dev/null +++ b/eg-0.6/README.md @@ -0,0 +1,66 @@ +# Embedded graphics examples and demos for version `0.6` + +## [analog-clock](examples/analog-clock.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called analog-clock](../doc/assets/0.6/analog-clock.png)](examples/analog-clock.rs) + +## [chaining](examples/chaining.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called chaining](../doc/assets/0.6/chaining.png)](examples/chaining.rs) + +## [hello-world](examples/hello-world.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called hello-world](../doc/assets/0.6/hello-world.png)](examples/hello-world.rs) + +## [image-bmp](examples/image-bmp.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called image-bmp](../doc/assets/0.6/image-bmp.png)](examples/image-bmp.rs) + +## [image-tga](examples/image-tga.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called image-tga](../doc/assets/0.6/image-tga.png)](examples/image-tga.rs) + +## [input-handling](examples/input-handling.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called input-handling](../doc/assets/0.6/input-handling.png)](examples/input-handling.rs) + +## [line-thickness](examples/line-thickness.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called line-thickness](../doc/assets/0.6/line-thickness.png)](examples/line-thickness.rs) + +## [primitives-fill-macros](examples/primitives-fill-macros.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called primitives-fill-macros](../doc/assets/0.6/primitives-fill-macros.png)](examples/primitives-fill-macros.rs) + +## [primitives-fill](examples/primitives-fill.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called primitives-fill](../doc/assets/0.6/primitives-fill.png)](examples/primitives-fill.rs) + +## [primitives-stroke](examples/primitives-stroke.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called primitives-stroke](../doc/assets/0.6/primitives-stroke.png)](examples/primitives-stroke.rs) + +## [primitives-triangles](examples/primitives-triangles.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called primitives-triangles](../doc/assets/0.6/primitives-triangles.png)](examples/primitives-triangles.rs) + +## [text-custom-font](examples/text-custom-font.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called text-custom-font](../doc/assets/0.6/text-custom-font.png)](examples/text-custom-font.rs) + +## [text-fonts](examples/text-fonts.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called text-fonts](../doc/assets/0.6/text-fonts.png)](examples/text-fonts.rs) + +## [text-fonts-signs](examples/text-fonts-signs.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called text-fonts-signs](../doc/assets/0.6/text-fonts-signs.png)](examples/text-fonts-signs.rs) + +## [text-multiline](examples/text-multiline.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called text-multiline](../doc/assets/0.6/text-multiline.png)](examples/text-multiline.rs) + +## [text-transparent](examples/text-transparent.rs) + +[![A screenshot of the embedded-graphics version 0.6 example called text-transparent](../doc/assets/0.6/text-transparent.png)](examples/text-transparent.rs) + diff --git a/eg-next/README.md b/eg-next/README.md new file mode 100644 index 0000000..f305edd --- /dev/null +++ b/eg-next/README.md @@ -0,0 +1,94 @@ +# Embedded graphics examples and demos for version `next` + +## [demo-clock](examples/demo-clock.rs) + +[![A screenshot of the embedded-graphics version next example called demo-clock](../doc/assets/next/demo-clock.png)](examples/demo-clock.rs) + +## [demo-pacman](examples/demo-pacman.rs) + +[![A screenshot of the embedded-graphics version next example called demo-pacman](../doc/assets/next/demo-pacman.png)](examples/demo-pacman.rs) + +## [demo-progress](examples/demo-progress.rs) + +[![A screenshot of the embedded-graphics version next example called demo-progress](../doc/assets/next/demo-progress.png)](examples/demo-progress.rs) + +## [hello-world](examples/hello-world.rs) + +[![A screenshot of the embedded-graphics version next example called hello-world](../doc/assets/next/hello-world.png)](examples/hello-world.rs) + +## [image-bmp](examples/image-bmp.rs) + +[![A screenshot of the embedded-graphics version next example called image-bmp](../doc/assets/next/image-bmp.png)](examples/image-bmp.rs) + +## [image-sub-image](examples/image-sub-image.rs) + +[![A screenshot of the embedded-graphics version next example called image-sub-image](../doc/assets/next/image-sub-image.png)](examples/image-sub-image.rs) + +## [image-tga](examples/image-tga.rs) + +[![A screenshot of the embedded-graphics version next example called image-tga](../doc/assets/next/image-tga.png)](examples/image-tga.rs) + +## [line-thickness](examples/line-thickness.rs) + +[![A screenshot of the embedded-graphics version next example called line-thickness](../doc/assets/next/line-thickness.png)](examples/line-thickness.rs) + +## [primitives-ellipse](examples/primitives-ellipse.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-ellipse](../doc/assets/next/primitives-ellipse.png)](examples/primitives-ellipse.rs) + +## [primitives-fill](examples/primitives-fill.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-fill](../doc/assets/next/primitives-fill.png)](examples/primitives-fill.rs) + +## [primitives-polyline](examples/primitives-polyline.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-polyline](../doc/assets/next/primitives-polyline.png)](examples/primitives-polyline.rs) + +## [primitives-rounded-rectangle](examples/primitives-rounded-rectangle.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-rounded-rectangle](../doc/assets/next/primitives-rounded-rectangle.png)](examples/primitives-rounded-rectangle.rs) + +## [primitives-stroke-alignment](examples/primitives-stroke-alignment.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-stroke-alignment](../doc/assets/next/primitives-stroke-alignment.png)](examples/primitives-stroke-alignment.rs) + +## [primitives-stroke](examples/primitives-stroke.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-stroke](../doc/assets/next/primitives-stroke.png)](examples/primitives-stroke.rs) + +## [primitives-triangles](examples/primitives-triangles.rs) + +[![A screenshot of the embedded-graphics version next example called primitives-triangles](../doc/assets/next/primitives-triangles.png)](examples/primitives-triangles.rs) + +## [simulator-input-handling](examples/simulator-input-handling.rs) + +[![A screenshot of the embedded-graphics version next example called simulator-input-handling](../doc/assets/next/simulator-input-handling.png)](examples/simulator-input-handling.rs) + +## [text-alignment](examples/text-alignment.rs) + +[![A screenshot of the embedded-graphics version next example called text-alignment](../doc/assets/next/text-alignment.png)](examples/text-alignment.rs) + +## [text-custom-font](examples/text-custom-font.rs) + +[![A screenshot of the embedded-graphics version next example called text-custom-font](../doc/assets/next/text-custom-font.png)](examples/text-custom-font.rs) + +## [text-extended-characters](examples/text-extended-characters.rs) + +[![A screenshot of the embedded-graphics version next example called text-extended-characters](../doc/assets/next/text-extended-characters.png)](examples/text-extended-characters.rs) + +## [text-fonts](examples/text-fonts.rs) + +[![A screenshot of the embedded-graphics version next example called text-fonts](../doc/assets/next/text-fonts.png)](examples/text-fonts.rs) + +## [text-multiline](examples/text-multiline.rs) + +[![A screenshot of the embedded-graphics version next example called text-multiline](../doc/assets/next/text-multiline.png)](examples/text-multiline.rs) + +## [text-styles](examples/text-styles.rs) + +[![A screenshot of the embedded-graphics version next example called text-styles](../doc/assets/next/text-styles.png)](examples/text-styles.rs) + +## [text-transparent](examples/text-transparent.rs) + +[![A screenshot of the embedded-graphics version next example called text-transparent](../doc/assets/next/text-transparent.png)](examples/text-transparent.rs) + diff --git a/justfile b/justfile index 79410b4..4abcb8e 100644 --- a/justfile +++ b/justfile @@ -10,7 +10,7 @@ build version: cd "eg-{{version}}" && cargo build --examples --release #---------- -# Examples +# READMEs #---------- # NOTE: Relative to the version sub-directories @@ -26,12 +26,61 @@ generate-example-screenshot version example: EG_SIMULATOR_DUMP="{{screenshots_dir}}/{{version}}/{{example}}.png" \ cargo run --example {{example}} -# Generates screenshots of all examples for a given version -@generate-example-screenshots-for-version version: +# # Generates screenshots of all examples for a given version +# @generate-example-screenshots-for-version version: +# #!/usr/bin/env bash +# set -e +# for example in eg-{{version}}/examples/*.rs; do +# just generate-example-screenshot {{version}} $(basename "$example" .rs); +# done + +# generate-example-screenshots: (generate-example-screenshots-for-version "0.6") (generate-example-screenshots-for-version "next") + +# Generate a readme with example screenshots and save it into target/ +_build-readme version: #!/usr/bin/env bash set -e - for example in eg-{{version}}/examples/*.rs; do - just generate-example-screenshot {{version}} $(basename "$example" .rs); + cd eg-{{version}} + + out="target/README.md" + + # Empty the README file + echo -n '' > $out + + echo '# Embedded graphics examples and demos for version `{{version}}`' >> $out + echo '' >> $out + + for example in examples/*.rs; do + name=$(basename "$example" .rs) + just generate-example-screenshot {{version}} $name; + + ( + cat <<-EXAMPLE + ## [$name]($example) + + [![A screenshot of the embedded-graphics version {{version}} example called $name](../doc/assets/{{version}}/$name.png)]($example) + + EXAMPLE + ) >> $out done -generate-example-screenshots: (generate-example-screenshots-for-version "0.6") (generate-example-screenshots-for-version "next") +generate-readme version: (_build-readme version) + #!/usr/bin/env bash + set -euo pipefail + cp "eg-{{version}}/target/README.md" "eg-{{version}}/README.md" + +# Generate readmes for all versions +generate-readmes: (generate-readme "next") (generate-readme "0.6") + +# Check a readme to see if it needs to be regenerated +check-readme version: (_build-readme version) + #!/usr/bin/env bash + set -euo pipefail + diff -q "eg-{{version}}/target/README.md" "eg-{{version}}/README.md" || ( \ + echo -e "\033[1;31mError:\033[0m README.md for eg-{{version}} needs to be regenerated."; \ + echo -e " Run 'just generate-readmes' to regenerate.\n"; \ + exit 1 \ + ) + +# Check all readmes +check-readmes: (check-readme "next") (check-readme "0.6") From 9fba508c6bfbbaa92de78eb7def2cc933dad9a60 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:01:18 +0100 Subject: [PATCH 12/26] Apply suggestions from code review Co-authored-by: Ralf Fuest --- eg-next/examples/primitives-triangles.rs | 10 +++++----- eg-next/examples/text-alignment.rs | 2 +- eg-next/examples/text-styles.rs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/eg-next/examples/primitives-triangles.rs b/eg-next/examples/primitives-triangles.rs index 447847c..3cec22e 100644 --- a/eg-next/examples/primitives-triangles.rs +++ b/eg-next/examples/primitives-triangles.rs @@ -37,9 +37,9 @@ fn main() -> Result<(), core::convert::Infallible> { base_triangle .into_styled( PrimitiveStyleBuilder::new() - .stroke_alignment(StrokeAlignment::Inside) - .stroke_width(10) .stroke_color(Rgb888::CSS_SALMON) + .stroke_width(10) + .stroke_alignment(StrokeAlignment::Inside) .build(), ) .draw(&mut display)?; @@ -49,8 +49,8 @@ fn main() -> Result<(), core::convert::Infallible> { .translate(Point::new(offset, 0)) .into_styled( PrimitiveStyleBuilder::new() - .stroke_width(10) .stroke_color(Rgb888::CSS_AQUAMARINE) + .stroke_width(10) .fill_color(Rgb888::CSS_CADET_BLUE) .build(), ) @@ -61,9 +61,9 @@ fn main() -> Result<(), core::convert::Infallible> { .translate(Point::new(offset * 2, 0)) .into_styled( PrimitiveStyleBuilder::new() - .stroke_alignment(StrokeAlignment::Outside) - .stroke_width(9) .stroke_color(Rgb888::CSS_FIRE_BRICK) + .stroke_width(9) + .stroke_alignment(StrokeAlignment::Outside) .fill_color(Rgb888::CSS_WHITE_SMOKE) .build(), ) diff --git a/eg-next/examples/text-alignment.rs b/eg-next/examples/text-alignment.rs index 1f20973..a92eced 100644 --- a/eg-next/examples/text-alignment.rs +++ b/eg-next/examples/text-alignment.rs @@ -54,7 +54,7 @@ fn main() -> Result<(), core::convert::Infallible> { .draw(&mut display)?; let output_settings = OutputSettingsBuilder::new().scale(2).build(); - Window::new("Fonts", &output_settings).show_static(&display); + Window::new("Text alignment", &output_settings).show_static(&display); Ok(()) } diff --git a/eg-next/examples/text-styles.rs b/eg-next/examples/text-styles.rs index fa809a8..9afddce 100644 --- a/eg-next/examples/text-styles.rs +++ b/eg-next/examples/text-styles.rs @@ -65,7 +65,7 @@ fn main() -> Result<(), core::convert::Infallible> { Text::new(" text!", position, normal).draw(&mut display)?; let output_settings = OutputSettingsBuilder::new().scale(2).build(); - Window::new("Fonts", &output_settings).show_static(&display); + Window::new("Text styles", &output_settings).show_static(&display); Ok(()) } From cffd78259b5aa7edead2bcc317e114180452957e Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:29:03 +0100 Subject: [PATCH 13/26] Make filled primitives demo look nicer --- eg-next/examples/primitives-fill.rs | 36 +++++++++++++---------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/eg-next/examples/primitives-fill.rs b/eg-next/examples/primitives-fill.rs index 95f359b..1d880a6 100644 --- a/eg-next/examples/primitives-fill.rs +++ b/eg-next/examples/primitives-fill.rs @@ -4,7 +4,7 @@ use core::convert::Infallible; use embedded_graphics::{ - pixelcolor::BinaryColor, + pixelcolor::Rgb888, prelude::*, primitives::{ Circle, CornerRadii, Ellipse, PrimitiveStyle, PrimitiveStyleBuilder, Rectangle, @@ -16,24 +16,24 @@ use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Windo static CIRCLE_SIZE: i32 = 65; static ELLIPSE_SIZE: Size = Size::new(90, 65); -fn draw_shapes(target: &mut T, style: PrimitiveStyle) -> Result<(), T::Error> +fn draw_shapes(target: &mut T, style: PrimitiveStyle) -> Result<(), T::Error> where - T: DrawTarget, + T: DrawTarget, { Circle::new(Point::new(0, 0), CIRCLE_SIZE as u32) .into_styled(style) .draw(target)?; - Rectangle::new(Point::new(97, 0), Size::new(64, 64)) + Rectangle::new(Point::new(105, 0), Size::new(64, 64)) .into_styled(style) .draw(target)?; - Triangle::new(Point::new(32, 0), Point::new(0, 64), Point::new(64, 64)) - .translate(Point::new(96 * 2, 0)) + Triangle::new(Point::new(33, 0), Point::new(0, 64), Point::new(64, 64)) + .translate(Point::new(96 * 2 + 16, 0)) .into_styled(style) .draw(target)?; - Ellipse::new(Point::new(0 + 24, 97), ELLIPSE_SIZE) + Ellipse::new(Point::new(24, 108), ELLIPSE_SIZE) .into_styled(style) .draw(target)?; @@ -41,35 +41,31 @@ where Rectangle::new(Point::new(32, 0), Size::new(64, 64)), CornerRadii::new(Size::new(16, 16)), ) - .translate(Point::new(96 + 24, 97)) + .translate(Point::new(96 + 24, 108)) .into_styled(style) .draw(target) } fn main() -> Result<(), Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(300, 200)); + let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(325, 220)); - let stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1); + let stroke = PrimitiveStyle::with_stroke(Rgb888::MAGENTA, 1); let stroke_off_fill_off = PrimitiveStyleBuilder::new() - .stroke_color(BinaryColor::Off) + .stroke_color(Rgb888::RED) .stroke_width(1) - .fill_color(BinaryColor::Off) + .fill_color(Rgb888::GREEN) .build(); - let stroke_off_fill_on = PrimitiveStyleBuilder::new() - .stroke_color(BinaryColor::Off) - .stroke_width(1) - .fill_color(BinaryColor::On) - .build(); + let stroke_off_fill_on = PrimitiveStyle::with_fill(Rgb888::YELLOW); - draw_shapes(&mut display, stroke)?; + draw_shapes(&mut display.translated(Point::new(8, 8)), stroke)?; draw_shapes( - &mut display.translated(Point::new(16, 16)), + &mut display.translated(Point::new(24, 24)), stroke_off_fill_on, )?; draw_shapes( - &mut display.translated(Point::new(32, 32)), + &mut display.translated(Point::new(40, 40)), stroke_off_fill_off, )?; From 0687f1607433a24590f500567aac3037ce915c77 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:35:02 +0100 Subject: [PATCH 14/26] Move style builders into their own vars --- eg-next/examples/primitives-triangles.rs | 58 ++++++++++++------------ eg-next/examples/text-alignment.rs | 32 +++++++------ eg-next/examples/text-multiline.rs | 1 - eg-next/examples/text-styles.rs | 4 +- eg-next/examples/text-transparent.rs | 36 +++++++++------ 5 files changed, 71 insertions(+), 60 deletions(-) diff --git a/eg-next/examples/primitives-triangles.rs b/eg-next/examples/primitives-triangles.rs index 3cec22e..0f8e723 100644 --- a/eg-next/examples/primitives-triangles.rs +++ b/eg-next/examples/primitives-triangles.rs @@ -33,40 +33,46 @@ fn main() -> Result<(), core::convert::Infallible> { ) .translate(padding); + let inside_thick_stroke = PrimitiveStyleBuilder::new() + .stroke_color(Rgb888::CSS_SALMON) + .stroke_width(10) + .stroke_alignment(StrokeAlignment::Inside) + .build(); + + let center_stroke_fill = PrimitiveStyleBuilder::new() + .stroke_color(Rgb888::CSS_AQUAMARINE) + .stroke_width(10) + .fill_color(Rgb888::CSS_CADET_BLUE) + .build(); + + let outside_stroke_fill = PrimitiveStyleBuilder::new() + .stroke_color(Rgb888::CSS_FIRE_BRICK) + .stroke_width(9) + .stroke_alignment(StrokeAlignment::Outside) + .fill_color(Rgb888::CSS_WHITE_SMOKE) + .build(); + + let thick_stroke = PrimitiveStyleBuilder::new() + .stroke_alignment(StrokeAlignment::Inside) + .stroke_width(20) + .stroke_color(Rgb888::CSS_DARK_TURQUOISE) + .build(); + // Inside thick stroke, no fill base_triangle - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_color(Rgb888::CSS_SALMON) - .stroke_width(10) - .stroke_alignment(StrokeAlignment::Inside) - .build(), - ) + .into_styled(inside_thick_stroke) .draw(&mut display)?; // Center stroke alignment with fill flipped_triangle .translate(Point::new(offset, 0)) - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_color(Rgb888::CSS_AQUAMARINE) - .stroke_width(10) - .fill_color(Rgb888::CSS_CADET_BLUE) - .build(), - ) + .into_styled(center_stroke_fill) .draw(&mut display)?; // Outside stroke alignment with fill base_triangle .translate(Point::new(offset * 2, 0)) - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_color(Rgb888::CSS_FIRE_BRICK) - .stroke_width(9) - .stroke_alignment(StrokeAlignment::Outside) - .fill_color(Rgb888::CSS_WHITE_SMOKE) - .build(), - ) + .into_styled(outside_stroke_fill) .draw(&mut display)?; // Fill only @@ -84,13 +90,7 @@ fn main() -> Result<(), core::convert::Infallible> { // Really thick stroke with inside alignment flipped_triangle .translate(Point::new(offset * 5, 0)) - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_alignment(StrokeAlignment::Inside) - .stroke_width(20) - .stroke_color(Rgb888::CSS_DARK_TURQUOISE) - .build(), - ) + .into_styled(thick_stroke) .draw(&mut display)?; let output_settings = OutputSettingsBuilder::new().scale(2).build(); diff --git a/eg-next/examples/text-alignment.rs b/eg-next/examples/text-alignment.rs index a92eced..d5a393c 100644 --- a/eg-next/examples/text-alignment.rs +++ b/eg-next/examples/text-alignment.rs @@ -20,25 +20,34 @@ fn main() -> Result<(), core::convert::Infallible> { .text_color(Rgb888::CSS_TOMATO) .build(); + let left_aligned = TextStyleBuilder::new() + .alignment(Alignment::Left) + .baseline(Baseline::Top) + .build(); + + let center_aligned = TextStyleBuilder::new() + .alignment(Alignment::Center) + .baseline(Baseline::Middle) + .build(); + + let right_aligned = TextStyleBuilder::new() + .alignment(Alignment::Right) + .baseline(Baseline::Bottom) + .build(); + Text::with_text_style( "Left aligned text, origin top left", bounding_box.top_left, character_style, - TextStyleBuilder::new() - .alignment(Alignment::Left) - .baseline(Baseline::Top) - .build(), + left_aligned, ) .draw(&mut display)?; Text::with_text_style( - "Left aligned text, origin center center", + "Center aligned text, origin center center", bounding_box.center(), character_style, - TextStyleBuilder::new() - .alignment(Alignment::Center) - .baseline(Baseline::Middle) - .build(), + center_aligned, ) .draw(&mut display)?; @@ -46,10 +55,7 @@ fn main() -> Result<(), core::convert::Infallible> { "Right aligned text, origin bottom right", bounding_box.bottom_right().unwrap(), character_style, - TextStyleBuilder::new() - .alignment(Alignment::Right) - .baseline(Baseline::Bottom) - .build(), + right_aligned, ) .draw(&mut display)?; diff --git a/eg-next/examples/text-multiline.rs b/eg-next/examples/text-multiline.rs index fe5c732..fab53c5 100644 --- a/eg-next/examples/text-multiline.rs +++ b/eg-next/examples/text-multiline.rs @@ -13,7 +13,6 @@ use embedded_graphics_simulator::{OutputSettingsBuilder, SimulatorDisplay, Windo fn main() -> Result<(), core::convert::Infallible> { let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(256, 128)); - // Show multiline text example let style = MonoTextStyleBuilder::new() .font(&FONT_6X9) .text_color(BinaryColor::On) diff --git a/eg-next/examples/text-styles.rs b/eg-next/examples/text-styles.rs index 9afddce..138e494 100644 --- a/eg-next/examples/text-styles.rs +++ b/eg-next/examples/text-styles.rs @@ -1,6 +1,6 @@ -//! # Example: Multiline text +//! # Example: Text styles //! -//! Exercise the font renderer to demonstrate rendering of multiline text +//! Display a sentence of text using different styles, colors an decorations. use embedded_graphics::{ mono_font::{ diff --git a/eg-next/examples/text-transparent.rs b/eg-next/examples/text-transparent.rs index 30c3465..367a6f5 100644 --- a/eg-next/examples/text-transparent.rs +++ b/eg-next/examples/text-transparent.rs @@ -24,14 +24,28 @@ fn main() -> Result<(), core::convert::Infallible> { .draw(&mut display) .unwrap(); + // Can also be written in the shorter form: TextStyle::new(&FONT_6X9, Rgb565::WHITE) + let no_background = MonoTextStyleBuilder::new() + .font(&FONT_6X9) + .text_color(Rgb565::WHITE) + .build(); + + let filled_background = MonoTextStyleBuilder::new() + .font(&FONT_6X9) + .text_color(Rgb565::YELLOW) + .background_color(Rgb565::BLUE) + .build(); + + let inverse_background = MonoTextStyleBuilder::new() + .font(&FONT_6X9) + .text_color(Rgb565::BLUE) + .background_color(Rgb565::YELLOW) + .build(); + Text::new( "Hello world! - no background", Point::new(15, 15), - // Can also be written in the shorter form: TextStyle::new(&FONT_6X9, Rgb565::WHITE) - MonoTextStyleBuilder::new() - .font(&FONT_6X9) - .text_color(Rgb565::WHITE) - .build(), + no_background, ) .draw(&mut display) .unwrap(); @@ -39,11 +53,7 @@ fn main() -> Result<(), core::convert::Infallible> { Text::new( "Hello world! - filled background", Point::new(15, 30), - MonoTextStyleBuilder::new() - .font(&FONT_6X9) - .text_color(Rgb565::YELLOW) - .background_color(Rgb565::BLUE) - .build(), + filled_background, ) .draw(&mut display) .unwrap(); @@ -51,11 +61,7 @@ fn main() -> Result<(), core::convert::Infallible> { Text::new( "Hello world! - inverse background", Point::new(15, 45), - MonoTextStyleBuilder::new() - .font(&FONT_6X9) - .text_color(Rgb565::BLUE) - .background_color(Rgb565::YELLOW) - .build(), + inverse_background, ) .draw(&mut display)?; From 94769772805453d524d1207d94ecb39f65cc0401 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:37:29 +0100 Subject: [PATCH 15/26] Remove input handling example Code moved in embedded-graphics/simulator#26 --- eg-next/examples/simulator-input-handling.rs | 79 -------------------- 1 file changed, 79 deletions(-) delete mode 100644 eg-next/examples/simulator-input-handling.rs diff --git a/eg-next/examples/simulator-input-handling.rs b/eg-next/examples/simulator-input-handling.rs deleted file mode 100644 index 4d5d219..0000000 --- a/eg-next/examples/simulator-input-handling.rs +++ /dev/null @@ -1,79 +0,0 @@ -//! # Example: Input Handling -//! -//! This example allows you to move a red circle to the location of a click on the simulator -//! screen, or move the circle using the arrow keys. Although input handling is not a part of the -//! embedded-graphics API, the simulator can be used to emulate input controls in order to -//! represent more complex UI systems such as touch screens. - -extern crate embedded_graphics; -extern crate embedded_graphics_simulator; - -use embedded_graphics::{ - pixelcolor::Rgb888, - prelude::*, - primitives::{Circle, PrimitiveStyle}, -}; -use embedded_graphics_simulator::{ - sdl2::Keycode, OutputSettings, SimulatorDisplay, SimulatorEvent, Window, -}; - -const BACKGROUND_COLOR: Rgb888 = Rgb888::BLACK; -const FOREGROUND_COLOR: Rgb888 = Rgb888::RED; -const KEYBOARD_DELTA: i32 = 20; - -fn move_circle( - display: &mut SimulatorDisplay, - old_center: Point, - new_center: Point, -) -> Result<(), core::convert::Infallible> { - // Clear old circle - Circle::with_center(old_center, 200) - .into_styled(PrimitiveStyle::with_fill(BACKGROUND_COLOR)) - .draw(display)?; - - // Draw circle at new location - Circle::with_center(new_center, 200) - .into_styled(PrimitiveStyle::with_fill(FOREGROUND_COLOR)) - .draw(display)?; - - Ok(()) -} - -fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(800, 480)); - let mut window = Window::new("Click to move circle", &OutputSettings::default()); - - let mut position = Point::new(200, 200); - Circle::with_center(position, 200) - .into_styled(PrimitiveStyle::with_fill(FOREGROUND_COLOR)) - .draw(&mut display)?; - - 'running: loop { - window.update(&display); - - for event in window.events() { - match event { - SimulatorEvent::Quit => break 'running, - SimulatorEvent::KeyDown { keycode, .. } => { - let delta = match keycode { - Keycode::Left => Point::new(-KEYBOARD_DELTA, 0), - Keycode::Right => Point::new(KEYBOARD_DELTA, 0), - Keycode::Up => Point::new(0, -KEYBOARD_DELTA), - Keycode::Down => Point::new(0, KEYBOARD_DELTA), - _ => Point::zero(), - }; - let new_position = position + delta; - move_circle(&mut display, position, new_position)?; - position = new_position; - } - SimulatorEvent::MouseButtonUp { point, .. } => { - move_circle(&mut display, position, point)?; - position = point; - } - _ => {} - } - } - } - - Ok(()) -} From 66136c680cc691dbe2ad41ad8ecd90e759b564a1 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:39:15 +0100 Subject: [PATCH 16/26] Remove line_thickness "demo" This is really a debug tool and is already sorted by the "line" example in embedded-graphics/debug-tools. --- eg-next/examples/line-thickness.rs | 107 ----------------------------- 1 file changed, 107 deletions(-) delete mode 100644 eg-next/examples/line-thickness.rs diff --git a/eg-next/examples/line-thickness.rs b/eg-next/examples/line-thickness.rs deleted file mode 100644 index 5be29e7..0000000 --- a/eg-next/examples/line-thickness.rs +++ /dev/null @@ -1,107 +0,0 @@ -//! A debugging tool for thick lines -//! -//! Use the up/down arrow keys to increase or decrease the line thickness. Click and drag to move -//! the end point of the line around. -//! -//! The thickness, DX and DY components of the line are displayed in the top right corner of the -//! window. - -extern crate embedded_graphics; -extern crate embedded_graphics_simulator; - -use embedded_graphics::{ - mono_font::{ascii::FONT_6X9, MonoTextStyle}, - pixelcolor::Rgb888, - prelude::*, - primitives::{Line, PrimitiveStyle}, - text::Text, -}; -use embedded_graphics_simulator::{ - sdl2::Keycode, OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window, -}; - -const BACKGROUND_COLOR: Rgb888 = Rgb888::BLACK; - -fn draw( - display: &mut SimulatorDisplay, - position: Point, - stroke_width: u32, -) -> Result<(), core::convert::Infallible> { - display.clear(BACKGROUND_COLOR)?; - - let start = Point::new( - display.size().width as i32 / 2, - display.size().height as i32 / 2, - ); - - Text::new( - &format!( - "W: {}\nDX {}, DY {}", - stroke_width, - position.x - start.x, - position.y - start.y - ), - Point::new(5, 10), - MonoTextStyle::new(&FONT_6X9, Rgb888::MAGENTA), - ) - .draw(display)?; - - Line::new(start, position) - .into_styled(PrimitiveStyle::with_stroke( - Rgb888::new(0x80, 0xf2, 0x91), - stroke_width, - )) - .draw(display)?; - - Ok(()) -} - -fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(200, 200)); - let output_settings = OutputSettingsBuilder::new() - .scale(4) - .pixel_spacing(1) - .build(); - let mut window = Window::new("Line thickness debugger", &output_settings); - - let mut position = Point::new(150, 120); - let mut stroke_width = 5; - let mut mouse_down = false; - - draw(&mut display, position, stroke_width)?; - - 'running: loop { - window.update(&display); - - for event in window.events() { - match event { - SimulatorEvent::Quit => break 'running, - SimulatorEvent::KeyDown { keycode, .. } => { - match keycode { - Keycode::Up => stroke_width += 1, - Keycode::Down => stroke_width = (stroke_width as i32 - 1).max(0) as u32, - _ => (), - } - - draw(&mut display, position, stroke_width)?; - } - SimulatorEvent::MouseButtonDown { point, .. } => { - mouse_down = true; - position = point; - - draw(&mut display, position, stroke_width)?; - } - SimulatorEvent::MouseButtonUp { .. } => mouse_down = false, - SimulatorEvent::MouseMove { point, .. } => { - if mouse_down { - position = point; - draw(&mut display, position, stroke_width)?; - } - } - _ => {} - } - } - } - - Ok(()) -} From 75123778f7a41af5bd3900120518df3e5516cae7 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:41:31 +0100 Subject: [PATCH 17/26] Start progress demo at a more interesting number --- eg-next/examples/demo-progress.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eg-next/examples/demo-progress.rs b/eg-next/examples/demo-progress.rs index ad551a6..0baa5d4 100644 --- a/eg-next/examples/demo-progress.rs +++ b/eg-next/examples/demo-progress.rs @@ -36,7 +36,7 @@ fn main() -> Result<(), std::convert::Infallible> { let mut window = Window::new("Progress", &output_settings); // The current progress percentage - let mut progress = 0; + let mut progress = 78; 'running: loop { display.clear(BinaryColor::Off)?; From 09e806c6d4318a2542b1accc6d3f1a154a554bb2 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:41:47 +0100 Subject: [PATCH 18/26] Regenerate readmes --- doc/assets/0.6/analog-clock.png | Bin 8777 -> 9006 bytes doc/assets/next/demo-clock.png | Bin 9155 -> 8772 bytes doc/assets/next/demo-progress.png | Bin 1320 -> 2422 bytes doc/assets/next/line-thickness.png | Bin 7334 -> 0 bytes doc/assets/next/primitives-fill.png | Bin 4053 -> 5637 bytes doc/assets/next/simulator-input-handling.png | Bin 3381 -> 0 bytes doc/assets/next/text-alignment.png | Bin 6486 -> 6540 bytes eg-next/README.md | 8 -------- 8 files changed, 8 deletions(-) delete mode 100644 doc/assets/next/line-thickness.png delete mode 100644 doc/assets/next/simulator-input-handling.png diff --git a/doc/assets/0.6/analog-clock.png b/doc/assets/0.6/analog-clock.png index ed03a8c9be20ed823e6ca7ae5e1529f392f17e58..3a834077febc88a4acfea8d2ffdc08037fb2793d 100644 GIT binary patch literal 9006 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 literal 8777 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 KMo&(;{_$VIQR*T9 diff --git a/doc/assets/next/demo-clock.png b/doc/assets/next/demo-clock.png index 830383a124dc3cb0b558e2f7b7d4206fa8888766..6cd54993638226c8e9939ee1304fdb6a9ef2d2d6 100644 GIT binary patch literal 8772 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 O0PL2Qdclo{zyBABN>rZ! diff --git a/doc/assets/next/demo-progress.png b/doc/assets/next/demo-progress.png index fc40da44a019af06dca018e7c6e7705219fa244e..245eff9e89d2577edc267632f29176dac6bb990d 100644 GIT binary patch literal 2422 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 HQ$iB}+m=3s diff --git a/doc/assets/next/line-thickness.png b/doc/assets/next/line-thickness.png deleted file mode 100644 index 48ef6b19b4c1259d84caafae1798906d5f93cf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7334 zcmeHMYgAKL7Cr$L3JNk>5mSO4rrOpPs2H#k6R;@5sQ5q!ZG>oDEew%|k6?HQ2M4W0 zS{=s$5%4hsqDjVTAjAkMFkl6Qj*?iO!6>$-Np9*w!b6yS?wMBs^W9^V&NxKt5ymEJh9&89e=+^U}7`a(L{{HxwPBM_tn9udt z#?Ywb^AIwAd;Qmpn+4J0^lX!Wtt&uCacRLJY!$bt>XA!>ZM=wUgRmRow`zSw$^9K6 zvz=v9@k>Y<5S|S|?EO$$JhUvWPr5zwQb}?ILX6sDL;QKGycJ0oxU&`+9grYIw$P(B z`@>U~czIQ#45!UKkL!%OwcSbbgzGF?tviOBX(HTqq z#O}I+$y)JYHJySqu37d#Z^Z9MOmOO5qvZQB9$#QPaX}ZrZ=3 zrwj6DSK;IwExy_&6N-2(twdtgeno@)$cIW*UthCy&}}bWMX%X0dhQ|wSGY&($Wv71 zsp-x;+-Wzqq@LPI1pycPt6Mhj^QSDPH~KmlIQF(p7L$8)U`t{ zytWN#-t(^xs*GxPr7_0_O1t((urrf&*o?TP8dIN^lXnv0U{|`lI~Ao}qt1kFB>uu9 zk@F5B6B#FV9tC=fD|vd-S4S{CY|qY1?0stYmzvpAf^Q_-r3vX{6Tln5P&l! z~^i@23f>FjwProNjp z842Xn^XWR% zriNmux`-;Hckw%h2lxZ8(eObx|0=0?C>aNTc1eM7$VydQPtP36B{o`4QeUyWRrZCY zOjje#St_SY+mimI#vO&7i=!rLr+=eiq$xW0$`bs6 zwL4+M@cibvB!L=^)kScsRxsh=o{8hM(s7Q5x>7}_l&#Yv@0e^ee(Z~|7L>T$!B4-p$|g?e-Z5#+nuN$1f`pO|N>p2nZUhXNrx2?us-HDLyomr7r#>?l z)~zf{61XmUFjNZbWZAKH{Gc;M&m15Q|CmEVh+)2%YlF=Ph?jG1GVXwrnWq8!^Vc=c z93Wm)6emrej<|s1##Io+NtgOOI8yPW!G=C}ZbrR)9-P$mC?R^1$rJqO$)C7uQ1<5L zb*X)@^?$OJ#LZBW+@(R>8p;X^YbTg%f(sUB zAJPZT-zUJZSnv?{`IWVLq$nVHTnw)8>12?Jfe>))gckx!T&ZpzRk+g%YP*v%m84PA z4gU5tk;q2S78XS!^ZhONJELEMlfaf{0H&JHkZ4hPv33I19D>Fl43IZOoJBwh#K4~f z*F~H~L<~w#+{S4#YqTJ#tJ`C8XWORhZ}j zV623h*bFs2YXk>NCNtFq8c?=U3GHZ@7BEKhL~K)GnX@kergVc*+DC*4vwVSnMl-39 zXfQ{l4O>53NQL;oME)Bj?o%YX zf@@pIEKU${YgfWaCa}rgB$^nEaeK8IuHd{w;o$PNXFcp|gkcius9AO+6&5IumL>HZ z1viU=r4NhnXns?Eau6`Br<Q2!g@GBnYCnMDL6qjNVIhLNGIgXi=k= zNQe@QPo6yMeV^~gx7PRPUiaGjI{WN%-TOZ0+9%RL?;((!nH&!f4+z#&dyI#NuYUbL zPfBq8gpu+{;^EPafYnrte6#klmOaFgfPVTG#oodEp4>gn$de1 zXQGl%uI5~%%Bwp!MjhFXPugcHdT}|@ncmZjhmLiW=PwpqrfdSynWJ*M-~8&#!aWub z15brNGT$Z+(ljsr{229VX1_P%n% z`(sMl?gQ#Uz1QsbRcAqp-_gdR3&8gW5=M>-?s#dkQ(YzxsDwT4dE*?6M|?u=D##CQ z&(5>zusD3;M~0_1-}AmaM=%N!tN2p7OYG)ph?HF2=6yhQHSAh2r^Ha;Ejrx|Ps{5b zoD901t)F)L=%7kL8iBKC%4p13bC_z;%8F0rKRVF2{_J3!Oq{;C7#G!8vN^^5L zS93>GDPC_)i`~mNZJDkq#EDe#B6j3n`jgONM_#3S7doE(8%A0Wr~_(-`m^EXDoreG>B8$HTvPt z1V}65%+)O)Ka*7(M*c*jo7eVB`d`wjd0+ajW&`++#KA&f&|B*Z(K3*n>b;cNwnXZ$>8deF6y z&k0_4D*%Q+L%L;j|oo!HYEJyo0OxtuV|WN+Ik-Rg1T(#>H(w7%(~No7M5%lA6y+n&PD zyr|}(?a|YZ&>|qc?U-+GRrT!itTptGdu?7=PvJ%aM8N?FJ@Bs{FP0ItueK(GoF{%- z{wbHWYsw?-XigPavoiUKQDcE*$2FgxR--i;n%x=9x9GZXP+bra!#AiCW zdZ9Se$v$nGq5>W{V&!XEr|G5vddOMe#A8?a`sccuo}^ucBQ#X|tFY~_3}#R9IIKh( zep3$uzE%>9uXR}6!yCmQ>OaA?@~W3Lw&Vm=z0E3+zquz)^~~Y{{03Zll9Lja4_<|l zTM365Z%id5REkAcH}WPmiTpLgwc@pxkreER{bp-26cx5pC)ur`~6n zmN1Mfdq2#Wp~pB(k6E(1jJFh&*8H5>qh7->DbLKSl@Ve^YQiMvB-n#UfnK6#O+sYM zqXi*vfc-X$#oHdz6>{bb*g0;#)w%?646deUZU}aGyo!tf)Ss5!G#YZ~sv1X5Z*X)9 zcUtRk{|2|#@wzR2`cR#~3p*o0PZvtXbHr<~=FOU9bH**Ul-b383D`Wi3JErT$fEjJ zV;?Y!8Gp*1*c>O^G@S>$*Y8qc-ZxSHw4AZ1TM@k6MU@snoO$hj9hDO@mc>(&my0?V=F7 z-cDV&Ty`_QvTo|mX0~0_go#qMhzz@K^)}3Db1bDf$ncQ3+$4Ak$LWuT!8<53mz{^$ ztZr9+!Dg>slvhMZ91^ym~0^rK*>7(juZfO34A#YgSS!EQTusr)b8sLUg8gC zo)~qZF7w)?y`E~%cfIrLYE90|)`n(01Z7f}f5`sWDh^NTnrQ?wHIH76e_{DU)R0Z0JD zOmPIfK+M8Fc@aF51PECY0ESQ_0}gkxN>gP9u)g)@PcYirnC<^yjDs76f}CnmE(5%G zuQ9L!vhegHQT6gAhK_nd6y+cG0&J2U^IWx|d5=ML$jPL5!!ilXYrEOZBbA~hhN2o; zbGCny?-5AOGrmqs9h8Y=8XmlB+?XM!hmpx3xbTponWI`}0_UCE#b1y_7AqmCYr^frLkF@8uO0(; z41#??K~5PKGZjfi@2@6g_9%b4L{jZ%UadLtp*MU1%#sz#Waci!6!zFrN73}+b?I;Q z_ixql-aoB74#`a6%3TG*K2;O&!fI&J21=7hZN*TdNOm+_bBuGi^yJH%PCA((9FCG7 zn0NgFZLG-|!;CDUUnyfzN zft6oJEt?D)MG!by7Z=u>wXw{&jj|`g!zqf?2c4kO6AQKo2#S5W;#b~7{cMBX0>4pE*a>pno9N+nxHs*~b^{Z5tWbh=iHuFU z7$=EM4#d$#an_?^GO_%zOrLbzae zn>fxEXXsx00iI#OVrMVk3M>|_c7*_9`+&>@Y z+9WUAIn8rual*KuHZ~5D$q@1gK{m0}Ymn){Cd*#80O#C<>P zgZ^Uog5;a0*pk=vKHa#j2MecRM3*HqtMWtqhuawknb8~?T?YhR(di2R1R)eMAgD8I zuodyLoqX8;MSiOJl7}>m0dLYpGq^~z);j+0S+TG3$I;5I~s$9d$7ich)o*|)m! zt_yvAF0l&=LHSnHr%5cI!tqU4f1ycD-zlAOs{x3i+VdidIfTS@&c>mU>Bp4G7nT4Y z&A`Zz$P;EZ<@5>GGie=$60xa@BSR705oTsX6JXIAOi7fUbkvG&GN)9 zBM6EamO5eTh9`kAcvtx4lvXY&E$BCy%Cnh-8nw=o8f{qvo-CXbkr;)&)+b1Kr06t_ zG^1Q$2N=pz4jGmB<@8PxAa+SQirJhcFC|Cr(1F6W14i<&`r0U7gKe#yL=9|MS0dbm z=>n#sTqvC`6jgR37Od5gt{7zNuCNXOyQ$L!f%%#71?41W@=IGW>=E8~q_O$ateT#n zvJX=4kh71ijD?q`kc-YO*{^PgrzD-eB@1ezE1L}41vF(_E+pBD)H}qr@3+&buFw~n ztm+=>QA9~MjFqwE*eYBUkX5f|k2=zZTq-`7+WG%B68{22&U3DM11VasKqvh+MP@Z? znY0$0;t?)tv+{jw^ZrxA6C|ebZ`jeScyo7-c6Ouci*t!OMrl(ui6>AYq6|u>%{GM{ z?LuqtGIv5usvGl2>+TkSG1yAs`SMGJt7f0@x&8?>(TmJ*qQi5J`+aZRJOn6Hqe{>( zekxcH$FMo9D;FSovnA(wb8uDS!&#Avd*MskW);yC5<(h4(G75OQ1+5K(>@hC!eleh zQ)kmpAu`Vn-5)AE&zj>Qj6SFy5mB!!*8U%jKR88Ra&n52%zvWouJ9`IT<`N-qq? z^y=FL3!0=JEuLKY=o}QW&ktoN4nT{{kf~QSF;btntq}-9QQF#;k9-tQH*KooVh*XE zmNMGk&@cDhVxsMP`oVGU1(A3?m52uCN5fOcQkq1Ut@PxcXJf=w7lr<>%$OxDjh}bP zaO`zIUf~bC>)J~nSoGaXNsKq)tFCQU%mCEMo%wy$e)LlqcK_2x$R#+JLJXTA0K_Fq zgW!|vm!J+Y?J8+vr&2xRw`^?+-s^T|x-oz4yrHJt<|?uotklfD5R$sX&H71QK)vQxvmZR;@?{0-B8$s1!8%Jlvrz1fwO3+;x5*w%Eq*OTN@Ap9a+n=!?sABry8;Dt?Q`a!=wyT4a?ESnK5LgkW&g4$){s+u z_N1UyEFq|K{K6wRu$+t$f6z`+Ls0V0W9GQK_XT`HzOKf!_JG|VuZY0z3K%E99fq^A zgWzNlfWZRdVTIDS@c@A`$6i0Op1jynqe(RZw1;Qk2=5XlD;4wqayQ2wb(cjN5obBi zxzm{Y2V$S;fBGvrG6l7Z&;yWg{7WH2!N|_|(wrn6U}qk?ZbFl1D3{ zG214vt3MqIZIIKBrfk8X*V-n7w6&lJX!N;pDx{%1?+L4uEp6+>tK<Eyq&_Qfz;u}GX zP!B{?F&2n567&1NYI)r-T9F}D-Z$kHIwcL4AaSkw#A9Mp3DdhErQL6`68lr&p>rt| zNt5R-f3ce>Cd4&GChun!;jpaA-Xij*2OXVU88GMjPGbtn53kR52R7_M8zr^id=zd? z{gFo9DVTPa7B-mDj9lX44ET&CzG0I867HR})yE%Oa#RU9Cu6SRbu(bT@p{MGXr?C_ zW_^x#v^DZ_Twucl6MB8vFPPr4tST6$uT(pnCFv>__n%xcFYyc@>c3VZrgpgR@AYJ@ zn-f;#b5*?M&{XFvUdS$F>b5D=#M9y%p=rqhcvb6%@JkB5Ey3x4VAX3X(-`6EG2WiH zdz0-0&cSJg;w8W6Sck7wTwfZfr-FN(!i4K`yH^BUvS~&Teoc>v=z5gMPK0c4vS#Nm z5uNe7h?Fkm_2fD+EnL%b!cM)(3W29@O^XiIJ&9ShI=+#C>;fX1#Nu#xU$l z(JcIp$KPJ`7-Y~ssDx9ox~&~2qI*R${_5~^zxVS!KSh!3?QOY0v2cqP+#z>O>^jG_ zqY~%vbXx0BdDlC@HrxUncm{PTIOB!@#wI&=DJ-1WNjt~%f4GZo33GtsEpZV-!3D|B ze-(r`wFuTy($Gm8?|BUuZ6^+3Gd^3656!7fnUNr)SSsjS!)h~z6f+T| zpB2oT{;4y3{Ad<2U_dbGsE6@67S?aOa{*wA&a6|Yd`vp%q1Yzo)N^g(b`W&?#B)={ zUBMEs+k;oNm?M!-uyKryN62k9=X8XF@L|%fp(FQ>s}~74I<1l4?U1C68rb%8rU${& z@ur7f6i&uN#Yz?5^-Qg)dK=;-x#N1IH*A5K4q9Di@Qq!ghh&3Lc0)yKkH6;gP^AL~ zd*z2V>E*L|Q-|MjZ7BIIi;)!IP<%^LZ%m_%PXyisZ-@tKvdFM^ztYRqs#1Qg)}%#m zjnWy;$tC4-Uh-8Vx_5c{lAss)liuuwJl)d^Mz@3W3DBMmBvp&0qB zqwF=vWXU>1V+$eVXui&MuIpUq{CBSN&-1>|{d=D0zJK>~z1Q#eCR<}E*w~J!9lm#Q9z7h#o6HX%{5UgXBRd3cslX|7<~5)33NvOf%If%;u>ePY1+J9X z)OGCCjbt}3o7CK*ot2o0y`A+Fm!_Hz_AVB__r!lGJ+mkC-fC$w-pU{!B9-&E8Q7Gq zO*L{kbKD?*q#0X+cn)H`xEt9Da6A91Dfpz@Th)We(}kmqAazT%;gB)GP}xeRkZLc0#Z>P7n;9DY)xstwj^oq(Z;2K1|eC4 zdssSwKKceNEdM=-zZ;O6(YKd8m1X#3Ud;yA<5&1>JSrn(z8_F@prx7=fq&w{@SYl; znLQt~@ckPql}S&Q2>rX#ezzf`o80kyuF#p8kSraPT(4O00NX_#tXLx%-)qYd07wNT zU(#-hFf|p-t9K$b=f(SHZm%teBMvYak8|Lizg#i>hGwrk8b|59pQDt0-!1N9ca%Fb z-R`A4UcH;FSj0~std=n!NF|!N6sw0$Vie&!QZs#aOjOuvP*=jp%4i6)L+}E~*G7z3 z={`Ab-^h<#A6W)0j~)$$*A0cgd>%mg75)&&sJQ>JA7x;4k$-00Pi)Kfxu$HWcLiN6 z*WuzFu6&@@f=f1KaZt9a%z+bXxNr#O!>U$|Y&|FrP z^nfYXu=k?#L)dRgPQCyb?d<>) zDC$i&KdM9Xlxz^7r~w4aH64HHpaDc8mO4~6gsOIGb^^^fz>TSpoEed)Mk=9lEUOwz zPE|FDqn4*h9d^+_-D%w_gaJ7O>S$2;M^+-V6Z;7Nc9jjzDwne9Fs?jgVymK%RlOYy>#U$SfA`TBWC2$ZL=FU4g z7>AktLl&hbMBeqB1S)LCvkfbIrPQXdntc;8zVF3Zspr8;hmW@UzDp&99juJm6F-%^ zn5szRSsdQFa&t(5#T_z`=m3S5AQ5?M(-c69os*go1-9jK6mDO{A_z7TaXlh|;+yvD z#NNKrp4GEsbc~8S%R= zh_epJxoxFTyF23Ip+{v5YVdv~h-!KYId9V%5N zQ8(vJk>m>h>|!W&O11b%m2)cO#M*gHWDE{FJpK2`0H0dhF^KDsF3SYrfmjE1mI-++ z!xC}erEh$+mbuy742RG@K`L6$;BxyGcLz&C)~9^Gy#DL;;dXuA&_r@Y1dCx!{;h+` zzX!Bqbng@u%pbR#i}dp7s?7KPmBUHtR}U5M2MDpUIgal!&O zHv3r;&$Dl(w6P@GzIk~S*mw?sksK||;B2h`-u&fK5{l~T$hrqF?Gg3z8BJb(7^tW_ z*yyI#QI-iWGiYacSohG=IhzU9jzGjqjy}770zSmalIRZcsFGtz3_f;)@H}VBZ7CVG zWiKILE*Zy?Xn|&mB(Nj~{Gmasi173~AkS__yI!p*V|`jD1-?Ca;>I%JVMbFOhI2I9 zxwXK@_kW5rHm=#u8t+8$Rh5*>m*vN^2rh7b6^Z+oz`g6mlUE^Wkq`^5<1F<)0>fvH zveb`t634rTKWKe>=h+D`&dy%FeCz5H8EkbAjFQvgspg66zBTdA6)XIm^V(`Ya=x`? zEh1dPT!K!{0!%s%a+FttGPM`nf0VYAHt`18bSeLDpuUZZ>Fo2t-Yr;qM5V+OG0o*| z4L-cI0n_C~c)Buvdi{oGYk-Jpq_+vU^abYXcuCFXIK)GbHe8AM zT2xr3PE79?wA^kz^vXmA+w_m>^2J`S6(aKbG5X<3a48g2m;EV zfKCofjImW^%MSe2e&#jm{uw%o`T@xAbN@l?jg4dZnLg!dkxsgRay;lUY+UF(yYY|K z$7_n^S4CvjQWqa*$jf~Y`<@CmgDld~l#TBh;)5BNUr{10!b+nt2#fpt$uI?cz?Ve2 zf@(@BRZ%Ua_68k;xHC)%CUAFx{M~c__Ltw4*cCtHEk+c(7rX2HUa|s@G zo{&k~(+SQpd^@IdWJYH}?l7jLbdc$VZ0Eg0V7Lueo9rsBB5BwjP3H$O9GV6iLQS$; zaxHn8butsQ(*-BMeKoaBeUo{BlVn~E?zC73{1*$ZcdF{;=~08DOsMxz|?`oiAT(+3u5=D?B+*?;N z4;#`F$k*vOVJ+HNJos9En=9mle=Nx-vf&s9MOTEPOH!RDVDlso*z*@A@_*x+BHp?r zrFp_y-mO;PUmxqiJcDW*p1c@u1x&DwsRcCnTzLwJNOU*7QSyd?mXPi@z%f$e#UFWj zK&4CvY$##RAi;w`O`XRPI9C2waUU#va zwxC(cbPI+^hfdx>Iz=6Z;2KAovW(iGmxFsh<+xC*)r?H7!_~q9&tQdQbOo~sTN=~B z30tYlC&gd%d2rFv8e9SsoYHYVTjeiB3$NE-3cuxg+px#(#4GltE8~?qEj8EpNGtbl zqWcK__Ua7lw0DBF$3h9y(*4@HRLl%qL@$}o(5wWirDkp|5}GqD*bh0xh3<$fS|(*t ztqGEOio}El6L?FFEuZ}*h3w*GqV`F)>lNjW@z;n>!lF3+Ip-(A(@|95-7RIKEZ?x~ z;xOtC3P``D>##sX$ZkStKi~tUl85C+CNvt}-h2Zy9DR$N+Tb?1fgLENv6)-zFYdLX zW1dStU#mq3g|@t&L6%sM*jWV-RjAq<)R3(?qZK014V`53tgvS_K47NB-MYf%xoXk~ z$D6S^^I{7U_wNmky+QxvP&)M)oHS&j(yvEvxp;0^O4*2MtQ#S ztn$O7A6zh(YsHt|jE};l?pvzZE+w$40^IvS4Q^v_XHB^lNr;=|^{gQMC-wch!i{BM zonh!p{iW_ht)joF3-ag4hE~`l;(Iy{Z&YNXOHP->Dv1ehX?0^`PAc%jlKbUNkmsKS zA!M~qT~}8K@UJWUu^U*Y95yi`Dy3q(n6w20eVBzzFMEA%X|}B0|JdgTujYxOotgHe zqNDDWyeb|x;$?2k+=pp7iZUy$+P=wr(=Z*~yBsaO34C4ic^x=( zU=XjpyAwq<{nF?CPTB5Y9sQX(FI1lH#!--IMf^zzHjMTv+f2sk7bIE{ztOS9qa#Vb zrd0vp^1~@%^!syaxCU}~NzwkNLB(im2>(~XK0^N4MM3ql{Ik)o$w{GHbXc!wGj6i2 zAz_{9^(aQCA?07pDQpGq(i&k`(;>f7U#&iMxF3Jh!lm{9d+0ehGBImwB=yjS>+pA- O&CJBo_yxo*{yzW%FxFfE diff --git a/doc/assets/next/simulator-input-handling.png b/doc/assets/next/simulator-input-handling.png deleted file mode 100644 index d7733968bdbee6528d3255484b36bb95cae4f3e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3381 zcmeI#YfzI{8VB&_O#*~l16X3X3Po|;L`4GyOfaq&F4cmNmSho102P^T*8oMJioBF< z0YjjOa*>-NU4yGJD9WWMFAKy$fhd&#B|r$b9Y6xITq+UQ5AjRcb^2{*XZ-e?GiT1s zdCv2HW=_UoUoT?=O9KEf_VL~y0D!jxK$Jw>o0YC(rR4xd8lU}t{4AmPxg5!=@HW$V zInZ$4p%xa(6kCNyl0#-FWywZsCbAdq3tAszxP@9}?Igq2t7TPL?C+d`^) zY{QuM!TT~b5i{CmnSAO~|NG-=g7QkS)9R@-(aQ{$IjR?ZFED=MjT^~mQS5c{LW}ri zr`izns5|_)Fefnd*9@fAswT>OzJ8LCOb6HDjU6?6gObL|bd@94SE~Z2uB$Z)ICIX* z`G@M4kG6k+Ed-bOS9JSn{t3Zt1BLrS?vID+DR*Xd61panRuf>GQo$^${^emZ39Gce zq{rrXEiWK$+0=ROuIu3d#Z5_xl&CmeI$R#R&CICZmAwf}VghaVg_LwqKvcVhWOq}1 z)C{aAE-6at>q|ce{txV!FDED2MtIagk+TxODLZBb)8pxioa%a#A;Qy}7&-N&zbMBOHF5C*+EZ* zf7ZRxk$}aEo4cQNGXn`2%gs1HfWx*hgU~v|9)HfAJ~L=^H|R0tYPH^ zz*G!6o-536tPn3}{D{z6?}VChH7#9`r|Of5s9(@OM&lCZ={P}8rZLZEP?L$NTq5w? zG}p!};)JyO2<;!KLnhpY=0PA2H<3it!N?e(&i(EP7Q^ z@7>;o&M_Cf^l4h9iKvS^m}pWCqMk|%nEQtr&#C)-$PkV3$-u zla~g~3B5I@+~TGWkniUtCmkeisWv#Hk+308UbHTQK#?{-5MuwM1B;@5*M$qQ@?(F6 z`GkJgb=)=8+ZW+qwFk{%s!tPXzvn4(r7E|1e8D5b#$4=ODwC>+{dh{dLt`2C4kf2c z!#6bJ3pyCd>DXFbkcLzLj;F}j$rmuKHay`r$VMShd6z__t!Zv6OF?|E74{Kx**K+@ zF>TBo=1yXGWS&owB z&UOeK8B<5mv{CiDQl*VA>pM)f9*^hdF1@B%8cyN3dF%M(l<(pY+GBmU9BEKt6mp~8 z+$~=klpBK3I_=%^v9~Ib{$`wrFIQMd~D8(I_6$tn?LYJbg$ZXM7zD>$oZ4tU$ zv`1zy{=|0?x@4Opvn1bUy%RTl4iQmxaGLB1ckKv_aF+jUK>}8^!)~7lkNh#1{gyr# zW;vD7u8Z~rpOgK}eLG;u&T=-z2-N)TGkYTj%I?CfcYA5=WYY_2>mA zDy={71N`DIUr=^V{aFfoT0c!R6UNyd1iR52%uMO7R10_#^Cw%Mo0d<-1o;gYVdrLw0utC$jaFxXupiol`EacR_yi*Pc(gthuXr{-*dyyTXNw zq1NbB-R_7s8p{>RRJt8CK~cY6Lzdkho-n5#&1gB=(nmhEuawgSBoqP$Ch-I zrNN?ZkE&|TT~HLWTZd+>kF0(Mwk>@s*^J4NRbQ}uq(8E?=U;h4rl>`*^CBZ4WR(fJ uvEu;YI76^=l)T6LBE0W}|CoZ;da1^3!)InJOWu5kz~_MPe(_%3xBmv!0j2{0 diff --git a/doc/assets/next/text-alignment.png b/doc/assets/next/text-alignment.png index bd162cd19b63a88a75e11ea6cdfc532be0cfcd12..ea841137aec0ed6d51dff6b7c745760cb726440d 100644 GIT binary patch literal 6540 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 literal 6486 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 S2dLdp?(59`y?_7q&;ApUgDxKc diff --git a/eg-next/README.md b/eg-next/README.md index f305edd..1cbe678 100644 --- a/eg-next/README.md +++ b/eg-next/README.md @@ -28,10 +28,6 @@ [![A screenshot of the embedded-graphics version next example called image-tga](../doc/assets/next/image-tga.png)](examples/image-tga.rs) -## [line-thickness](examples/line-thickness.rs) - -[![A screenshot of the embedded-graphics version next example called line-thickness](../doc/assets/next/line-thickness.png)](examples/line-thickness.rs) - ## [primitives-ellipse](examples/primitives-ellipse.rs) [![A screenshot of the embedded-graphics version next example called primitives-ellipse](../doc/assets/next/primitives-ellipse.png)](examples/primitives-ellipse.rs) @@ -60,10 +56,6 @@ [![A screenshot of the embedded-graphics version next example called primitives-triangles](../doc/assets/next/primitives-triangles.png)](examples/primitives-triangles.rs) -## [simulator-input-handling](examples/simulator-input-handling.rs) - -[![A screenshot of the embedded-graphics version next example called simulator-input-handling](../doc/assets/next/simulator-input-handling.png)](examples/simulator-input-handling.rs) - ## [text-alignment](examples/text-alignment.rs) [![A screenshot of the embedded-graphics version next example called text-alignment](../doc/assets/next/text-alignment.png)](examples/text-alignment.rs) From e1fa06fa6f38bb797b9fdb3aaa7b7ef8405f5333 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 16:46:49 +0100 Subject: [PATCH 19/26] Add license info --- LICENSE-APACHE | 201 +++++++++++++++++++++++++++++++++++++++++++++ LICENSE-MIT | 25 ++++++ README.md | 16 ++++ eg-0.6/Cargo.toml | 1 + eg-next/Cargo.toml | 1 + 5 files changed, 244 insertions(+) create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..16fe87b --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..87584ce --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,25 @@ +Copyright (c) 2020 James Waples + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 926dbfa..bb44257 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,19 @@ - [development (`eg-next`)](./eg-next) - [0.6 (`eg-0.6`)](./eg-0.6) + +## License + +Licensed under either of + +- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or + http://www.apache.org/licenses/LICENSE-2.0) +- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) + +at your option. + +### Contribution + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the +work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any +additional terms or conditions. diff --git a/eg-0.6/Cargo.toml b/eg-0.6/Cargo.toml index a18b905..94bd3e9 100644 --- a/eg-0.6/Cargo.toml +++ b/eg-0.6/Cargo.toml @@ -3,6 +3,7 @@ name = "eg-examples-0-6" version = "0.1.0" edition = "2018" publish = false +license = "MIT OR Apache-2.0" [dependencies] chrono = "0.4.19" diff --git a/eg-next/Cargo.toml b/eg-next/Cargo.toml index af997ac..3764fda 100644 --- a/eg-next/Cargo.toml +++ b/eg-next/Cargo.toml @@ -3,6 +3,7 @@ name = "eg-examples" version = "0.1.0" edition = "2018" publish = false +license = "MIT OR Apache-2.0" [dependencies] chrono = "0.4.19" From 42649628a2a4b132dd9c392ccde2d98ab313d36d Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:31:48 +0100 Subject: [PATCH 20/26] Update dependencies --- eg-next/Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eg-next/Cargo.toml b/eg-next/Cargo.toml index 3764fda..e79ae72 100644 --- a/eg-next/Cargo.toml +++ b/eg-next/Cargo.toml @@ -7,8 +7,8 @@ license = "MIT OR Apache-2.0" [dependencies] chrono = "0.4.19" -embedded-graphics = "0.7.0-beta.1" +embedded-graphics = "0.7.0-beta.2" embedded-graphics-simulator = "0.3.0-beta.2" -tinybmp = { git = "https://github.com/embedded-graphics/tinybmp.git" } -tinytga = { git = "https://github.com/embedded-graphics/tinytga.git" } +tinybmp = "0.3.0-beta.1" +tinytga = "0.4.0-beta.1" From 1dcccca4d98ca1271be5866f56b942ce8a2e6570 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:46:42 +0100 Subject: [PATCH 21/26] Move some debug examples into debug-tools Cc embedded-graphics/debug-tools#10 --- eg-next/examples/primitives-ellipse.rs | 129 ------------------ .../examples/primitives-rounded-rectangle.rs | 109 --------------- 2 files changed, 238 deletions(-) delete mode 100644 eg-next/examples/primitives-ellipse.rs delete mode 100644 eg-next/examples/primitives-rounded-rectangle.rs diff --git a/eg-next/examples/primitives-ellipse.rs b/eg-next/examples/primitives-ellipse.rs deleted file mode 100644 index b7d35a2..0000000 --- a/eg-next/examples/primitives-ellipse.rs +++ /dev/null @@ -1,129 +0,0 @@ -//! # Example: `Ellipse` primitive. -//! -//! Click and drag to move the bottom right corner of the ellipse's bounding box around the screen. -//! -//! The stroke size can be increased or decreased using the up and down arrow keys. -//! -//! This example is not particularly useful on it's own, but is helpful when debugging ellipse -//! rendering. - -use embedded_graphics::{ - mono_font::{ascii::FONT_6X9, MonoTextStyle}, - pixelcolor::Rgb888, - prelude::*, - primitives::*, - text::Text, -}; -use embedded_graphics_simulator::{ - sdl2::Keycode, OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window, -}; - -fn draw_ellipse( - top_left: Point, - size: Size, - stroke_width: u32, - display: &mut SimulatorDisplay, -) { - display.clear(Rgb888::BLACK).unwrap(); - - Text::new( - &format!("S: {}\n{:?}", stroke_width, size), - Point::new(5, 10), - MonoTextStyle::new(&FONT_6X9, Rgb888::MAGENTA), - ) - .draw(display) - .unwrap(); - - // Bounding rect - Rectangle::new(top_left, size) - .into_styled(PrimitiveStyle::with_stroke(Rgb888::WHITE, 1)) - .draw(display) - .unwrap(); - - Ellipse::new(top_left, size) - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_width(stroke_width) - .stroke_color(Rgb888::RED) - .fill_color(Rgb888::GREEN) - .build(), - ) - .draw(display) - .unwrap(); -} - -fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(200, 200)); - let output_settings = OutputSettingsBuilder::new() - .scale(2) - .pixel_spacing(1) - .build(); - let mut window = Window::new("Ellipse debugger", &output_settings); - - let top_left = Point::new(50, 50); - - let mut mouse_down = false; - - let mut bounding_rect = Rectangle::with_corners(top_left, Point::new(100, 100)); - - let mut stroke_width = 5; - - draw_ellipse( - bounding_rect.top_left, - bounding_rect.size, - stroke_width, - &mut display, - ); - - 'running: loop { - window.update(&display); - - for event in window.events() { - match event { - SimulatorEvent::Quit => break 'running, - SimulatorEvent::MouseButtonDown { point, .. } => { - mouse_down = true; - - bounding_rect = Rectangle::with_corners(top_left, point); - - draw_ellipse( - bounding_rect.top_left, - bounding_rect.size, - stroke_width, - &mut display, - ); - } - SimulatorEvent::KeyDown { keycode, .. } => { - match keycode { - Keycode::Up => stroke_width += 1, - Keycode::Down => stroke_width = (stroke_width as i32 - 1).max(0) as u32, - _ => (), - } - - draw_ellipse( - bounding_rect.top_left, - bounding_rect.size, - stroke_width, - &mut display, - ); - } - SimulatorEvent::MouseButtonUp { .. } => mouse_down = false, - SimulatorEvent::MouseMove { point, .. } => { - if mouse_down { - bounding_rect = Rectangle::with_corners(top_left, point); - - draw_ellipse( - bounding_rect.top_left, - bounding_rect.size, - stroke_width, - &mut display, - ); - } - } - _ => {} - } - } - } - - Ok(()) -} diff --git a/eg-next/examples/primitives-rounded-rectangle.rs b/eg-next/examples/primitives-rounded-rectangle.rs deleted file mode 100644 index 2c41e44..0000000 --- a/eg-next/examples/primitives-rounded-rectangle.rs +++ /dev/null @@ -1,109 +0,0 @@ -//! # Example: Rounded rectangle -//! -//! This example draws a `RoundedRectangle`. Click and drag to move a corner of the rounded -//! rectangle around the screen. The up/down arrow keys adjust stroke width, left/right the corner -//! radius. Space cycles the stroke alignment between center/outside/inside. - -use embedded_graphics::{pixelcolor::Rgb888, prelude::*, primitives::*}; -use embedded_graphics_simulator::{ - sdl2::Keycode, OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window, -}; - -fn draw( - base_rectangle: Rectangle, - radius: Size, - stroke_width: u32, - align: StrokeAlignment, - display: &mut SimulatorDisplay, -) { - display.clear(Rgb888::BLACK).unwrap(); - - RoundedRectangle::with_equal_corners(base_rectangle, radius) - .into_styled( - PrimitiveStyleBuilder::new() - .stroke_width(stroke_width) - .stroke_color(Rgb888::RED) - .stroke_alignment(align) - .fill_color(Rgb888::GREEN) - .build(), - ) - .draw(display) - .unwrap(); -} - -fn main() -> Result<(), core::convert::Infallible> { - let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(200, 200)); - let output_settings = OutputSettingsBuilder::new() - .scale(2) - .pixel_spacing(1) - .build(); - let mut window = Window::new("Rounded rectangle debugger", &output_settings); - - let top_left = Point::new(20, 20); - - let mut mouse_down = false; - - let mut base_rectangle = Rectangle::with_corners(top_left, Point::new(100, 100)); - - let mut stroke_width = 5; - - let mut radius = 20; - - let mut align = StrokeAlignment::Center; - - draw( - base_rectangle, - Size::new(radius, radius), - stroke_width, - align, - &mut display, - ); - - 'running: loop { - window.update(&display); - - for event in window.events() { - match event { - SimulatorEvent::Quit => break 'running, - SimulatorEvent::MouseButtonDown { point, .. } => { - mouse_down = true; - - base_rectangle = Rectangle::with_corners(top_left, point); - } - SimulatorEvent::KeyDown { keycode, .. } => match keycode { - Keycode::Up => stroke_width += 1, - Keycode::Down => stroke_width = stroke_width.saturating_sub(1), - - Keycode::Right => radius += 1, - Keycode::Left => radius = radius.saturating_sub(1), - - Keycode::Space => { - align = match align { - StrokeAlignment::Center => StrokeAlignment::Outside, - StrokeAlignment::Outside => StrokeAlignment::Inside, - StrokeAlignment::Inside => StrokeAlignment::Center, - } - } - _ => (), - }, - SimulatorEvent::MouseButtonUp { .. } => mouse_down = false, - SimulatorEvent::MouseMove { point, .. } => { - if mouse_down { - base_rectangle = Rectangle::with_corners(top_left, point); - } - } - _ => {} - } - - draw( - base_rectangle, - Size::new(radius, radius), - stroke_width, - align, - &mut display, - ); - } - } - - Ok(()) -} From d178daa2175d15d962b59fdfdebccddbb76d1e89 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:48:29 +0100 Subject: [PATCH 22/26] Address review comments --- eg-next/examples/text-custom-font.rs | 24 ++++++++++---------- eg-next/examples/text-extended-characters.rs | 4 ++-- eg-next/examples/text-fonts.rs | 3 ++- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/eg-next/examples/text-custom-font.rs b/eg-next/examples/text-custom-font.rs index 0339441..09152d5 100644 --- a/eg-next/examples/text-custom-font.rs +++ b/eg-next/examples/text-custom-font.rs @@ -1,11 +1,11 @@ //! # Example: Custom font //! -//! Shows how to implement a custom `SevenSegmentFont` font using the `MonoFontBuilder` struct. This -//! font renders numbers only and emulates a classic 7 segment display. +//! Shows how to implement a custom `SevenSegmentFont` font using the `MonoFont` struct. This font +//! renders numbers only and emulates a classic 7 segment display. use embedded_graphics::{ image::ImageRaw, - mono_font::{GlyphIndices, GlyphRange, MonoFont, MonoFontBuilder, MonoTextStyle}, + mono_font::{mapping::StrGlyphMapping, DecorationDimensions, MonoFont, MonoTextStyle}, pixelcolor::BinaryColor, prelude::*, text::{Alignment, Baseline, Text, TextStyleBuilder}, @@ -14,15 +14,15 @@ use embedded_graphics_simulator::{ BinaryColorTheme, OutputSettingsBuilder, SimulatorDisplay, Window, }; -const SEVENT_SEGMENT_FONT: MonoFont = MonoFontBuilder::new() - .image(ImageRaw::new_binary( - include_bytes!("assets/seven-segment-font.raw"), - 224, - )) - .character_size(Size::new(22, 40)) - .character_spacing(4) - .glyph_indices(GlyphIndices::new(&[GlyphRange::new('0', '9', 0)], 0)) - .build(); +const SEVENT_SEGMENT_FONT: MonoFont = MonoFont { + image: ImageRaw::new_binary(include_bytes!("assets/seven-segment-font.raw"), 224), + glyph_mapping: &StrGlyphMapping::new("0123456789", 0), + character_size: Size::new(22, 40), + character_spacing: 4, + baseline: 7, + underline: DecorationDimensions::default_underline(40), + strikethrough: DecorationDimensions::default_strikethrough(40), +}; fn main() -> Result<(), core::convert::Infallible> { let mut display: SimulatorDisplay = SimulatorDisplay::new(Size::new(128, 128)); diff --git a/eg-next/examples/text-extended-characters.rs b/eg-next/examples/text-extended-characters.rs index a9af4e3..5eb9672 100644 --- a/eg-next/examples/text-extended-characters.rs +++ b/eg-next/examples/text-extended-characters.rs @@ -1,10 +1,10 @@ //! # Example: Extended characters //! -//! Demonstrate ability of most built in fonts to render extended characters. +//! Demonstrate ability of all built in fonts to render extended characters. use embedded_graphics::{ mono_font::{ - latin1::{FONT_10X20, FONT_6X12, FONT_6X9, FONT_8X13}, + iso_8859_1::{FONT_10X20, FONT_6X12, FONT_6X9, FONT_8X13}, MonoTextStyle, }, pixelcolor::BinaryColor, diff --git a/eg-next/examples/text-fonts.rs b/eg-next/examples/text-fonts.rs index 9136111..af2fcf9 100644 --- a/eg-next/examples/text-fonts.rs +++ b/eg-next/examples/text-fonts.rs @@ -1,6 +1,7 @@ //! # Example: Fonts //! -//! Demonstrate the available builtin fonts. +//! Demonstrate some of the available builtin fonts. A full list of fonts can be found in the +//! [embedded-graphics documentation](https://docs.rs/embedded-graphics). use embedded_graphics::{ mono_font::{ From bb9583847d29564ad56b308416ab3036746da147 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:49:00 +0100 Subject: [PATCH 23/26] Rename analog clock example --- eg-next/examples/{demo-clock.rs => demo-analog-clock.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename eg-next/examples/{demo-clock.rs => demo-analog-clock.rs} (100%) diff --git a/eg-next/examples/demo-clock.rs b/eg-next/examples/demo-analog-clock.rs similarity index 100% rename from eg-next/examples/demo-clock.rs rename to eg-next/examples/demo-analog-clock.rs From 199be49f24ad623297bff8b0c091c884462d2501 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:50:03 +0100 Subject: [PATCH 24/26] Regenerate readmes --- doc/assets/0.6/analog-clock.png | Bin 9006 -> 9110 bytes doc/assets/next/demo-analog-clock.png | Bin 0 -> 8171 bytes doc/assets/next/demo-clock.png | Bin 8772 -> 0 bytes doc/assets/next/primitives-ellipse.png | Bin 5532 -> 0 bytes .../next/primitives-rounded-rectangle.png | Bin 4496 -> 0 bytes eg-next/README.md | 12 ++---------- 6 files changed, 2 insertions(+), 10 deletions(-) create mode 100644 doc/assets/next/demo-analog-clock.png delete mode 100644 doc/assets/next/demo-clock.png delete mode 100644 doc/assets/next/primitives-ellipse.png delete mode 100644 doc/assets/next/primitives-rounded-rectangle.png diff --git a/doc/assets/0.6/analog-clock.png b/doc/assets/0.6/analog-clock.png index 3a834077febc88a4acfea8d2ffdc08037fb2793d..b02f133aaa194dc723a8be782eabab9a763d6b5a 100644 GIT binary patch literal 9110 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 diff --git a/doc/assets/next/demo-analog-clock.png b/doc/assets/next/demo-analog-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..df782f8fc76d96b051962beb3eeba6073f2b711a GIT binary patch literal 8171 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 diff --git a/doc/assets/next/primitives-rounded-rectangle.png b/doc/assets/next/primitives-rounded-rectangle.png deleted file mode 100644 index 6ad666ac11fb323b30546c93e94a2da7b9092719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4496 zcmeAS@N?(olHy`uVBq!ia0y~yUiho}u3mCLk=<;L;pXH;FV`MC^!_{3TjT%#>lr4T;$oU`df4H8@9ZDHumA5@Sk16; z55xM^<{@|F9CY*<7-7H1|Me25;UB|>_(ws^6SS*XU%!s)c=(jzooH?AYf<5(3d@G-orf5nc*Pw2)gqo$ zk<4)2bI;DNX`F_83>#kW*vatZ*I&^!@4wV;^okMvd`IHI!@B?Tu2pZ*59?f=G*6n@ zVoo)e!@Bvg2Y*S_hp!Q0G(5kZwP4x&z4N~Q+M^xT*)ZezZ6=G!uQ?so#YZ3f_2u8` z2-PDW_Qkg!2&{V>b}jnz^o?E}2e}UQ7ilw|_?oR95r1d>Q7y$b`=d7TJP$PXmubIV zTd5lc^nvEHpGgevg&<|h+7a@%`je A0gBKAmyS19!dTy*fw&2U1xSuHV&;n12;4 z_&aIdd8QwWcE3;9tBfR|R4&jEQ@%c-*4Mr()QRVPccmTogYI|xn!onhAPL-YWGIT= z+4NQLuLjT^Z+bwgKCjzT^)(Bu$~qZjxJ@{JLrnO(gj(xzkh{{8=dES1dw*(m_W zpspITXE(VXe2%eYD7w3)>FdcqAfteSKXn@VcfLG!Rr({6K;dJC6Q!5Au1zljYqbVx zP0rg@_|>fhWcGHj*~faB6|VaN!|T*sP>8;rk**Cj>S8C*Gxz%{w=w;YFz0KC5nq!~ zs{r;PP|%J$VLP{8)Lss7H~@`0&vfIgE6^xb?TGtFK}HqCo!KmUAWuAIOO>D%FmfL5 z0U3Qa#snA&8=Ahx-T@i^{HRSd=MwL7E+ezr_HJl_SWioRn3soj@? zt4K%wL7FCvPXM;++Hbg?S2ky_W7&8+8x*ylD~-5^r56J^!EhUwe+uG z$7Y@R9Lb>mW8&!u{nJPS1(J}qoct}qZ8>n0uU-<^hWPhOJ%P1gO8oArU$6a1T_cpV zq3OfoJ6;S$f8TIjTmF4_(o~L)%6+;G#(&>@U32|;>_#t^BR2QN4$O@42deqUb?x|% zeG#hbx+?Q{9u(}a_kV4BOMLZ_P{Z@Rj56nJSrx(`aa}9lC2&}pd57Plvun-0J0A8j z#vDHjl=;GSO?{8R;nR$Fw1073*H%07p@`voQ7hw#RM!6s_q}VC_$P5dzi{RMg>hEE zrYYM8@0cuxqR4~wf%_R;z^(58;$Nk@&M?%?&gOH_)BdsR*G`2zeuZh`4@$qbb=_v} wc*@EEY?rf);?Xb|O#`E8U_jHr^?F9Rt?tD)OP^@~M_L#>UHx3vIVCg!0PW)RPXGV_ diff --git a/eg-next/README.md b/eg-next/README.md index 1cbe678..a2793b5 100644 --- a/eg-next/README.md +++ b/eg-next/README.md @@ -1,8 +1,8 @@ # Embedded graphics examples and demos for version `next` -## [demo-clock](examples/demo-clock.rs) +## [demo-analog-clock](examples/demo-analog-clock.rs) -[![A screenshot of the embedded-graphics version next example called demo-clock](../doc/assets/next/demo-clock.png)](examples/demo-clock.rs) +[![A screenshot of the embedded-graphics version next example called demo-analog-clock](../doc/assets/next/demo-analog-clock.png)](examples/demo-analog-clock.rs) ## [demo-pacman](examples/demo-pacman.rs) @@ -28,10 +28,6 @@ [![A screenshot of the embedded-graphics version next example called image-tga](../doc/assets/next/image-tga.png)](examples/image-tga.rs) -## [primitives-ellipse](examples/primitives-ellipse.rs) - -[![A screenshot of the embedded-graphics version next example called primitives-ellipse](../doc/assets/next/primitives-ellipse.png)](examples/primitives-ellipse.rs) - ## [primitives-fill](examples/primitives-fill.rs) [![A screenshot of the embedded-graphics version next example called primitives-fill](../doc/assets/next/primitives-fill.png)](examples/primitives-fill.rs) @@ -40,10 +36,6 @@ [![A screenshot of the embedded-graphics version next example called primitives-polyline](../doc/assets/next/primitives-polyline.png)](examples/primitives-polyline.rs) -## [primitives-rounded-rectangle](examples/primitives-rounded-rectangle.rs) - -[![A screenshot of the embedded-graphics version next example called primitives-rounded-rectangle](../doc/assets/next/primitives-rounded-rectangle.png)](examples/primitives-rounded-rectangle.rs) - ## [primitives-stroke-alignment](examples/primitives-stroke-alignment.rs) [![A screenshot of the embedded-graphics version next example called primitives-stroke-alignment](../doc/assets/next/primitives-stroke-alignment.png)](examples/primitives-stroke-alignment.rs) From 339f7c846d28100fa0e85f8b2251fe89940a6db6 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 18:27:33 +0100 Subject: [PATCH 25/26] Remove unnecessary copyright --- LICENSE-MIT | 2 -- 1 file changed, 2 deletions(-) diff --git a/LICENSE-MIT b/LICENSE-MIT index 87584ce..31aa793 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,5 +1,3 @@ -Copyright (c) 2020 James Waples - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the From 4fbcf0325f5553cbf1f6e4a4fe7bec3bd1cb9706 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 18:38:00 +0100 Subject: [PATCH 26/26] Revert back to Git dependencies for eg-next folder --- eg-next/Cargo.toml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/eg-next/Cargo.toml b/eg-next/Cargo.toml index e79ae72..4178145 100644 --- a/eg-next/Cargo.toml +++ b/eg-next/Cargo.toml @@ -7,8 +7,14 @@ license = "MIT OR Apache-2.0" [dependencies] chrono = "0.4.19" -embedded-graphics = "0.7.0-beta.2" -embedded-graphics-simulator = "0.3.0-beta.2" -tinybmp = "0.3.0-beta.1" -tinytga = "0.4.0-beta.1" +embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } +embedded-graphics-simulator = { git = "https://github.com/embedded-graphics/simulator.git" } +tinybmp = { git = "https://github.com/embedded-graphics/tinybmp.git" } +tinytga = { git = "https://github.com/embedded-graphics/tinytga.git" } + +[patch.crates-io] +embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } +embedded-graphics-core = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } +tinybmp = { git = "https://github.com/embedded-graphics/tinybmp.git" } +tinytga = { git = "https://github.com/embedded-graphics/tinytga.git" }