#ifndef SHARED_ROUND_CURSOR_VIEW_H
#define SHARED_ROUND_CURSOR_VIEW_H

#include "cursor_view.h"
#include "dots.h"

namespace Shared {

#define GRAPH_CURSOR_SPEEDUP

class RoundCursorView : public CursorView {
public:
  RoundCursorView(KDColor color = Palette::PrimaryText) :
    m_color(color)
#ifdef GRAPH_CURSOR_SPEEDUP
  , m_underneathPixelBufferLoaded(false)
#endif
  {}
  void drawRect(KDContext * ctx, KDRect rect) const override;
  KDSize minimalSizeForOptimalDisplay() const override;
  void setColor(KDColor color);
  void setCursorFrame(KDRect frame, bool force) override;
#ifdef GRAPH_CURSOR_SPEEDUP
  void resetMemoization() const { m_underneathPixelBufferLoaded = false; }
#endif
private:
  void markRectAsDirty(KDRect rect) override;
#ifdef GRAPH_CURSOR_SPEEDUP
  bool eraseCursorIfPossible();
#endif
  constexpr static int k_cursorSize = Dots::LargeDotDiameter;
  KDColor m_color;
#ifdef GRAPH_CURSOR_SPEEDUP
  mutable KDColor m_underneathPixelBuffer[k_cursorSize*k_cursorSize];
  mutable bool m_underneathPixelBufferLoaded;
#endif
};

}

#endif
