@@ -277,6 +277,9 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
277
277
const bool grayed = !!(flags & UiFlags_Grayed);
278
278
const bool hasbody = !(flags & UiFlags_NoBody);
279
279
const bool hasborder = !(flags & UiFlags_NoBorder);
280
+ const bool splittext = !!(flags & UiFlags_SplitText);
281
+ const bool alingxcenter = !!(flags & UiFlags_AlignXCentered);
282
+ const bool alignleft = !!(flags & UiFlags_AlignLeft);
280
283
281
284
if (hasbody) {
282
285
button_border_draw (offset + pos, size, gbutton.hovered && !grayed);
@@ -292,10 +295,23 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
292
295
}
293
296
294
297
int symbolh = get_letter_height ((uint8_t *)" H" , font);
295
- if (label) {
298
+ if (splittext) {
299
+ svector<bstring128, 4 > labels;
300
+ string_to_array_t (labels, label, ' \n ' );
301
+
302
+ int labels_num = labels.size ();
303
+ int starty = offset.y + pos.y + (size.y - (symbolh + 2 ) * labels_num) / 2 + 4 ;
304
+
305
+ for (const auto &str : labels) {
306
+ if (alingxcenter) {
307
+ text_draw_centered ((uint8_t *)str.c_str (), offset.x + pos.x + 1 , starty, size.x , font, 0 );
308
+ } else {
309
+ text_draw ((uint8_t *)str.c_str (), offset.x + pos.x + 8 , starty, font, 0 );
310
+ }
311
+ starty += symbolh + 2 ;
312
+ }
313
+ } else if (label) {
296
314
const bool alingycenter = !!(flags & UiFlags_AlignYCentered);
297
- const bool alingxcenter = !!(flags & UiFlags_AlignXCentered);
298
- const bool alignleft = !!(flags & UiFlags_AlignLeft);
299
315
const bool rich = !!(flags & UiFlags_Rich);
300
316
if (rich) {
301
317
int symbolw = text_get_width ((uint8_t *)" H" , font);
@@ -312,7 +328,7 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
312
328
} else {
313
329
text_draw_centered ((uint8_t *)label, offset.x + pos.x + 1 , offset.y + pos.y + (size.y - symbolh) / 2 + 4 , size.x , font, 0 );
314
330
}
315
- }
331
+ }
316
332
317
333
if (grayed) {
318
334
graphics_shade_rect (offset + pos, size, 0x80 );
@@ -324,40 +340,6 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
324
340
return gbutton;
325
341
}
326
342
327
- generic_button &ui::button (const svector<pcstr,4 > &labels, vec2i pos, vec2i size, fonts_vec fonts, UiFlags flags, std::function<void (int , int )> cb) {
328
- const vec2i offset = g_state.offset ();
329
-
330
- g_state.buttons .push_back (generic_button{pos.x , pos.y , size.x + 4 , size.y + 4 , button_none, button_none, 0 , 0 });
331
- auto &gbutton = g_state.buttons .back ().g_button ;
332
- gbutton.hovered = is_button_hover (gbutton, offset);
333
-
334
- e_font font = fonts[gbutton.hovered ? 1 : 0 ];
335
- if (font == FONT_INVALID) {
336
- font = fonts[0 ];
337
- }
338
-
339
- button_border_draw (offset + pos, size, gbutton.hovered ? 1 : 0 );
340
- int symbolh = get_letter_height ((uint8_t *)" H" , font);
341
- int labels_num = labels.size ();
342
- int starty = offset.y + pos.y + (size.y - (symbolh + 2 ) * labels_num) / 2 + 4 ;
343
- if (!!(flags & UiFlags_AlignYCentered)) {
344
- for (const auto &str : labels) {
345
- text_draw ((uint8_t *)str, offset.x + pos.x + 8 , starty, font, 0 );
346
- starty += symbolh + 2 ;
347
- }
348
- } else {
349
- for (const auto &str : labels) {
350
- text_draw_centered ((uint8_t *)str, offset.x + pos.x + 1 , starty, size.x , font, 0 );
351
- starty += symbolh + 2 ;
352
- }
353
- }
354
-
355
- if (!!cb) {
356
- gbutton.onclick (cb);
357
- }
358
- return gbutton;
359
- }
360
-
361
343
generic_button &ui::large_button (pcstr label, vec2i pos, vec2i size, e_font font) {
362
344
const vec2i offset = g_state.offset ();
363
345
@@ -919,10 +901,15 @@ void ui::escrollbar::load(archive arch, element *parent, items &elems) {
919
901
void ui::etext::draw () {
920
902
const vec2i offset = g_state.offset ();
921
903
if (!!(_flags & UiFlags_AlignCentered)) {
904
+ int additionaly = 0 ;
905
+ if (pxsize ().y > 0 ) {
906
+ int symbolh = get_letter_height ((uint8_t *)" H" , _font);
907
+ additionaly = (size.y - symbolh) / 2 ;
908
+ }
922
909
if (_shadow_color) {
923
- text_draw_centered ((uint8_t *)_text.c_str (), offset.x + pos.x + 1 , offset.y + pos.y , size.x , _font, _shadow_color);
910
+ text_draw_centered ((uint8_t *)_text.c_str (), offset.x + pos.x + 1 , offset.y + pos.y + additionaly , size.x , _font, _shadow_color);
924
911
}
925
- text_draw_centered ((uint8_t *)_text.c_str (), offset.x + pos.x , offset.y + pos.y , size.x , _font, _color);
912
+ text_draw_centered ((uint8_t *)_text.c_str (), offset.x + pos.x , offset.y + pos.y + additionaly , size.x , _font, _color);
926
913
} else if (!!(_flags & UiFlags_LabelMultiline)) {
927
914
text_draw_multiline ((uint8_t *)_text.c_str (), offset.x + pos.x , offset.y + pos.y , _wrap, _font, _color);
928
915
} else if (!!(_flags & UiFlags_AlignYCentered)) {
@@ -1030,7 +1017,8 @@ void ui::egeneric_button::draw() {
1030
1017
UiFlags flags = _flags
1031
1018
| (grayed ? UiFlags_Grayed : UiFlags_None)
1032
1019
| (!_border ? UiFlags_NoBorder : UiFlags_None)
1033
- | (!_hbody ? UiFlags_NoBody : UiFlags_None);
1020
+ | (!_hbody ? UiFlags_NoBody : UiFlags_None)
1021
+ | (_split ? UiFlags_SplitText : UiFlags_None);
1034
1022
1035
1023
generic_button *btn = nullptr ;
1036
1024
switch (mode) {
@@ -1063,6 +1051,7 @@ void ui::egeneric_button::load(archive arch, element *parent, items &elems) {
1063
1051
_tooltip = arch.r_vec2i (" tooltip" );
1064
1052
_border = arch.r_bool (" border" , true );
1065
1053
_hbody = arch.r_bool (" hbody" , true );
1054
+ _split = arch.r_bool (" split" , false );
1066
1055
}
1067
1056
1068
1057
void ui::info_window::load (archive arch, pcstr section) {
0 commit comments