mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-09-29 06:20:41 +00:00
dialog:: refactored scaling in number dialogs
This commit is contained in:
parent
796b03a81c
commit
0dbe4822ec
28
dialogs.cpp
28
dialogs.cpp
@ -588,19 +588,6 @@ namespace dialog {
|
|||||||
return ne.editwhat == &geom3::highdetail || ne.editwhat == &geom3::middetail;
|
return ne.editwhat == &geom3::highdetail || ne.editwhat == &geom3::middetail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ld identity(ld x) { return x; }
|
|
||||||
|
|
||||||
void scaleSinh() {
|
|
||||||
ne.scale = ASINH;
|
|
||||||
ne.inverse_scale = sinh;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scaleLog() {
|
|
||||||
ne.scale = log;
|
|
||||||
ne.inverse_scale = exp;
|
|
||||||
ne.positive = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ldtoint(ld x) {
|
int ldtoint(ld x) {
|
||||||
if(x > 0) return int(x+.5);
|
if(x > 0) return int(x+.5);
|
||||||
else return int(x-.5);
|
else return int(x-.5);
|
||||||
@ -622,7 +609,7 @@ namespace dialog {
|
|||||||
if(kind == 's') {
|
if(kind == 's') {
|
||||||
ld x;
|
ld x;
|
||||||
sscanf(ne.s.c_str(), LDF, &x);
|
sscanf(ne.s.c_str(), LDF, &x);
|
||||||
if(ne.positive && x <= 0) return;
|
if(ne.sc.positive && x <= 0) return;
|
||||||
*ne.editwhat = x;
|
*ne.editwhat = x;
|
||||||
}
|
}
|
||||||
if(kind == 'v') ne.s = disp(*ne.editwhat);
|
if(kind == 'v') ne.s = disp(*ne.editwhat);
|
||||||
@ -717,7 +704,7 @@ namespace dialog {
|
|||||||
gamescreen(numberdark);
|
gamescreen(numberdark);
|
||||||
init(ne.title);
|
init(ne.title);
|
||||||
addInfo(ne.s);
|
addInfo(ne.s);
|
||||||
addSlider(ne.scale(ne.vmin), ne.scale(*ne.editwhat), ne.scale(ne.vmax), 500);
|
addSlider(ne.sc.direct(ne.vmin), ne.sc.direct(*ne.editwhat), ne.sc.direct(ne.vmax), 500);
|
||||||
addBreak(100);
|
addBreak(100);
|
||||||
#if ISMOBILE==0
|
#if ISMOBILE==0
|
||||||
addHelp(XLAT("You can scroll with arrow keys -- Ctrl to fine-tune"));
|
addHelp(XLAT("You can scroll with arrow keys -- Ctrl to fine-tune"));
|
||||||
@ -743,7 +730,7 @@ namespace dialog {
|
|||||||
|
|
||||||
keyhandler = [] (int sym, int uni) {
|
keyhandler = [] (int sym, int uni) {
|
||||||
handleNavigation(sym, uni);
|
handleNavigation(sym, uni);
|
||||||
if((uni >= '0' && uni <= '9') || (uni == '.' && !ne.intval) || (uni == '-' && !ne.positive)) {
|
if((uni >= '0' && uni <= '9') || (uni == '.' && !ne.intval) || (uni == '-' && !ne.sc.positive)) {
|
||||||
ne.s += uni;
|
ne.s += uni;
|
||||||
affect('s');
|
affect('s');
|
||||||
}
|
}
|
||||||
@ -757,14 +744,14 @@ namespace dialog {
|
|||||||
if(ne.intval && abs(shiftmul) < .6)
|
if(ne.intval && abs(shiftmul) < .6)
|
||||||
(*ne.editwhat)++;
|
(*ne.editwhat)++;
|
||||||
else
|
else
|
||||||
*ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) + shiftmul * ne.step);
|
*ne.editwhat = ne.sc.inverse(ne.sc.direct(*ne.editwhat) + shiftmul * ne.step);
|
||||||
affect('v');
|
affect('v');
|
||||||
}
|
}
|
||||||
else if(sym == SDLK_LEFT || sym == SDLK_KP4) {
|
else if(sym == SDLK_LEFT || sym == SDLK_KP4) {
|
||||||
if(ne.intval && abs(shiftmul) < .6)
|
if(ne.intval && abs(shiftmul) < .6)
|
||||||
(*ne.editwhat)--;
|
(*ne.editwhat)--;
|
||||||
else
|
else
|
||||||
*ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) - shiftmul * ne.step);
|
*ne.editwhat = ne.sc.inverse(ne.sc.direct(*ne.editwhat) - shiftmul * ne.step);
|
||||||
affect('v');
|
affect('v');
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -780,7 +767,7 @@ namespace dialog {
|
|||||||
sl = vid.xres/4, sr = vid.xres*3/4;
|
sl = vid.xres/4, sr = vid.xres*3/4;
|
||||||
ld d = (mousex - sl + .0) / (sr-sl);
|
ld d = (mousex - sl + .0) / (sr-sl);
|
||||||
*ne.editwhat =
|
*ne.editwhat =
|
||||||
ne.inverse_scale(d * (ne.scale(ne.vmax) - ne.scale(ne.vmin)) + ne.scale(ne.vmin));
|
ne.sc.inverse(d * (ne.sc.direct(ne.vmax) - ne.sc.direct(ne.vmin)) + ne.sc.direct(ne.vmin));
|
||||||
affect('v');
|
affect('v');
|
||||||
}
|
}
|
||||||
else if(doexiton(sym, uni)) popScreen();
|
else if(doexiton(sym, uni)) popScreen();
|
||||||
@ -845,9 +832,8 @@ namespace dialog {
|
|||||||
ne.dft = dft;
|
ne.dft = dft;
|
||||||
ne.title = title;
|
ne.title = title;
|
||||||
ne.help = help;
|
ne.help = help;
|
||||||
ne.scale = ne.inverse_scale = identity;
|
ne.sc = identity;
|
||||||
ne.intval = NULL;
|
ne.intval = NULL;
|
||||||
ne.positive = false;
|
|
||||||
dialogflags = (cmode & sm::A3);
|
dialogflags = (cmode & sm::A3);
|
||||||
if(cmode & sm::SIDE) dialogflags |= sm::MAYDARK | sm::SIDE;
|
if(cmode & sm::SIDE) dialogflags |= sm::MAYDARK | sm::SIDE;
|
||||||
cmode |= sm::NUMBER;
|
cmode |= sm::NUMBER;
|
||||||
|
22
hyper.h
22
hyper.h
@ -160,12 +160,10 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
typedef double ld;
|
typedef double ld;
|
||||||
#define LDF "%lf"
|
#define LDF "%lf"
|
||||||
#define PLDF "lf"
|
#define PLDF "lf"
|
||||||
#define ASINH asinh
|
|
||||||
#else
|
#else
|
||||||
typedef long double ld;
|
typedef long double ld;
|
||||||
#define LDF "%Lf"
|
#define LDF "%Lf"
|
||||||
#define PLDF "Lf"
|
#define PLDF "Lf"
|
||||||
#define ASINH asinhl
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEBMEM(x) // { x fflush(stdout); }
|
#define DEBMEM(x) // { x fflush(stdout); }
|
||||||
@ -1670,15 +1668,25 @@ namespace dialog {
|
|||||||
int position;
|
int position;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct scaler {
|
||||||
|
ld (*direct) (ld);
|
||||||
|
ld (*inverse) (ld);
|
||||||
|
bool positive;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline ld identity_f(ld x) { return x; };
|
||||||
|
|
||||||
|
const static scaler identity = {identity_f, identity_f, false};
|
||||||
|
const static scaler logarithmic = {log, exp, true};
|
||||||
|
const static scaler asinhic = {asinh, sinh, false};
|
||||||
|
|
||||||
struct numberEditor {
|
struct numberEditor {
|
||||||
ld *editwhat;
|
ld *editwhat;
|
||||||
string s;
|
string s;
|
||||||
ld vmin, vmax, step, dft;
|
ld vmin, vmax, step, dft;
|
||||||
string title, help;
|
string title, help;
|
||||||
ld (*scale) (ld);
|
scaler sc;
|
||||||
ld (*inverse_scale) (ld);
|
|
||||||
int *intval; ld intbuf;
|
int *intval; ld intbuf;
|
||||||
bool positive;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern numberEditor ne;
|
extern numberEditor ne;
|
||||||
@ -1710,8 +1718,8 @@ namespace dialog {
|
|||||||
|
|
||||||
void editNumber(ld& x, ld vmin, ld vmax, ld step, ld dft, string title, string help);
|
void editNumber(ld& x, ld vmin, ld vmax, ld step, ld dft, string title, string help);
|
||||||
void editNumber(int& x, int vmin, int vmax, int step, int dft, string title, string help);
|
void editNumber(int& x, int vmin, int vmax, int step, int dft, string title, string help);
|
||||||
void scaleLog();
|
inline void scaleLog() { ne.sc = logarithmic; }
|
||||||
void scaleSinh();
|
inline void scaleSinh() { ne.sc = asinhic; }
|
||||||
void handleNavigation(int &sym, int &uni);
|
void handleNavigation(int &sym, int &uni);
|
||||||
|
|
||||||
namespace zoom {
|
namespace zoom {
|
||||||
|
Loading…
Reference in New Issue
Block a user