//! \~\file piscreendrawer.h //! \~\ingroup Console //! \~\brief //! \~english Drawing helpers for %PIScreen cell buffers //! \~russian Вспомогательные средства рисования для буферов ячеек %PIScreen /* PIP - Platform Independent Primitives Drawer for PIScreen Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PISCREENDRAWER_H #define PISCREENDRAWER_H #include "pip_console_export.h" #include "piscreentypes.h" #include "pistring.h" //! \~\ingroup Console //! \~\brief //! \~english Helper that draws primitives and text into a %PIScreen cell buffer. //! \~russian Вспомогательный класс для рисования примитивов и текста в буфере ячеек %PIScreen. //! \~\details //! \~english Provides methods for drawing primitives such as pixels, lines, rectangles, and text on console screen. //! \~russian Предоставляет методы для рисования примитивов, таких как пиксели, линии, прямоугольники и текст на консольном экране. class PIP_CONSOLE_EXPORT PIScreenDrawer { friend class PIScreen; PIScreenDrawer(PIVector> & c); public: //! \~english Predefined pseudographic and widget-state symbols. //! \~russian Предопределенные псевдографические символы и символы состояний виджетов. //! \~\details //! \~english Defines available characters for drawing ASCII art primitives. //! \~russian Определяет доступные символы для рисования ASCII-арта примитивов. enum ArtChar { LineVertical = 1 /** \~english Vertical line symbol. \~russian Символ вертикальной линии. */, LineHorizontal /** \~english Horizontal line symbol. \~russian Символ горизонтальной линии. */, Cross /** \~english Line intersection symbol. \~russian Символ пересечения линий. */, CornerTopLeft /** \~english Top-left frame corner. \~russian Левый верхний угол рамки. */, CornerTopRight /** \~english Top-right frame corner. \~russian Правый верхний угол рамки. */, CornerBottomLeft /** \~english Bottom-left frame corner. \~russian Левый нижний угол рамки. */, CornerBottomRight /** \~english Bottom-right frame corner. \~russian Правый нижний угол рамки. */, Unchecked /** \~english Unchecked box symbol. \~russian Символ неотмеченного флажка. */, Checked /** \~english Checked box symbol. \~russian Символ отмеченного флажка. */ }; //! \~english Clears the whole target buffer. //! \~russian Очищает весь целевой буфер. void clear(); //! \~english Clears a rectangular area in the target buffer with spaces. //! \~russian Очищает прямоугольную область целевого буфера пробелами. void clearRect(int x0, int y0, int x1, int y1) { fillRect(x0, y0, x1, y1, ' '); } //! \~english Draws one cell at position `(x, y)`. //! \~russian Рисует одну ячейку в позиции `(x, y)`. void drawPixel(int x, int y, const PIChar & c, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); //! \~english Draws a line between two points. //! \~russian Рисует линию между двумя точками. void drawLine(int x0, int y0, int x1, int y1, const PIChar & c, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); //! \~english Draws a rectangular outline with the specified symbol. //! \~russian Рисует контур прямоугольника указанным символом. void drawRect(int x0, int y0, int x1, int y1, const PIChar & c, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); //! \~english Draws a frame using predefined art symbols. //! \~russian Рисует рамку предопределенными псевдографическими символами. void drawFrame(int x0, int y0, int x1, int y1, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); //! \~english Draws text starting at `(x, y)`. //! \~russian Рисует текст, начиная с позиции `(x, y)`. void drawText(int x, int y, const PIString & s, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Transparent, PIScreenTypes::CharFlags flags_char = 0); //! \~english Fills a rectangular area with one symbol and cell format. //! \~russian Заполняет прямоугольную область одним символом и форматом ячейки. void fillRect(int x0, int y0, int x1, int y1, const PIChar & c, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); //! \~english Copies a cell matrix into a rectangular area. //! \~russian Копирует матрицу ячеек в прямоугольную область. void fillRect(int x0, int y0, int x1, int y1, PIVector> & content); //! \~english Returns a predefined art symbol. //! \~russian Возвращает предопределенный псевдографический символ. PIChar artChar(const ArtChar type) const { return arts_.value(type, PIChar(' ')); } //! \~english Fills an arbitrary cell buffer with default cells. //! \~russian Заполняет произвольный буфер ячеек значениями по умолчанию. static void clear(PIVector> & cells); private: PIVector> & cells; int width, height; PIMap arts_; }; #endif // PISCREENDRAWER_H