diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-05-28 15:23:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-28 15:23:30 +0200 |
commit | ef152428ef6ac609d805c4519b2247556db44931 (patch) | |
tree | d3fc8ed7de511149590d0d6fcf15e7dd32777add /src | |
parent | c09e16ff5bd65a82aa231a286308f3415fe9159e (diff) | |
download | minetest-ef152428ef6ac609d805c4519b2247556db44931.tar.gz minetest-ef152428ef6ac609d805c4519b2247556db44931.tar.bz2 minetest-ef152428ef6ac609d805c4519b2247556db44931.zip |
guiVolumeChange: prevent wrong value position by using 1 label instead of 2 (#5839)
* Use only one label instead of two for the soundText, this permit to ensure both label & values are aligned
* Add '%' character too, to reflect it's a percentage volume
* Remove rect on regenerateGui (upper part) which shadows outer part and which is not needed outside of the DesiredRect affectation
Fix issue #5837
Diffstat (limited to 'src')
-rw-r--r-- | src/guiVolumeChange.cpp | 60 |
1 files changed, 29 insertions, 31 deletions
diff --git a/src/guiVolumeChange.cpp b/src/guiVolumeChange.cpp index cdb70b4bf..c7868ad35 100644 --- a/src/guiVolumeChange.cpp +++ b/src/guiVolumeChange.cpp @@ -30,10 +30,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "gettext.h" -const int ID_soundText1 = 263; -const int ID_soundText2 = 264; -const int ID_soundExitButton = 265; -const int ID_soundSlider = 266; +const int ID_soundText = 263; +const int ID_soundExitButton = 264; +const int ID_soundSlider = 265; GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, @@ -50,10 +49,7 @@ GUIVolumeChange::~GUIVolumeChange() void GUIVolumeChange::removeChildren() { - if (gui::IGUIElement *e = getElementFromId(ID_soundText1)) - e->remove(); - - if (gui::IGUIElement *e = getElementFromId(ID_soundText2)) + if (gui::IGUIElement *e = getElementFromId(ID_soundText)) e->remove(); if (gui::IGUIElement *e = getElementFromId(ID_soundExitButton)) @@ -73,34 +69,31 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize) /* Calculate new sizes and positions */ - core::rect<s32> rect( - screensize.X/2 - 380/2, - screensize.Y/2 - 200/2, - screensize.X/2 + 380/2, - screensize.Y/2 + 200/2 + DesiredRect = core::rect<s32>( + screensize.X/2 - 380/2, + screensize.Y/2 - 200/2, + screensize.X/2 + 380/2, + screensize.Y/2 + 200/2 ); - - DesiredRect = rect; recalculateAbsolutePosition(false); - v2s32 size = rect.getSize(); - int volume = (int)(g_settings->getFloat("sound_volume")*100); + v2s32 size = DesiredRect.getSize(); + int volume = (int)(g_settings->getFloat("sound_volume") * 100); + /* Add stuff */ { - core::rect<s32> rect(0, 0, 120, 20); - rect = rect + v2s32(size.X/2-60, size.Y/2-35); + core::rect<s32> rect(0, 0, 160, 20); + rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35); + const wchar_t *text = wgettext("Sound Volume: "); - Environment->addStaticText(text, rect, false, - true, this, ID_soundText1); - delete[] text; - } - { - core::rect<s32> rect(0, 0, 30, 20); - rect = rect + v2s32(size.X/2+40, size.Y/2-35); - Environment->addStaticText(core::stringw(volume).c_str(), rect, false, - true, this, ID_soundText2); + core::stringw volume_text = text; + delete [] text; + + volume_text += core::stringw(volume) + core::stringw("%"); + Environment->addStaticText(volume_text.c_str(), rect, false, + true, this, ID_soundText); } { core::rect<s32> rect(0, 0, 80, 30); @@ -155,10 +148,15 @@ bool GUIVolumeChange::OnEvent(const SEvent& event) if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) { if (event.GUIEvent.Caller->getID() == ID_soundSlider) { s32 pos = ((gui::IGUIScrollBar*)event.GUIEvent.Caller)->getPos(); - g_settings->setFloat("sound_volume", (float)pos/100); + g_settings->setFloat("sound_volume", (float) pos / 100); + + gui::IGUIElement *e = getElementFromId(ID_soundText); + const wchar_t *text = wgettext("Sound Volume: "); + core::stringw volume_text = text; + delete [] text; - gui::IGUIElement *e = getElementFromId(ID_soundText2); - e->setText(core::stringw(pos).c_str()); + volume_text += core::stringw(pos) + core::stringw("%"); + e->setText(volume_text.c_str()); return true; } } |