25 #ifndef WIN32_LEAN_AND_MEAN
26 #define WIN32_LEAN_AND_MEAN
94 m_output = ::GetStdHandle(STD_OUTPUT_HANDLE);
95 m_initialized = ::GetConsoleScreenBufferInfo(m_output, &m_screenInfo);
100 const DWORD screenSize = m_screenInfo.dwSize.X * m_screenInfo.dwSize.Y;
105 ::FillConsoleOutputCharacterA(
115 ::FillConsoleOutputAttribute(
117 m_screenInfo.wAttributes,
151 inline void Write(
const std::string& chunk)
override
162 std::string padded = std::to_string(
m_cursorY + 1);
165 padded.insert(padded.begin(),
' ');
177 if (chunk.substr(0, indentStr.length()) == indentStr)
182 while (chunk.substr(offset, indentStr.length()) == indentStr)
190 offset += indentStr.length();
217 HandleInput(
"Press <Enter> to continue, <Q> to quit debugging");
246 m_cursor.X =
static_cast<SHORT
>(
m_cursorX);
247 m_cursor.Y =
static_cast<SHORT
>(
m_cursorY);
248 ::SetConsoleCursorPosition(m_output, m_cursor);
255 inline void SetColor(uint16_t background, uint16_t foreground)
258 ::SetConsoleTextAttribute(m_output, (background << 4) | foreground);
279 size_t offsetX =
static_cast<size_t>(
m_cursorX) + chunk.length();
282 if (offsetX > maxWidth)
284 WriteChunk(chunk.substr(0, maxWidth - chunk.length()));
287 WriteChunk(chunk.substr(maxWidth - chunk.length()));
296 m_cursorX +
static_cast<int32_t
>(chunk.length()),
308 std::cout << message;
314 HANDLE input = ::GetStdHandle(STD_INPUT_HANDLE);
320 ::ReadConsoleInputA(input, &record, 1, &read);
321 if (record.EventType == KEY_EVENT)
323 KEY_EVENT_RECORD& keyEvent = record.Event.KeyEvent;
327 if (keyEvent.bKeyDown)
345 ::FillConsoleOutputCharacterA(
348 static_cast<DWORD
>(message.length()),
353 ::FillConsoleOutputAttribute(
355 m_screenInfo.wAttributes,
356 static_cast<DWORD
>(message.length()),
378 CONSOLE_SCREEN_BUFFER_INFO m_screenInfo;
379 COORD m_cursor = { 0, 0 };
Writes output to the console line-by-line.
Definition: DebugWriter.hpp:61
void SetCursorPosition(int32_t x, int32_t y)
Definition: DebugWriter.hpp:240
bool IsChanged() const override
Definition: DebugWriter.hpp:142
int32_t m_consoleWidth
Definition: DebugWriter.hpp:373
void WriteChunk(const std::string &chunk)
Definition: DebugWriter.hpp:277
void ResetStyles()
Definition: DebugWriter.hpp:268
int32_t m_consoleHeight
Definition: DebugWriter.hpp:374
void WriteNewLine() override
Definition: DebugWriter.hpp:205
bool OnCommit(bool force=false) override
Definition: DebugWriter.hpp:221
bool m_isDebugging
Definition: DebugWriter.hpp:370
int32_t m_cursorY
Definition: DebugWriter.hpp:372
void Write(const std::string &chunk) override
Definition: DebugWriter.hpp:151
DebugWriter(const DebugWriterConfig &config=DebugWriterConfig{})
Definition: DebugWriter.hpp:88
~DebugWriter() override
Definition: DebugWriter.hpp:134
DebugWriterConfig m_debugConfig
Definition: DebugWriter.hpp:368
bool m_initialized
Definition: DebugWriter.hpp:369
void SetColor(uint16_t background, uint16_t foreground)
Definition: DebugWriter.hpp:255
void HandleInput(const std::string &message)
Definition: DebugWriter.hpp:304
int32_t m_cursorX
Definition: DebugWriter.hpp:371
Definition: Braces.hpp:29
Colors used in the console output.
Definition: DebugWriter.hpp:68
Values
Definition: DebugWriter.hpp:70
@ Green
Definition: DebugWriter.hpp:73
@ Red
Definition: DebugWriter.hpp:74
@ Black
Definition: DebugWriter.hpp:71
@ Yellow
Definition: DebugWriter.hpp:75
@ Cyan
Definition: DebugWriter.hpp:76
@ Fuchsia
Definition: DebugWriter.hpp:77
@ White
Definition: DebugWriter.hpp:78
@ Blue
Definition: DebugWriter.hpp:72
@ Light
Definition: DebugWriter.hpp:79
Configuration for the DebugWriter class.
Definition: DebugWriterConfig.hpp:37
size_t lineNumberPadding
Definition: DebugWriterConfig.hpp:41
std::string chunkIndent
Definition: WriterConfig.hpp:58