Program Listing for File CellBorderRenderer.hpp

Return to documentation for file (include/dish2/viz/renderers/CellBorderRenderer.hpp)

#pragma once
#ifndef DISH2_VIZ_RENDERERS_CELLBORDERRENDERER_HPP_INCLUDE
#define DISH2_VIZ_RENDERERS_CELLBORDERRENDERER_HPP_INCLUDE

#include <utility>

#include "../../../../third-party/Empirical/include/emp/web/Canvas.hpp"
#include "../../../../third-party/Empirical/include/emp/web/color_map.hpp"

#include "../util/CanvasMathHelper.hpp"

namespace dish2 {

template<typename ColorMap, typename Getter>
class CellBorderRenderer {

  ColorMap color_map;
  Getter getter;

public:

  using getter_t = Getter;

  template<typename... Args>
  CellBorderRenderer( Args&&... args )
  : color_map( std::forward<Args>(args)... )
  , getter( std::forward<Args>(args)... )
  {}

  void Render( emp::web::Canvas& canvas ) {

    const dish2::CanvasMathHelper helper{ canvas };

    for (size_t pos = 0; pos < getter.GetNumCells(); ++pos) {

      canvas.Rect(
        helper.GetCanvasX( helper.GetGridX( pos ) + 1 ),
        helper.GetCanvasY( helper.GetGridY( pos ) ),
        0,
        helper.GetCellWidthPx(),
        emp::ColorRGB(0,0,0,0),
        color_map.Paint(
          getter.Get( pos ),
          getter.Get( helper.GetPopulationPos(
            helper.GetGridX( pos ) + 1,
            helper.GetGridY( pos )
          ) )
        )
      );

      canvas.Rect(
        helper.GetCanvasX( helper.GetGridX( pos ) ),
        helper.GetCanvasY( helper.GetGridY( pos ) + 1 ),
        helper.GetCellHeightPx(),
        0,
        emp::ColorRGB(0,0,0,0),
        color_map.Paint(
          getter.Get( pos ),
          getter.Get( helper.GetPopulationPos(
            helper.GetGridX( pos ),
            helper.GetGridY( pos ) + 1
          ) )
        )
      );

    }

  }


};

} // namespace dish2

#endif // #ifndef DISH2_VIZ_RENDERERS_CELLBORDERRENDERER_HPP_INCLUDE