static void Draw(Canvas &canvas, PixelRect rc, const TaskOZMapItem &item, const TwoTextRowsRenderer &row_renderer, const TaskLook &look, const AirspaceLook &airspace_look, const AirspaceRendererSettings &airspace_settings) { const unsigned line_height = rc.GetHeight(); const unsigned text_padding = Layout::GetTextPadding(); const ObservationZonePoint &oz = *item.oz; const Waypoint &waypoint = *item.waypoint; const PixelPoint pt(rc.left + line_height / 2, rc.top + line_height / 2); const unsigned radius = line_height / 2 - text_padding; OZPreviewRenderer::Draw(canvas, oz, pt, radius, look, airspace_settings, airspace_look); rc.left += line_height + text_padding; TCHAR buffer[256]; // Draw details line OrderedTaskPointRadiusLabel(*item.oz, buffer); if (!StringIsEmpty(buffer)) row_renderer.DrawSecondRow(canvas, rc, buffer); // Draw waypoint name OrderedTaskPointLabel(item.tp_type, waypoint.name.c_str(), item.index, buffer); row_renderer.DrawFirstRow(canvas, rc, buffer); }
void MapItemListRenderer::Draw(Canvas &canvas, const PixelRect rc, const TaskOZMapItem &item) { const unsigned line_height = rc.bottom - rc.top; const Waypoint &waypoint = item.waypoint; const Font &name_font = Fonts::MapBold; const Font &small_font = Fonts::MapLabel; canvas.select(name_font); TCHAR buffer[256]; // Y-Coordinate of the second row unsigned top2 = rc.top + name_font.get_height() + Layout::FastScale(4); // Use small font for details canvas.select(small_font); // Draw details line unsigned left = rc.left + line_height + Layout::FastScale(2); OrderedTaskPointRadiusLabel(*item.oz, buffer); if (!string_is_empty(buffer)) canvas.text_clipped(left, top2, rc.right - left, buffer); // Draw waypoint name canvas.select(name_font); OrderedTaskPointLabel(item.tp_type, waypoint.name.c_str(), item.index, buffer); canvas.text_clipped(left, rc.top + Layout::FastScale(2), rc.right - left, buffer); }
void TaskEditPanel::OnPaintItem(Canvas &canvas, const PixelRect rc, unsigned DrawListIndex) { assert(DrawListIndex <= ordered_task->TaskSize()); const unsigned padding = Layout::GetTextPadding(); const unsigned line_height = rc.bottom - rc.top; TCHAR buffer[120]; // Draw "Add turnpoint" label if (DrawListIndex == ordered_task->TaskSize()) { row_renderer.DrawFirstRow(canvas, rc, _("Add Turnpoint")); return; } const OrderedTaskPoint &tp = ordered_task->GetTaskPoint(DrawListIndex); GeoVector leg = tp.GetNominalLegVector(); bool show_leg_info = leg.distance > fixed(0.01); PixelRect text_rc = rc; text_rc.left += line_height + padding; if (show_leg_info) { // Draw leg distance FormatUserDistanceSmart(leg.distance, buffer, true); const int x1 = row_renderer.DrawRightFirstRow(canvas, rc, buffer); // Draw leg bearing FormatBearing(buffer, ARRAY_SIZE(buffer), leg.bearing); const int x2 = row_renderer.DrawRightSecondRow(canvas, rc, buffer); text_rc.right = std::min(x1, x2); } // Draw details line OrderedTaskPointRadiusLabel(tp.GetObservationZone(), buffer); if (!StringIsEmpty(buffer)) row_renderer.DrawSecondRow(canvas, text_rc, buffer); // Draw turnpoint name OrderedTaskPointLabel(tp.GetType(), tp.GetWaypoint().name.c_str(), DrawListIndex, buffer); row_renderer.DrawFirstRow(canvas, text_rc, buffer); // Draw icon const RasterPoint pt(rc.left + line_height / 2, rc.top + line_height / 2); const unsigned radius = line_height / 2 - padding; OZPreviewRenderer::Draw(canvas, tp.GetObservationZone(), pt, radius, task_look, CommonInterface::GetMapSettings().airspace, airspace_look); }
void MapItemListRenderer::Draw(Canvas &canvas, const PixelRect rc, const TaskOZMapItem &item, const DialogLook &dialog_look, const TaskLook &look, const AirspaceLook &airspace_look, const AirspaceRendererSettings &airspace_settings) { const PixelScalar line_height = rc.bottom - rc.top; const ObservationZonePoint &oz = *item.oz; const Waypoint &waypoint = item.waypoint; RasterPoint pt = { PixelScalar(rc.left + line_height / 2), PixelScalar(rc.top + line_height / 2) }; PixelScalar radius = std::min(PixelScalar(line_height / 2 - Layout::FastScale(4)), Layout::FastScale(10)); OZPreviewRenderer::Draw(canvas, oz, pt, radius, look, airspace_settings, airspace_look); const Font &name_font = *dialog_look.list.font; const Font &small_font = *dialog_look.small_font; canvas.SetTextColor(COLOR_BLACK); TCHAR buffer[256]; // Y-Coordinate of the second row UPixelScalar top2 = rc.top + name_font.GetHeight() + Layout::FastScale(4); // Use small font for details canvas.Select(small_font); // Draw details line UPixelScalar left = rc.left + line_height + Layout::FastScale(2); OrderedTaskPointRadiusLabel(*item.oz, buffer); if (!StringIsEmpty(buffer)) canvas.text_clipped(left, top2, rc.right - left, buffer); // Draw waypoint name canvas.Select(name_font); OrderedTaskPointLabel(item.tp_type, waypoint.name.c_str(), item.index, buffer); canvas.text_clipped(left, rc.top + Layout::FastScale(2), rc.right - left, buffer); }
void TaskEditPanel::OnPaintItem(Canvas &canvas, const PixelRect rc, unsigned DrawListIndex) { assert(DrawListIndex <= ordered_task->TaskSize()); const PixelScalar line_height = rc.bottom - rc.top; TCHAR buffer[120]; const Font &name_font = *dialog.GetLook().list.font_bold; const Font &small_font = *dialog.GetLook().small_font; // Draw "Add turnpoint" label if (DrawListIndex == ordered_task->TaskSize()) { canvas.Select(name_font); canvas.SetTextColor(COLOR_BLACK); _stprintf(buffer, _T(" (%s)"), _("Add Turnpoint")); canvas.DrawText(rc.left + line_height + Layout::FastScale(2), rc.top + line_height / 2 - name_font.GetHeight() / 2, buffer); return; } const OrderedTaskPoint &tp = ordered_task->GetTaskPoint(DrawListIndex); GeoVector leg = tp.GetNominalLegVector(); bool show_leg_info = leg.distance > fixed(0.01); // Draw icon const RasterPoint pt(rc.left + line_height / 2, rc.top + line_height / 2); PixelScalar radius = std::min(PixelScalar(line_height / 2 - Layout::FastScale(4)), Layout::FastScale(10)); OZPreviewRenderer::Draw(canvas, tp.GetObservationZone(), pt, radius, task_look, CommonInterface::GetMapSettings().airspace, airspace_look); // Y-Coordinate of the second row PixelScalar top2 = rc.top + name_font.GetHeight() + Layout::FastScale(4); // Use small font for details canvas.Select(small_font); canvas.SetTextColor(COLOR_BLACK); UPixelScalar leg_info_width = 0; if (show_leg_info) { // Draw leg distance FormatUserDistanceSmart(leg.distance, buffer, true); UPixelScalar width = leg_info_width = canvas.CalcTextWidth(buffer); canvas.DrawText(rc.right - Layout::FastScale(2) - width, rc.top + Layout::FastScale(2) + (name_font.GetHeight() - small_font.GetHeight()) / 2, buffer); // Draw leg bearing FormatBearing(buffer, ARRAY_SIZE(buffer), leg.bearing); width = canvas.CalcTextWidth(buffer); canvas.DrawText(rc.right - Layout::FastScale(2) - width, top2, buffer); if (width > leg_info_width) leg_info_width = width; leg_info_width += Layout::FastScale(2); } // Draw details line PixelScalar left = rc.left + line_height + Layout::FastScale(2); OrderedTaskPointRadiusLabel(tp.GetObservationZone(), buffer); if (!StringIsEmpty(buffer)) canvas.DrawClippedText(left, top2, rc.right - leg_info_width - left, buffer); // Draw turnpoint name canvas.Select(name_font); OrderedTaskPointLabel(tp.GetType(), tp.GetWaypoint().name.c_str(), DrawListIndex, buffer); canvas.DrawClippedText(left, rc.top + Layout::FastScale(2), rc.right - leg_info_width - left, buffer); }