mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-11-27 15:03:20 +03:00
theme dropdowns and menus
This commit is contained in:
parent
c6d361c4b0
commit
ac30774b06
@ -195,7 +195,7 @@ impl State<App> for EditMode {
|
|||||||
Choice::string("create a blank proposal"),
|
Choice::string("create a blank proposal"),
|
||||||
Choice::string("save this proposal as..."),
|
Choice::string("save this proposal as..."),
|
||||||
Choice::string("delete this proposal and remove all edits")
|
Choice::string("delete this proposal and remove all edits")
|
||||||
.fg(Color::hex("#EB3223")),
|
.fg(ctx.style().text_destructive_color),
|
||||||
],
|
],
|
||||||
Box::new(move |choice, ctx, app| match choice.as_ref() {
|
Box::new(move |choice, ctx, app| match choice.as_ref() {
|
||||||
"rename current proposal" => {
|
"rename current proposal" => {
|
||||||
|
@ -391,13 +391,16 @@ impl ColorScheme {
|
|||||||
let mut cs = ColorScheme::day_mode();
|
let mut cs = ColorScheme::day_mode();
|
||||||
|
|
||||||
use widgetry::ButtonStyle;
|
use widgetry::ButtonStyle;
|
||||||
|
cs.gui_style.panel_bg = hex("#003046").alpha(0.9);
|
||||||
cs.gui_style.btn_outline = ButtonStyle::btn_outline();
|
cs.gui_style.btn_outline = ButtonStyle::btn_outline();
|
||||||
cs.gui_style.btn_solid = ButtonStyle::btn_solid();
|
cs.gui_style.btn_solid = ButtonStyle::btn_solid();
|
||||||
cs.gui_style.btn_solid_floating = ButtonStyle::btn_solid_floating();
|
cs.gui_style.btn_solid_floating = ButtonStyle::btn_solid_floating();
|
||||||
cs.gui_style.text_fg_color = Color::WHITE;
|
cs.gui_style.text_fg_color = Color::WHITE;
|
||||||
cs.gui_style.text_hotkey_color = Color::GREEN;
|
cs.gui_style.text_hotkey_color = Color::GREEN;
|
||||||
|
cs.gui_style.text_destructive_color = hex("#FF5E5E");
|
||||||
|
|
||||||
cs.inner_panel_bg = cs.gui_style.panel_bg.alpha(1.0);
|
cs.gui_style.dropdown_border = Color::WHITE;
|
||||||
|
cs.gui_style.dropdown_bg = cs.gui_style.panel_bg;
|
||||||
|
|
||||||
cs.void_background = hex("#200A24");
|
cs.void_background = hex("#200A24");
|
||||||
cs.map_background = Color::BLACK.into();
|
cs.map_background = Color::BLACK.into();
|
||||||
@ -423,8 +426,7 @@ impl ColorScheme {
|
|||||||
cs.pedestrian_plaza = hex("#94949C").into();
|
cs.pedestrian_plaza = hex("#94949C").into();
|
||||||
cs.study_area = hex("#D9B002").into();
|
cs.study_area = hex("#D9B002").into();
|
||||||
|
|
||||||
cs.panel_bg = hex("#003046").alpha(0.9);
|
cs.panel_bg = cs.gui_style.panel_bg;
|
||||||
cs.gui_style.panel_bg = cs.panel_bg;
|
|
||||||
cs.inner_panel_bg = cs.panel_bg.alpha(1.0);
|
cs.inner_panel_bg = cs.panel_bg.alpha(1.0);
|
||||||
cs.minimap_cursor_border = Color::WHITE;
|
cs.minimap_cursor_border = Color::WHITE;
|
||||||
cs.minimap_cursor_bg = Some(Color::rgba(238, 112, 46, 0.2));
|
cs.minimap_cursor_bg = Some(Color::rgba(238, 112, 46, 0.2));
|
||||||
|
@ -7,9 +7,12 @@ pub struct Style {
|
|||||||
pub outline_thickness: f64,
|
pub outline_thickness: f64,
|
||||||
pub outline_color: Color,
|
pub outline_color: Color,
|
||||||
pub panel_bg: Color,
|
pub panel_bg: Color,
|
||||||
|
pub dropdown_bg: Color,
|
||||||
|
pub dropdown_border: Color,
|
||||||
pub text_fg_color: Color,
|
pub text_fg_color: Color,
|
||||||
pub text_hotkey_color: Color,
|
|
||||||
pub text_tooltip_color: Color,
|
pub text_tooltip_color: Color,
|
||||||
|
pub text_hotkey_color: Color,
|
||||||
|
pub text_destructive_color: Color,
|
||||||
pub loading_tips: Text,
|
pub loading_tips: Text,
|
||||||
pub btn_solid: ButtonStyle,
|
pub btn_solid: ButtonStyle,
|
||||||
pub btn_outline: ButtonStyle,
|
pub btn_outline: ButtonStyle,
|
||||||
@ -83,7 +86,16 @@ impl Style {
|
|||||||
} else {
|
} else {
|
||||||
Color::WHITE.alpha(0.8)
|
Color::WHITE.alpha(0.8)
|
||||||
},
|
},
|
||||||
|
dropdown_bg: if use_legacy_day_theme {
|
||||||
|
Color::grey(0.3)
|
||||||
|
} else {
|
||||||
|
hex("#F2F2F2")
|
||||||
|
},
|
||||||
|
dropdown_border: if use_legacy_day_theme {
|
||||||
|
Color::WHITE
|
||||||
|
} else {
|
||||||
|
hex("#4C4C4C")
|
||||||
|
},
|
||||||
outline_thickness: 2.0,
|
outline_thickness: 2.0,
|
||||||
outline_color: Color::WHITE,
|
outline_color: Color::WHITE,
|
||||||
loading_tips: Text::new(),
|
loading_tips: Text::new(),
|
||||||
@ -100,6 +112,11 @@ impl Style {
|
|||||||
hex("#EE702E")
|
hex("#EE702E")
|
||||||
},
|
},
|
||||||
text_tooltip_color: Color::WHITE,
|
text_tooltip_color: Color::WHITE,
|
||||||
|
text_destructive_color: if use_legacy_day_theme {
|
||||||
|
hex("#EB3223")
|
||||||
|
} else {
|
||||||
|
hex("#FF5E5E")
|
||||||
|
},
|
||||||
|
|
||||||
// Buttons
|
// Buttons
|
||||||
btn_outline: if use_legacy_day_theme {
|
btn_outline: if use_legacy_day_theme {
|
||||||
|
@ -15,7 +15,6 @@ pub const DEFAULT_FONT_SIZE: usize = 21;
|
|||||||
|
|
||||||
pub const BG_COLOR: Color = Color::grey(0.3);
|
pub const BG_COLOR: Color = Color::grey(0.3);
|
||||||
pub const SELECTED_COLOR: Color = Color::grey(0.5);
|
pub const SELECTED_COLOR: Color = Color::grey(0.5);
|
||||||
pub const INACTIVE_CHOICE_COLOR: Color = Color::grey(0.8);
|
|
||||||
pub const SCALE_LINE_HEIGHT: f64 = 1.2;
|
pub const SCALE_LINE_HEIGHT: f64 = 1.2;
|
||||||
|
|
||||||
// TODO Almost gone!
|
// TODO Almost gone!
|
||||||
|
@ -136,10 +136,10 @@ impl<T: 'static + Clone> WidgetImpl for Dropdown<T> {
|
|||||||
let height = m.get_dims().height + 2.0 * pad;
|
let height = m.get_dims().height + 2.0 * pad;
|
||||||
let rect = Polygon::rounded_rectangle(width, height, 5.0);
|
let rect = Polygon::rounded_rectangle(width, height, 5.0);
|
||||||
let draw_bg = g.upload(GeomBatch::from(vec![
|
let draw_bg = g.upload(GeomBatch::from(vec![
|
||||||
(Color::grey(0.3), rect.clone()),
|
(g.style().dropdown_bg, rect.clone()),
|
||||||
(
|
(
|
||||||
Color::WHITE,
|
g.style().dropdown_border,
|
||||||
rect.to_outline(Distance::meters(3.0)).unwrap(),
|
rect.to_outline(Distance::meters(1.0)).unwrap(),
|
||||||
),
|
),
|
||||||
]));
|
]));
|
||||||
g.fork(
|
g.fork(
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use geom::Pt2D;
|
use geom::Pt2D;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
text, Choice, EventCtx, GfxCtx, Key, Line, Outcome, ScreenDims, ScreenPt, ScreenRectangle,
|
Choice, EventCtx, GfxCtx, Key, Line, Outcome, ScreenDims, ScreenPt, ScreenRectangle, Style,
|
||||||
Style, Text, Widget, WidgetImpl, WidgetOutput,
|
Text, Widget, WidgetImpl, WidgetOutput,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Menu<T> {
|
pub struct Menu<T> {
|
||||||
@ -39,33 +39,39 @@ impl<T: 'static> Menu<T> {
|
|||||||
let mut txt = Text::new();
|
let mut txt = Text::new();
|
||||||
|
|
||||||
for (idx, choice) in self.choices.iter().enumerate() {
|
for (idx, choice) in self.choices.iter().enumerate() {
|
||||||
|
let is_hovered = idx == self.current_idx;
|
||||||
|
let mut text_color = if is_hovered {
|
||||||
|
choice.fg.unwrap_or(style.btn_solid.fg)
|
||||||
|
} else {
|
||||||
|
choice.fg.unwrap_or(style.text_fg_color)
|
||||||
|
};
|
||||||
|
|
||||||
if choice.active {
|
if choice.active {
|
||||||
if let Some(ref key) = choice.hotkey {
|
if let Some(ref key) = choice.hotkey {
|
||||||
txt.add_appended(vec![
|
txt.add_appended(vec![
|
||||||
Line(key.describe()).fg(style.text_hotkey_color),
|
Line(key.describe()).fg(style.text_hotkey_color),
|
||||||
Line(format!(" - {}", choice.label)).maybe_fg(choice.fg),
|
Line(format!(" - {}", choice.label)).fg(text_color),
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
txt.add(Line(&choice.label).maybe_fg(choice.fg));
|
txt.add(Line(&choice.label).fg(text_color))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
text_color = text_color.alpha(0.8);
|
||||||
if let Some(ref key) = choice.hotkey {
|
if let Some(ref key) = choice.hotkey {
|
||||||
txt.add(
|
txt.add(Line(format!("{} - {}", key.describe(), choice.label)).fg(text_color));
|
||||||
Line(format!("{} - {}", key.describe(), choice.label))
|
|
||||||
.fg(text::INACTIVE_CHOICE_COLOR),
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
txt.add(Line(&choice.label).fg(text::INACTIVE_CHOICE_COLOR));
|
txt.add(Line(&choice.label).fg(text_color));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if choice.tooltip.is_some() {
|
if choice.tooltip.is_some() {
|
||||||
// TODO Ideally unicode info symbol, but the fonts don't seem to have it
|
// TODO Ideally unicode info symbol, but the fonts don't seem to have it
|
||||||
txt.append(Line(" (!)"));
|
txt.append(Line(" (!)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO BG color should be on the TextSpan, so this isn't so terrible?
|
// TODO BG color should be on the TextSpan, so this isn't so terrible?
|
||||||
if idx == self.current_idx {
|
if is_hovered {
|
||||||
txt.highlight_last_line(text::SELECTED_COLOR);
|
txt.highlight_last_line(style.btn_solid.bg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
txt
|
txt
|
||||||
|
Loading…
Reference in New Issue
Block a user