mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	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
This commit is contained in:
		@@ -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_soundText2);
 | 
			
		||||
			e->setText(core::stringw(pos).c_str());
 | 
			
		||||
			gui::IGUIElement *e = getElementFromId(ID_soundText);
 | 
			
		||||
			const wchar_t *text = wgettext("Sound Volume: ");
 | 
			
		||||
			core::stringw volume_text = text;
 | 
			
		||||
			delete [] text;
 | 
			
		||||
 | 
			
		||||
			volume_text += core::stringw(pos) + core::stringw("%");
 | 
			
		||||
			e->setText(volume_text.c_str());
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user