void DrawWaypoint(Canvas &canvas, const VisibleWaypoint &vwp) { const Waypoint &way_point = *vwp.waypoint; bool watchedWaypoint = way_point.flags.watched; vwp.DrawSymbol(settings, look, canvas, projection.GetMapScale() > fixed(4000), projection.GetScreenAngle()); // Determine whether to draw the waypoint label or not switch (settings.label_selection) { case WaypointRendererSettings::LabelSelection::NONE: return; case WaypointRendererSettings::LabelSelection::TASK: if (!vwp.in_task && task_valid && !watchedWaypoint) return; break; case WaypointRendererSettings::LabelSelection::TASK_AND_LANDABLE: if (!vwp.in_task && task_valid && !watchedWaypoint && !way_point.IsLandable()) return; break; default: break; } TextInBoxMode text_mode; bool bold = false; if (vwp.reachable != WaypointRenderer::Unreachable && way_point.IsLandable()) { text_mode.shape = settings.landable_render_mode; bold = true; text_mode.move_in_view = true; } else if (vwp.in_task) { text_mode.shape = LabelShape::OUTLINED_INVERTED; bold = true; } else if (watchedWaypoint) { text_mode.shape = LabelShape::OUTLINED; text_mode.move_in_view = true; } TCHAR Buffer[NAME_SIZE+1]; FormatLabel(Buffer, way_point, vwp.reach); RasterPoint sc = vwp.point; if ((vwp.reachable != WaypointRenderer::Unreachable && settings.landable_style == WaypointRendererSettings::LandableStyle::PURPLE_CIRCLE) || settings.vector_landable_rendering) // make space for the green circle sc.x += 5; labels.Add(Buffer, sc.x + 5, sc.y, text_mode, bold, vwp.reach.direct, vwp.in_task, way_point.IsLandable(), way_point.IsAirport(), watchedWaypoint); }
static void MapWaypointLabelRender(Canvas &canvas, UPixelScalar width, UPixelScalar height, LabelBlock &label_block, WaypointLabelList &labels) { labels.Sort(); for (const auto &l : labels) { canvas.Select(l.bold ? Fonts::map_bold : Fonts::map); TextInBox(canvas, l.Name, l.Pos.x, l.Pos.y, l.Mode, width, height, &label_block); } }
static void MapWaypointLabelRender(Canvas &canvas, unsigned width, unsigned height, LabelBlock &label_block, WaypointLabelList &labels, const WaypointLook &look) { labels.Sort(); for (const auto &l : labels) { canvas.Select(l.bold ? *look.bold_font : *look.font); TextInBox(canvas, l.Name, l.Pos.x, l.Pos.y, l.Mode, width, height, &label_block); } }