Consolix
Loading...
Searching...
No Matches
LogoComponent.hpp
Go to the documentation of this file.
1#pragma once
2#ifndef _CONSOLIX_LOGO_COMPONENT_HPP_INCLUDED
3#define _CONSOLIX_LOGO_COMPONENT_HPP_INCLUDED
4
8
9#include <iostream>
10#include <string>
11#include <atomic>
12
14#ifndef CONSOLIX_USE_LOGIT
15#define CONSOLIX_USE_LOGIT 0
16#endif
17
18namespace consolix {
19
26 public:
30 m_color(color) {
31 const uint8_t logo[] =
32 /*
33 █████████ ████ ███
34 ███░░░░░███ ░░███ ░░░
35 ███ ░░░ ██████ ████████ █████ ██████ ░███ ████ █████ █████
36 ░███ ███░░███░░███░░███ ███░░ ███░░███ ░███ ░░███ ░░███ ░░███
37 ░███ ░███ ░███ ░███ ░███ ░░█████ ░███ ░███ ░███ ░███ ░░░█████░
38 ░░███ ███░███ ░███ ░███ ░███ ░░░░███░███ ░███ ░███ ░███ ███░░░███
39 ░░█████████ ░░██████ ████ █████ ██████ ░░██████ █████ █████ █████ █████
40 ░░░░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░
41 https://www.asciiart.eu/text-to-ascii-art
42 https://www.rapidtables.com/convert/number/ascii-to-hex.html
43 https://www.mimastech.com/charset-converter-free-online-text-files-charset-converter/
44 */
45 {
46 0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,
47 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
48 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
49 0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0xDB,0xDB,0xDB,0x20,0x20,0x20,
50 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0xDB,0xDB,0xDB,
51 0xB0,0xB0,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
52 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
53 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0xB0,0xDB,
54 0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
55 0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0xB0,
56 0xB0,0xB0,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,
57 0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,
58 0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xDB,
59 0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,
60 0x0A,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xDB,
61 0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,
62 0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,
63 0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,
64 0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x0A,0xB0,0xDB,0xDB,0xDB,
65 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,
66 0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,
67 0xDB,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,
68 0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0xDB,0xDB,
69 0xDB,0xDB,0xDB,0xB0,0x20,0x20,0x0A,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,
70 0x20,0xDB,0xDB,0xDB,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,
71 0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,
72 0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,
73 0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,
74 0x20,0x0A,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xB0,
75 0xB0,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,
76 0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,
77 0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,
78 0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x0A,0x20,0x20,0xB0,
79 0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,
80 0xB0,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,
81 0xB0,0xB0,0xB0,0xB0,0x20,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x20,0xB0,
82 0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,
83 0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x00
84 };
85 m_logo = std::string(reinterpret_cast<const char*>(logo));
86 }
87
92 const std::string& logo,
94 m_logo(logo), m_color(color) {
95 }
96
98 virtual ~LogoComponent() = default;
99
103 void set_logo(const std::string& logo, TextColor color) {
104 m_logo = logo;
105 m_color = color;
106 }
107
110 bool initialize() override {
111 // Настроим консоль на Code Page 437, чтобы символы отображались корректно.
112 //SetConsoleOutputCP(437);
113 //SetConsoleCP(65001); //установка кодовой страницы utf-8 (Unicode) для вводного потока
114 //SetConsoleOutputCP(65001); //установка кодовой страницы utf-8 (Unicode)
115 if (!m_logo.empty()) {
116# if CONSOLIX_USE_LOGIT == 0
118 std::cout << m_logo << std::endl;
120# else
122# endif
123 }
124 m_is_init = true;
125 return true;
126 }
127
130 bool is_initialized() const override {
131 return m_is_init;
132 }
133
135 void process() override {};
136
137 private:
138 std::string m_logo;
140 std::atomic<bool> m_is_init{false};
141
144# if defined(_WIN32) || defined(_WIN64)
145 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
146 SetConsoleTextAttribute(hConsole, to_windows_color(m_color));
147# else
148 if (isatty(STDOUT_FILENO)) {
149 std::cout << to_c_str(m_color);
150 }
151# endif
152 }
153
156#if defined(_WIN32) || defined(_WIN64)
157 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
158 SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
159# else
160 if (isatty(STDOUT_FILENO)) {
161 std::cout << "\033[0m";
162 }
163# endif
164 }
165 }; // LogoComponent
166
167}; // namespace consolix
168
169#endif // _CONSOLIX_LOGO_COMPONENT_HPP_INCLUDED
#define CONSOLIX_LOGO_STREAM()
Fallback for logo logging.
Interface for defining application components.
void set_logo(const std::string &logo, TextColor color)
Sets a custom logo and color.
TextColor m_color
The color of the logo.
void set_console_color()
Sets the console color before displaying the logo.
LogoComponent(TextColor color=TextColor::DarkYellow)
Constructs a LogoComponent with a default logo and color.
LogoComponent(const std::string &logo, TextColor color=TextColor::DarkYellow)
Constructs a LogoComponent with a custom logo and color.
std::string m_logo
The ASCII logo text to display.
bool is_initialized() const override
Checks if the component has been initialized.
void process() override
Executes the component (no operation for LogoComponent).
void reset_console_color()
Resets the console color to the default.
virtual ~LogoComponent()=default
Virtual destructor.
std::atomic< bool > m_is_init
Indicates whether the component is initialized.
bool initialize() override
Initializes the component and displays the logo.
< Utility modules and helpers.
ColorManipulator color(TextColor color)
Creates a color manipulator for use in output streams.
TextColor
Represents text colors for console output.
Definition enums.hpp:17
const char * to_c_str(const TextColor &color)
Converts a TextColor to an ANSI escape code string.
Definition enums.hpp:39