summaryrefslogtreecommitdiff
path: root/src/WinConsoleFile.h
diff options
context:
space:
mode:
authorNils Maier <maierman@web.de>2013-11-15 00:52:20 +0100
committerNils Maier <maierman@web.de>2013-11-21 15:34:34 +0100
commit87ea4904a0136564bdb22a95d9fef12282c27624 (patch)
tree9a092e672c67fd71c245bf81cea146c710978dd9 /src/WinConsoleFile.h
parent4ce8c4021d620a97301f6470d108dbfe44138653 (diff)
Implement basic color support for the Windows console
Only \033[*m (SGR) is supported, with a 16+16 color terminal.
Diffstat (limited to 'src/WinConsoleFile.h')
-rw-r--r--src/WinConsoleFile.h52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/WinConsoleFile.h b/src/WinConsoleFile.h
index ec6f8e26..67312f90 100644
--- a/src/WinConsoleFile.h
+++ b/src/WinConsoleFile.h
@@ -32,28 +32,50 @@
* files in the program, then also delete it here.
*/
/* copyright --> */
+
#ifndef D_WIN_CONSOLE_FILE_H
#define D_WIN_CONSOLE_FILE_H
+#include <string>
+
#include "OutputFile.h"
namespace aria2 {
-// This is a wrapper class for WriteConsoleW
-class WinConsoleFile:public OutputFile {
-public:
- WinConsoleFile(DWORD stdHandle);
- virtual ~WinConsoleFile();
- virtual size_t write(const char* str) CXX11_OVERRIDE;
- virtual int vprintf(const char* format, va_list va) CXX11_OVERRIDE;
- virtual int flush() CXX11_OVERRIDE;
- virtual bool supportsColor() CXX11_OVERRIDE;
-private:
- DWORD stdHandle_;
- // Don't allow copying
- WinConsoleFile(const WinConsoleFile&);
- WinConsoleFile& operator=(const WinConsoleFile&);
-};
+ // This is a wrapper class for WriteConsoleW
+ class WinConsoleFile: public OutputFile
+ {
+ public:
+ WinConsoleFile(DWORD stdHandle);
+ virtual ~WinConsoleFile() {}
+
+ virtual size_t write(const char* str) CXX11_OVERRIDE;
+ virtual int vprintf(const char* format, va_list va) CXX11_OVERRIDE;
+ virtual bool supportsColor() CXX11_OVERRIDE;
+ virtual int flush() CXX11_OVERRIDE
+ {
+ return 0;
+ }
+
+ private:
+ DWORD stdHandle_;
+ bool bold_;
+ bool underline_;
+ bool reverse_;
+ WORD fg_, deffg_;
+ WORD bg_, defbg_;
+
+ size_t writeColorful(const std::wstring& str);
+ inline HANDLE handle() const
+ {
+ return ::GetStdHandle(stdHandle_);
+ }
+
+ private:
+ // Don't allow copying
+ WinConsoleFile(const WinConsoleFile&) = delete;
+ WinConsoleFile& operator=(const WinConsoleFile&) = delete;
+ };
} // namespace aria2