When the lasso tool is active, change the panel to explain the interaction

This commit is contained in:
Dustin Carlino 2022-02-24 09:21:04 +00:00
parent bf6c5a75e9
commit 82dff217a5
3 changed files with 22 additions and 10 deletions

View File

@ -271,12 +271,9 @@ impl RoadSelector {
Mode::Erase => Some("system/assets/tools/eraser.svg"), Mode::Erase => Some("system/assets/tools/eraser.svg"),
Mode::Route { .. } => Some("system/assets/tools/pin.svg"), Mode::Route { .. } => Some("system/assets/tools/pin.svg"),
} { } {
let mut batch = GeomBatch::new(); let batch = GeomBatch::load_svg(g, cursor)
batch.append( .centered_on(g.canvas.get_cursor().to_pt())
GeomBatch::load_svg(g, cursor) .color(RewriteColor::ChangeAll(Color::GREEN));
.centered_on(g.canvas.get_cursor().to_pt())
.color(RewriteColor::ChangeAll(Color::GREEN)),
);
g.fork_screenspace(); g.fork_screenspace();
batch.draw(g); batch.draw(g);
g.unfork(); g.unfork();

View File

@ -246,7 +246,6 @@ impl SelectBoundary {
self.add_block(ctx, app, id); self.add_block(ctx, app, id);
} }
self.redraw_outline(ctx, app.session.partitioning.neighborhood_block(self.id)); self.redraw_outline(ctx, app.session.partitioning.neighborhood_block(self.id));
self.panel = make_panel(ctx, app);
} }
} }
@ -256,6 +255,7 @@ impl State<App> for SelectBoundary {
if let Some(polygon) = lasso.event(ctx) { if let Some(polygon) = lasso.event(ctx) {
self.lasso = None; self.lasso = None;
self.add_blocks_freehand(ctx, app, polygon); self.add_blocks_freehand(ctx, app, polygon);
self.panel = make_panel(ctx, app);
} }
return Transition::Keep; return Transition::Keep;
} }
@ -277,9 +277,8 @@ impl State<App> for SelectBoundary {
)); ));
} }
"Select freehand" => { "Select freehand" => {
// TODO Focus on the button in the panel, make it clear everything else is
// inactive
self.lasso = Some(Lasso::new()); self.lasso = Some(Lasso::new());
self.panel = make_panel_for_lasso(ctx, app);
} }
x => { x => {
return crate::handle_app_header_click(ctx, app, x).unwrap(); return crate::handle_app_header_click(ctx, app, x).unwrap();
@ -369,3 +368,19 @@ fn make_panel(ctx: &mut EventCtx, app: &App) -> Panel {
.aligned(HorizontalAlignment::Left, VerticalAlignment::Top) .aligned(HorizontalAlignment::Left, VerticalAlignment::Top)
.build(ctx) .build(ctx)
} }
fn make_panel_for_lasso(ctx: &mut EventCtx, app: &App) -> Panel {
Panel::new_builder(Widget::col(vec![
crate::app_header(ctx, app),
"Draw a custom boundary for a neighborhood"
.text_widget(ctx)
.centered_vert(),
Text::from_all(vec![
Line("Click and drag").fg(ctx.style().text_hotkey_color),
Line(" to select the blocks to add to this neighborhood"),
])
.into_widget(ctx),
]))
.aligned(HorizontalAlignment::Left, VerticalAlignment::Top)
.build(ctx)
}

View File

@ -10,7 +10,7 @@ use geom::{Polygon, Pt2D, Ring};
use crate::{CommonEndpoint, Direction, LaneID, Map, RoadID, RoadSideID, SideOfRoad}; use crate::{CommonEndpoint, Direction, LaneID, Map, RoadID, RoadSideID, SideOfRoad};
// See https://github.com/a-b-street/abstreet/issues/841. Slow but correct when enabled. // See https://github.com/a-b-street/abstreet/issues/841. Slow but correct when enabled.
const LOSSLESS_BLOCKFINDING: bool = false; // TODO do not push const LOSSLESS_BLOCKFINDING: bool = true;
/// A block is defined by a perimeter that traces along the sides of roads. Inside the perimeter, /// A block is defined by a perimeter that traces along the sides of roads. Inside the perimeter,
/// the block may contain buildings and interior roads. In the simple case, a block represents a /// the block may contain buildings and interior roads. In the simple case, a block represents a