Example #1
0
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);
}