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
13#ifndef CONSOLIX_USE_LOGIT
14#define CONSOLIX_USE_LOGIT 0
15#endif
16
17namespace consolix {
18
25 public:
29 m_color(color) {
30 const uint8_t logo[] =
31 /*
32 █████████ ████ ███
33 ███░░░░░███ ░░███ ░░░
34 ███ ░░░ ██████ ████████ █████ ██████ ░███ ████ █████ █████
35 ░███ ███░░███░░███░░███ ███░░ ███░░███ ░███ ░░███ ░░███ ░░███
36 ░███ ░███ ░███ ░███ ░███ ░░█████ ░███ ░███ ░███ ░███ ░░░█████░
37 ░░███ ███░███ ░███ ░███ ░███ ░░░░███░███ ░███ ░███ ░███ ███░░░███
38 ░░█████████ ░░██████ ████ █████ ██████ ░░██████ █████ █████ █████ █████
39 ░░░░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░
40 https://www.asciiart.eu/text-to-ascii-art
41 https://www.rapidtables.com/convert/number/ascii-to-hex.html
42 https://www.mimastech.com/charset-converter-free-online-text-files-charset-converter/
43 */
44 {
45 0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,
46 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,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,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0xDB,0xDB,0xDB,0x20,0x20,0x20,
49 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0x20,0xDB,0xDB,0xDB,
50 0xB0,0xB0,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
51 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
52 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0xB0,0xDB,
53 0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
54 0x20,0x20,0x20,0x20,0x20,0x0A,0x20,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0xB0,
55 0xB0,0xB0,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,
56 0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,
57 0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xDB,
58 0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,
59 0x0A,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xDB,
60 0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,0xDB,0xB0,0xB0,0xDB,0xDB,
61 0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,
62 0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,
63 0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x0A,0xB0,0xDB,0xDB,0xDB,
64 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,
65 0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,
66 0xDB,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,
67 0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0xDB,0xDB,
68 0xDB,0xDB,0xDB,0xB0,0x20,0x20,0x0A,0xB0,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0x20,
69 0x20,0xDB,0xDB,0xDB,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,
70 0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,
71 0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0xB0,0xDB,0xDB,0xDB,0x20,0x20,
72 0xB0,0xDB,0xDB,0xDB,0x20,0x20,0x20,0xDB,0xDB,0xDB,0xB0,0xB0,0xB0,0xDB,0xDB,0xDB,
73 0x20,0x0A,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xB0,
74 0xB0,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,
75 0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xB0,0xB0,0xDB,0xDB,0xDB,
76 0xDB,0xDB,0xDB,0x20,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,
77 0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x20,0xDB,0xDB,0xDB,0xDB,0xDB,0x0A,0x20,0x20,0xB0,
78 0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,
79 0xB0,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,
80 0xB0,0xB0,0xB0,0xB0,0x20,0x20,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x20,0xB0,
81 0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0xB0,0xB0,0xB0,0xB0,0xB0,
82 0x20,0xB0,0xB0,0xB0,0xB0,0xB0,0x20,0x00
83 };
84 m_logo = std::string(reinterpret_cast<const char*>(logo));
85 }
86
91 const std::string& logo,
93 m_logo(logo), m_color(color) {
94 }
95
97 virtual ~LogoComponent() = default;
98
102 void set_logo(const std::string& logo, TextColor color) {
103 m_logo = logo;
104 m_color = color;
105 }
106
109 bool initialize() override {
110 // Настроим консоль на Code Page 437, чтобы символы отображались корректно.
111 //SetConsoleOutputCP(437);
112 //SetConsoleCP(65001); //установка кодовой страницы utf-8 (Unicode) для вводного потока
113 //SetConsoleOutputCP(65001); //установка кодовой страницы utf-8 (Unicode)
114 if (!m_logo.empty()) {
115# if CONSOLIX_USE_LOGIT == 0
117 std::cout << m_logo << std::endl;
119# else
121# endif
122 }
123 m_is_init = true;
124 return true;
125 }
126
129 bool is_initialized() const override {
130 return m_is_init;
131 }
132
134 void process() override {};
135
136 private:
137 std::string m_logo;
139 std::atomic<bool> m_is_init{false};
140
143# if defined(_WIN32) || defined(_WIN64)
144 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
145 SetConsoleTextAttribute(hConsole, to_windows_color(m_color));
146# else
147 if (isatty(STDOUT_FILENO)) {
148 std::cout << to_c_str(m_color);
149 }
150# endif
151 }
152
155#if defined(_WIN32) || defined(_WIN64)
156 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
157 SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
158# else
159 if (isatty(STDOUT_FILENO)) {
160 std::cout << "\033[0m";
161 }
162# endif
163 }
164 }; // LogoComponent
165
166}; // namespace consolix
167
168#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