Program Listing for File CellFillRenderer.hpp

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

#pragma once
#ifndef DISH2_VIZ_RENDERERS_CELLFILLRENDERER_HPP_INCLUDE
#define DISH2_VIZ_RENDERERS_CELLFILLRENDERER_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 CellFillRenderer {

  ColorMap color_map;
  Getter getter;

public:

  using getter_t = Getter;

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

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

    color_map.Refresh();

    const dish2::CanvasMathHelper helper{ canvas };

    // Fill out the grid!
    for (size_t pos = 0; pos < getter.GetNumCells(); ++pos) canvas.Rect(
      helper.GetCanvasX( helper.GetGridX( pos ) ),
      helper.GetCanvasY( helper.GetGridY( pos ) ),
      helper.GetCellWidthPx(),
      helper.GetCellHeightPx(),
      color_map.Paint( getter.Get( pos ) ),
      color_map.Paint( getter.Get( pos ) )
    );

  }

};

} // namespace dish2

#endif // #ifndef DISH2_VIZ_RENDERERS_CELLFILLRENDERER_HPP_INCLUDE