takumi 1.7.0

Render UI component trees to images.
Documentation
use taffy::Layout;

use crate::{
  layout::style::{Affine, BorderStyle, Color, ImageScalingAlgorithm, Sides, SpacePair},
  rendering::{BorderProperties, Canvas},
};

/// Draws debug borders around the node's layout areas.
pub fn draw_debug_border(canvas: &mut Canvas, layout: Layout, transform: Affine) {
  // border-box
  BorderProperties {
    width: Sides([1.0; 4]).into(),
    color: Sides([Color([255, 0, 0, 255]); 4]).into(), // red
    radius: Sides([SpacePair::from_single(0.0); 4]),
    image_rendering: ImageScalingAlgorithm::Auto,
    style: Sides([BorderStyle::Solid; 4]).into(),
  }
  .draw(canvas, layout.size, transform, None);

  // content-box
  BorderProperties {
    width: Sides([1.0; 4]).into(),
    color: Sides([Color([0, 255, 0, 255]); 4]).into(), // green
    radius: Sides([SpacePair::from_single(0.0); 4]),
    image_rendering: ImageScalingAlgorithm::Auto,
    style: Sides([BorderStyle::Solid; 4]).into(),
  }
  .draw(
    canvas,
    layout.content_box_size(),
    transform
      * Affine::translation(
        layout.padding.left + layout.border.left,
        layout.padding.top + layout.border.top,
      ),
    None,
  );
}