This commit is contained in:
dabreegster 2020-12-07 23:57:39 +00:00
parent eba7d4125b
commit 41c65f7c3e
33 changed files with 330 additions and 822 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,7 +2,7 @@
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../game/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><p class='location'>Module common</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#reexports">Re-exports</a></li><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li><li><a href="#functions">Functions</a></li></ul></div><p class='location'><a href='../index.html'>game</a></p><script>window.sidebarCurrent = {name: 'common', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../src/game/common/mod.rs.html#1-478' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../index.html'>game</a>::<wbr><a class="mod" href=''>common</a></span></h1><h2 id='reexports' class='section-header'><a href="#reexports">Re-exports</a></h2>
<table><tr><td><code>pub use self::minimap::<a class="struct" href="../../game/common/minimap/struct.Minimap.html" title="struct game::common::minimap::Minimap">Minimap</a>;</code></td></tr><tr><td><code>pub use self::warp::<a class="struct" href="../../game/common/warp/struct.Warping.html" title="struct game::common::warp::Warping">Warping</a>;</code></td></tr></table><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2>
<table><tr><td><code>pub use self::minimap::<a class="struct" href="../../game/common/minimap/struct.MinimapController.html" title="struct game::common::minimap::MinimapController">MinimapController</a>;</code></td></tr><tr><td><code>pub use self::warp::<a class="struct" href="../../game/common/warp/struct.Warping.html" title="struct game::common::warp::Warping">Warping</a>;</code></td></tr></table><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2>
<table><tr class='module-item'><td><a class="mod" href="minimap/index.html" title='game::common::minimap mod'>minimap</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="mod" href="warp/index.html" title='game::common::warp mod'>warp</a></td><td class='docblock-short'></td></tr></table><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.CommonState.html" title='game::common::CommonState struct'>CommonState</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="struct" href="struct.SimpleStateWrapper.html" title='game::common::SimpleStateWrapper struct'>SimpleStateWrapper</a></td><td class='docblock-short'></td></tr></table><h2 id='traits' class='section-header'><a href="#traits">Traits</a></h2>
<table><tr class='module-item'><td><a class="trait" href="trait.SimpleState.html" title='game::common::SimpleState trait'>SimpleState</a></td><td class='docblock-short'><p>Many game states fit a pattern of managing a single panel, handling mouseover events, and other

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `make_tool_panel` fn in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, make_tool_panel"><title>game::common::minimap::make_tool_panel - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script src="../../../storage.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc fn"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class='location'><a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a>::<wbr><a href='index.html'>minimap</a></p><script>window.sidebarCurrent = {name: 'make_tool_panel', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/common/minimap.rs.html#428-451' title='goto source code'>[src]</a></span><span class='in-band'>Function <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a>::<wbr><a href='index.html'>minimap</a>::<wbr><a class="fn" href=''>make_tool_panel</a></span></h1><pre class='rust fn'>fn make_tool_panel(ctx: &amp;mut EventCtx&lt;'_&gt;, app: &amp;<a class="struct" href="../../../game/app/struct.App.html" title="struct game::app::App">App</a>) -&gt; Widget</pre></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "game";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/common/minimap.rs.html#96-119' title='goto source code'>[src]</a></span><span class='in-band'>Function <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a>::<wbr><a href='index.html'>minimap</a>::<wbr><a class="fn" href=''>make_tool_panel</a></span></h1><pre class='rust fn'>fn make_tool_panel(ctx: &amp;mut EventCtx&lt;'_&gt;, app: &amp;<a class="struct" href="../../../game/app/struct.App.html" title="struct game::app::App">App</a>) -&gt; Widget</pre></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "game";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `minimap` mod in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, minimap"><title>game::common::minimap - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script src="../../../storage.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><p class='location'>Module minimap</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><p class='location'><a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a></p><script>window.sidebarCurrent = {name: 'minimap', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/common/minimap.rs.html#1-451' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a>::<wbr><a class="mod" href=''>minimap</a></span></h1><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.Minimap.html" title='game::common::minimap::Minimap struct'>Minimap</a></td><td class='docblock-short'></td></tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/common/minimap.rs.html#1-119' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>common</a>::<wbr><a class="mod" href=''>minimap</a></span></h1><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.MinimapController.html" title='game::common::minimap::MinimapController struct'>MinimapController</a></td><td class='docblock-short'></td></tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
<table><tr class='module-item'><td><a class="fn" href="fn.make_tool_panel.html" title='game::common::minimap::make_tool_panel fn'>make_tool_panel</a></td><td class='docblock-short'></td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "game";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>

View File

@ -1 +1 @@
initSidebarItems({"fn":[["make_tool_panel",""]],"struct":[["Minimap",""]]});
initSidebarItems({"fn":[["make_tool_panel",""]],"struct":[["MinimapController",""]]});

View File

@ -1,5 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `BUILT_TIME_UTC` constant in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, BUILT_TIME_UTC"><title>game::pregame::built_info::BUILT_TIME_UTC - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script src="../../../storage.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class='location'><a href='../../index.html'>game</a>::<wbr><a href='../index.html'>pregame</a>::<wbr><a href='index.html'>built_info</a></p><script>window.sidebarCurrent = {name: 'BUILT_TIME_UTC', ty: 'constant', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/home/runner/work/abstreet/abstreet/target/debug/build/game-f38555f90777146b/out/built.rs.html#49' title='goto source code'>[src]</a></span><span class='in-band'>Constant <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>pregame</a>::<wbr><a href='index.html'>built_info</a>::<wbr><a class="constant" href=''>BUILT_TIME_UTC</a></span></h1><pre class='rust const'>pub const BUILT_TIME_UTC: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a> = &quot;Mon, 07 Dec 2020 22:58:15 +0000&quot;;</pre><div class='docblock'><p>The built-time in RFC2822, UTC</p>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/game/home/runner/work/abstreet/abstreet/target/debug/build/game-f38555f90777146b/out/built.rs.html#49' title='goto source code'>[src]</a></span><span class='in-band'>Constant <a href='../../index.html'>game</a>::<wbr><a href='../index.html'>pregame</a>::<wbr><a href='index.html'>built_info</a>::<wbr><a class="constant" href=''>BUILT_TIME_UTC</a></span></h1><pre class='rust const'>pub const BUILT_TIME_UTC: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a> = &quot;Mon, 07 Dec 2020 23:55:34 +0000&quot;;</pre><div class='docblock'><p>The built-time in RFC2822, UTC</p>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "game";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,5 @@
(function() {var implementors = {};
implementors["experiment"] = [{"text":"impl MinimapControls&lt;SimpleApp&lt;Session&gt;&gt; for MinimapController","synthetic":false,"types":[]}];
implementors["game"] = [{"text":"impl MinimapControls&lt;App&gt; for MinimapController","synthetic":false,"types":[]}];
implementors["osm_viewer"] = [{"text":"impl MinimapControls&lt;SimpleApp&lt;()&gt;&gt; for MinimapController","synthetic":false,"types":[]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -11,6 +11,7 @@
</td></tr><tr class='module-item'><td><a class="struct" href="struct.PromptInput.html" title='map_gui::tools::PromptInput struct'>PromptInput</a></td><td class='docblock-short'><p>Prompt for arbitrary text input, then feed the answer to a callback.</p>
</td></tr><tr class='module-item'><td><a class="struct" href="struct.TurnExplorer.html" title='map_gui::tools::TurnExplorer struct'>TurnExplorer</a></td><td class='docblock-short'><p>A tool to explore all of the turns from a single lane.</p>
</td></tr></table><h2 id='traits' class='section-header'><a href="#traits">Traits</a></h2>
<table><tr class='module-item'><td><a class="trait" href="trait.MinimapControls.html" title='map_gui::tools::MinimapControls trait'>MinimapControls</a></td><td class='docblock-short'></td></tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
<table><tr class='module-item'><td><a class="trait" href="trait.MinimapControls.html" title='map_gui::tools::MinimapControls trait'>MinimapControls</a></td><td class='docblock-short'><p>Customize the appearance and behavior of a minimap.</p>
</td></tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
<table><tr class='module-item'><td><a class="fn" href="fn.amenity_type.html" title='map_gui::tools::amenity_type fn'>amenity_type</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="fn" href="fn.grey_out_map.html" title='map_gui::tools::grey_out_map fn'>grey_out_map</a></td><td class='docblock-short'><p>Make it clear the map can't be interacted with right now.</p>
</td></tr><tr class='module-item'><td><a class="fn" href="fn.loading_tips.html" title='map_gui::tools::loading_tips fn'>loading_tips</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="fn" href="fn.make_heatmap.html" title='map_gui::tools::make_heatmap fn'>make_heatmap</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="fn" href="fn.nice_map_name.html" title='map_gui::tools::nice_map_name fn'>nice_map_name</a></td><td class='docblock-short'></td></tr><tr class='module-item'><td><a class="fn" href="fn.open_browser.html" title='map_gui::tools::open_browser fn'>open_browser</a></td><td class='docblock-short'></td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../";window.currentCrate = "map_gui";</script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>

View File

@ -1,6 +1,7 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `minimap` mod in crate `map_gui`."><meta name="keywords" content="rust, rustlang, rust-lang, minimap"><title>map_gui::tools::minimap - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script src="../../../storage.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../map_gui/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><p class='location'>Module minimap</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li></ul></div><p class='location'><a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a></p><script>window.sidebarCurrent = {name: 'minimap', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/map_gui/tools/minimap.rs.html#1-375' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a class="mod" href=''>minimap</a></span></h1><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/map_gui/tools/minimap.rs.html#1-422' title='goto source code'>[src]</a></span><span class='in-band'>Module <a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a class="mod" href=''>minimap</a></span></h1><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.Minimap.html" title='map_gui::tools::minimap::Minimap struct'>Minimap</a></td><td class='docblock-short'></td></tr></table><h2 id='traits' class='section-header'><a href="#traits">Traits</a></h2>
<table><tr class='module-item'><td><a class="trait" href="trait.MinimapControls.html" title='map_gui::tools::minimap::MinimapControls trait'>MinimapControls</a></td><td class='docblock-short'></td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "map_gui";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>
<table><tr class='module-item'><td><a class="trait" href="trait.MinimapControls.html" title='map_gui::tools::minimap::MinimapControls trait'>MinimapControls</a></td><td class='docblock-short'><p>Customize the appearance and behavior of a minimap.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "map_gui";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>

View File

@ -1 +1 @@
initSidebarItems({"struct":[["Minimap",""]],"trait":[["MinimapControls",""]]});
initSidebarItems({"struct":[["Minimap",""]],"trait":[["MinimapControls","Customize the appearance and behavior of a minimap."]]});

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,26 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `MinimapControls` trait in crate `map_gui`."><meta name="keywords" content="rust, rustlang, rust-lang, MinimapControls"><title>map_gui::tools::minimap::MinimapControls - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script src="../../../storage.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../map_gui/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><p class='location'>Trait MinimapControls</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.has_zorder">has_zorder</a><a href="#tymethod.make_legend">make_legend</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a href='index.html'>minimap</a></p><script>window.sidebarCurrent = {name: 'MinimapControls', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/map_gui/tools/minimap.rs.html#31-34' title='goto source code'>[src]</a></span><span class='in-band'>Trait <a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a href='index.html'>minimap</a>::<wbr><a class="trait" href=''>MinimapControls</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust trait'>pub trait MinimapControls&lt;A:&nbsp;<a class="trait" href="../../../map_gui/trait.AppLike.html" title="trait map_gui::AppLike">AppLike</a>&gt; {
<link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../map_gui/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><p class='location'>Trait MinimapControls</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.has_zorder">has_zorder</a></div><a class="sidebar-title" href="#provided-methods">Provided Methods</a><div class="sidebar-links"><a href="#method.draw_extra">draw_extra</a><a href="#method.has_layer">has_layer</a><a href="#method.make_legend">make_legend</a><a href="#method.make_unzoomed_panel">make_unzoomed_panel</a><a href="#method.make_zoomed_side_panel">make_zoomed_side_panel</a><a href="#method.panel_changed">panel_changed</a><a href="#method.panel_clicked">panel_clicked</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a href='index.html'>minimap</a></p><script>window.sidebarCurrent = {name: 'MinimapControls', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/map_gui/tools/minimap.rs.html#32-65' title='goto source code'>[src]</a></span><span class='in-band'>Trait <a href='../../index.html'>map_gui</a>::<wbr><a href='../index.html'>tools</a>::<wbr><a href='index.html'>minimap</a>::<wbr><a class="trait" href=''>MinimapControls</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust trait'>pub trait MinimapControls&lt;A:&nbsp;<a class="trait" href="../../../map_gui/trait.AppLike.html" title="trait map_gui::AppLike">AppLike</a>&gt; {
fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
<div class='item-spacer'></div> fn <a href='#tymethod.make_legend' class='fnname'>make_legend</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget;
}</pre></div><h2 id='required-methods' class='small-section-header'>Required methods<a href='#required-methods' class='anchor'></a></h2><div class='methods'><h3 id='tymethod.has_zorder' class='method'><code>fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><h3 id='tymethod.make_legend' class='method'><code>fn <a href='#tymethod.make_legend' class='fnname'>make_legend</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3></div><span class='loading-content'>Loading content...</span><h2 id='implementors' class='small-section-header'>Implementors<a href='#implementors' class='anchor'></a></h2><div class='item-list' id='implementors-list'></div><span class='loading-content'>Loading content...</span><script type="text/javascript" src="../../../implementors/map_gui/tools/minimap/trait.MinimapControls.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "map_gui";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>
fn <a href='#method.has_layer' class='fnname'>has_layer</a>(&amp;self, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a> { ... }
<div class='item-spacer'></div> fn <a href='#method.draw_extra' class='fnname'>draw_extra</a>(&amp;self, _: &amp;mut GfxCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) { ... }
<div class='item-spacer'></div> fn <a href='#method.make_unzoomed_panel' class='fnname'>make_unzoomed_panel</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Panel { ... }
<div class='item-spacer'></div> fn <a href='#method.make_legend' class='fnname'>make_legend</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget { ... }
<div class='item-spacer'></div> fn <a href='#method.make_zoomed_side_panel' class='fnname'>make_zoomed_side_panel</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget { ... }
<div class='item-spacer'></div> fn <a href='#method.panel_clicked' class='fnname'>panel_clicked</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;A&gt;&gt; { ... }
<div class='item-spacer'></div> fn <a href='#method.panel_changed' class='fnname'>panel_changed</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, _: &amp;Panel) { ... }
}</pre></div><div class='docblock'><p>Customize the appearance and behavior of a minimap.</p>
</div><h2 id='required-methods' class='small-section-header'>Required methods<a href='#required-methods' class='anchor'></a></h2><div class='methods'><h3 id='tymethod.has_zorder' class='method'><code>fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><div class='docblock'><p>Should the user be able to control the z-order visible? The control is only present when
zoomed in, placed beneath the zoom column.</p>
</div></div><span class='loading-content'>Loading content...</span><h2 id='provided-methods' class='small-section-header'>Provided methods<a href='#provided-methods' class='anchor'></a></h2><div class='methods'><h3 id='method.has_layer' class='method'><code>fn <a href='#method.has_layer' class='fnname'>has_layer</a>(&amp;self, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><div class='docblock'><p>Is there some additional layer displayed on the minimap? If this changes, the panel gets
recalculated.</p>
</div><h3 id='method.draw_extra' class='method'><code>fn <a href='#method.draw_extra' class='fnname'>draw_extra</a>(&amp;self, _: &amp;mut GfxCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A)</code></h3><div class='docblock'><p>Draw extra stuff on the minimap, just pulling from the app.</p>
</div><h3 id='method.make_unzoomed_panel' class='method'><code>fn <a href='#method.make_unzoomed_panel' class='fnname'>make_unzoomed_panel</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Panel</code></h3><div class='docblock'><p>When unzoomed, display this panel. By default, no controls when unzoomed.</p>
</div><h3 id='method.make_legend' class='method'><code>fn <a href='#method.make_legend' class='fnname'>make_legend</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3><div class='docblock'><p>A row beneath the minimap in the zoomed view, usually used as a legend for things on the
minimap.</p>
</div><h3 id='method.make_zoomed_side_panel' class='method'><code>fn <a href='#method.make_zoomed_side_panel' class='fnname'>make_zoomed_side_panel</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3><div class='docblock'><p>Controls to be placed to the left to the zoomed-in panel</p>
</div><h3 id='method.panel_clicked' class='method'><code>fn <a href='#method.panel_clicked' class='fnname'>panel_clicked</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;A&gt;&gt;</code></h3><div class='docblock'><p>If a button is clicked that was produced by some method in this trait, respond to it here.</p>
</div><h3 id='method.panel_changed' class='method'><code>fn <a href='#method.panel_changed' class='fnname'>panel_changed</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, _: &amp;Panel)</code></h3><div class='docblock'><p>Called for <code>Outcome::Changed</code> on the panel.</p>
</div></div><span class='loading-content'>Loading content...</span><h2 id='implementors' class='small-section-header'>Implementors<a href='#implementors' class='anchor'></a></h2><div class='item-list' id='implementors-list'></div><span class='loading-content'>Loading content...</span><script type="text/javascript" src="../../../implementors/map_gui/tools/minimap/trait.MinimapControls.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "map_gui";</script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>

View File

@ -1 +1 @@
initSidebarItems({"fn":[["amenity_type",""],["grey_out_map","Make it clear the map can't be interacted with right now."],["loading_tips",""],["make_heatmap",""],["nice_map_name",""],["open_browser",""]],"mod":[["city_picker",""],["colors",""],["heatmap",""],["minimap",""],["navigate",""],["turn_explorer",""],["ui","Generic UI tools. Some of this should perhaps be lifted to widgetry."],["updater",""]],"struct":[["ChooseSomething","Choose something from a menu, then feed the answer to a callback."],["CityPicker","Lets the player switch maps."],["ColorDiscrete",""],["ColorLegend",""],["ColorNetwork",""],["ColorScale",""],["DivergingScale",""],["Grid",""],["HeatmapOptions",""],["Minimap",""],["Navigator",""],["PopupMsg","Display a message dialog."],["PromptInput","Prompt for arbitrary text input, then feed the answer to a callback."],["TurnExplorer","A tool to explore all of the turns from a single lane."]],"trait":[["MinimapControls",""]]});
initSidebarItems({"fn":[["amenity_type",""],["grey_out_map","Make it clear the map can't be interacted with right now."],["loading_tips",""],["make_heatmap",""],["nice_map_name",""],["open_browser",""]],"mod":[["city_picker",""],["colors",""],["heatmap",""],["minimap",""],["navigate",""],["turn_explorer",""],["ui","Generic UI tools. Some of this should perhaps be lifted to widgetry."],["updater",""]],"struct":[["ChooseSomething","Choose something from a menu, then feed the answer to a callback."],["CityPicker","Lets the player switch maps."],["ColorDiscrete",""],["ColorLegend",""],["ColorNetwork",""],["ColorScale",""],["DivergingScale",""],["Grid",""],["HeatmapOptions",""],["Minimap",""],["Navigator",""],["PopupMsg","Display a message dialog."],["PromptInput","Prompt for arbitrary text input, then feed the answer to a callback."],["TurnExplorer","A tool to explore all of the turns from a single lane."]],"trait":[["MinimapControls","Customize the appearance and behavior of a minimap."]]});

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,26 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `MinimapControls` trait in crate `map_gui`."><meta name="keywords" content="rust, rustlang, rust-lang, MinimapControls"><title>map_gui::tools::MinimapControls - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../map_gui/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><p class='location'>Trait MinimapControls</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.has_zorder">has_zorder</a><a href="#tymethod.make_legend">make_legend</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='../index.html'>map_gui</a>::<wbr><a href='index.html'>tools</a></p><script>window.sidebarCurrent = {name: 'MinimapControls', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../src/map_gui/tools/minimap.rs.html#31-34' title='goto source code'>[src]</a></span><span class='in-band'>Trait <a href='../index.html'>map_gui</a>::<wbr><a href='index.html'>tools</a>::<wbr><a class="trait" href=''>MinimapControls</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust trait'>pub trait MinimapControls&lt;A:&nbsp;<a class="trait" href="../../map_gui/trait.AppLike.html" title="trait map_gui::AppLike">AppLike</a>&gt; {
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../map_gui/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><p class='location'>Trait MinimapControls</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.has_zorder">has_zorder</a></div><a class="sidebar-title" href="#provided-methods">Provided Methods</a><div class="sidebar-links"><a href="#method.draw_extra">draw_extra</a><a href="#method.has_layer">has_layer</a><a href="#method.make_legend">make_legend</a><a href="#method.make_unzoomed_panel">make_unzoomed_panel</a><a href="#method.make_zoomed_side_panel">make_zoomed_side_panel</a><a href="#method.panel_changed">panel_changed</a><a href="#method.panel_clicked">panel_clicked</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='../index.html'>map_gui</a>::<wbr><a href='index.html'>tools</a></p><script>window.sidebarCurrent = {name: 'MinimapControls', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><span class="help-button">?</span>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../src/map_gui/tools/minimap.rs.html#32-65' title='goto source code'>[src]</a></span><span class='in-band'>Trait <a href='../index.html'>map_gui</a>::<wbr><a href='index.html'>tools</a>::<wbr><a class="trait" href=''>MinimapControls</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust trait'>pub trait MinimapControls&lt;A:&nbsp;<a class="trait" href="../../map_gui/trait.AppLike.html" title="trait map_gui::AppLike">AppLike</a>&gt; {
fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
<div class='item-spacer'></div> fn <a href='#tymethod.make_legend' class='fnname'>make_legend</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget;
}</pre></div><h2 id='required-methods' class='small-section-header'>Required methods<a href='#required-methods' class='anchor'></a></h2><div class='methods'><h3 id='tymethod.has_zorder' class='method'><code>fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><h3 id='tymethod.make_legend' class='method'><code>fn <a href='#tymethod.make_legend' class='fnname'>make_legend</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3></div><span class='loading-content'>Loading content...</span><h2 id='implementors' class='small-section-header'>Implementors<a href='#implementors' class='anchor'></a></h2><div class='item-list' id='implementors-list'></div><span class='loading-content'>Loading content...</span><script type="text/javascript" src="../../implementors/map_gui/tools/trait.MinimapControls.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../";window.currentCrate = "map_gui";</script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>
fn <a href='#method.has_layer' class='fnname'>has_layer</a>(&amp;self, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a> { ... }
<div class='item-spacer'></div> fn <a href='#method.draw_extra' class='fnname'>draw_extra</a>(&amp;self, _: &amp;mut GfxCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) { ... }
<div class='item-spacer'></div> fn <a href='#method.make_unzoomed_panel' class='fnname'>make_unzoomed_panel</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Panel { ... }
<div class='item-spacer'></div> fn <a href='#method.make_legend' class='fnname'>make_legend</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget { ... }
<div class='item-spacer'></div> fn <a href='#method.make_zoomed_side_panel' class='fnname'>make_zoomed_side_panel</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget { ... }
<div class='item-spacer'></div> fn <a href='#method.panel_clicked' class='fnname'>panel_clicked</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a><br>&nbsp;&nbsp;&nbsp;&nbsp;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;A&gt;&gt; { ... }
<div class='item-spacer'></div> fn <a href='#method.panel_changed' class='fnname'>panel_changed</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, _: &amp;Panel) { ... }
}</pre></div><div class='docblock'><p>Customize the appearance and behavior of a minimap.</p>
</div><h2 id='required-methods' class='small-section-header'>Required methods<a href='#required-methods' class='anchor'></a></h2><div class='methods'><h3 id='tymethod.has_zorder' class='method'><code>fn <a href='#tymethod.has_zorder' class='fnname'>has_zorder</a>(&amp;self, app: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><div class='docblock'><p>Should the user be able to control the z-order visible? The control is only present when
zoomed in, placed beneath the zoom column.</p>
</div></div><span class='loading-content'>Loading content...</span><h2 id='provided-methods' class='small-section-header'>Provided methods<a href='#provided-methods' class='anchor'></a></h2><div class='methods'><h3 id='method.has_layer' class='method'><code>fn <a href='#method.has_layer' class='fnname'>has_layer</a>(&amp;self, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></h3><div class='docblock'><p>Is there some additional layer displayed on the minimap? If this changes, the panel gets
recalculated.</p>
</div><h3 id='method.draw_extra' class='method'><code>fn <a href='#method.draw_extra' class='fnname'>draw_extra</a>(&amp;self, _: &amp;mut GfxCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A)</code></h3><div class='docblock'><p>Draw extra stuff on the minimap, just pulling from the app.</p>
</div><h3 id='method.make_unzoomed_panel' class='method'><code>fn <a href='#method.make_unzoomed_panel' class='fnname'>make_unzoomed_panel</a>(&amp;self, ctx: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Panel</code></h3><div class='docblock'><p>When unzoomed, display this panel. By default, no controls when unzoomed.</p>
</div><h3 id='method.make_legend' class='method'><code>fn <a href='#method.make_legend' class='fnname'>make_legend</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3><div class='docblock'><p>A row beneath the minimap in the zoomed view, usually used as a legend for things on the
minimap.</p>
</div><h3 id='method.make_zoomed_side_panel' class='method'><code>fn <a href='#method.make_zoomed_side_panel' class='fnname'>make_zoomed_side_panel</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>A) -&gt; Widget</code></h3><div class='docblock'><p>Controls to be placed to the left to the zoomed-in panel</p>
</div><h3 id='method.panel_clicked' class='method'><code>fn <a href='#method.panel_clicked' class='fnname'>panel_clicked</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;A&gt;&gt;</code></h3><div class='docblock'><p>If a button is clicked that was produced by some method in this trait, respond to it here.</p>
</div><h3 id='method.panel_changed' class='method'><code>fn <a href='#method.panel_changed' class='fnname'>panel_changed</a>(&amp;self, _: &amp;mut EventCtx&lt;'_&gt;, _: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>A, _: &amp;Panel)</code></h3><div class='docblock'><p>Called for <code>Outcome::Changed</code> on the panel.</p>
</div></div><span class='loading-content'>Loading content...</span><h2 id='implementors' class='small-section-header'>Implementors<a href='#implementors' class='anchor'></a></h2><div class='item-list' id='implementors-list'></div><span class='loading-content'>Loading content...</span><script type="text/javascript" src="../../implementors/map_gui/tools/trait.MinimapControls.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../";window.currentCrate = "map_gui";</script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -120,763 +120,99 @@
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
<span id="190">190</span>
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
<span id="201">201</span>
<span id="202">202</span>
<span id="203">203</span>
<span id="204">204</span>
<span id="205">205</span>
<span id="206">206</span>
<span id="207">207</span>
<span id="208">208</span>
<span id="209">209</span>
<span id="210">210</span>
<span id="211">211</span>
<span id="212">212</span>
<span id="213">213</span>
<span id="214">214</span>
<span id="215">215</span>
<span id="216">216</span>
<span id="217">217</span>
<span id="218">218</span>
<span id="219">219</span>
<span id="220">220</span>
<span id="221">221</span>
<span id="222">222</span>
<span id="223">223</span>
<span id="224">224</span>
<span id="225">225</span>
<span id="226">226</span>
<span id="227">227</span>
<span id="228">228</span>
<span id="229">229</span>
<span id="230">230</span>
<span id="231">231</span>
<span id="232">232</span>
<span id="233">233</span>
<span id="234">234</span>
<span id="235">235</span>
<span id="236">236</span>
<span id="237">237</span>
<span id="238">238</span>
<span id="239">239</span>
<span id="240">240</span>
<span id="241">241</span>
<span id="242">242</span>
<span id="243">243</span>
<span id="244">244</span>
<span id="245">245</span>
<span id="246">246</span>
<span id="247">247</span>
<span id="248">248</span>
<span id="249">249</span>
<span id="250">250</span>
<span id="251">251</span>
<span id="252">252</span>
<span id="253">253</span>
<span id="254">254</span>
<span id="255">255</span>
<span id="256">256</span>
<span id="257">257</span>
<span id="258">258</span>
<span id="259">259</span>
<span id="260">260</span>
<span id="261">261</span>
<span id="262">262</span>
<span id="263">263</span>
<span id="264">264</span>
<span id="265">265</span>
<span id="266">266</span>
<span id="267">267</span>
<span id="268">268</span>
<span id="269">269</span>
<span id="270">270</span>
<span id="271">271</span>
<span id="272">272</span>
<span id="273">273</span>
<span id="274">274</span>
<span id="275">275</span>
<span id="276">276</span>
<span id="277">277</span>
<span id="278">278</span>
<span id="279">279</span>
<span id="280">280</span>
<span id="281">281</span>
<span id="282">282</span>
<span id="283">283</span>
<span id="284">284</span>
<span id="285">285</span>
<span id="286">286</span>
<span id="287">287</span>
<span id="288">288</span>
<span id="289">289</span>
<span id="290">290</span>
<span id="291">291</span>
<span id="292">292</span>
<span id="293">293</span>
<span id="294">294</span>
<span id="295">295</span>
<span id="296">296</span>
<span id="297">297</span>
<span id="298">298</span>
<span id="299">299</span>
<span id="300">300</span>
<span id="301">301</span>
<span id="302">302</span>
<span id="303">303</span>
<span id="304">304</span>
<span id="305">305</span>
<span id="306">306</span>
<span id="307">307</span>
<span id="308">308</span>
<span id="309">309</span>
<span id="310">310</span>
<span id="311">311</span>
<span id="312">312</span>
<span id="313">313</span>
<span id="314">314</span>
<span id="315">315</span>
<span id="316">316</span>
<span id="317">317</span>
<span id="318">318</span>
<span id="319">319</span>
<span id="320">320</span>
<span id="321">321</span>
<span id="322">322</span>
<span id="323">323</span>
<span id="324">324</span>
<span id="325">325</span>
<span id="326">326</span>
<span id="327">327</span>
<span id="328">328</span>
<span id="329">329</span>
<span id="330">330</span>
<span id="331">331</span>
<span id="332">332</span>
<span id="333">333</span>
<span id="334">334</span>
<span id="335">335</span>
<span id="336">336</span>
<span id="337">337</span>
<span id="338">338</span>
<span id="339">339</span>
<span id="340">340</span>
<span id="341">341</span>
<span id="342">342</span>
<span id="343">343</span>
<span id="344">344</span>
<span id="345">345</span>
<span id="346">346</span>
<span id="347">347</span>
<span id="348">348</span>
<span id="349">349</span>
<span id="350">350</span>
<span id="351">351</span>
<span id="352">352</span>
<span id="353">353</span>
<span id="354">354</span>
<span id="355">355</span>
<span id="356">356</span>
<span id="357">357</span>
<span id="358">358</span>
<span id="359">359</span>
<span id="360">360</span>
<span id="361">361</span>
<span id="362">362</span>
<span id="363">363</span>
<span id="364">364</span>
<span id="365">365</span>
<span id="366">366</span>
<span id="367">367</span>
<span id="368">368</span>
<span id="369">369</span>
<span id="370">370</span>
<span id="371">371</span>
<span id="372">372</span>
<span id="373">373</span>
<span id="374">374</span>
<span id="375">375</span>
<span id="376">376</span>
<span id="377">377</span>
<span id="378">378</span>
<span id="379">379</span>
<span id="380">380</span>
<span id="381">381</span>
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
<span id="421">421</span>
<span id="422">422</span>
<span id="423">423</span>
<span id="424">424</span>
<span id="425">425</span>
<span id="426">426</span>
<span id="427">427</span>
<span id="428">428</span>
<span id="429">429</span>
<span id="430">430</span>
<span id="431">431</span>
<span id="432">432</span>
<span id="433">433</span>
<span id="434">434</span>
<span id="435">435</span>
<span id="436">436</span>
<span id="437">437</span>
<span id="438">438</span>
<span id="439">439</span>
<span id="440">440</span>
<span id="441">441</span>
<span id="442">442</span>
<span id="443">443</span>
<span id="444">444</span>
<span id="445">445</span>
<span id="446">446</span>
<span id="447">447</span>
<span id="448">448</span>
<span id="449">449</span>
<span id="450">450</span>
<span id="451">451</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="kw">use</span> <span class="ident">abstutil</span>::<span class="ident">clamp</span>;
<span class="kw">use</span> <span class="ident">geom</span>::{<span class="ident">Distance</span>, <span class="ident">Polygon</span>, <span class="ident">Pt2D</span>, <span class="ident">Ring</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::<span class="ident">Navigator</span>;
<span class="kw">use</span> <span class="ident">widgetry</span>::{
<span class="ident">Btn</span>, <span class="ident">Color</span>, <span class="ident">EventCtx</span>, <span class="ident">Filler</span>, <span class="ident">GeomBatch</span>, <span class="ident">GfxCtx</span>, <span class="ident">HorizontalAlignment</span>, <span class="ident">Key</span>, <span class="ident">Line</span>, <span class="ident">Outcome</span>,
<span class="ident">Panel</span>, <span class="ident">ScreenPt</span>, <span class="ident">Spinner</span>, <span class="ident">VerticalAlignment</span>, <span class="ident">Widget</span>,
};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::{<span class="ident">MinimapControls</span>, <span class="ident">Navigator</span>};
<span class="kw">use</span> <span class="ident">widgetry</span>::{<span class="ident">Btn</span>, <span class="ident">EventCtx</span>, <span class="ident">GfxCtx</span>, <span class="ident">HorizontalAlignment</span>, <span class="ident">Key</span>, <span class="ident">Panel</span>, <span class="ident">VerticalAlignment</span>, <span class="ident">Widget</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::<span class="ident">App</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::<span class="ident">Transition</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">common</span>::<span class="ident">Warping</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">layer</span>::<span class="ident">PickLayer</span>;
<span class="comment">// TODO Some of the math in here might assume map bound minimums start at (0, 0).</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Minimap</span> {
<span class="ident">dragging</span>: <span class="ident">bool</span>,
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="ident">panel</span>: <span class="ident">Panel</span>,
<span class="comment">// Update panel when other things change</span>
<span class="ident">zoomed</span>: <span class="ident">bool</span>,
<span class="ident">layer</span>: <span class="ident">bool</span>,
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">MinimapController</span>;
<span class="comment">// [0, 3], with 0 meaning the most unzoomed</span>
<span class="ident">zoom_lvl</span>: <span class="ident">usize</span>,
<span class="ident">base_zoom</span>: <span class="ident">f64</span>,
<span class="ident">zoom</span>: <span class="ident">f64</span>,
<span class="ident">offset_x</span>: <span class="ident">f64</span>,
<span class="ident">offset_y</span>: <span class="ident">f64</span>,
}
<span class="kw">impl</span> <span class="ident">Minimap</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Minimap</span> {
<span class="comment">// Initially pick a zoom to fit the smaller of the entire map&#39;s width or height in the</span>
<span class="comment">// minimap. Arbitrary and probably pretty weird.</span>
<span class="kw">let</span> <span class="ident">bounds</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>();
<span class="kw">let</span> <span class="ident">base_zoom</span> <span class="op">=</span> <span class="number">0.15</span> <span class="op">*</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">window_width</span> <span class="op">/</span> <span class="ident">bounds</span>.<span class="ident">width</span>().<span class="ident">min</span>(<span class="ident">bounds</span>.<span class="ident">height</span>());
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">m</span> <span class="op">=</span> <span class="ident">Minimap</span> {
<span class="ident">dragging</span>: <span class="bool-val">false</span>,
<span class="ident">panel</span>: <span class="ident">Panel</span>::<span class="ident">empty</span>(<span class="ident">ctx</span>),
<span class="ident">zoomed</span>: <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&gt;</span><span class="op">=</span> <span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">min_zoom_for_detail</span>,
<span class="ident">layer</span>: <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">layer</span>.<span class="ident">is_none</span>(),
<span class="ident">zoom_lvl</span>: <span class="number">0</span>,
<span class="ident">base_zoom</span>,
<span class="ident">zoom</span>: <span class="ident">base_zoom</span>,
<span class="ident">offset_x</span>: <span class="number">0.0</span>,
<span class="ident">offset_y</span>: <span class="number">0.0</span>,
};
<span class="ident">m</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">if</span> <span class="ident">m</span>.<span class="ident">zoomed</span> {
<span class="ident">m</span>.<span class="ident">recenter</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
<span class="ident">m</span>
<span class="kw">impl</span> <span class="ident">MinimapControls</span><span class="op">&lt;</span><span class="ident">App</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">MinimapController</span> {
<span class="kw">fn</span> <span class="ident">has_zorder</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">bool</span> {
<span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">dev</span>
}
<span class="kw">fn</span> <span class="ident">has_layer</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">bool</span> {
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">layer</span>.<span class="ident">is_some</span>()
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">recreate_panel</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&lt;</span> <span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">min_zoom_for_detail</span> {
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel</span>::<span class="ident">new</span>(<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">make_tool_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>).<span class="ident">align_right</span>(),
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">make_vert_viz_panel</span>(<span class="ident">ctx</span>)
.<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">panel_bg</span>)
.<span class="ident">padding</span>(<span class="number">16</span>),
]))
.<span class="ident">aligned</span>(
<span class="ident">HorizontalAlignment</span>::<span class="ident">Right</span>,
<span class="ident">VerticalAlignment</span>::<span class="ident">BottomAboveOSD</span>,
)
.<span class="ident">build_custom</span>(<span class="ident">ctx</span>);
<span class="kw">return</span>;
}
<span class="kw">let</span> <span class="ident">zoom_col</span> <span class="op">=</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">col</span> <span class="op">=</span> <span class="macro">vec</span><span class="macro">!</span>[<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/speed/speed_up.svg&quot;</span>)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;zoom in&quot;</span>, <span class="prelude-val">None</span>)
.<span class="ident">margin_below</span>(<span class="number">20</span>)];
<span class="kw">for</span> <span class="ident">i</span> <span class="kw">in</span> (<span class="number">0</span>..<span class="op">=</span><span class="number">3</span>).<span class="ident">rev</span>() {
<span class="kw">let</span> <span class="ident">color</span> <span class="op">=</span> <span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">&lt;</span> <span class="ident">i</span> {
<span class="ident">Color</span>::<span class="ident">WHITE</span>.<span class="ident">alpha</span>(<span class="number">0.2</span>)
} <span class="kw">else</span> {
<span class="ident">Color</span>::<span class="ident">WHITE</span>
};
<span class="kw">let</span> <span class="ident">rect</span> <span class="op">=</span> <span class="ident">Polygon</span>::<span class="ident">rectangle</span>(<span class="number">20.0</span>, <span class="number">8.0</span>);
<span class="ident">col</span>.<span class="ident">push</span>(
<span class="ident">Btn</span>::<span class="ident">custom</span>(
<span class="ident">GeomBatch</span>::<span class="ident">from</span>(<span class="macro">vec</span><span class="macro">!</span>[(<span class="ident">color</span>, <span class="ident">rect</span>.<span class="ident">clone</span>())]),
<span class="ident">GeomBatch</span>::<span class="ident">from</span>(<span class="macro">vec</span><span class="macro">!</span>[(<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">hovering</span>, <span class="ident">rect</span>.<span class="ident">clone</span>())]),
<span class="ident">rect</span>,
<span class="prelude-val">None</span>,
)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;zoom to level {}&quot;</span>, <span class="ident">i</span> <span class="op">+</span> <span class="number">1</span>), <span class="prelude-val">None</span>)
.<span class="ident">margin_below</span>(<span class="number">20</span>),
);
}
<span class="ident">col</span>.<span class="ident">push</span>(
<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/speed/slow_down.svg&quot;</span>).<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;zoom out&quot;</span>, <span class="prelude-val">None</span>),
);
<span class="comment">// The zoom column should start below the &quot;pan up&quot; arrow. But if we put it on the row</span>
<span class="comment">// with &lt;, minimap, and &gt; then it messes up the horizontal alignment of the</span>
<span class="comment">// pan up arrow. Also, double column to avoid the background color</span>
<span class="comment">// stretching to the bottom of the row.</span>
<span class="ident">Widget</span>::<span class="ident">custom_col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Widget</span>::<span class="ident">custom_col</span>(<span class="ident">col</span>).<span class="ident">padding</span>(<span class="number">10</span>).<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">inner_panel</span>),
<span class="kw">if</span> <span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">dev</span> {
<span class="ident">Widget</span>::<span class="ident">col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Z-order:&quot;</span>).<span class="ident">small</span>().<span class="ident">draw</span>(<span class="ident">ctx</span>),
<span class="ident">Spinner</span>::<span class="ident">new</span>(
<span class="ident">ctx</span>,
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">zorder_range</span>,
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">show_zorder</span>,
)
.<span class="ident">named</span>(<span class="string">&quot;zorder&quot;</span>),
])
.<span class="ident">margin_above</span>(<span class="number">10</span>)
} <span class="kw">else</span> {
<span class="ident">Widget</span>::<span class="ident">nothing</span>()
},
])
.<span class="ident">margin_above</span>(<span class="number">26</span>)
};
<span class="kw">let</span> <span class="ident">minimap_controls</span> <span class="op">=</span> <span class="ident">Widget</span>::<span class="ident">col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/minimap/up.svg&quot;</span>)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;pan up&quot;</span>, <span class="prelude-val">None</span>)
.<span class="ident">centered_horiz</span>(),
<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/minimap/left.svg&quot;</span>)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;pan left&quot;</span>, <span class="prelude-val">None</span>)
.<span class="ident">centered_vert</span>(),
<span class="ident">Filler</span>::<span class="ident">square_width</span>(<span class="ident">ctx</span>, <span class="number">0.15</span>).<span class="ident">named</span>(<span class="string">&quot;minimap&quot;</span>),
<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/minimap/right.svg&quot;</span>)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;pan right&quot;</span>, <span class="prelude-val">None</span>)
.<span class="ident">centered_vert</span>(),
]),
<span class="ident">Btn</span>::<span class="ident">svg_def</span>(<span class="string">&quot;system/assets/minimap/down.svg&quot;</span>)
.<span class="ident">build</span>(<span class="ident">ctx</span>, <span class="string">&quot;pan down&quot;</span>, <span class="prelude-val">None</span>)
.<span class="ident">centered_horiz</span>(),
]);
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel</span>::<span class="ident">new</span>(<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">make_tool_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>),
<span class="ident">Widget</span>::<span class="ident">col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">minimap_controls</span>, <span class="ident">zoom_col</span>]),
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">make_horiz_viz_panel</span>(<span class="ident">ctx</span>),
])
.<span class="ident">padding</span>(<span class="number">16</span>)
.<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">panel_bg</span>),
]))
.<span class="ident">aligned</span>(
<span class="ident">HorizontalAlignment</span>::<span class="ident">Right</span>,
<span class="ident">VerticalAlignment</span>::<span class="ident">BottomAboveOSD</span>,
)
.<span class="ident">build_custom</span>(<span class="ident">ctx</span>);
}
<span class="kw">fn</span> <span class="ident">map_to_minimap_pct</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">pt</span>: <span class="ident">Pt2D</span>) <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">f64</span>, <span class="ident">f64</span>) {
<span class="kw">let</span> <span class="ident">inner_rect</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">rect_of</span>(<span class="string">&quot;minimap&quot;</span>);
<span class="kw">let</span> <span class="ident">pct_x</span> <span class="op">=</span> (<span class="ident">pt</span>.<span class="ident">x</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="self">self</span>.<span class="ident">offset_x</span>) <span class="op">/</span> <span class="ident">inner_rect</span>.<span class="ident">width</span>();
<span class="kw">let</span> <span class="ident">pct_y</span> <span class="op">=</span> (<span class="ident">pt</span>.<span class="ident">y</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="self">self</span>.<span class="ident">offset_y</span>) <span class="op">/</span> <span class="ident">inner_rect</span>.<span class="ident">height</span>();
(<span class="ident">pct_x</span>, <span class="ident">pct_y</span>)
}
<span class="kw">fn</span> <span class="ident">set_zoom</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>, <span class="ident">zoom_lvl</span>: <span class="ident">usize</span>) {
<span class="comment">// Make the frame wind up in the same relative position on the minimap</span>
<span class="kw">let</span> (<span class="ident">pct_x</span>, <span class="ident">pct_y</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">map_to_minimap_pct</span>(<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_to_map_pt</span>());
<span class="kw">let</span> <span class="ident">zoom_speed</span>: <span class="ident">f64</span> <span class="op">=</span> <span class="number">2.0</span>;
<span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">=</span> <span class="ident">zoom_lvl</span>;
<span class="self">self</span>.<span class="ident">zoom</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">base_zoom</span> <span class="op">*</span> <span class="ident">zoom_speed</span>.<span class="ident">powi</span>(<span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="kw">as</span> <span class="ident">i32</span>);
<span class="self">self</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="comment">// Find the new offset</span>
<span class="kw">let</span> <span class="ident">map_center</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_to_map_pt</span>();
<span class="kw">let</span> <span class="ident">inner_rect</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">rect_of</span>(<span class="string">&quot;minimap&quot;</span>);
<span class="self">self</span>.<span class="ident">offset_x</span> <span class="op">=</span> <span class="ident">map_center</span>.<span class="ident">x</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">pct_x</span> <span class="op">*</span> <span class="ident">inner_rect</span>.<span class="ident">width</span>();
<span class="self">self</span>.<span class="ident">offset_y</span> <span class="op">=</span> <span class="ident">map_center</span>.<span class="ident">y</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">pct_y</span> <span class="op">*</span> <span class="ident">inner_rect</span>.<span class="ident">height</span>();
}
<span class="kw">fn</span> <span class="ident">recenter</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="comment">// Recenter the minimap on the screen bounds</span>
<span class="kw">let</span> <span class="ident">map_center</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_to_map_pt</span>();
<span class="kw">let</span> <span class="ident">rect</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">rect_of</span>(<span class="string">&quot;minimap&quot;</span>);
<span class="kw">let</span> <span class="ident">off_x</span> <span class="op">=</span> <span class="ident">map_center</span>.<span class="ident">x</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">rect</span>.<span class="ident">width</span>() <span class="op">/</span> <span class="number">2.0</span>;
<span class="kw">let</span> <span class="ident">off_y</span> <span class="op">=</span> <span class="ident">map_center</span>.<span class="ident">y</span>() <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">rect</span>.<span class="ident">height</span>() <span class="op">/</span> <span class="number">2.0</span>;
<span class="comment">// Don&#39;t go out of bounds.</span>
<span class="kw">let</span> <span class="ident">bounds</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>();
<span class="comment">// TODO For boundaries without rectangular shapes, it&#39;d be even nicer to clamp to the</span>
<span class="comment">// boundary.</span>
<span class="self">self</span>.<span class="ident">offset_x</span> <span class="op">=</span> <span class="ident">off_x</span>.<span class="ident">max</span>(<span class="number">0.0</span>).<span class="ident">min</span>(<span class="ident">bounds</span>.<span class="ident">max_x</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">rect</span>.<span class="ident">width</span>());
<span class="self">self</span>.<span class="ident">offset_y</span> <span class="op">=</span> <span class="ident">off_y</span>.<span class="ident">max</span>(<span class="number">0.0</span>).<span class="ident">min</span>(<span class="ident">bounds</span>.<span class="ident">max_y</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span> <span class="op">-</span> <span class="ident">rect</span>.<span class="ident">height</span>());
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">event</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">zoomed</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&gt;</span><span class="op">=</span> <span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">min_zoom_for_detail</span>;
<span class="kw">let</span> <span class="ident">layer</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">layer</span>.<span class="ident">is_none</span>();
<span class="kw">if</span> <span class="ident">zoomed</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">zoomed</span> <span class="op">|</span><span class="op">|</span> <span class="ident">layer</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">layer</span> {
<span class="kw">let</span> <span class="ident">just_zoomed_in</span> <span class="op">=</span> <span class="ident">zoomed</span> <span class="op">&amp;&amp;</span> <span class="op">!</span><span class="self">self</span>.<span class="ident">zoomed</span>;
<span class="self">self</span>.<span class="ident">zoomed</span> <span class="op">=</span> <span class="ident">zoomed</span>;
<span class="self">self</span>.<span class="ident">layer</span> <span class="op">=</span> <span class="ident">layer</span>;
<span class="self">self</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">if</span> <span class="ident">just_zoomed_in</span> {
<span class="self">self</span>.<span class="ident">recenter</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
} <span class="kw">else</span> <span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoomed</span> <span class="op">&amp;&amp;</span> <span class="op">!</span><span class="self">self</span>.<span class="ident">dragging</span> {
<span class="comment">// If either corner of the cursor is out of bounds on the minimap, recenter.</span>
<span class="comment">// TODO This means clicking the pan buttons while along the boundary won&#39;t work.</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">ok</span> <span class="op">=</span> <span class="bool-val">true</span>;
<span class="kw">for</span> <span class="ident">pt</span> <span class="kw">in</span> <span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">ScreenPt</span>::<span class="ident">new</span>(<span class="number">0.0</span>, <span class="number">0.0</span>),
<span class="ident">ScreenPt</span>::<span class="ident">new</span>(<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">window_width</span>, <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">window_height</span>),
] {
<span class="kw">let</span> (<span class="ident">pct_x</span>, <span class="ident">pct_y</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">map_to_minimap_pct</span>(<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">screen_to_map</span>(<span class="ident">pt</span>));
<span class="kw">if</span> <span class="ident">pct_x</span> <span class="op">&lt;</span> <span class="number">0.0</span> <span class="op">|</span><span class="op">|</span> <span class="ident">pct_x</span> <span class="op">&gt;</span> <span class="number">1.0</span> <span class="op">|</span><span class="op">|</span> <span class="ident">pct_y</span> <span class="op">&lt;</span> <span class="number">0.0</span> <span class="op">|</span><span class="op">|</span> <span class="ident">pct_y</span> <span class="op">&gt;</span> <span class="number">1.0</span> {
<span class="ident">ok</span> <span class="op">=</span> <span class="bool-val">false</span>;
<span class="kw">break</span>;
}
}
<span class="kw">if</span> <span class="op">!</span><span class="ident">ok</span> {
<span class="self">self</span>.<span class="ident">recenter</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
}
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">input</span>.<span class="ident">is_window_resized</span>() {
<span class="comment">// When the window is resized, just reset completely. This is important when the window</span>
<span class="comment">// size at startup is incorrect and immediately corrected by the window manager after</span>
<span class="comment">// Minimap::new happens.</span>
<span class="kw">let</span> <span class="ident">bounds</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>();
<span class="comment">// On Windows, apparently minimizing can cause some resize events with 0, 0 dimensions!</span>
<span class="self">self</span>.<span class="ident">base_zoom</span> <span class="op">=</span>
(<span class="number">0.15</span> <span class="op">*</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">window_width</span> <span class="op">/</span> <span class="ident">bounds</span>.<span class="ident">width</span>().<span class="ident">min</span>(<span class="ident">bounds</span>.<span class="ident">height</span>())).<span class="ident">max</span>(<span class="number">0.0001</span>);
<span class="self">self</span>.<span class="ident">zoom</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">base_zoom</span>;
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoomed</span> {
<span class="self">self</span>.<span class="ident">recenter</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
}
<span class="kw">let</span> <span class="ident">pan_speed</span> <span class="op">=</span> <span class="number">100.0</span>;
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">event</span>(<span class="ident">ctx</span>) {
<span class="ident">Outcome</span>::<span class="ident">Clicked</span>(<span class="ident">x</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="kw">match</span> <span class="ident">x</span> {
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;pan up&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">offset_y</span> <span class="op">-</span><span class="op">=</span> <span class="ident">pan_speed</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">KeepWithMouseover</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;pan down&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">offset_y</span> <span class="op">+</span><span class="op">=</span> <span class="ident">pan_speed</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">KeepWithMouseover</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;pan left&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">offset_x</span> <span class="op">-</span><span class="op">=</span> <span class="ident">pan_speed</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">KeepWithMouseover</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;pan right&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">offset_x</span> <span class="op">+</span><span class="op">=</span> <span class="ident">pan_speed</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">KeepWithMouseover</span>);
}
<span class="comment">// TODO Make the center of the cursor still point to the same thing. Same math as</span>
<span class="comment">// Canvas.</span>
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom in&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">!</span><span class="op">=</span> <span class="number">3</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">+</span> <span class="number">1</span>);
}
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom out&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="self">self</span>.<span class="ident">zoom_lvl</span> <span class="op">-</span> <span class="number">1</span>);
}
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom to level 1&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="number">0</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom to level 2&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="number">1</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom to level 3&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="number">2</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom to level 4&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="number">3</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;search&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Navigator</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom out fully&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Warping</span>::<span class="ident">new</span>(
<span class="ident">ctx</span>,
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>().<span class="ident">get_rectangle</span>().<span class="ident">center</span>(),
<span class="prelude-val">Some</span>(<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">min_zoom</span>()),
<span class="prelude-val">None</span>,
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">app</span>.<span class="ident">primary</span>,
)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom in fully&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Warping</span>::<span class="ident">new</span>(
<span class="ident">ctx</span>,
<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_to_map_pt</span>(),
<span class="prelude-val">Some</span>(<span class="number">10.0</span>),
<span class="prelude-val">None</span>,
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">app</span>.<span class="ident">primary</span>,
)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;change layers&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">PickLayer</span>::<span class="ident">pick</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)));
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">unreachable</span><span class="macro">!</span>(),
},
<span class="ident">Outcome</span>::<span class="ident">Changed</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">has_widget</span>(<span class="string">&quot;Car&quot;</span>) {
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow_mut</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">update</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">panel</span>);
}
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">has_widget</span>(<span class="string">&quot;zorder&quot;</span>) {
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">show_zorder</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">spinner</span>(<span class="string">&quot;zorder&quot;</span>);
}
<span class="self">self</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> {}
}
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">zoomed</span> {
<span class="kw">let</span> <span class="ident">inner_rect</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">rect_of</span>(<span class="string">&quot;minimap&quot;</span>);
<span class="comment">// TODO Not happy about reaching in like this. The minimap logic should be an widgetry</span>
<span class="comment">// Widget eventually, a generalization of Canvas.</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">pt</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">get_cursor</span>();
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">dragging</span> {
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">input</span>.<span class="ident">left_mouse_button_released</span>() {
<span class="self">self</span>.<span class="ident">dragging</span> <span class="op">=</span> <span class="bool-val">false</span>;
}
<span class="comment">// Don&#39;t drag out of inner_rect</span>
<span class="ident">pt</span>.<span class="ident">x</span> <span class="op">=</span> <span class="ident">clamp</span>(<span class="ident">pt</span>.<span class="ident">x</span>, <span class="ident">inner_rect</span>.<span class="ident">x1</span>, <span class="ident">inner_rect</span>.<span class="ident">x2</span>);
<span class="ident">pt</span>.<span class="ident">y</span> <span class="op">=</span> <span class="ident">clamp</span>(<span class="ident">pt</span>.<span class="ident">y</span>, <span class="ident">inner_rect</span>.<span class="ident">y1</span>, <span class="ident">inner_rect</span>.<span class="ident">y2</span>);
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">inner_rect</span>.<span class="ident">contains</span>(<span class="ident">pt</span>) <span class="op">&amp;&amp;</span> <span class="ident">ctx</span>.<span class="ident">input</span>.<span class="ident">left_mouse_button_pressed</span>() {
<span class="self">self</span>.<span class="ident">dragging</span> <span class="op">=</span> <span class="bool-val">true</span>;
} <span class="kw">else</span> {
<span class="kw">return</span> <span class="prelude-val">None</span>;
}
<span class="kw">let</span> <span class="ident">percent_x</span> <span class="op">=</span> (<span class="ident">pt</span>.<span class="ident">x</span> <span class="op">-</span> <span class="ident">inner_rect</span>.<span class="ident">x1</span>) <span class="op">/</span> <span class="ident">inner_rect</span>.<span class="ident">width</span>();
<span class="kw">let</span> <span class="ident">percent_y</span> <span class="op">=</span> (<span class="ident">pt</span>.<span class="ident">y</span> <span class="op">-</span> <span class="ident">inner_rect</span>.<span class="ident">y1</span>) <span class="op">/</span> <span class="ident">inner_rect</span>.<span class="ident">height</span>();
<span class="kw">let</span> <span class="ident">map_pt</span> <span class="op">=</span> <span class="ident">Pt2D</span>::<span class="ident">new</span>(
(<span class="self">self</span>.<span class="ident">offset_x</span> <span class="op">+</span> <span class="ident">percent_x</span> <span class="op">*</span> <span class="ident">inner_rect</span>.<span class="ident">width</span>()) <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>,
(<span class="self">self</span>.<span class="ident">offset_y</span> <span class="op">+</span> <span class="ident">percent_y</span> <span class="op">*</span> <span class="ident">inner_rect</span>.<span class="ident">height</span>()) <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>,
);
<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_on_map_pt</span>(<span class="ident">map_pt</span>);
}
<span class="prelude-val">None</span>
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">draw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">draw</span>(<span class="ident">g</span>);
<span class="kw">if</span> <span class="op">!</span><span class="self">self</span>.<span class="ident">zoomed</span> {
<span class="kw">return</span>;
}
<span class="kw">let</span> <span class="ident">inner_rect</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">rect_of</span>(<span class="string">&quot;minimap&quot;</span>).<span class="ident">clone</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">map_bounds</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>().<span class="ident">clone</span>();
<span class="comment">// Adjust bounds to account for the current pan and zoom</span>
<span class="ident">map_bounds</span>.<span class="ident">min_x</span> <span class="op">=</span> (<span class="ident">map_bounds</span>.<span class="ident">min_x</span> <span class="op">+</span> <span class="self">self</span>.<span class="ident">offset_x</span>) <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="ident">map_bounds</span>.<span class="ident">min_y</span> <span class="op">=</span> (<span class="ident">map_bounds</span>.<span class="ident">min_y</span> <span class="op">+</span> <span class="self">self</span>.<span class="ident">offset_y</span>) <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="ident">map_bounds</span>.<span class="ident">max_x</span> <span class="op">=</span> <span class="ident">map_bounds</span>.<span class="ident">min_x</span> <span class="op">+</span> <span class="ident">inner_rect</span>.<span class="ident">width</span>() <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="ident">map_bounds</span>.<span class="ident">max_y</span> <span class="op">=</span> <span class="ident">map_bounds</span>.<span class="ident">min_y</span> <span class="op">+</span> <span class="ident">inner_rect</span>.<span class="ident">height</span>() <span class="op">/</span> <span class="self">self</span>.<span class="ident">zoom</span>;
<span class="ident">g</span>.<span class="ident">fork</span>(
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">map_bounds</span>.<span class="ident">min_x</span>, <span class="ident">map_bounds</span>.<span class="ident">min_y</span>),
<span class="ident">ScreenPt</span>::<span class="ident">new</span>(<span class="ident">inner_rect</span>.<span class="ident">x1</span>, <span class="ident">inner_rect</span>.<span class="ident">y1</span>),
<span class="self">self</span>.<span class="ident">zoom</span>,
<span class="prelude-val">None</span>,
);
<span class="ident">g</span>.<span class="ident">enable_clipping</span>(<span class="ident">inner_rect</span>);
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">boundary_polygon</span>);
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">draw_all_areas</span>);
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">draw_all_unzoomed_parking_lots</span>);
<span class="ident">g</span>.<span class="ident">redraw</span>(
<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">draw_map</span>
.<span class="ident">draw_all_unzoomed_roads_and_intersections</span>,
);
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">draw_map</span>.<span class="ident">draw_all_buildings</span>);
<span class="comment">// Not the building or parking lot paths</span>
<span class="kw">fn</span> <span class="ident">draw_extra</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">l</span>) <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">layer</span> {
<span class="ident">l</span>.<span class="ident">draw_minimap</span>(<span class="ident">g</span>);
}
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">cache</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">agents</span>.<span class="ident">borrow_mut</span>();
<span class="ident">cache</span>.<span class="ident">draw_unzoomed_agents</span>(<span class="ident">g</span>, <span class="ident">app</span>);
}
<span class="comment">// The cursor</span>
<span class="kw">let</span> (<span class="ident">x1</span>, <span class="ident">y1</span>) <span class="op">=</span> {
<span class="kw">let</span> <span class="ident">pt</span> <span class="op">=</span> <span class="ident">g</span>.<span class="ident">canvas</span>.<span class="ident">screen_to_map</span>(<span class="ident">ScreenPt</span>::<span class="ident">new</span>(<span class="number">0.0</span>, <span class="number">0.0</span>));
(<span class="ident">pt</span>.<span class="ident">x</span>(), <span class="ident">pt</span>.<span class="ident">y</span>())
};
<span class="kw">let</span> (<span class="ident">x2</span>, <span class="ident">y2</span>) <span class="op">=</span> {
<span class="kw">let</span> <span class="ident">pt</span> <span class="op">=</span> <span class="ident">g</span>
.<span class="ident">canvas</span>
.<span class="ident">screen_to_map</span>(<span class="ident">ScreenPt</span>::<span class="ident">new</span>(<span class="ident">g</span>.<span class="ident">canvas</span>.<span class="ident">window_width</span>, <span class="ident">g</span>.<span class="ident">canvas</span>.<span class="ident">window_height</span>));
(<span class="ident">pt</span>.<span class="ident">x</span>(), <span class="ident">pt</span>.<span class="ident">y</span>())
};
<span class="ident">g</span>.<span class="ident">draw_polygon</span>(
<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">minimap_cursor</span>,
<span class="ident">Ring</span>::<span class="ident">must_new</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">x1</span>, <span class="ident">y1</span>),
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">x2</span>, <span class="ident">y1</span>),
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">x2</span>, <span class="ident">y2</span>),
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">x1</span>, <span class="ident">y2</span>),
<span class="ident">Pt2D</span>::<span class="ident">new</span>(<span class="ident">x1</span>, <span class="ident">y1</span>),
])
.<span class="ident">to_outline</span>(<span class="ident">Distance</span>::<span class="ident">meters</span>(<span class="number">20.0</span>)),
);
<span class="ident">g</span>.<span class="ident">disable_clipping</span>();
<span class="ident">g</span>.<span class="ident">unfork</span>();
<span class="kw">fn</span> <span class="ident">make_unzoomed_panel</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Panel</span> {
<span class="ident">Panel</span>::<span class="ident">new</span>(<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">make_tool_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>).<span class="ident">align_right</span>(),
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">make_vert_viz_panel</span>(<span class="ident">ctx</span>)
.<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>.<span class="ident">panel_bg</span>)
.<span class="ident">padding</span>(<span class="number">16</span>),
]))
.<span class="ident">aligned</span>(
<span class="ident">HorizontalAlignment</span>::<span class="ident">Right</span>,
<span class="ident">VerticalAlignment</span>::<span class="ident">BottomAboveOSD</span>,
)
.<span class="ident">build_custom</span>(<span class="ident">ctx</span>)
}
<span class="kw">fn</span> <span class="ident">make_legend</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span> {
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">make_horiz_viz_panel</span>(<span class="ident">ctx</span>)
}
<span class="kw">fn</span> <span class="ident">make_zoomed_side_panel</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span> {
<span class="ident">make_tool_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)
}
<span class="kw">fn</span> <span class="ident">panel_clicked</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>, <span class="ident">action</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">action</span> {
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;search&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Navigator</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom out fully&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Warping</span>::<span class="ident">new</span>(
<span class="ident">ctx</span>,
<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_bounds</span>().<span class="ident">get_rectangle</span>().<span class="ident">center</span>(),
<span class="prelude-val">Some</span>(<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">min_zoom</span>()),
<span class="prelude-val">None</span>,
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">app</span>.<span class="ident">primary</span>,
)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom in fully&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Warping</span>::<span class="ident">new</span>(
<span class="ident">ctx</span>,
<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">center_to_map_pt</span>(),
<span class="prelude-val">Some</span>(<span class="number">10.0</span>),
<span class="prelude-val">None</span>,
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">app</span>.<span class="ident">primary</span>,
)));
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;change layers&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">PickLayer</span>::<span class="ident">pick</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)));
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">unreachable</span><span class="macro">!</span>(),
}
}
<span class="kw">fn</span> <span class="ident">panel_changed</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>, <span class="ident">panel</span>: <span class="kw-2">&amp;</span><span class="ident">Panel</span>) {
<span class="kw">if</span> <span class="ident">panel</span>.<span class="ident">has_widget</span>(<span class="string">&quot;Car&quot;</span>) {
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">agents</span>
.<span class="ident">borrow_mut</span>()
.<span class="ident">unzoomed_agents</span>
.<span class="ident">update</span>(<span class="ident">panel</span>);
}
}
}

View File

@ -492,7 +492,7 @@
<span class="ident">VerticalAlignment</span>, <span class="ident">Widget</span>,
};
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">minimap</span>::<span class="ident">Minimap</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">minimap</span>::<span class="ident">MinimapController</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">warp</span>::<span class="ident">Warping</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::<span class="ident">App</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::<span class="ident">Transition</span>;

View File

@ -114,7 +114,7 @@
<span class="doccomment">/// The output of `rustdoc -V`</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">RUSTDOC_VERSION</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;rustdoc 1.48.0 (7eac88abb 2020-11-16)&quot;</span>;
<span class="doccomment">/// The built-time in RFC2822, UTC</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">BUILT_TIME_UTC</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;Mon, 07 Dec 2020 22:58:15 +0000&quot;</span>;
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">BUILT_TIME_UTC</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;Mon, 07 Dec 2020 23:55:34 +0000&quot;</span>;
<span class="doccomment">/// The target architecture, given by `cfg!(target_arch)`.</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">CFG_TARGET_ARCH</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;x86_64&quot;</span>;
<span class="doccomment">/// The endianness, given by `cfg!(target_endian)`.</span>

View File

@ -1440,7 +1440,7 @@
<span class="kw">use</span> <span class="ident">abstutil</span>::<span class="ident">Timer</span>;
<span class="kw">use</span> <span class="ident">geom</span>::{<span class="ident">ArrowCap</span>, <span class="ident">Distance</span>, <span class="ident">Duration</span>, <span class="ident">PolyLine</span>, <span class="ident">Pt2D</span>, <span class="ident">Time</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::{<span class="ident">grey_out_map</span>, <span class="ident">PopupMsg</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::{<span class="ident">grey_out_map</span>, <span class="ident">Minimap</span>, <span class="ident">PopupMsg</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">ID</span>;
<span class="kw">use</span> <span class="ident">map_model</span>::<span class="ident">raw</span>::<span class="ident">OriginalRoad</span>;
<span class="kw">use</span> <span class="ident">map_model</span>::{<span class="ident">osm</span>, <span class="ident">BuildingID</span>, <span class="ident">Map</span>, <span class="ident">Position</span>};
@ -1455,7 +1455,7 @@
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::{<span class="ident">App</span>, <span class="ident">Transition</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">challenges</span>::<span class="ident">cutscene</span>::<span class="ident">CutsceneBuilder</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">common</span>::{<span class="ident">tool_panel</span>, <span class="ident">Minimap</span>, <span class="ident">Warping</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">common</span>::{<span class="ident">tool_panel</span>, <span class="ident">MinimapController</span>, <span class="ident">Warping</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">edit</span>::<span class="ident">EditMode</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">sandbox</span>::<span class="ident">gameplay</span>::{<span class="ident">GameplayMode</span>, <span class="ident">GameplayState</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">sandbox</span>::{
@ -2340,7 +2340,7 @@
<span class="comment">// The minimap is hidden at low zoom levels</span>
<span class="kw">let</span> <span class="ident">orig_zoom</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span>;
<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">=</span> <span class="number">100.0</span>;
<span class="kw">let</span> <span class="ident">minimap</span> <span class="op">=</span> <span class="ident">Minimap</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">let</span> <span class="ident">minimap</span> <span class="op">=</span> <span class="ident">Minimap</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">MinimapController</span>);
<span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">=</span> <span class="ident">orig_zoom</span>;
<span class="kw">let</span> <span class="ident">map</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>;
@ -2608,7 +2608,7 @@
overview of all activity. You can click and drag it just like the normal \
map.&quot;</span>,
],
<span class="ident">arrow</span>(<span class="ident">minimap</span>.<span class="ident">panel</span>.<span class="ident">center_of</span>(<span class="string">&quot;minimap&quot;</span>)),
<span class="ident">arrow</span>(<span class="ident">minimap</span>.<span class="ident">get_panel</span>().<span class="ident">center_of</span>(<span class="string">&quot;minimap&quot;</span>)),
)
.<span class="ident">msg</span>(
<span class="macro">vec</span><span class="macro">!</span>[
@ -2618,7 +2618,7 @@
<span class="string">&quot;- bus stops&quot;</span>,
<span class="string">&quot;- how much parking is filled up&quot;</span>,
],
<span class="ident">arrow</span>(<span class="ident">minimap</span>.<span class="ident">panel</span>.<span class="ident">center_of</span>(<span class="string">&quot;change layers&quot;</span>)),
<span class="ident">arrow</span>(<span class="ident">minimap</span>.<span class="ident">get_panel</span>().<span class="ident">center_of</span>(<span class="string">&quot;change layers&quot;</span>)),
)
.<span class="ident">msg</span>(
<span class="macro">vec</span><span class="macro">!</span>[

View File

@ -905,7 +905,7 @@
<span class="kw">use</span> <span class="ident">abstutil</span>::<span class="ident">prettyprint_usize</span>;
<span class="kw">use</span> <span class="ident">geom</span>::{<span class="ident">Circle</span>, <span class="ident">Distance</span>, <span class="ident">Pt2D</span>, <span class="ident">Time</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">load</span>::{<span class="ident">FileLoader</span>, <span class="ident">MapLoader</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::{<span class="ident">ChooseSomething</span>, <span class="ident">PopupMsg</span>, <span class="ident">TurnExplorer</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">tools</span>::{<span class="ident">ChooseSomething</span>, <span class="ident">Minimap</span>, <span class="ident">PopupMsg</span>, <span class="ident">TurnExplorer</span>};
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">AppLike</span>;
<span class="kw">use</span> <span class="ident">map_gui</span>::<span class="ident">ID</span>;
<span class="kw">use</span> <span class="ident">sim</span>::{<span class="ident">Analytics</span>, <span class="ident">Scenario</span>};
@ -916,7 +916,7 @@
<span class="kw">use</span> <span class="self">self</span>::<span class="ident">misc_tools</span>::{<span class="ident">RoutePreview</span>, <span class="ident">TrafficRecorder</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">app</span>::{<span class="ident">App</span>, <span class="ident">Transition</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">common</span>::{<span class="ident">tool_panel</span>, <span class="ident">CommonState</span>, <span class="ident">Minimap</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">common</span>::{<span class="ident">tool_panel</span>, <span class="ident">CommonState</span>, <span class="ident">MinimapController</span>};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">debug</span>::<span class="ident">DebugMode</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">edit</span>::{
<span class="ident">can_edit_lane</span>, <span class="ident">EditMode</span>, <span class="ident">LaneEditor</span>, <span class="ident">SaveEdits</span>, <span class="ident">StopSignEditor</span>, <span class="ident">TrafficSignalEditor</span>,
@ -951,7 +951,7 @@
<span class="ident">time_panel</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">TimePanel</span><span class="op">&gt;</span>,
<span class="ident">speed</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">SpeedControls</span><span class="op">&gt;</span>,
<span class="kw">pub</span> <span class="ident">agent_meter</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">AgentMeter</span><span class="op">&gt;</span>,
<span class="ident">minimap</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Minimap</span><span class="op">&gt;</span>,
<span class="ident">minimap</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Minimap</span><span class="op">&lt;</span><span class="ident">App</span>, <span class="ident">MinimapController</span><span class="op">&gt;</span><span class="op">&gt;</span>,
}
<span class="kw">impl</span> <span class="ident">SandboxMode</span> {
@ -1039,7 +1039,7 @@
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="ident">m</span>.<span class="ident">event</span>(<span class="ident">ctx</span>, <span class="ident">app</span>) {
<span class="kw">return</span> <span class="ident">t</span>;
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="ident">PickLayer</span>::<span class="ident">update</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="kw-2">&amp;</span><span class="ident">m</span>.<span class="ident">panel</span>) {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="ident">PickLayer</span>::<span class="ident">update</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">m</span>.<span class="ident">get_panel</span>()) {
<span class="kw">return</span> <span class="ident">t</span>;
}
}
@ -1773,7 +1773,7 @@
<span class="prelude-val">None</span>
},
<span class="ident">minimap</span>: <span class="kw">if</span> <span class="ident">gameplay</span>.<span class="ident">has_minimap</span>() {
<span class="prelude-val">Some</span>(<span class="ident">Minimap</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>))
<span class="prelude-val">Some</span>(<span class="ident">Minimap</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">MinimapController</span>))
} <span class="kw">else</span> {
<span class="prelude-val">None</span>
},

View File

@ -376,6 +376,53 @@
<span id="373">373</span>
<span id="374">374</span>
<span id="375">375</span>
<span id="376">376</span>
<span id="377">377</span>
<span id="378">378</span>
<span id="379">379</span>
<span id="380">380</span>
<span id="381">381</span>
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
<span id="421">421</span>
<span id="422">422</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">marker</span>::<span class="ident">PhantomData</span>;
@ -386,7 +433,6 @@
<span class="ident">Panel</span>, <span class="ident">ScreenPt</span>, <span class="ident">Spinner</span>, <span class="ident">Transition</span>, <span class="ident">VerticalAlignment</span>, <span class="ident">Widget</span>,
};
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">tools</span>::<span class="ident">Navigator</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">AppLike</span>;
<span class="comment">// TODO Some of the math in here might assume map bound minimums start at (0, 0).</span>
@ -395,9 +441,10 @@
<span class="ident">app_type</span>: <span class="ident">PhantomData</span><span class="op">&lt;</span><span class="ident">A</span><span class="op">&gt;</span>,
<span class="ident">dragging</span>: <span class="ident">bool</span>,
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="ident">panel</span>: <span class="ident">Panel</span>,
<span class="ident">panel</span>: <span class="ident">Panel</span>,
<span class="comment">// Update panel when other things change</span>
<span class="ident">zoomed</span>: <span class="ident">bool</span>,
<span class="ident">layer</span>: <span class="ident">bool</span>,
<span class="comment">// [0, 3], with 0 meaning the most unzoomed</span>
<span class="ident">zoom_lvl</span>: <span class="ident">usize</span>,
@ -407,9 +454,40 @@
<span class="ident">offset_y</span>: <span class="ident">f64</span>,
}
<span class="doccomment">/// Customize the appearance and behavior of a minimap.</span>
<span class="kw">pub</span> <span class="kw">trait</span> <span class="ident">MinimapControls</span><span class="op">&lt;</span><span class="ident">A</span>: <span class="ident">AppLike</span><span class="op">&gt;</span> {
<span class="doccomment">/// Should the user be able to control the z-order visible? The control is only present when</span>
<span class="doccomment">/// zoomed in, placed beneath the zoom column.</span>
<span class="kw">fn</span> <span class="ident">has_zorder</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">bool</span>;
<span class="kw">fn</span> <span class="ident">make_legend</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span>;
<span class="doccomment">/// Is there some additional layer displayed on the minimap? If this changes, the panel gets</span>
<span class="doccomment">/// recalculated.</span>
<span class="kw">fn</span> <span class="ident">has_layer</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">bool</span> {
<span class="bool-val">false</span>
}
<span class="doccomment">/// Draw extra stuff on the minimap, just pulling from the app.</span>
<span class="kw">fn</span> <span class="ident">draw_extra</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) {}
<span class="doccomment">/// When unzoomed, display this panel. By default, no controls when unzoomed.</span>
<span class="kw">fn</span> <span class="ident">make_unzoomed_panel</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Panel</span> {
<span class="ident">Panel</span>::<span class="ident">empty</span>(<span class="ident">ctx</span>)
}
<span class="doccomment">/// A row beneath the minimap in the zoomed view, usually used as a legend for things on the</span>
<span class="doccomment">/// minimap.</span>
<span class="kw">fn</span> <span class="ident">make_legend</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span> {
<span class="ident">Widget</span>::<span class="ident">nothing</span>()
}
<span class="doccomment">/// Controls to be placed to the left to the zoomed-in panel</span>
<span class="kw">fn</span> <span class="ident">make_zoomed_side_panel</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span> {
<span class="ident">Widget</span>::<span class="ident">nothing</span>()
}
<span class="doccomment">/// If a button is clicked that was produced by some method in this trait, respond to it here.</span>
<span class="kw">fn</span> <span class="ident">panel_clicked</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">A</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&lt;</span><span class="ident">A</span><span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="macro">unreachable</span><span class="macro">!</span>()
}
<span class="doccomment">/// Called for `Outcome::Changed` on the panel.</span>
<span class="kw">fn</span> <span class="ident">panel_changed</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">A</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">Panel</span>) {}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">A</span>: <span class="ident">AppLike</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>, <span class="ident">T</span>: <span class="ident">MinimapControls</span><span class="op">&lt;</span><span class="ident">A</span><span class="op">&gt;</span><span class="op">&gt;</span> <span class="ident">Minimap</span><span class="op">&lt;</span><span class="ident">A</span>, <span class="ident">T</span><span class="op">&gt;</span> {
@ -418,6 +496,7 @@
<span class="comment">// minimap. Arbitrary and probably pretty weird.</span>
<span class="kw">let</span> <span class="ident">bounds</span> <span class="op">=</span> <span class="ident">app</span>.<span class="ident">map</span>().<span class="ident">get_bounds</span>();
<span class="kw">let</span> <span class="ident">base_zoom</span> <span class="op">=</span> <span class="number">0.15</span> <span class="op">*</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">window_width</span> <span class="op">/</span> <span class="ident">bounds</span>.<span class="ident">width</span>().<span class="ident">min</span>(<span class="ident">bounds</span>.<span class="ident">height</span>());
<span class="kw">let</span> <span class="ident">layer</span> <span class="op">=</span> <span class="ident">controls</span>.<span class="ident">has_layer</span>(<span class="ident">app</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">m</span> <span class="op">=</span> <span class="ident">Minimap</span> {
<span class="ident">controls</span>,
<span class="ident">app_type</span>: <span class="ident">PhantomData</span>,
@ -425,6 +504,7 @@
<span class="ident">dragging</span>: <span class="bool-val">false</span>,
<span class="ident">panel</span>: <span class="ident">Panel</span>::<span class="ident">empty</span>(<span class="ident">ctx</span>),
<span class="ident">zoomed</span>: <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&gt;</span><span class="op">=</span> <span class="ident">app</span>.<span class="ident">opts</span>().<span class="ident">min_zoom_for_detail</span>,
<span class="ident">layer</span>,
<span class="ident">zoom_lvl</span>: <span class="number">0</span>,
<span class="ident">base_zoom</span>,
@ -441,7 +521,7 @@
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">recreate_panel</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">A</span>) {
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&lt;</span> <span class="ident">app</span>.<span class="ident">opts</span>().<span class="ident">min_zoom_for_detail</span> {
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel</span>::<span class="ident">empty</span>(<span class="ident">ctx</span>);
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">make_unzoomed_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">return</span>;
}
@ -508,12 +588,15 @@
.<span class="ident">centered_horiz</span>(),
]);
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel</span>::<span class="ident">new</span>(<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">Widget</span>::<span class="ident">col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">minimap_controls</span>, <span class="ident">zoom_col</span>]),
<span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">make_legend</span>(<span class="ident">ctx</span>, <span class="ident">app</span>),
])
.<span class="ident">padding</span>(<span class="number">16</span>)
.<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>().<span class="ident">panel_bg</span>)]))
<span class="self">self</span>.<span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel</span>::<span class="ident">new</span>(<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">make_zoomed_side_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>),
<span class="ident">Widget</span>::<span class="ident">col</span>(<span class="macro">vec</span><span class="macro">!</span>[
<span class="ident">Widget</span>::<span class="ident">row</span>(<span class="macro">vec</span><span class="macro">!</span>[<span class="ident">minimap_controls</span>, <span class="ident">zoom_col</span>]),
<span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">make_legend</span>(<span class="ident">ctx</span>, <span class="ident">app</span>),
])
.<span class="ident">padding</span>(<span class="number">16</span>)
.<span class="ident">bg</span>(<span class="ident">app</span>.<span class="ident">cs</span>().<span class="ident">panel_bg</span>),
]))
.<span class="ident">aligned</span>(
<span class="ident">HorizontalAlignment</span>::<span class="ident">Right</span>,
<span class="ident">VerticalAlignment</span>::<span class="ident">BottomAboveOSD</span>,
@ -561,10 +644,12 @@
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">event</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">A</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&lt;</span><span class="ident">A</span><span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">zoomed</span> <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">cam_zoom</span> <span class="op">&gt;</span><span class="op">=</span> <span class="ident">app</span>.<span class="ident">opts</span>().<span class="ident">min_zoom_for_detail</span>;
<span class="kw">if</span> <span class="ident">zoomed</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">zoomed</span> {
<span class="kw">let</span> <span class="ident">layer</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">has_layer</span>(<span class="ident">app</span>);
<span class="kw">if</span> <span class="ident">zoomed</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">zoomed</span> <span class="op">|</span><span class="op">|</span> <span class="ident">layer</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">layer</span> {
<span class="kw">let</span> <span class="ident">just_zoomed_in</span> <span class="op">=</span> <span class="ident">zoomed</span> <span class="op">&amp;&amp;</span> <span class="op">!</span><span class="self">self</span>.<span class="ident">zoomed</span>;
<span class="self">self</span>.<span class="ident">zoomed</span> <span class="op">=</span> <span class="ident">zoomed</span>;
<span class="self">self</span>.<span class="ident">layer</span> <span class="op">=</span> <span class="ident">layer</span>;
<span class="self">self</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">if</span> <span class="ident">just_zoomed_in</span> {
@ -645,13 +730,17 @@
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;zoom to level 4&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">set_zoom</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="number">3</span>);
}
<span class="ident">x</span> <span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;search&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition</span>::<span class="ident">Push</span>(<span class="ident">Navigator</span>::<span class="ident">new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>)));
<span class="ident">x</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">transition</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">panel_clicked</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="kw-2">&amp;</span><span class="ident">x</span>) {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">transition</span>);
}
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">unreachable</span><span class="macro">!</span>(),
},
<span class="ident">Outcome</span>::<span class="ident">Changed</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="ident">app</span>.<span class="ident">mut_draw_map</span>().<span class="ident">show_zorder</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">spinner</span>(<span class="string">&quot;zorder&quot;</span>);
<span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">panel_changed</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">panel</span>);
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">has_widget</span>(<span class="string">&quot;zorder&quot;</span>) {
<span class="ident">app</span>.<span class="ident">mut_draw_map</span>().<span class="ident">show_zorder</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">panel</span>.<span class="ident">spinner</span>(<span class="string">&quot;zorder&quot;</span>);
}
<span class="self">self</span>.<span class="ident">recreate_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> {}
@ -724,6 +813,7 @@
<span class="kw">for</span> <span class="ident">draw</span> <span class="kw">in</span> <span class="ident">extra</span> {
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="ident">draw</span>);
}
<span class="self">self</span>.<span class="ident">controls</span>.<span class="ident">draw_extra</span>(<span class="ident">g</span>, <span class="ident">app</span>);
<span class="comment">// Not the building or parking lot paths</span>
<span class="comment">// The cursor</span>
@ -751,6 +841,10 @@
<span class="ident">g</span>.<span class="ident">disable_clipping</span>();
<span class="ident">g</span>.<span class="ident">unfork</span>();
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_panel</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="kw-2">&amp;</span><span class="ident">Panel</span> {
<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">panel</span>
}
}
</pre></div>
</section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../";window.currentCrate = "map_gui";</script><script src="../../../main.js"></script><script src="../../../source-script.js"></script><script src="../../../source-files.js"></script><script defer src="../../../search-index.js"></script></body></html>