diff options
author | Vitaliy <silverunicorn2011@yandex.ru> | 2017-11-09 01:56:20 +0300 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-11-08 23:56:20 +0100 |
commit | 20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f (patch) | |
tree | 67378802190117d8271b3b6d489a92bcb16203b7 /src/gui/guiVolumeChange.cpp | |
parent | fc9747eb4b7f75e59a28957bc50f7a78256b3d66 (diff) | |
download | minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.gz minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.bz2 minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.zip |
Move files to subdirectories (#6599)
* Move files around
Diffstat (limited to 'src/gui/guiVolumeChange.cpp')
-rw-r--r-- | src/gui/guiVolumeChange.cpp | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp new file mode 100644 index 000000000..8c462312b --- /dev/null +++ b/src/gui/guiVolumeChange.cpp @@ -0,0 +1,196 @@ +/* +Part of Minetest +Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> +Copyright (C) 2013 Ciaran Gultnieks <ciaran@ciarang.com> +Copyright (C) 2013 RealBadAngel, Maciej Kasatkin <mk@realbadangel.pl> + +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 <string> +#include <IGUICheckBox.h> +#include <IGUIButton.h> +#include <IGUIScrollBar.h> +#include <IGUIStaticText.h> +#include <IGUIFont.h> +#include "settings.h" + +#include "gettext.h" + +const int ID_soundText = 263; +const int ID_soundExitButton = 264; +const int ID_soundSlider = 265; +const int ID_soundMuteButton = 266; + +GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env, + gui::IGUIElement* parent, s32 id, + IMenuManager *menumgr +): + GUIModalMenu(env, parent, id, menumgr) +{ +} + +GUIVolumeChange::~GUIVolumeChange() +{ + removeChildren(); +} + +void GUIVolumeChange::removeChildren() +{ + if (gui::IGUIElement *e = getElementFromId(ID_soundText)) + e->remove(); + + if (gui::IGUIElement *e = getElementFromId(ID_soundExitButton)) + e->remove(); + + if (gui::IGUIElement *e = getElementFromId(ID_soundSlider)) + e->remove(); +} + +void GUIVolumeChange::regenerateGui(v2u32 screensize) +{ + /* + Remove stuff + */ + removeChildren(); + + /* + Calculate new sizes and positions + */ + DesiredRect = core::rect<s32>( + screensize.X/2 - 380/2, + screensize.Y/2 - 200/2, + screensize.X/2 + 380/2, + screensize.Y/2 + 200/2 + ); + recalculateAbsolutePosition(false); + + v2s32 size = DesiredRect.getSize(); + int volume = (int)(g_settings->getFloat("sound_volume") * 100); + + /* + Add stuff + */ + { + core::rect<s32> rect(0, 0, 160, 20); + rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 70); + + const wchar_t *text = wgettext("Sound Volume: "); + 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); + rect = rect + v2s32(size.X/2-80/2, size.Y/2+55); + const wchar_t *text = wgettext("Exit"); + Environment->addButton(rect, this, ID_soundExitButton, + text); + delete[] text; + } + { + core::rect<s32> 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); + } + { + core::rect<s32> rect(0, 0, 160, 20); + rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35); + const wchar_t *text = wgettext("Muted"); + Environment->addCheckBox(g_settings->getBool("mute_sound"), rect, this, + ID_soundMuteButton, text); + delete[] text; + } +} + +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; + } + } else if (event.EventType == EET_GUI_EVENT) { + if (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) { + gui::IGUIElement *e = getElementFromId(ID_soundMuteButton); + if (e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) { + g_settings->setBool("mute_sound", ((gui::IGUICheckBox*)e)->isChecked()); + } + + Environment->setFocus(this); + return true; + } + + if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) { + if (event.GUIEvent.Caller->getID() == ID_soundExitButton) { + quitMenu(); + return true; + } + Environment->setFocus(this); + } + + if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST + && isVisible()) { + if (!canTakeFocus(event.GUIEvent.Element)) { + dstream << "GUIMainMenu: Not allowing focus change." + << std::endl; + // Returning true disables focus change + 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_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; + } + } + + } + + return Parent ? Parent->OnEvent(event) : false; +} + |