void FlightStatisticsRenderer::RenderTask(Canvas &canvas, const PixelRect rc, const NMEAInfo &nmea_info, const ComputerSettings &settings_computer, const MapSettings &settings_map, const ProtectedTaskManager &_task_manager, const TraceComputer *trace_computer) const { ChartRenderer chart(chart_look, canvas, rc); ChartProjection proj; const PixelRect &rc_chart = chart.GetChartRect(); { ProtectedTaskManager::Lease task_manager(_task_manager); const OrderedTask &task = task_manager->GetOrderedTask(); if (!task.CheckTask()) { chart.DrawNoData(); return; } proj.Set(rc_chart, task); OZRenderer ozv(map_look.task, map_look.airspace, settings_map.airspace); TaskPointRenderer tpv(canvas, proj, map_look.task, task.GetTaskProjection(), ozv, false, TaskPointRenderer::ALL, nmea_info.location_available ? nmea_info.location : GeoPoint::Invalid()); ::TaskRenderer dv(tpv, proj.GetScreenBounds()); dv.Draw(task); } if (trace_computer != nullptr) trail_renderer.Draw(canvas, *trace_computer, proj, 0); if (nmea_info.location_available) { auto aircraft_pos = proj.GeoToScreen(nmea_info.location); AircraftRenderer::Draw(canvas, settings_map, map_look.aircraft, nmea_info.attitude.heading, aircraft_pos); } RenderMapScale(canvas, proj, rc_chart, map_look.overlay); }
void FlightStatisticsRenderer::RenderTask(Canvas &canvas, const PixelRect rc, const NMEAInfo &nmea_info, const DerivedInfo &calculated, const ComputerSettings &settings_computer, const MapSettings &settings_map, const ProtectedTaskManager &_task_manager, const TraceComputer *trace_computer) const { ChartRenderer chart(chart_look, canvas, rc); ChartProjection proj; { ProtectedTaskManager::Lease task_manager(_task_manager); const OrderedTask &task = task_manager->GetOrderedTask(); if (!task.CheckTask()) { chart.DrawNoData(); return; } proj.Set(rc, task, nmea_info.location); OZRenderer ozv(map_look.task, map_look.airspace, settings_map.airspace); TaskPointRenderer tpv(canvas, proj, map_look.task, task.GetTaskProjection(), ozv, false, TaskPointRenderer::ALL, nmea_info.location_available, nmea_info.location); ::TaskRenderer dv(tpv, proj.GetScreenBounds()); dv.Draw(task); } if (trace_computer != NULL) trail_renderer.Draw(canvas, *trace_computer, proj, 0); if (nmea_info.location_available) { RasterPoint aircraft_pos = proj.GeoToScreen(nmea_info.location); AircraftRenderer::Draw(canvas, settings_map, map_look.aircraft, calculated.heading, aircraft_pos); } }