void CrossSectionWindow::Paint(Canvas &canvas, const PixelRect rc) { fixed hmin = max(fixed_zero, gps_info.nav_altitude - fixed(3300)); fixed hmax = max(fixed(3300), gps_info.nav_altitude + fixed(1000)); Chart chart(chart_look, canvas, rc); chart.ResetScale(); chart.ScaleXFromValue(fixed_zero); chart.ScaleXFromValue(vec.distance); chart.ScaleYFromValue(hmin); chart.ScaleYFromValue(hmax); PaintAirspaces(canvas, chart); PaintTerrain(canvas, chart); PaintGlide(chart); PaintAircraft(canvas, chart, rc); PaintGrid(canvas, chart); }
void CrossSectionRenderer::Paint(Canvas &canvas, const PixelRect rc) const { DrawVerticalGradient(canvas, rc, look.sky_color, look.background_color, look.background_color); canvas.SetTextColor(look.text_color); canvas.Select(*look.grid_font); ChartRenderer chart(chart_look, canvas, rc); if (!vec.IsValid() || !start.IsValid()) { chart.DrawNoData(); return; } const fixed nav_altitude = gps_info.NavAltitudeAvailable() ? gps_info.nav_altitude : fixed(0); fixed hmin = std::max(fixed(0), nav_altitude - fixed(3300)); fixed hmax = std::max(fixed(3300), nav_altitude + fixed(1000)); chart.ResetScale(); chart.ScaleXFromValue(fixed(0)); chart.ScaleXFromValue(vec.distance); chart.ScaleYFromValue(hmin); chart.ScaleYFromValue(hmax); short elevations[NUM_SLICES]; UpdateTerrain(elevations); if (airspace_database != nullptr) { const AircraftState aircraft = ToAircraftState(Basic(), Calculated()); airspace_renderer.Draw(canvas, chart, *airspace_database, start, vec, aircraft); } terrain_renderer.Draw(canvas, chart, elevations); PaintGlide(chart); PaintAircraft(canvas, chart, rc); PaintGrid(canvas, chart); }