From 79424e86dd7aa28c1b25868d86fa8ebffc801593 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 10 Mar 2025 12:45:14 -0400 Subject: Optimized AreaPopup indicators The list of indicators and the size of the window are calculated only when necessary (new connection, DPI changed, or hunt panel settings changed) and otherwise all we do is redraw the image. --- src/tracker_frame.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/tracker_frame.cpp') diff --git a/src/tracker_frame.cpp b/src/tracker_frame.cpp index 6a4ab2e..fa68582 100644 --- a/src/tracker_frame.cpp +++ b/src/tracker_frame.cpp @@ -255,8 +255,9 @@ void TrackerFrame::OnSettings(wxCommandEvent &event) { GetTrackerConfig().track_position = dlg.GetTrackPosition(); GetTrackerConfig().Save(); - UpdateIndicators( - StateUpdate{.cleared_locations = true, .player_position = true}); + UpdateIndicators(StateUpdate{.cleared_locations = true, + .player_position = true, + .changed_settings = true}); } } @@ -328,7 +329,7 @@ void TrackerFrame::OnSashPositionChanged(wxSplitterEvent& event) { } void TrackerFrame::OnStateReset(wxCommandEvent &event) { - tracker_panel_->UpdateIndicators(); + tracker_panel_->UpdateIndicators(/*reset=*/true); achievements_pane_->UpdateIndicators(); items_pane_->ResetIndicators(); options_pane_->OnConnect(); @@ -350,7 +351,7 @@ void TrackerFrame::OnStateChanged(StateChangedEvent &event) { panels_panel_->SetPanelsMode(); notebook_->AddPage(panels_panel_, "Panels"); } - panels_panel_->UpdateIndicators(); + panels_panel_->UpdateIndicators(/*reset=*/false); if (notebook_->GetSelection() == 2) { Refresh(); } @@ -361,10 +362,13 @@ void TrackerFrame::OnStateChanged(StateChangedEvent &event) { if (!state.items.empty() || !state.paintings.empty() || state.cleared_locations || (state.hunt_panels && GetTrackerConfig().show_hunt_panels)) { - tracker_panel_->UpdateIndicators(); + // TODO: The only real reason to reset tracker_panel during an active + // connection is if the hunt panels setting changes. If we remove hunt + // panels later, we can get rid of this. + tracker_panel_->UpdateIndicators(/*reset=*/state.changed_settings); subway_map_->UpdateIndicators(); if (panels_panel_ != nullptr) { - panels_panel_->UpdateIndicators(); + panels_panel_->UpdateIndicators(/*reset=*/false); } Refresh(); } else if (state.player_position && GetTrackerConfig().track_position) { -- cgit 1.4.1