void ChartControl::on_paint(Canvas &canvas) { assert(glide_computer != NULL); const ComputerSettings &settings_computer = blackboard->GetComputerSettings(); const MapSettings &settings_map = blackboard->GetMapSettings(); const MoreData &basic = blackboard->Basic(); const DerivedInfo &calculated = blackboard->Calculated(); #ifdef ENABLE_OPENGL /* enable clipping */ GLCanvasScissor scissor(canvas); #endif canvas.clear(COLOR_WHITE); canvas.SetTextColor(COLOR_BLACK); canvas.Select(Fonts::map); PixelRect rcgfx = get_client_rect(); // background is painted in the base-class const FlightStatisticsRenderer fs(glide_computer->GetFlightStats(), chart_look, look->map); switch (page) { case ANALYSIS_PAGE_BAROGRAPH: fs.RenderBarograph(canvas, rcgfx, basic, calculated, protected_task_manager); break; case ANALYSIS_PAGE_CLIMB: fs.RenderClimb(canvas, rcgfx, settings_computer.glide_polar_task); break; case ANALYSIS_PAGE_THERMAL_BAND: { OrderedTaskBehaviour otb; if (protected_task_manager != NULL) { otb = protected_task_manager->GetOrderedTaskBehaviour(); } ThermalBandRenderer renderer(thermal_band_look, chart_look); renderer.DrawThermalBand(basic, calculated, settings_computer, canvas, rcgfx, settings_computer.task, false, &otb); } break; case ANALYSIS_PAGE_WIND: fs.RenderWind(canvas, rcgfx, basic, glide_computer->GetWindStore()); break; case ANALYSIS_PAGE_POLAR: fs.RenderGlidePolar(canvas, rcgfx, calculated.climb_history, settings_computer, settings_computer.glide_polar_task); break; case ANALYSIS_PAGE_TEMPTRACE: fs.RenderTemperature(canvas, rcgfx, glide_computer->GetCuSonde()); break; case ANALYSIS_PAGE_TASK: if (protected_task_manager != NULL) { const TraceComputer *trace_computer = glide_computer != NULL ? &glide_computer->GetTraceComputer() : NULL; fs.RenderTask(canvas, rcgfx, basic, calculated, settings_computer, settings_map, *protected_task_manager, trace_computer); } break; case ANALYSIS_PAGE_OLC: if (glide_computer != NULL) { fs.RenderOLC(canvas, rcgfx, basic, calculated, settings_computer, settings_map, calculated.contest_stats, glide_computer->GetTraceComputer()); } break; case ANALYSIS_PAGE_TASK_SPEED: if (protected_task_manager != NULL) { ProtectedTaskManager::Lease task(*protected_task_manager); fs.RenderSpeed(canvas, rcgfx, basic, calculated, task); } break; default: // should never get here! break; } }
void ChartControl::OnPaint(Canvas &canvas) { const ComputerSettings &settings_computer = blackboard.GetComputerSettings(); const MapSettings &settings_map = blackboard.GetMapSettings(); const MoreData &basic = blackboard.Basic(); const DerivedInfo &calculated = blackboard.Calculated(); const ProtectedTaskManager *const protected_task_manager = &glide_computer.GetProtectedTaskManager(); #ifdef ENABLE_OPENGL /* enable clipping */ GLCanvasScissor scissor(canvas); #endif canvas.Clear(COLOR_WHITE); canvas.SetTextColor(COLOR_BLACK); PixelRect rcgfx = GetClientRect(); // background is painted in the base-class switch (page) { case AnalysisPage::BAROGRAPH: RenderBarograph(canvas, rcgfx, chart_look, cross_section_look, glide_computer.GetFlightStats(), basic, calculated, protected_task_manager); break; case AnalysisPage::CLIMB: RenderClimbChart(canvas, rcgfx, chart_look, glide_computer.GetFlightStats(), settings_computer.polar.glide_polar_task); break; case AnalysisPage::THERMAL_BAND: { OrderedTaskSettings otb; if (protected_task_manager != NULL) { otb = protected_task_manager->GetOrderedTaskSettings(); } thermal_band_renderer.DrawThermalBand(basic, calculated, settings_computer, canvas, rcgfx, settings_computer.task, false, &otb); } break; case AnalysisPage::WIND: RenderWindChart(canvas, rcgfx, chart_look, glide_computer.GetFlightStats(), basic, glide_computer.GetWindStore()); break; case AnalysisPage::POLAR: RenderGlidePolar(canvas, rcgfx, chart_look, calculated.climb_history, settings_computer, settings_computer.polar.glide_polar_task); break; case AnalysisPage::TEMPTRACE: RenderTemperatureChart(canvas, rcgfx, chart_look, glide_computer.GetCuSonde()); break; case AnalysisPage::TASK: if (protected_task_manager != NULL) { const auto &trace_computer = glide_computer.GetTraceComputer(); fs_renderer.RenderTask(canvas, rcgfx, basic, settings_computer, settings_map, *protected_task_manager, &trace_computer); } break; case AnalysisPage::OLC: fs_renderer.RenderOLC(canvas, rcgfx, basic, settings_computer, settings_map, calculated.contest_stats, glide_computer.GetTraceComputer(), glide_computer.GetRetrospective()); break; case AnalysisPage::TASK_SPEED: if (protected_task_manager != NULL) { ProtectedTaskManager::Lease task(*protected_task_manager); RenderSpeed(canvas, rcgfx, chart_look, glide_computer.GetFlightStats(), basic, calculated, task); } break; case AnalysisPage::AIRSPACE: cross_section_renderer.Paint(canvas, rcgfx); break; default: // should never get here! break; } }