From ef152428ef6ac609d805c4519b2247556db44931 Mon Sep 17 00:00:00 2001 From: Loïc Blot Date: Sun, 28 May 2017 15:23:30 +0200 Subject: 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 --- src/guiVolumeChange.cpp | 60 ++++++++++++++++++++++++------------------------- 1 file 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 rect( - screensize.X/2 - 380/2, - screensize.Y/2 - 200/2, - screensize.X/2 + 380/2, - screensize.Y/2 + 200/2 + DesiredRect = core::rect( + 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 rect(0, 0, 120, 20); - rect = rect + v2s32(size.X/2-60, size.Y/2-35); + core::rect 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 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 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; } } -- cgit v1.2.3