@@ -25,6 +25,8 @@ namespace SinesBoxLib {
2525 border_color (" white" ),
2626 text_color (" white" ),
2727 background_color (" " ),
28+ border_background_color (" " ),
29+ text_background_color (" " ),
2830 is_border_bold (false ),
2931 is_text_bold (false ) {
3032
@@ -159,9 +161,16 @@ namespace SinesBoxLib {
159161 }
160162 }
161163
162- void SinesBox::setBackgroundColor (const std::string& color) {
164+
165+ void SinesBox::setBorderBackgroundColor (const std::string& color) {
166+ if (colors.count (color)) {
167+ border_background_color = color;
168+ }
169+ }
170+
171+ void SinesBox::setTextBackgroundColor (const std::string& color) {
163172 if (colors.count (color)) {
164- background_color = color;
173+ text_background_color = color;
165174 }
166175 }
167176
@@ -178,24 +187,24 @@ namespace SinesBoxLib {
178187 if (text_lines.empty ()) return ;
179188
180189 // Draw top border
181- std::cout << colorize (corner_tl, border_color, background_color , is_border_bold);
182- std::cout << colorize (repeat (horizontal, terminal_width - 2 ), border_color, background_color , is_border_bold);
183- std::cout << colorize (corner_tr, border_color, background_color , is_border_bold) << " \n " ;
190+ std::cout << colorize (corner_tl, border_color, border_background_color , is_border_bold);
191+ std::cout << colorize (repeat (horizontal, terminal_width - 2 ), border_color, border_background_color , is_border_bold);
192+ std::cout << colorize (corner_tr, border_color, border_background_color , is_border_bold) << " \n " ;
184193
185194 // Draw text lines with borders
186195 for (const auto & line : text_lines) {
187- std::cout << colorize (vertical, border_color, background_color , is_border_bold) << " " ;
188- std::cout << colorize (line, text_color, background_color , is_text_bold);
196+ std::cout << colorize (vertical, border_color, border_background_color , is_border_bold) << " " ;
197+ std::cout << colorize (line, text_color, text_background_color , is_text_bold);
189198
190199 int padding = terminal_width - line.length () - 4 ;
191- std::cout << colorize (std::string (padding, ' ' ) + " " , text_color, background_color );
192- std::cout << colorize (vertical, border_color, background_color , is_border_bold) << " \n " ;
200+ std::cout << colorize (std::string (padding, ' ' ) + " " , text_color, text_background_color );
201+ std::cout << colorize (vertical, border_color, border_background_color , is_border_bold) << " \n " ;
193202 }
194203
195204 // Draw bottom border
196- std::cout << colorize (corner_bl, border_color, background_color , is_border_bold);
197- std::cout << colorize (repeat (horizontal, terminal_width - 2 ), border_color, background_color , is_border_bold);
198- std::cout << colorize (corner_br, border_color, background_color , is_border_bold) << " \n " ;
205+ std::cout << colorize (corner_bl, border_color, border_background_color , is_border_bold);
206+ std::cout << colorize (repeat (horizontal, terminal_width - 2 ), border_color, border_background_color , is_border_bold);
207+ std::cout << colorize (corner_br, border_color, border_background_color , is_border_bold) << " \n " ;
199208 }
200209
201210 void SinesBox::drawRainbow () {
@@ -207,40 +216,40 @@ namespace SinesBoxLib {
207216 size_t color_idx = 0 ;
208217
209218 // Draw top border
210- std::cout << colorize (corner_tl, rainbow_colors[0 ], background_color , true );
219+ std::cout << colorize (corner_tl, rainbow_colors[0 ], border_background_color , true );
211220 for (int i = 0 ; i < terminal_width - 2 ; i++) {
212221 std::cout << colorize (horizontal,
213222 rainbow_colors[(i / 3 ) % rainbow_colors.size ()],
214- background_color , true );
223+ border_background_color , true );
215224 }
216225 std::cout << colorize (corner_tr,
217226 rainbow_colors[(terminal_width - 2 ) / 3 % rainbow_colors.size ()],
218- background_color , true ) << " \n " ;
227+ border_background_color , true ) << " \n " ;
219228
220229 // Draw text lines
221230 for (size_t i = 0 ; i < text_lines.size (); i++) {
222231 const auto & line = text_lines[i];
223232 color_idx = i % rainbow_colors.size ();
224233
225- std::cout << colorize (vertical, rainbow_colors[color_idx], background_color , true ) << " " ;
226- std::cout << colorize (line, rainbow_colors[color_idx], background_color , true );
234+ std::cout << colorize (vertical, rainbow_colors[color_idx], border_background_color , true ) << " " ;
235+ std::cout << colorize (line, rainbow_colors[color_idx], text_background_color , true );
227236
228237 int padding = terminal_width - line.length () - 4 ;
229238 std::string padding_str (padding + 1 , ' ' );
230- std::cout << colorize (padding_str, rainbow_colors[color_idx], background_color , true );
231- std::cout << colorize (vertical, rainbow_colors[color_idx], background_color , true ) << " \n " ;
239+ std::cout << colorize (padding_str, rainbow_colors[color_idx], text_background_color , true );
240+ std::cout << colorize (vertical, rainbow_colors[color_idx], border_background_color , true ) << " \n " ;
232241 }
233242
234243 // Draw bottom border
235244 color_idx = text_lines.size () % rainbow_colors.size ();
236- std::cout << colorize (corner_bl, rainbow_colors[color_idx], background_color , true );
245+ std::cout << colorize (corner_bl, rainbow_colors[color_idx], border_background_color , true );
237246 for (int i = 0 ; i < terminal_width - 2 ; i++) {
238247 std::cout << colorize (horizontal,
239248 rainbow_colors[(i / 3 + color_idx) % rainbow_colors.size ()],
240- background_color , true );
249+ border_background_color , true );
241250 }
242251 std::cout << colorize (corner_br,
243252 rainbow_colors[(terminal_width - 2 ) / 3 + color_idx % rainbow_colors.size ()],
244- background_color , true ) << " \n " ;
253+ border_background_color , true ) << " \n " ;
245254 }
246255}
0 commit comments