
📝 Rust Code
use nannou::prelude::*;
use nannou::rand::prelude::*;
fn main() {
nannou::app(model).update(update).event(event).run();
}
struct Model {
win_sub: WindowId,
current_color: Rgb8,
current_color_name: String,
}
const COLORS: &[(Rgb8, &str)] = &[
(ALICEBLUE, "ALICEBLUE"),
(ANTIQUEWHITE, "ANTIQUEWHITE"),
(AQUA, "AQUA"),
(AQUAMARINE, "AQUAMARINE"),
(AZURE, "AZURE"),
(BEIGE, "BEIGE"),
(BISQUE, "BISQUE"),
(BLACK, "BLACK"),
(BLANCHEDALMOND, "BLANCHEDALMOND"),
(BLUE, "BLUE"),
(BLUEVIOLET, "BLUEVIOLET"),
(BROWN, "BROWN"),
(BURLYWOOD, "BURLYWOOD"),
(CADETBLUE, "CADETBLUE"),
(CHARTREUSE, "CHARTREUSE"),
(CHOCOLATE, "CHOCOLATE"),
(CORAL, "CORAL"),
(CORNFLOWERBLUE, "CORNFLOWERBLUE"),
(CORNSILK, "CORNSILK"),
(CRIMSON, "CRIMSON"),
(CYAN, "CYAN"),
(DARKBLUE, "DARKBLUE"),
(DARKCYAN, "DARKCYAN"),
(DARKGOLDENROD, "DARKGOLDENROD"),
(DARKGRAY, "DARKGRAY"),
(DARKGREEN, "DARKGREEN"),
(DARKGREY, "DARKGREY"),
(DARKKHAKI, "DARKKHAKI"),
(DARKMAGENTA, "DARKMAGENTA"),
(DARKOLIVEGREEN, "DARKOLIVEGREEN"),
(DARKORANGE, "DARKORANGE"),
(DARKORCHID, "DARKORCHID"),
(DARKRED, "DARKRED"),
(DARKSALMON, "DARKSALMON"),
(DARKSEAGREEN, "DARKSEAGREEN"),
(DARKSLATEBLUE, "DARKSLATEBLUE"),
(DARKSLATEGRAY, "DARKSLATEGRAY"),
(DARKSLATEGREY, "DARKSLATEGREY"),
(DARKTURQUOISE, "DARKTURQUOISE"),
(DARKVIOLET, "DARKVIOLET"),
(DEEPPINK, "DEEPPINK"),
(DEEPSKYBLUE, "DEEPSKYBLUE"),
(DIMGRAY, "DIMGRAY"),
(DIMGREY, "DIMGREY"),
(DODGERBLUE, "DODGERBLUE"),
(FIREBRICK, "FIREBRICK"),
(FLORALWHITE, "FLORALWHITE"),
(FORESTGREEN, "FORESTGREEN"),
(FUCHSIA, "FUCHSIA"),
(GAINSBORO, "GAINSBORO"),
(GHOSTWHITE, "GHOSTWHITE"),
(GOLD, "GOLD"),
(GOLDENROD, "GOLDENROD"),
(GRAY, "GRAY"),
(GREEN, "GREEN"),
(GREENYELLOW, "GREENYELLOW"),
(GREY, "GREY"),
(HONEYDEW, "HONEYDEW"),
(HOTPINK, "HOTPINK"),
(INDIANRED, "INDIANRED"),
(INDIGO, "INDIGO"),
(IVORY, "IVORY"),
(KHAKI, "KHAKI"),
(LAVENDER, "LAVENDER"),
(LAVENDERBLUSH, "LAVENDERBLUSH"),
(LAWNGREEN, "LAWNGREEN"),
(LEMONCHIFFON, "LEMONCHIFFON"),
(LIGHTBLUE, "LIGHTBLUE"),
(LIGHTCORAL, "LIGHTCORAL"),
(LIGHTCYAN, "LIGHTCYAN"),
(LIGHTGOLDENRODYELLOW, "LIGHTGOLDENRODYELLOW"),
(LIGHTGRAY, "LIGHTGRAY"),
(LIGHTGREEN, "LIGHTGREEN"),
(LIGHTGREY, "LIGHTGREY"),
(LIGHTPINK, "LIGHTPINK"),
(LIGHTSALMON, "LIGHTSALMON"),
(LIGHTSEAGREEN, "LIGHTSEAGREEN"),
(LIGHTSKYBLUE, "LIGHTSKYBLUE"),
(LIGHTSLATEGRAY, "LIGHTSLATEGRAY"),
(LIGHTSLATEGREY, "LIGHTSLATEGREY"),
(LIGHTSTEELBLUE, "LIGHTSTEELBLUE"),
(LIGHTYELLOW, "LIGHTYELLOW"),
(LIME, "LIME"),
(LIMEGREEN, "LIMEGREEN"),
(LINEN, "LINEN"),
(MAGENTA, "MAGENTA"),
(MAROON, "MAROON"),
(MEDIUMAQUAMARINE, "MEDIUMAQUAMARINE"),
(MEDIUMBLUE, "MEDIUMBLUE"),
(MEDIUMORCHID, "MEDIUMORCHID"),
(MEDIUMPURPLE, "MEDIUMPURPLE"),
(MEDIUMSEAGREEN, "MEDIUMSEAGREEN"),
(MEDIUMSLATEBLUE, "MEDIUMSLATEBLUE"),
(MEDIUMSPRINGGREEN, "MEDIUMSPRINGGREEN"),
(MEDIUMTURQUOISE, "MEDIUMTURQUOISE"),
(MEDIUMVIOLETRED, "MEDIUMVIOLETRED"),
(MIDNIGHTBLUE, "MIDNIGHTBLUE"),
(MINTCREAM, "MINTCREAM"),
(MISTYROSE, "MISTYROSE"),
(MOCCASIN, "MOCCASIN"),
(NAVAJOWHITE, "NAVAJOWHITE"),
(NAVY, "NAVY"),
(OLDLACE, "OLDLACE"),
(OLIVE, "OLIVE"),
(OLIVEDRAB, "OLIVEDRAB"),
(ORANGE, "ORANGE"),
(ORANGERED, "ORANGERED"),
(ORCHID, "ORCHID"),
(PALEGOLDENROD, "PALEGOLDENROD"),
(PALEGREEN, "PALEGREEN"),
(PALETURQUOISE, "PALETURQUOISE"),
(PALEVIOLETRED, "PALEVIOLETRED"),
(PAPAYAWHIP, "PAPAYAWHIP"),
(PEACHPUFF, "PEACHPUFF"),
(PERU, "PERU"),
(PINK, "PINK"),
(PLUM, "PLUM"),
(POWDERBLUE, "POWDERBLUE"),
(PURPLE, "PURPLE"),
(REBECCAPURPLE, "REBECCAPURPLE"),
(RED, "RED"),
(ROSYBROWN, "ROSYBROWN"),
(ROYALBLUE, "ROYALBLUE"),
(SADDLEBROWN, "SADDLEBROWN"),
(SALMON, "SALMON"),
(SANDYBROWN, "SANDYBROWN"),
(SEAGREEN, "SEAGREEN"),
(SEASHELL, "SEASHELL"),
(SIENNA, "SIENNA"),
(SILVER, "SILVER"),
(SKYBLUE, "SKYBLUE"),
(SLATEBLUE, "SLATEBLUE"),
(SLATEGRAY, "SLATEGRAY"),
(SLATEGREY, "SLATEGREY"),
(SNOW, "SNOW"),
(SPRINGGREEN, "SPRINGGREEN"),
(STEELBLUE, "STEELBLUE"),
(TAN, "TAN"),
(TEAL, "TEAL"),
(THISTLE, "THISTLE"),
(TOMATO, "TOMATO"),
(TURQUOISE, "TURQUOISE"),
(VIOLET, "VIOLET"),
(WHEAT, "WHEAT"),
(WHITE, "WHITE"),
(WHITESMOKE, "WHITESMOKE"),
(YELLOW, "YELLOW"),
(YELLOWGREEN, "YELLOWGREEN"),
];
fn model(app: &App) -> Model {
let _win_main = app
.new_window()
.size(600, 400)
.title("Main Window")
.view(view_main)
.build()
.unwrap();
let win_sub = app
.new_window()
.size(400, 400)
.title("Sub Window")
.view(view_sub)
.build()
.unwrap();
Model {
win_sub,
current_color: WHITE,
current_color_name: "WHITE".to_string(),
}
}
fn update(_app: &App, _model: &mut Model, _update: Update) {}
fn event(_app: &App, model: &mut Model, event: Event) {
match event {
Event::WindowEvent { id, simple: Some(MousePressed(_button)), .. } => {
if id == model.win_sub {
let mut rng = thread_rng();
let (color, color_name) = COLORS.choose(&mut rng).unwrap();
model.current_color = *color;
model.current_color_name = color_name.to_string();
}
}
_ => {}
}
}
fn view_main(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(model.current_color);
draw.text(&model.current_color_name).color(BLACK).font_size(24).x_y(0.0, 0.0);
draw.to_frame(app, &frame).unwrap();
}
fn view_sub(app: &App, _model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(GRAY);
draw.text("CLICK TO CHANGE THE COLOR").color(BLACK).font_size(18).x_y(0.0, 0.0);
draw.to_frame(app, &frame).unwrap();
}