#pragma once
#include "font.hpp"
/** Иероглифы Girgen De
* @details Символы рисуются сверху-вниз и слева-направо */
class FontGirgen: public FontBase {
public:
  FontGirgen(): FontBase() {}
  ~FontGirgen() { FontBase::free(); }
  virtual void print(Image& dst, int x, int y, char ch) override;
  virtual void print(Image& dst, int x, int y, const a83::Str& text,
    bool black_gr = false) override;
  virtual void print(Image& dst, int x, int y, const a83::Str& text,
    int wndx, int wndy, bool black_gr = false) override
    { print(dst, x, y, text, black_gr); }
};
void FontGirgen::print(Image& dst, int x, int y, char ch) {
  ch = toupper(ch);
  cnauto ch_ptr = get(ch);
  if (ch_ptr.check())
    ch_ptr.print_or(x, y, dst);
  else
    ERR_CHAR_PTR->print_or(x, y, dst);
}
void FontGirgen::print(Image& dst, int x, int y,
const a83::Str& text, bool black_gr) {
  // рисуем чёрный прямоугольник туда, где будет текст:
  if (black_gr)
    dst.draw_rect_filled(x-1, y-1, char_x+2,
      int(text.length())*(char_y+space_y)+1,
      Color(Color::BLACK));
  int posx = x;
  int posy = y;
  for (std::size_t i = 0; i < text.size(); ++i) {
    const char ch = text[i];
    if (ch == '\n') {
      posx += char_x;
      posy = y;
      continue;
    }
    print(dst, posx, posy, ch);
    posy += char_y;
  }
}