Skip to content

Commit 3a2d0f9

Browse files
committed
ui: redesigned resource setting window
1 parent 3d6c297 commit 3a2d0f9

File tree

5 files changed

+217
-214
lines changed

5 files changed

+217
-214
lines changed

src/graphics/elements/ui.cpp

+30-41
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,9 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
277277
const bool grayed = !!(flags & UiFlags_Grayed);
278278
const bool hasbody = !(flags & UiFlags_NoBody);
279279
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);
280283

281284
if (hasbody) {
282285
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,
292295
}
293296

294297
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) {
296314
const bool alingycenter = !!(flags & UiFlags_AlignYCentered);
297-
const bool alingxcenter = !!(flags & UiFlags_AlignXCentered);
298-
const bool alignleft = !!(flags & UiFlags_AlignLeft);
299315
const bool rich = !!(flags & UiFlags_Rich);
300316
if (rich) {
301317
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,
312328
} else {
313329
text_draw_centered((uint8_t *)label, offset.x + pos.x + 1, offset.y + pos.y + (size.y - symbolh) / 2 + 4, size.x, font, 0);
314330
}
315-
}
331+
}
316332

317333
if (grayed) {
318334
graphics_shade_rect(offset + pos, size, 0x80);
@@ -324,40 +340,6 @@ generic_button &ui::button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts,
324340
return gbutton;
325341
}
326342

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-
361343
generic_button &ui::large_button(pcstr label, vec2i pos, vec2i size, e_font font) {
362344
const vec2i offset = g_state.offset();
363345

@@ -919,10 +901,15 @@ void ui::escrollbar::load(archive arch, element *parent, items &elems) {
919901
void ui::etext::draw() {
920902
const vec2i offset = g_state.offset();
921903
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+
}
922909
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);
924911
}
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);
926913
} else if (!!(_flags & UiFlags_LabelMultiline)) {
927914
text_draw_multiline((uint8_t *)_text.c_str(), offset.x + pos.x, offset.y + pos.y, _wrap, _font, _color);
928915
} else if (!!(_flags & UiFlags_AlignYCentered)) {
@@ -1030,7 +1017,8 @@ void ui::egeneric_button::draw() {
10301017
UiFlags flags = _flags
10311018
| (grayed ? UiFlags_Grayed : UiFlags_None)
10321019
| (!_border ? UiFlags_NoBorder : UiFlags_None)
1033-
| (!_hbody ? UiFlags_NoBody : UiFlags_None);
1020+
| (!_hbody ? UiFlags_NoBody : UiFlags_None)
1021+
| (_split ? UiFlags_SplitText : UiFlags_None);
10341022

10351023
generic_button *btn = nullptr;
10361024
switch (mode) {
@@ -1063,6 +1051,7 @@ void ui::egeneric_button::load(archive arch, element *parent, items &elems) {
10631051
_tooltip = arch.r_vec2i("tooltip");
10641052
_border = arch.r_bool("border", true);
10651053
_hbody = arch.r_bool("hbody", true);
1054+
_split = arch.r_bool("split", false);
10661055
}
10671056

10681057
void ui::info_window::load(archive arch, pcstr section) {

src/graphics/elements/ui.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ enum UiFlags_ {
4242
UiFlags_Readonly = 1 << 13,
4343
UiFlags_NoBorder = 1 << 14,
4444
UiFlags_Outline = 1 << 15,
45+
UiFlags_SplitText = 1 << 16,
4546
};
4647
using UiFlags = int;
4748

@@ -72,7 +73,6 @@ int button_hover(const mouse *m);
7273

7374
inline fonts_vec fonts_def() { return { FONT_NORMAL_BLACK_ON_LIGHT, FONT_INVALID }; }
7475
generic_button &button(pcstr label, vec2i pos, vec2i size, fonts_vec fonts = fonts_def(), UiFlags flags = UiFlags_None, std::function<void(int, int)> cb = {});
75-
generic_button &button(const svector<pcstr,4> &labels, vec2i pos, vec2i size, fonts_vec fonts = fonts_def(), UiFlags flags = UiFlags_None, std::function<void(int, int)> cb = {});
7676
generic_button &link(pcstr label, vec2i pos, vec2i size, e_font font = FONT_NORMAL_WHITE_ON_DARK, UiFlags flags = UiFlags_None, std::function<void(int, int)> cb = {});
7777
generic_button &large_button(pcstr label, vec2i pos, vec2i size, e_font font = FONT_NORMAL_BLACK_ON_LIGHT);
7878
generic_button &button(uint32_t id);
@@ -308,6 +308,7 @@ struct egeneric_button : public elabel {
308308
textid _tooltip;
309309
bool _border;
310310
bool _hbody;
311+
bool _split;
311312

312313
virtual void draw() override;
313314
virtual void load(archive arch, element *parent, items &elems) override;

src/scripts/ui.js

+40-6
Original file line numberDiff line numberDiff line change
@@ -902,13 +902,47 @@ hold_festival_window = {
902902
god2 : image_button({pos:[100 * 2 + 70, 96], pack:PACK_UNLOADED, id:21, offset:16 + 2, offset_pressed:5, offset_focused:5, border:true }),
903903
god3 : image_button({pos:[100 * 3 + 70, 96], pack:PACK_UNLOADED, id:21, offset:16 + 3, offset_pressed:5, offset_focused:5, border:true }),
904904
god4 : image_button({pos:[100 * 4 + 70, 96], pack:PACK_UNLOADED, id:21, offset:16 + 4, offset_pressed:5, offset_focused:5, border:true }),
905-
small_festival : button({pos:[102, 216], size:[430, 26], rich:true}),
905+
small_festival : button({pos:[102, 216], size:[430, 26], rich:true}),
906906
middle_festival : button({pos:[102, 246], size:[430, 26], rich:true}),
907-
large_festival : button({pos:[102, 276], size:[430, 26], rich:true}),
908-
button_ok : image_button({pos:[400, 317], size:[39, 26], pack:PACK_GENERAL, id:96, offset:0 }),
909-
button_cancel : image_button({pos:[358, 317], size:[39, 26], pack:PACK_GENERAL, id:96, offset:4 }),
910-
button_help: image_button({margin:{left:14, bottom:-40}, size:[27, 27], pack:PACK_GENERAL, id:134, offset:0 }),
911-
festival_type : text({pos: [220, 327], size: [544, -1] }),
907+
large_festival : button({pos:[102, 276], size:[430, 26], rich:true}),
908+
button_ok : image_button({pos:[400, 317], size:[39, 26], pack:PACK_GENERAL, id:96, offset:0 }),
909+
button_cancel : image_button({pos:[358, 317], size:[39, 26], pack:PACK_GENERAL, id:96, offset:4 }),
910+
button_help : image_button({margin:{left:14, bottom:-40}, size:[27, 27], pack:PACK_GENERAL, id:134, offset:0 }),
911+
festival_type : text({pos: [220, 327], size: [544, -1] }),
912+
}
913+
}
914+
915+
window trade_resource_settings_window = {
916+
pos : [(sw(0) - px(36)) / 2, (sh(0) - px(15)) / 2],
917+
ui : {
918+
background : outer_panel({size: [36, 15]}),
919+
icon : resource_icon({pos: [16, 18] }),
920+
title : text_center({pos: [0, 16], size: [px(36), -1], font : FONT_LARGE_BLACK_ON_LIGHT}),
921+
922+
production_state : text_center({pos: [48, 42], size: [px(8), -1], font : FONT_NORMAL_BLACK_ON_LIGHT}),
923+
production_store : text_center({pos: [48, 62], size: [px(8), -1], font : FONT_NORMAL_BLACK_ON_LIGHT}),
924+
925+
could_import : text_center({pos: [46, 92], size: [px(10), 30], font : FONT_NORMAL_BLACK_ON_LIGHT}),
926+
import_status: button({pos:[32, 92], size:[px(16), 30], align:"left",
927+
ui : {
928+
import_dec : arrowdown({pos:[px(16) - 51, 3]}),
929+
import_inc : arrowup({pos:[px(16) - 28, 3]}),
930+
}
931+
}),
932+
933+
could_export : text_center({pos: [98 + 216, 101], size: [px(8), -1], font : FONT_NORMAL_BLACK_ON_LIGHT}),
934+
export_status: button({pos:[px(36)/2, 92], size:[px(16), 30], align:"left",
935+
ui : {
936+
export_dec : arrowdown({pos:[px(16) - 51, 3]}),
937+
export_inc : arrowup({pos:[px(16) - 28, 3]}),
938+
}
939+
}),
940+
941+
toggle_industry : button({margin:{centerx:-200}, pos:[-1, 130], size:[400, 30]}),
942+
stockpile_industry : button({margin:{centerx:-200}, pos:[-1, 168], size:[400, 50], split:true}),
943+
944+
close_button : close_button({}),
945+
help_button : help_button({}),
912946
}
913947
}
914948

src/widget/debug_console.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ void game_debug_show_property_t(pcstr field, const T &v, bool disabled = false)
130130
++guid;
131131
}
132132

133-
void game_debug_show_property_t(int &i, pcstr field, pcstr v) {
133+
void game_debug_show_property_t(pcstr field, pcstr v) {
134134
bstring256 _v(v);
135-
game_debug_show_property_t(i, field, _v);
135+
game_debug_show_property_t(field, _v);
136136
}
137137

138138
void game_debug_show_property(pcstr field, const int &v, bool disabled) { game_debug_show_property_t(field, v, disabled); }

0 commit comments

Comments
 (0)