Skip to main content

gradient/
gradient.rs

1// Copyright 2024 the Color Authors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4//! Gradient example
5//!
6//! Outputs a test page to stdout.
7//!
8//! Typical usage:
9//!
10//! ```sh
11//! cargo run --example gradient 'oklab(0.5 0.2 0)' 'rgb(0, 200, 0, 0.8)' oklab
12//! ```
13
14use color::{gradient, ColorSpaceTag, DynamicColor, GradientIter, HueDirection, Srgb};
15
16fn main() {
17    let mut args = std::env::args().skip(1);
18    let c1_s = args.next().expect("give color as arg");
19    let c1 = color::parse_color(&c1_s).expect("error parsing color 1");
20    let c2_s = args.next().expect("give 2 colors as arg");
21    let c2 = color::parse_color(&c2_s).expect("error parsing color 2");
22    let cs_s_raw = args.next();
23    let cs_s = cs_s_raw.as_deref().unwrap_or("srgb");
24    let cs: ColorSpaceTag = cs_s.parse().expect("error parsing color space");
25    let gradient: GradientIter<Srgb> = gradient(c1, c2, cs, HueDirection::default(), 0.02);
26    println!("<!DOCTYPE html>");
27    println!("<html>");
28    println!("<head>");
29    println!("<style>");
30    println!("div.g {{ height: 100px }}");
31    println!("#basic {{ background: linear-gradient(to right in {cs_s}, {c1_s}, {c2_s}) }}");
32    print!("#ours {{ background: linear-gradient(to right");
33    for (t, stop) in gradient {
34        print!(
35            ", {} {}%",
36            DynamicColor::from_alpha_color(stop.un_premultiply()),
37            t * 100.0
38        );
39    }
40    println!(") }}");
41    println!("</style>");
42    println!("</head>");
43    println!("<body>");
44    println!("<div>{c1_s} {c2_s} {cs_s}</div>");
45    println!("<div class='g' id='basic'></div>");
46    println!("<div class='g' id='ours'></div>");
47    println!("</body>");
48    println!("</html>");
49}