first commit
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
#include "PaintDevice.h"
|
||||
|
||||
PaintDevice::PaintDevice()
|
||||
: m_Size(40, 40)
|
||||
{
|
||||
initscr();
|
||||
|
||||
noecho();
|
||||
|
||||
curs_set(0);
|
||||
|
||||
keypad(stdscr, TRUE);
|
||||
|
||||
nodelay(stdscr, TRUE);
|
||||
|
||||
resize(m_Size);
|
||||
|
||||
m_Ready = true;
|
||||
}
|
||||
|
||||
PaintDevice::~PaintDevice()
|
||||
{
|
||||
endwin();
|
||||
}
|
||||
|
||||
bool PaintDevice::ready() const
|
||||
{
|
||||
return m_Ready;
|
||||
}
|
||||
|
||||
void PaintDevice::resize(const Size& size)
|
||||
{
|
||||
m_Size = size;
|
||||
|
||||
m_Buffer =
|
||||
std::vector<std::vector<wchar_t>>
|
||||
(
|
||||
m_Size.height(),
|
||||
std::vector<wchar_t>(
|
||||
m_Size.width(),
|
||||
L' '
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
void PaintDevice::clear()
|
||||
{
|
||||
for (int y = 0; y < m_Size.height(); y++)
|
||||
{
|
||||
for (int x = 0; x < m_Size.width(); x++)
|
||||
{
|
||||
m_Buffer[y][x] = L' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PaintDevice::set_char(
|
||||
const Vector2& position,
|
||||
wchar_t c
|
||||
)
|
||||
{
|
||||
if (
|
||||
position.x() >= 0 &&
|
||||
position.x() < m_Size.width() &&
|
||||
position.y() >= 0 &&
|
||||
position.y() < m_Size.height()
|
||||
)
|
||||
{
|
||||
m_Buffer[position.y()][position.x()] = c;
|
||||
}
|
||||
}
|
||||
|
||||
wchar_t PaintDevice::get_char(
|
||||
const Vector2& position
|
||||
)
|
||||
{
|
||||
if (
|
||||
position.x() >= 0 &&
|
||||
position.x() < m_Size.width() &&
|
||||
position.y() >= 0 &&
|
||||
position.y() < m_Size.height()
|
||||
)
|
||||
{
|
||||
return m_Buffer[position.y()][position.x()];
|
||||
}
|
||||
|
||||
return L'\0';
|
||||
}
|
||||
|
||||
void PaintDevice::render()
|
||||
{
|
||||
::clear();
|
||||
|
||||
for (int y = 0; y < m_Size.height(); y++)
|
||||
{
|
||||
for (int x = 0; x < m_Size.width(); x++)
|
||||
{
|
||||
mvaddch(
|
||||
y,
|
||||
x,
|
||||
m_Buffer[y][x]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
refresh();
|
||||
}
|
||||
Reference in New Issue
Block a user