1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-05-08 08:11:21 +00:00

nicer display_bottom_buttons (replaces displayPageButtons)

This commit is contained in:
Zeno Rogue
2026-04-17 14:33:53 +02:00
parent cc98347741
commit a0fc2c4b40
4 changed files with 66 additions and 30 deletions

View File

@@ -1684,34 +1684,70 @@ EX namespace dialog {
return ret;
}
EX void displayPageButtons(int i, int numpages) {
#if HDR
constexpr flagtype DB_BACK = 1;
constexpr flagtype DB_HELP = 2;
constexpr flagtype DB_EXIT = 4;
constexpr flagtype DB_PLAIN = 8;
constexpr flagtype DB_ACTIVATE = 16;
constexpr flagtype DB_EXPLAIN = 32;
#endif
EX void display_bottom_buttons(int numpages, flagtype flags) {
struct button {
int key;
string text;
color_t col;
int width;
bool digits;
};
vector<button> buttons;
auto add_button = [&] (int k, string t, color_t c) {
buttons.emplace_back();
buttons.back().key = k;
buttons.back().text = t;
buttons.back().col = c;
buttons.back().digits = false;
};
if(numpages == 2) {
add_button('1', XLAT("page") + " 1", nlpage == 1 ? 0xD8D8C0 : dialogcolor);
add_button('2', XLAT("page") + " 2", nlpage == 2 ? 0xD8D8C0 : dialogcolor);
add_button('3', XLAT("all"), nlpage == 0 ? 0xD8D8C0 : dialogcolor);
}
else if(numpages > 2) {
add_button('1', XLAT("last page"), nlpage == 1 ? 0xD8D8C0 : dialogcolor);
add_button('2', XLAT("next page"), nlpage == numpages ? 0xD8D8C0 : dialogcolor);
add_button('3', nlpage ? its(nlpage) + "/" + its(numpages) : XLAT("all"), nlpage == 0 ? 0xD8D8C0 : dialogcolor);
buttons.back().digits = true;
}
else if(numpages == 0) {
if(flags & DB_PLAIN) add_button('1', XLAT("plain"), dialogcolor);
if(flags & DB_ACTIVATE) add_button('2', XLAT("touch to activate"), dialogcolor);
if(flags & DB_EXPLAIN) add_button('2', XLAT("touch to explain"), dialogcolor);
}
if(flags & DB_BACK) add_button(SDLK_ESCAPE, XLAT("go back"), dialogcolor);
if(flags & DB_HELP) add_button(SDLK_F1, XLAT("help"), dialogcolor);
if(flags & DB_EXIT) add_button('0', XLAT("exit mode"), dialogcolor);
int total_w = 0;
for(auto& b: buttons) {
string t = keyname(b.key) + " - " + b.text;
total_w += b.width = textwidth(vid.fsize, t);
}
int hole = (vid.xres - total_w) / (isize(buttons) + 1);
int i0 = vid.yres - vid.fsize;
int xr = vid.xres / 80;
if(numpages == 2) if(displayfrZH(xr*8, i0, 1, vid.fsize, IFM("1 - ") + XLAT("page") + " 1", nlpage == 1 ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '1';
if(numpages == 2) if(displayfrZH(xr*24, i0, 1, vid.fsize, IFM("2 - ") + XLAT("page") + " 2", nlpage == 1 ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '2';
if(numpages == 2) if(displayfrZH(xr*40, i0, 1, vid.fsize, IFM("3 - ") + XLAT("all"), nlpage == 0 ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '3';
if(numpages > 2) if(displayfrZH(xr*8, i0, 1, vid.fsize, IFM("1 - ") + XLAT("last page"), nlpage == 1 ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '1';
if(numpages > 2) if(displayfrZH(xr*24, i0, 1, vid.fsize, IFM("2 - ") + XLAT("next page"), nlpage == numpages ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '2';
if(numpages > 2) if(displayfrZH(xr*40, i0, 1, vid.fsize, nlpage ? its(nlpage) + "/" + its(numpages) : IFM("3 - ") + XLAT("all"), nlpage == 0 ? 0xD8D8C0 : dialogcolor, 8))
getcstat = '3';
if(i&1) if(displayfrZH(xr*56, i0, 1, vid.fsize, IFM(keyname(SDLK_ESCAPE) + " - ") + XLAT("go back"), dialogcolor, 8))
getcstat = SDLK_ESCAPE;
if(i&2) if(displayfrZH(xr*72, i0, 1, vid.fsize, IFM("F1 - ") + XLAT("help"), dialogcolor, 8))
getcstat = SDLK_F1;
if(i&4) if(displayfrZH(xr*8, i0, 1, vid.fsize, IFM("1 - ") + XLAT("plain"), dialogcolor, 8))
getcstat = '1';
if(i&8) if(displayfrZH(xr*24, i0, 1, vid.fsize, IFM("2 - ") + XLAT("touch to activate"), dialogcolor, 8))
getcstat = '2';
if(i&16) if(displayfrZH(xr*24, i0, 1, vid.fsize, IFM("2 - ") + XLAT("touch to explain"), dialogcolor, 8))
getcstat = '2';
int x = 0;
for(auto& b: buttons) {
string t = IFM(keyname(b.key) + " - ") + b.text;
x += b.width + hole;
if(displayfrZH(x, i0, 1, vid.fsize, t, b.col, 16))
getcstat = b.key;
}
}
EX bool handlePageButtons(int sym, int uni, bool dkeys, int numpages) {

View File

@@ -632,7 +632,7 @@ EX namespace inv {
}
}
dialog::displayPageButtons(7 + (view_help_only ? 16 : 8), 0);
dialog::display_bottom_buttons(0, dialog::DB_BACK | dialog::DB_HELP | dialog::DB_PLAIN | (view_help_only ? dialog::DB_EXPLAIN : dialog::DB_ACTIVATE));
mouseovers = "";
keyhandler = [] (int sym, int uni) {
if(plain) dialog::handleNavigation(sym, uni);

View File

@@ -152,7 +152,7 @@ EX void showOverview() {
}
}
dialog::displayPageButtons(3, numpages);
dialog::display_bottom_buttons(numpages, dialog::DB_BACK | dialog::DB_HELP);
keyhandler = [numpages] (int sym, int uni) {
int umod = uni % 1000;

View File

@@ -917,7 +917,7 @@ EX namespace tactic {
}
}
dialog::displayPageButtons(3, numpages);
dialog::display_bottom_buttons(numpages, dialog::DB_BACK | dialog::DB_HELP | dialog::DB_EXIT);
uploadScore();
if(on) unrecord(specialland);