/** * Paints the basic info for the selected target on the given canvas * @param canvas The canvas to paint on */ void FlarmTrafficControl::PaintTrafficInfo(Canvas &canvas) const { // Don't paint numbers if no plane selected if (selection == -1) return; assert(data.FLARM_Traffic[selection].defined()); // Temporary string TCHAR tmp[20]; // Temporary string size SIZE sz; // Shortcut to the selected traffic FLARM_TRAFFIC traffic; if (WarningMode()) traffic = data.FLARM_Traffic[warning]; else traffic = data.FLARM_Traffic[selection]; assert(traffic.defined()); RECT rc; rc.left = padding; rc.top = padding; rc.right = canvas.get_width() - padding; rc.bottom = canvas.get_height() - padding; // Set the text color and background switch (traffic.AlarmLevel) { case 1: canvas.set_text_color(hcWarning); break; case 2: case 3: canvas.set_text_color(hcAlarm); break; case 4: case 0: default: canvas.set_text_color(hcStandard); break; } canvas.background_transparent(); // Climb Rate if (!WarningMode()) { Units::FormatUserVSpeed(traffic.Average30s, tmp, 20); canvas.select(hfInfoValues); sz = canvas.text_size(tmp); canvas.text(rc.right - sz.cx, rc.top + hfInfoLabels.get_height(), tmp); canvas.select(hfInfoLabels); sz = canvas.text_size(_("Vario:")); canvas.text(rc.right - sz.cx, rc.top, _("Vario:")); } // Distance Units::FormatUserDistance(hypot(traffic.RelativeEast, traffic.RelativeNorth), tmp, 20); canvas.select(hfInfoValues); sz = canvas.text_size(tmp); canvas.text(rc.left, rc.bottom - sz.cy, tmp); canvas.select(hfInfoLabels); canvas.text(rc.left, rc.bottom - hfInfoValues.get_height() - hfInfoLabels.get_height(), _("Distance:")); // Relative Height Units::FormatUserArrival(traffic.RelativeAltitude, tmp, 20); canvas.select(hfInfoValues); sz = canvas.text_size(tmp); canvas.text(rc.right - sz.cx, rc.bottom - sz.cy, tmp); canvas.select(hfInfoLabels); sz = canvas.text_size(_("Rel. Alt.:")); canvas.text(rc.right - sz.cx, rc.bottom - hfInfoValues.get_height() - hfInfoLabels.get_height(), _("Rel. Alt.:")); // ID / Name if (traffic.HasName()) { canvas.select(hfCallSign); if (!traffic.HasAlarm()) { if (settings.TeamFlarmTracking && traffic.ID == settings.TeamFlarmIdTarget) canvas.set_text_color(hcTeam); else canvas.set_text_color(hcSelection); } _tcscpy(tmp, traffic.Name); } else { traffic.ID.format(tmp); } canvas.text(rc.left, rc.top, tmp); }