diff --git a/src/console_output.cc b/src/console_output.cc index cf00af1..0c8915f 100644 --- a/src/console_output.cc +++ b/src/console_output.cc @@ -80,7 +80,8 @@ void console_output::render() { } void console_output::clear() { - + contents.clear(); + contents.reserve(DISPLAY_BUFFER_SIZE); } void console_output::print_char(const position &pos, const char ch, diff --git a/src/curses_output.cc b/src/curses_output.cc new file mode 100644 index 0000000..9f347b3 --- /dev/null +++ b/src/curses_output.cc @@ -0,0 +1,22 @@ +#include "curses_output.h" + +curses_output::curses_output(std::unique_ptr &new_curse): + curse{new_curse} {} + +void curses_output::render() { + curse->show(); +} + +void curses_output::clear() { + curse->clear(); +} + +void curses_output::print_char(const position &pos, const char ch, + const int attr) { + curse->print_char(pos, ch, attr); +} + +void curses_output::print_str(const position &pos, const std::string &str, + const int attr) { + curse->print_str(pos, str, attr); +} diff --git a/src/curses_output.h b/src/curses_output.h new file mode 100644 index 0000000..0bc88c8 --- /dev/null +++ b/src/curses_output.h @@ -0,0 +1,23 @@ +#ifndef __CURSES_OUTPUT_H__ +#define __CURSES_OUTPUT_H__ + +#include +#include +#include "cursor.h" +#include "display.h" + +class curses_output final : public display { +private: + std::unique_ptr &curse; +public: + curses_output(std::unique_ptr &new_curse); + + void render() override; + void clear() override; + void print_char(const position &pos, + const char ch, const int attr) override; + void print_str(const position &pos, + const std::string &str, const int attr) override; +}; + +#endif diff --git a/src/cursor.cc b/src/cursor.cc index d50f31a..6bcd485 100644 --- a/src/cursor.cc +++ b/src/cursor.cc @@ -17,6 +17,10 @@ void cursor::show() const { refresh(); } +void cursor::clear() const { + ::clear(); +} + void cursor::print_char(const position &pos, const char ch, const int attrs) const { attrset(attrs); diff --git a/src/cursor.h b/src/cursor.h index 35b185d..c0e064a 100644 --- a/src/cursor.h +++ b/src/cursor.h @@ -45,6 +45,8 @@ public: void show() const; + void clear() const ; + void print_char(const position &pos, const char ch, const int attrs) const; void print_str(const position &head, const std::string str, diff --git a/src/file_output.cc b/src/file_output.cc index 0aa2acb..58ddb74 100644 --- a/src/file_output.cc +++ b/src/file_output.cc @@ -1,14 +1,24 @@ #include "file_output.h" +#include + +file_output::file_output(std::ofstream &&new_out): + out{std::move(new_out)} {} + void file_output::render() { for (std::size_t idx = 0; idx < contents.size(); ++idx) { if (idx % DISPLAY_WIDTH == 0 && idx) out << std::endl; - out << (char)contents[idx]; + out << (char)(contents[idx] ? contents[idx] : ' '); } } +void file_output::clear() { + contents.clear(); + contents.reserve(DISPLAY_BUFFER_SIZE); +} + void file_output::print_char(const position &pos, const char ch, const int attr) { if (pos.x >= DISPLAY_WIDTH || pos.y >= DISPLAY_HEIGHT)