void InfoBoxContentWindArrow::OnCustomPaint(InfoBoxWindow &infobox, Canvas &canvas) { const auto &info = CommonInterface::Calculated(); auto rc = infobox.GetValueRect(); RasterPoint pt = { PixelScalar((rc.left + rc.right) / 2), PixelScalar((rc.top + rc.bottom) / 2), }; UPixelScalar padding = Layout::FastScale(5); UPixelScalar size = std::min(rc.right - rc.left, rc.bottom - rc.top); if (size > padding) size -= padding; auto angle = info.wind.bearing - info.heading; auto length = std::min(size, (UPixelScalar)std::max(10, iround(info.wind.norm * 4))); auto offset = -length / 2; auto style = CommonInterface::GetMapSettings().wind_arrow_style; WindArrowRenderer renderer(UIGlobals::GetMapLook().wind); renderer.DrawArrow(canvas, pt, angle, length, style, offset); }