void GlueMapWindow::DrawMapScale(Canvas &canvas, const PixelRect &rc, const MapWindowProjection &projection) const { if (!projection.IsValid()) return; StaticString<80> buffer; fixed map_width = projection.GetScreenWidthMeters(); const Font &font = *look.overlay_font; canvas.Select(font); FormatUserMapScale(map_width, buffer.buffer(), true); PixelSize text_size = canvas.CalcTextSize(buffer); const PixelScalar text_padding_x = Layout::GetTextPadding(); const PixelScalar height = font.GetCapitalHeight() + Layout::GetTextPadding(); PixelScalar x = 0; look.map_scale_left_icon.Draw(canvas, 0, rc.bottom - height); x += look.map_scale_left_icon.GetSize().cx; canvas.DrawFilledRectangle(x, rc.bottom - height, x + 2 * text_padding_x + text_size.cx, rc.bottom, COLOR_WHITE); canvas.SetBackgroundTransparent(); canvas.SetTextColor(COLOR_BLACK); x += text_padding_x; canvas.DrawText(x, rc.bottom - font.GetAscentHeight() - Layout::Scale(1), buffer); x += text_padding_x + text_size.cx; look.map_scale_right_icon.Draw(canvas, x, rc.bottom - height); buffer.clear(); if (GetMapSettings().auto_zoom_enabled) buffer = _T("AUTO "); switch (follow_mode) { case FOLLOW_SELF: break; case FOLLOW_PAN: buffer += _T("PAN "); break; } const UIState &ui_state = GetUIState(); if (ui_state.auxiliary_enabled) { buffer += ui_state.panel_name; buffer += _T(" "); } if (Basic().gps.replay) buffer += _T("REPLAY "); else if (Basic().gps.simulator) { buffer += _("Simulator"); buffer += _T(" "); } if (GetComputerSettings().polar.ballast_timer_active) buffer.AppendFormat( _T("BALLAST %d LITERS "), (int)GetComputerSettings().polar.glide_polar_task.GetBallastLitres()); if (weather != nullptr && weather->GetParameter() > 0) { const TCHAR *label = weather->ItemLabel(weather->GetParameter()); if (label != nullptr) buffer += label; } if (!buffer.empty()) { int y = rc.bottom - height; TextInBoxMode mode; mode.vertical_position = TextInBoxMode::VerticalPosition::ABOVE; mode.shape = LabelShape::OUTLINED; TextInBox(canvas, buffer, 0, y, mode, rc, nullptr); } }
void GlueMapWindow::DrawMapScale(Canvas &canvas, const PixelRect &rc, const MapWindowProjection &projection) const { StaticString<80> buffer; fixed map_width = projection.GetScreenWidthMeters(); canvas.Select(Fonts::map_bold); FormatUserMapScale(map_width, buffer.buffer(), true); PixelSize text_size = canvas.CalcTextSize(buffer); const PixelScalar text_padding_x = Layout::Scale(2); const PixelScalar height = Fonts::map_bold.GetCapitalHeight() + Layout::Scale(2); PixelScalar x = 0; look.map_scale_left_icon.Draw(canvas, 0, rc.bottom - height); x += look.map_scale_left_icon.GetSize().cx; canvas.DrawFilledRectangle(x, rc.bottom - height, x + 2 * text_padding_x + text_size.cx, rc.bottom, COLOR_WHITE); canvas.SetBackgroundTransparent(); canvas.SetTextColor(COLOR_BLACK); x += text_padding_x; canvas.text(x, rc.bottom - Fonts::map_bold.GetAscentHeight() - Layout::Scale(1), buffer); x += text_padding_x + text_size.cx; look.map_scale_right_icon.Draw(canvas, x, rc.bottom - height); buffer.clear(); if (GetMapSettings().auto_zoom_enabled) buffer = _T("AUTO "); switch (follow_mode) { case FOLLOW_SELF: break; case FOLLOW_PAN: buffer += _T("PAN "); break; } const UIState &ui_state = GetUIState(); if (ui_state.auxiliary_enabled) { buffer += ui_state.panel_name; buffer += _T(" "); } if (Basic().gps.replay) buffer += _T("REPLAY "); else if (Basic().gps.simulator) { buffer += _("Simulator"); buffer += _T(" "); } if (GetComputerSettings().polar.ballast_timer_active) buffer.AppendFormat( _T("BALLAST %d LITERS "), (int)GetComputerSettings().polar.glide_polar_task.GetBallastLitres()); if (weather != NULL && weather->GetParameter() > 0) { const TCHAR *label = weather->ItemLabel(weather->GetParameter()); if (label != NULL) buffer += label; } if (!buffer.empty()) { int y = rc.bottom - height; canvas.Select(Fonts::title); canvas.SetBackgroundOpaque(); canvas.SetBackgroundColor(COLOR_WHITE); canvas.text(0, y - canvas.CalcTextSize(buffer).cy, buffer); } }