mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-11-24 09:24:26 +03:00
use const functions to construct constant colors in many cases, now that rust 2018 is here
This commit is contained in:
parent
0f62da0f63
commit
9d32ef8b83
@ -148,7 +148,7 @@ impl Region {
|
||||
|
||||
const COLORS: [Color; 3] = [
|
||||
// TODO these are awful choices
|
||||
Color([1.0, 0.0, 0.0, 0.8]),
|
||||
Color([0.0, 1.0, 0.0, 0.8]),
|
||||
Color([0.0, 0.0, 1.0, 0.8]),
|
||||
Color::RED.alpha(0.8),
|
||||
Color::GREEN.alpha(0.8),
|
||||
Color::BLUE.alpha(0.8),
|
||||
];
|
||||
|
@ -8,21 +8,20 @@ use map_model::{Parcel, ParcelID};
|
||||
|
||||
const COLORS: [Color; 14] = [
|
||||
// TODO these are awful choices
|
||||
// TODO can we express these with the nicer functions? probably need constexpr
|
||||
Color([1.0, 1.0, 0.0, 1.0]),
|
||||
Color([1.0, 0.0, 1.0, 1.0]),
|
||||
Color([0.0, 1.0, 1.0, 1.0]),
|
||||
Color([0.5, 0.2, 0.7, 1.0]),
|
||||
Color([0.5, 0.5, 0.0, 0.5]),
|
||||
Color([0.5, 0.0, 0.5, 0.5]),
|
||||
Color([0.0, 0.5, 0.5, 0.5]),
|
||||
Color([0.0, 0.0, 0.5, 0.5]),
|
||||
Color([0.3, 0.2, 0.5, 0.5]),
|
||||
Color([0.4, 0.2, 0.5, 0.5]),
|
||||
Color([0.5, 0.2, 0.5, 0.5]),
|
||||
Color([0.6, 0.2, 0.5, 0.5]),
|
||||
Color([0.7, 0.2, 0.5, 0.5]),
|
||||
Color([0.8, 0.2, 0.5, 0.5]),
|
||||
Color::rgba_f(1.0, 1.0, 0.0, 1.0),
|
||||
Color::rgba_f(1.0, 0.0, 1.0, 1.0),
|
||||
Color::rgba_f(0.0, 1.0, 1.0, 1.0),
|
||||
Color::rgba_f(0.5, 0.2, 0.7, 1.0),
|
||||
Color::rgba_f(0.5, 0.5, 0.0, 0.5),
|
||||
Color::rgba_f(0.5, 0.0, 0.5, 0.5),
|
||||
Color::rgba_f(0.0, 0.5, 0.5, 0.5),
|
||||
Color::rgba_f(0.0, 0.0, 0.5, 0.5),
|
||||
Color::rgba_f(0.3, 0.2, 0.5, 0.5),
|
||||
Color::rgba_f(0.4, 0.2, 0.5, 0.5),
|
||||
Color::rgba_f(0.5, 0.2, 0.5, 0.5),
|
||||
Color::rgba_f(0.6, 0.2, 0.5, 0.5),
|
||||
Color::rgba_f(0.7, 0.2, 0.5, 0.5),
|
||||
Color::rgba_f(0.8, 0.2, 0.5, 0.5),
|
||||
];
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -3,9 +3,8 @@ use serde_derive::{Deserialize, Serialize};
|
||||
use std::fmt;
|
||||
|
||||
// Copy could be reconsidered, but eh
|
||||
// TODO only pub so we can construct constants elsewhere. need const fn.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
|
||||
pub struct Color(pub [f32; 4]);
|
||||
pub struct Color(pub(crate) [f32; 4]);
|
||||
|
||||
impl fmt::Display for Color {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
@ -18,23 +17,25 @@ impl fmt::Display for Color {
|
||||
}
|
||||
|
||||
impl Color {
|
||||
pub const BLACK: Color = Color([0.0, 0.0, 0.0, 1.0]);
|
||||
pub const WHITE: Color = Color([1.0, 1.0, 1.0, 1.0]);
|
||||
pub const RED: Color = Color([1.0, 0.0, 0.0, 1.0]);
|
||||
pub const GREEN: Color = Color([0.0, 1.0, 0.0, 1.0]);
|
||||
pub const BLUE: Color = Color([0.0, 0.0, 1.0, 1.0]);
|
||||
pub const CYAN: Color = Color([0.0, 1.0, 1.0, 1.0]);
|
||||
pub const YELLOW: Color = Color([1.0, 1.0, 0.0, 1.0]);
|
||||
pub const PURPLE: Color = Color([0.5, 0.0, 0.5, 1.0]);
|
||||
pub const PINK: Color = Color([1.0, 0.41, 0.71, 1.0]);
|
||||
pub const BLACK: Color = Color::rgb_f(0.0, 0.0, 0.0);
|
||||
pub const WHITE: Color = Color::rgb_f(1.0, 1.0, 1.0);
|
||||
pub const RED: Color = Color::rgb_f(1.0, 0.0, 0.0);
|
||||
pub const GREEN: Color = Color::rgb_f(0.0, 1.0, 0.0);
|
||||
pub const BLUE: Color = Color::rgb_f(0.0, 0.0, 1.0);
|
||||
pub const CYAN: Color = Color::rgb_f(0.0, 1.0, 1.0);
|
||||
pub const YELLOW: Color = Color::rgb_f(1.0, 1.0, 0.0);
|
||||
pub const PURPLE: Color = Color::rgb_f(0.5, 0.0, 0.5);
|
||||
pub const PINK: Color = Color::rgb_f(1.0, 0.41, 0.71);
|
||||
|
||||
// TODO should assert stuff about the inputs
|
||||
|
||||
// TODO Once f32 can be used in const fn, make these const fn too and clean up call sites
|
||||
// dividing by 255.0
|
||||
pub fn rgb(r: usize, g: usize, b: usize) -> Color {
|
||||
Color::rgba(r, g, b, 1.0)
|
||||
}
|
||||
|
||||
pub fn rgb_f(r: f32, g: f32, b: f32) -> Color {
|
||||
pub const fn rgb_f(r: f32, g: f32, b: f32) -> Color {
|
||||
Color([r, g, b, 1.0])
|
||||
}
|
||||
|
||||
@ -47,7 +48,7 @@ impl Color {
|
||||
])
|
||||
}
|
||||
|
||||
pub fn rgba_f(r: f32, g: f32, b: f32, a: f32) -> Color {
|
||||
pub const fn rgba_f(r: f32, g: f32, b: f32, a: f32) -> Color {
|
||||
Color([r, g, b, a])
|
||||
}
|
||||
|
||||
@ -75,7 +76,7 @@ impl Color {
|
||||
Color([new_color.red, new_color.green, new_color.blue, 1.0])
|
||||
}
|
||||
|
||||
pub fn alpha(&self, a: f32) -> Color {
|
||||
pub const fn alpha(&self, a: f32) -> Color {
|
||||
Color([self.0[0], self.0[1], self.0[2], a])
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,13 @@ use geom::{Bounds, Line, Polygon, Pt2D};
|
||||
use map_model::{Building, BuildingID, Map, Road, RoadID, LANE_THICKNESS};
|
||||
|
||||
// black
|
||||
const BACKGROUND: Color = Color([0.0, 0.0, 0.0, 1.0]);
|
||||
const BACKGROUND: Color = Color::rgb_f(0.0, 0.0, 0.0);
|
||||
// light orange
|
||||
const ROAD: Color = Color([1.0, 154.0 / 255.0, 0.0, 1.0]);
|
||||
const ROAD: Color = Color::rgb_f(1.0, 154.0 / 255.0, 0.0);
|
||||
// purple
|
||||
const BUILDING: Color = Color([136.0 / 255.0, 30.0 / 255.0, 228.0 / 255.0, 1.0]);
|
||||
const BUILDING: Color = Color::rgb_f(136.0 / 255.0, 30.0 / 255.0, 228.0 / 255.0);
|
||||
// dark orange / red
|
||||
const PATH: Color = Color([247.0 / 255.0, 95.0 / 255.0, 28.0 / 255.0, 1.0]);
|
||||
const PATH: Color = Color::rgb_f(247.0 / 255.0, 95.0 / 255.0, 28.0 / 255.0);
|
||||
|
||||
const LINE_WIDTH: f64 = 1.0;
|
||||
|
||||
|
@ -1,13 +1,15 @@
|
||||
use ezgui::{Color, GfxCtx};
|
||||
use geom::{Circle, PolyLine};
|
||||
|
||||
pub const WHITE: Color = Color([1.0; 4]);
|
||||
pub const RED: Color = Color([1.0, 0.0, 0.0, 0.8]);
|
||||
pub const GREEN: Color = Color([0.0, 1.0, 0.0, 0.8]);
|
||||
pub const BLUE: Color = Color([0.0, 0.0, 1.0, 0.8]);
|
||||
pub const BLACK: Color = Color([0.0, 0.0, 0.0, 0.3]);
|
||||
pub const SOLID_BLACK: Color = Color([0.0, 0.0, 0.0, 0.9]);
|
||||
pub const YELLOW: Color = Color([1.0, 1.0, 0.0, 0.8]);
|
||||
// TODO Don't just use ezgui constants in this crate, since we want the slight transparency by
|
||||
// default.
|
||||
pub const WHITE: Color = Color::WHITE;
|
||||
pub const RED: Color = Color::RED.alpha(0.8);
|
||||
pub const GREEN: Color = Color::GREEN.alpha(0.8);
|
||||
pub const BLUE: Color = Color::BLUE.alpha(0.8);
|
||||
pub const BLACK: Color = Color::BLACK.alpha(0.3);
|
||||
pub const SOLID_BLACK: Color = Color::BLACK.alpha(0.9);
|
||||
pub const YELLOW: Color = Color::YELLOW.alpha(0.8);
|
||||
|
||||
pub fn draw_polyline(g: &mut GfxCtx, pl: &PolyLine, thickness: f64, color: Color) {
|
||||
for l in pl.lines() {
|
||||
|
@ -67,12 +67,12 @@ impl Iterator for RelatedColors {
|
||||
fn next(&mut self) -> Option<Color> {
|
||||
self.count -= 2;
|
||||
let multiplier = 0.1 * (self.count as f32);
|
||||
Some(Color([
|
||||
Some(Color::rgba_f(
|
||||
self.r * multiplier,
|
||||
self.g * multiplier,
|
||||
self.b * multiplier,
|
||||
0.8,
|
||||
]))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user