pix-engine 0.8.0

A cross-platform graphics/UI engine framework for simple games, visualizations, and graphics demos.
Documentation
use pix_engine::prelude::*;

const COLS: u32 = 12;
const ROWS: u32 = 12;
const SIZE: u32 = 60;
const WIDTH: u32 = COLS * SIZE;
const HEIGHT: u32 = ROWS * SIZE;
const COLORS: [(Color, &str); 142] = [
    (Color::ALICE_BLUE, "ALICE_BLUE"),
    (Color::ANTIQUE_WHITE, "ANTIQUE_WHITE"),
    (Color::AQUA, "AQUA"),
    (Color::AQUA_MARINE, "AQUA_MARINE"),
    (Color::AZURE, "AZURE"),
    (Color::BEIGE, "BEIGE"),
    (Color::BISQUE, "BISQUE"),
    (Color::BLACK, "BLACK"),
    (Color::BLANCHE_DALMOND, "BLANCHE_DALMOND"),
    (Color::BLUE, "BLUE"),
    (Color::BLUE_VIOLET, "BLUE_VIOLET"),
    (Color::BROWN, "BROWN"),
    (Color::BURLY_WOOD, "BURLY_WOOD"),
    (Color::CADET_BLUE, "CADET_BLUE"),
    (Color::CHARTREUSE, "CHARTREUSE"),
    (Color::CHOCOLATE, "CHOCOLATE"),
    (Color::CORAL, "CORAL"),
    (Color::CORNFLOWER_BLUE, "CORNFLOWER_BLUE"),
    (Color::CORN_SILK, "CORN_SILK"),
    (Color::CRIMSON, "CRIMSON"),
    (Color::CYAN, "CYAN"),
    (Color::DARK_BLUE, "DARK_BLUE"),
    (Color::DARK_CYAN, "DARK_CYAN"),
    (Color::DARK_GOLDENROD, "DARK_GOLDENROD"),
    (Color::DARK_GRAY, "DARK_GRAY"),
    (Color::DARK_GREEN, "DARK_GREEN"),
    (Color::DARK_KHAKI, "DARK_KHAKI"),
    (Color::DARK_MAGENTA, "DARK_MAGENTA"),
    (Color::DARK_OLIVE_GREEN, "DARK_OLIVE_GREEN"),
    (Color::DARK_ORANGE, "DARK_ORANGE"),
    (Color::DARK_ORCHID, "DARK_ORCHID"),
    (Color::DARK_RED, "DARK_RED"),
    (Color::DARK_SALMON, "DARK_SALMON"),
    (Color::DARK_SEA_GREEN, "DARK_SEA_GREEN"),
    (Color::DARK_SLATE_BLUE, "DARK_SLATE_BLUE"),
    (Color::DARK_SLATE_GRAY, "DARK_SLATE_GRAY"),
    (Color::DARK_TURQUOISE, "DARK_TURQUOISE"),
    (Color::DARK_VIOLET, "DARK_VIOLET"),
    (Color::DEEP_PINK, "DEEP_PINK"),
    (Color::DEEP_SKY_BLUE, "DEEP_SKY_BLUE"),
    (Color::DIM_GRAY, "DIM_GRAY"),
    (Color::DODGER_BLUE, "DODGER_BLUE"),
    (Color::FIRE_BRICK, "FIRE_BRICK"),
    (Color::FLORAL_WHITE, "FLORAL_WHITE"),
    (Color::FOREST_GREEN, "FOREST_GREEN"),
    (Color::FUCHSIA, "FUCHSIA"),
    (Color::GAINSBORO, "GAINSBORO"),
    (Color::GHOST_WHITE, "GHOST_WHITE"),
    (Color::GOLD, "GOLD"),
    (Color::GOLDENROD, "GOLDENROD"),
    (Color::GRAY, "GRAY"),
    (Color::GREEN, "GREEN"),
    (Color::GREEN_YELLOW, "GREEN_YELLOW"),
    (Color::HONEYDEW, "HONEYDEW"),
    (Color::HOTOINK, "HOTOINK"),
    (Color::INDIAN_RED, "INDIAN_RED"),
    (Color::INDIGO, "INDIGO"),
    (Color::IVORY, "IVORY"),
    (Color::KHAKI, "KHAKI"),
    (Color::LAVENDER, "LAVENDER"),
    (Color::LAVENDER_BLUSH, "LAVENDER_BLUSH"),
    (Color::LAWN_GREEN, "LAWN_GREEN"),
    (Color::LEMON_CHIFFON, "LEMON_CHIFFON"),
    (Color::LIGHT_BLUE, "LIGHT_BLUE"),
    (Color::LIGHT_CORAL, "LIGHT_CORAL"),
    (Color::LIGHT_CYAN, "LIGHT_CYAN"),
    (Color::LIGHT_GOLDENROD_YELLOW, "LIGHT_GOLDENROD_YELLOW"),
    (Color::LIGHT_GRAY, "LIGHT_GRAY"),
    (Color::LIGHT_GREEN, "LIGHT_GREEN"),
    (Color::LIGHT_PINK, "LIGHT_PINK"),
    (Color::LIGHT_SALMON, "LIGHT_SALMON"),
    (Color::LIGHT_SEA_GREEN, "LIGHT_SEA_GREEN"),
    (Color::LIGHT_SKY_BLUE, "LIGHT_SKY_BLUE"),
    (Color::LIGHT_SLATE_GRAY, "LIGHT_SLATE_GRAY"),
    (Color::LIGHT_STEEL_BLUE, "LIGHT_STEEL_BLUE"),
    (Color::LIGHT_YELLOW, "LIGHT_YELLOW"),
    (Color::LIME, "LIME"),
    (Color::LIME_GREEN, "LIME_GREEN"),
    (Color::LINEN, "LINEN"),
    (Color::MAGENTA, "MAGENTA"),
    (Color::MAROON, "MAROON"),
    (Color::MEDIUMAQUA_MARINE, "MEDIUMAQUA_MARINE"),
    (Color::MEDIUM_BLUE, "MEDIUM_BLUE"),
    (Color::MEDIUM_ORCHID, "MEDIUM_ORCHID"),
    (Color::MEDIUM_PURPLE, "MEDIUM_PURPLE"),
    (Color::MEDIUM_SEA_GREEN, "MEDIUM_SEA_GREEN"),
    (Color::MEDIUM_SLATE_BLUE, "MEDIUM_SLATE_BLUE"),
    (Color::MEDIUM_SPRING_GREEN, "MEDIUM_SPRING_GREEN"),
    (Color::MEDIUM_TURQUOISE, "MEDIUM_TURQUOISE"),
    (Color::MEDIUM_VIOLET_RED, "MEDIUM_VIOLET_RED"),
    (Color::MIDNIGHT_BLUE, "MIDNIGHT_BLUE"),
    (Color::MINT_CREAM, "MINT_CREAM"),
    (Color::MISTY_ROSE, "MISTY_ROSE"),
    (Color::MOCCASIN, "MOCCASIN"),
    (Color::NAVAJO_WHITE, "NAVAJO_WHITE"),
    (Color::NAVY, "NAVY"),
    (Color::OLD_LACE, "OLD_LACE"),
    (Color::OLIVE, "OLIVE"),
    (Color::OLIVE_DRAB, "OLIVE_DRAB"),
    (Color::ORANGE, "ORANGE"),
    (Color::ORANGE_RED, "ORANGE_RED"),
    (Color::ORCHID, "ORCHID"),
    (Color::PALE_GOLDENROD, "PALE_GOLDENROD"),
    (Color::PALE_GREEN, "PALE_GREEN"),
    (Color::PALE_TURQUOISE, "PALE_TURQUOISE"),
    (Color::PALE_VIOLET_RED, "PALE_VIOLET_RED"),
    (Color::PAPAYA_WHIP, "PAPAYA_WHIP"),
    (Color::PEACH_PUFF, "PEACH_PUFF"),
    (Color::PERU, "PERU"),
    (Color::PINK, "PINK"),
    (Color::PLUM, "PLUM"),
    (Color::POWDER_BLUE, "POWDER_BLUE"),
    (Color::PURPLE, "PURPLE"),
    (Color::REBECCA_PURPLE, "REBECCA_PURPLE"),
    (Color::RED, "RED"),
    (Color::ROSY_BROWN, "ROSY_BROWN"),
    (Color::ROYAL_BLUE, "ROYAL_BLUE"),
    (Color::SADDLE_BROWN, "SADDLE_BROWN"),
    (Color::SALMON, "SALMON"),
    (Color::SANDY_BROWN, "SANDY_BROWN"),
    (Color::SEA_GREEN, "SEA_GREEN"),
    (Color::SEA_SHELL, "SEA_SHELL"),
    (Color::SIENNA, "SIENNA"),
    (Color::SILVER, "SILVER"),
    (Color::SKY_BLUE, "SKY_BLUE"),
    (Color::SLATE_BLUE, "SLATE_BLUE"),
    (Color::SLATE_GRAY, "SLATE_GRAY"),
    (Color::SNOW, "SNOW"),
    (Color::SPRING_GREEN, "SPRING_GREEN"),
    (Color::STEEL_BLUE, "STEEL_BLUE"),
    (Color::TAN, "TAN"),
    (Color::TEAL, "TEAL"),
    (Color::THISTLE, "THISTLE"),
    (Color::TOMATO, "TOMATO"),
    (Color::TRANSPARENT, "TRANSPARENT"),
    (Color::TURQUOISE, "TURQUOISE"),
    (Color::VIOLET, "VIOLET"),
    (Color::WHEAT, "WHEAT"),
    (Color::WHITE, "WHITE"),
    (Color::WHITE_SMOKE, "WHITE_SMOKE"),
    (Color::YELLOW, "YELLOW"),
    (Color::YELLOW_GREEN, "YELLOW_GREEN"),
];

struct ColorConsts {
    cells: Vec<Rect<i32>>,
}

impl ColorConsts {
    pub fn new() -> Self {
        let mut cells = Vec::with_capacity(COLORS.len());
        for i in 0..COLORS.len() {
            let cols = COLS as i32;
            let size = SIZE as i32;
            let col = i as i32 % cols;
            let row = i as i32 / cols;
            let x = col * size;
            let y = row * size;
            cells.push(square![x, y, size]);
        }
        Self { cells }
    }
}

impl PixEngine for ColorConsts {
    fn on_update(&mut self, s: &mut PixState) -> PixResult<()> {
        s.clear()?;
        s.stroke(None);
        for (i, &color) in COLORS.iter().enumerate() {
            s.fill(color.0);
            s.square(self.cells[i])?;
        }
        for (i, &color) in COLORS.iter().enumerate() {
            let pos = s.mouse_pos();
            if self.cells[i].contains(pos) {
                s.tooltip(color.1)?;
            }
        }
        Ok(())
    }
}

fn main() -> PixResult<()> {
    let mut engine = Engine::builder()
        .dimensions(WIDTH, HEIGHT)
        .title("SVG Color Constants")
        .build()?;
    let mut app = ColorConsts::new();
    engine.run(&mut app)
}