Implemented more convenient behaviour for certain up/down menus
git-svn-id: https://svn.code.sf.net/p/extremetuxracer/code/trunk@661 0420edf4-82e4-42fc-9478-35b55e6d67a3master
parent
443ff32862
commit
1e3334b5f7
|
@ -157,10 +157,10 @@ void CGameConfig::Enter() {
|
|||
fullscreen->checked = param.fullscreen;
|
||||
|
||||
resolution = AddUpDown(rightpos, area.top+dd*1, 0, NUM_RESOLUTIONS-1, (int)param.res_type);
|
||||
mus_vol = AddUpDown(rightpos, area.top+dd*2, 0, 100, param.music_volume);
|
||||
sound_vol = AddUpDown(rightpos, area.top+dd*3, 0, 100, param.sound_volume);
|
||||
mus_vol = AddUpDown(rightpos, area.top+dd*2, 0, 100, param.music_volume, 2, true);
|
||||
sound_vol = AddUpDown(rightpos, area.top+dd*3, 0, 100, param.sound_volume, 2, true);
|
||||
language = AddUpDown(rightpos, area.top+dd*4, 0, (int)Trans.languages.size() - 1, (int)param.language);
|
||||
detail_level = AddUpDown(rightpos, area.top+dd*5, 1, 4, param.perf_level);
|
||||
detail_level = AddUpDown(rightpos, area.top+dd*5, 1, 4, param.perf_level, 2, true);
|
||||
|
||||
textbuttons[0] = AddTextButton(Trans.Text(28), area.left+50, AutoYPosN(80), siz);
|
||||
float len = FT.GetTextWidth(Trans.Text(8));
|
||||
|
|
49
src/gui.cpp
49
src/gui.cpp
|
@ -460,15 +460,18 @@ TArrow* AddArrow(int x, int y, bool down) {
|
|||
}
|
||||
|
||||
|
||||
TUpDown::TUpDown(int x, int y, int min_, int max_, int value_, int distance)
|
||||
TUpDown::TUpDown(int x, int y, int min_, int max_, int value_, int distance, bool swapArrows_)
|
||||
: TWidget(x, y, 32 * Winsys.scale / 0.8f, (32 + distance)*Winsys.scale / 0.8f)
|
||||
, up(x, y + (16 + distance)*Winsys.scale / 0.8f, true)
|
||||
, down(x, y, false)
|
||||
, higher(swapArrows_ ? up : down)
|
||||
, lower(swapArrows_ ? down : up)
|
||||
, value(value_)
|
||||
, minimum(min_)
|
||||
, maximum(max_) {
|
||||
up.SetActive(value < maximum);
|
||||
down.SetActive(value > minimum);
|
||||
, maximum(max_)
|
||||
, swapArrows(swapArrows_) {
|
||||
lower.SetActive(value < maximum);
|
||||
higher.SetActive(value > minimum);
|
||||
}
|
||||
|
||||
void TUpDown::Draw() const {
|
||||
|
@ -477,15 +480,15 @@ void TUpDown::Draw() const {
|
|||
}
|
||||
|
||||
bool TUpDown::Click(int x, int y) {
|
||||
if (active && visible && up.Click(x, y)) {
|
||||
if (active && visible && lower.Click(x, y)) {
|
||||
value++;
|
||||
down.SetActive(true);
|
||||
higher.SetActive(true);
|
||||
if (value == maximum)
|
||||
up.SetActive(false);
|
||||
lower.SetActive(false);
|
||||
return true;
|
||||
}
|
||||
if (active && visible && down.Click(x, y)) {
|
||||
up.SetActive(true);
|
||||
if (active && visible && higher.Click(x, y)) {
|
||||
lower.SetActive(true);
|
||||
value--;
|
||||
if (value == minimum)
|
||||
down.SetActive(false);
|
||||
|
@ -497,19 +500,19 @@ bool TUpDown::Click(int x, int y) {
|
|||
void TUpDown::Key(sf::Keyboard::Key key, bool released) {
|
||||
if (released) return;
|
||||
|
||||
if (key == sf::Keyboard::Up) { // Arrow up
|
||||
if ((!swapArrows && key == sf::Keyboard::Up) || (swapArrows && key == sf::Keyboard::Down)) { // Arrow up
|
||||
if (value > minimum) {
|
||||
value--;
|
||||
up.SetActive(true);
|
||||
lower.SetActive(true);
|
||||
if (value == minimum)
|
||||
down.SetActive(false);
|
||||
higher.SetActive(false);
|
||||
}
|
||||
} else if (key == sf::Keyboard::Down) { // Arrow down
|
||||
} else if ((!swapArrows && key == sf::Keyboard::Down) || (swapArrows && key == sf::Keyboard::Up)) { // Arrow down
|
||||
if (value < maximum) {
|
||||
value++;
|
||||
down.SetActive(true);
|
||||
higher.SetActive(true);
|
||||
if (value == maximum)
|
||||
up.SetActive(false);
|
||||
lower.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -525,25 +528,25 @@ void TUpDown::MouseMove(int x, int y) {
|
|||
|
||||
void TUpDown::SetValue(int value_) {
|
||||
value = clamp(minimum, value_, maximum);
|
||||
up.SetActive(value < maximum);
|
||||
down.SetActive(value > minimum);
|
||||
lower.SetActive(value < maximum);
|
||||
higher.SetActive(value > minimum);
|
||||
}
|
||||
void TUpDown::SetMinimum(int min_) {
|
||||
minimum = min_;
|
||||
value = clamp(minimum, value, maximum);
|
||||
up.SetActive(value < maximum);
|
||||
down.SetActive(value > minimum);
|
||||
lower.SetActive(value < maximum);
|
||||
higher.SetActive(value > minimum);
|
||||
}
|
||||
void TUpDown::SetMaximum(int max_) {
|
||||
maximum = max_;
|
||||
value = clamp(minimum, value, maximum);
|
||||
up.SetActive(value < maximum);
|
||||
down.SetActive(value > minimum);
|
||||
lower.SetActive(value < maximum);
|
||||
higher.SetActive(value > minimum);
|
||||
}
|
||||
|
||||
TUpDown* AddUpDown(int x, int y, int minimum, int maximum, int value, int distance) {
|
||||
TUpDown* AddUpDown(int x, int y, int minimum, int maximum, int value, int distance, bool swapArrows) {
|
||||
locked_UD = true;
|
||||
return static_cast<TUpDown*>(AddWidget(new TUpDown(x, y, minimum, maximum, value, distance)));
|
||||
return static_cast<TUpDown*>(AddWidget(new TUpDown(x, y, minimum, maximum, value, distance, swapArrows)));
|
||||
}
|
||||
|
||||
// ------------------ Elementary drawing ---------------------------------------------
|
||||
|
|
|
@ -171,11 +171,14 @@ TArrow* AddArrow(int x, int y, bool down);
|
|||
class TUpDown : public TWidget {
|
||||
TArrow up;
|
||||
TArrow down;
|
||||
TArrow& higher;
|
||||
TArrow& lower;
|
||||
int value;
|
||||
int minimum;
|
||||
int maximum;
|
||||
bool swapArrows;
|
||||
public:
|
||||
TUpDown(int x, int y, int min_, int max_, int value_, int distance);
|
||||
TUpDown(int x, int y, int min_, int max_, int value_, int distance, bool swapArrows_);
|
||||
int GetValue() const { return value; }
|
||||
void SetValue(int value_);
|
||||
void SetMinimum(int min_);
|
||||
|
@ -185,7 +188,7 @@ public:
|
|||
void Key(sf::Keyboard::Key key, bool released);
|
||||
void MouseMove(int x, int y);
|
||||
};
|
||||
TUpDown* AddUpDown(int x, int y, int minimum, int maximum, int value, int distance = 2);
|
||||
TUpDown* AddUpDown(int x, int y, int minimum, int maximum, int value, int distance = 2, bool swapArrows = false);
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue