From 4d73d99ebc848e2065b38672e882f994a1d561f4 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sat, 23 Feb 2013 16:01:35 +0100 Subject: Add sound volume controls to ingame menu --- src/guiVolumeChange.cpp | 181 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/guiVolumeChange.cpp (limited to 'src/guiVolumeChange.cpp') diff --git a/src/guiVolumeChange.cpp b/src/guiVolumeChange.cpp new file mode 100644 index 000000000..606aa0196 --- /dev/null +++ b/src/guiVolumeChange.cpp @@ -0,0 +1,181 @@ +/* +Part of Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2011 Ciaran Gultnieks +Copyright (C) 2013 RealBadAngel, Maciej Kasatkin + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include "guiVolumeChange.h" +#include "debug.h" +#include "serialization.h" +#include +#include +#include +#include +#include +#include +#include "main.h" + +#include "gettext.h" + +const int ID_soundText1 = 263; +const int ID_soundText2 = 264; +const int ID_soundExitButton = 265; +const int ID_soundSlider = 266; + +GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env, + gui::IGUIElement* parent, s32 id, + IMenuManager *menumgr, + Client* client +): + GUIModalMenu(env, parent, id, menumgr), + m_client(client) +{ +} + +GUIVolumeChange::~GUIVolumeChange() +{ + removeChildren(); +} + +void GUIVolumeChange::removeChildren() +{ + { + gui::IGUIElement *e = getElementFromId(ID_soundText1); + if(e != NULL) + e->remove(); + } + { + gui::IGUIElement *e = getElementFromId(ID_soundText2); + if(e != NULL) + e->remove(); + } + { + gui::IGUIElement *e = getElementFromId(ID_soundExitButton); + if(e != NULL) + e->remove(); + } + { + gui::IGUIElement *e = getElementFromId(ID_soundSlider); + if(e != NULL) + e->remove(); + } +} + +void GUIVolumeChange::regenerateGui(v2u32 screensize) +{ + /* + Remove stuff + */ + removeChildren(); + + /* + 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 = rect; + recalculateAbsolutePosition(false); + + v2s32 size = rect.getSize(); + v2s32 topleft_client(40, 0); + v2s32 size_client = size - v2s32(40, 0); + int volume=(int)(g_settings->getFloat("sound_volume")*100); + /* + Add stuff + */ + changeCtype(""); + { + core::rect rect(0, 0, 120, 20); + rect = rect + v2s32(size.X/2-60, size.Y/2-35); + Environment->addStaticText(wgettext("Sound Volume: "), rect, false, + true, this, ID_soundText1); + } + { + 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::rect rect(0, 0, 80, 30); + rect = rect + v2s32(size.X/2-80/2, size.Y/2+55); + Environment->addButton(rect, this, ID_soundExitButton, + wgettext("Exit")); + } + { + core::rect rect(0, 0, 300, 20); + rect = rect + v2s32(size.X/2-150, size.Y/2); + gui::IGUIScrollBar *e = Environment->addScrollBar(true, + rect, this, ID_soundSlider); + e->setMax(100); + e->setPos(volume); + } + changeCtype(""); +} + +void GUIVolumeChange::drawMenu() +{ + gui::IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + video::IVideoDriver* driver = Environment->getVideoDriver(); + video::SColor bgcolor(140,0,0,0); + driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect); + gui::IGUIElement::draw(); +} + +bool GUIVolumeChange::OnEvent(const SEvent& event) +{ + if(event.EventType==EET_KEY_INPUT_EVENT) + { + if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown) + { + quitMenu(); + return true; + } + if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown) + { + quitMenu(); + return true; + } + } + if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED) + { + if (event.GUIEvent.Caller->getID() == ID_soundExitButton) + { + quitMenu(); + return true; + } + } + 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); + gui::IGUIElement *e = getElementFromId(ID_soundText2); + e->setText( core::stringw(pos).c_str() ); + return true; + } + } + return Parent ? Parent->OnEvent(event) : false; +} + -- cgit v1.2.3