diff options
Diffstat (limited to 'src/guiPauseMenu.cpp')
-rw-r--r-- | src/guiPauseMenu.cpp | 146 |
1 files changed, 19 insertions, 127 deletions
diff --git a/src/guiPauseMenu.cpp b/src/guiPauseMenu.cpp index b8f0473e8..ed4f0cd6f 100644 --- a/src/guiPauseMenu.cpp +++ b/src/guiPauseMenu.cpp @@ -1,8 +1,6 @@ /*
Minetest-c55
Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
-Original author Kabak Dmitry <userdima@gmail.com>, contributed under
-the minetest contributor agreement.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,33 +24,20 @@ with this program; if not, write to the Free Software Foundation, Inc., GUIPauseMenu::GUIPauseMenu(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
- IrrlichtDevice *dev):
- IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
- core::rect<s32>(0,0,100,100))
+ IrrlichtDevice *dev,
+ int *active_menu_count):
+ GUIModalMenu(env, parent, id, active_menu_count)
{
m_dev = dev;
- m_screensize_old = v2u32(0,0);
-
- resizeGui();
-
- setVisible(false);
}
GUIPauseMenu::~GUIPauseMenu()
{
+ removeChildren();
}
-void GUIPauseMenu::resizeGui()
+void GUIPauseMenu::removeChildren()
{
- video::IVideoDriver* driver = Environment->getVideoDriver();
- v2u32 screensize = driver->getScreenSize();
- if(screensize == m_screensize_old)
- return;
- m_screensize_old = screensize;
-
- /*
- Remove stuff
- */
{
gui::IGUIElement *e = getElementFromId(256);
if(e != NULL)
@@ -73,7 +58,18 @@ void GUIPauseMenu::resizeGui() if(e != NULL)
e->remove();
}
+}
+void GUIPauseMenu::regenerateGui(v2u32 screensize)
+{
+ /*
+ Remove stuff
+ */
+ removeChildren();
+
+ /*
+ Calculate new sizes and positions
+ */
core::rect<s32> rect(
screensize.X/2 - 580/2,
screensize.Y/2 - 300/2,
@@ -129,11 +125,8 @@ void GUIPauseMenu::resizeGui() }
}
-void GUIPauseMenu::draw()
+void GUIPauseMenu::drawMenu()
{
- if(!IsVisible)
- return;
-
gui::IGUISkin* skin = Environment->getSkin();
if (!skin)
return;
@@ -151,7 +144,7 @@ bool GUIPauseMenu::OnEvent(const SEvent& event) {
if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
{
- setVisible(false);
+ quitMenu();
return true;
}
}
@@ -173,7 +166,7 @@ bool GUIPauseMenu::OnEvent(const SEvent& event) switch(event.GUIEvent.Caller->getID())
{
case 256: // continue
- setVisible(false);
+ quitMenu();
break;
case 257: // exit
m_dev->closeDevice();
@@ -185,104 +178,3 @@ bool GUIPauseMenu::OnEvent(const SEvent& event) return Parent ? Parent->OnEvent(event) : false;
}
-#if 0
-GUIPauseMenu::GUIPauseMenu(IrrlichtDevice *device, IEventReceiver *recv):
- dev(device),
- oldRecv(recv)
-{
- if(!dev)
- return;
- guienv=dev->getGUIEnvironment();
-
- if (!loadMenu())
- return;
-
- device->setEventReceiver(this); // now WE are the input receiver! ahhaha!
-}
-
-GUIPauseMenu::~GUIPauseMenu(void)
-{
-}
-
-void GUIPauseMenu::scaleGui() // this function scales gui from the size stored in file to screen size
-{
- core::dimension2du screen=dev->getVideoDriver()->getScreenSize();
- core::vector2di real=root->getAbsolutePosition().LowerRightCorner; // determine gui size stored in file (which is size of my menu root node)
- float factorX=(float)screen.Width/(float)real.X;
- float factorY=(float)screen.Height/(float)real.Y;
- scaleGui(guienv->getRootGUIElement(),factorX,factorY);
-}
-void GUIPauseMenu::scaleGui(gui::IGUIElement *node,float factorX,float factorY) // recursive set scale
-{
- if((node->getParent() && node->getParent()->getID()==255) || node->getID()==255) // modify only menu's elements
- {
- int lx,rx,ly,ry;
- lx=(float)node->getRelativePosition().UpperLeftCorner.X*factorX;
- ly=(float)node->getRelativePosition().UpperLeftCorner.Y*factorY;
- rx=(float)node->getRelativePosition().LowerRightCorner.X*factorX;
- ry=(float)node->getRelativePosition().LowerRightCorner.Y*factorY;
- node->setRelativePosition(core::recti(lx,ly,rx,ry));
- }
-
- core::list<gui::IGUIElement*>::ConstIterator it = node->getChildren().begin();
- for(; it != node->getChildren().end(); ++it)
- scaleGui((*it),factorX,factorY);
-}
-
-bool GUIPauseMenu::loadMenu()
-{
- guienv->loadGUI("../data/pauseMenu.gui");
-
- root=(gui::IGUIStaticText*)guienv->getRootGUIElement()->getElementFromId(255,true);
- if(!root) // if there is no my root node then menu file not found or corrupted
- return false;
-
- scaleGui(); // scale gui to our screen size
-
- root->setVisible(false); // hide our menu
- // make it transparent
- //root->setBackgroundColor(video::SColor(100,128,100,128));
- root->setBackgroundColor(video::SColor(140,0,0,0));
-
- return true;
-}
-
-bool GUIPauseMenu::OnEvent(const SEvent& event)
-{
- if(!dev->isWindowFocused())
- setVisible(true);
-
- bool ret=false;
- if(oldRecv && !isVisible()) // call master if we have it and if we are inactive
- ret=oldRecv->OnEvent(event);
-
- if(ret==true)
- return true; // if the master receiver does the work
-
- if(event.EventType==EET_KEY_INPUT_EVENT)
- {
- if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
- {
- setVisible(!isVisible());
- }
- }
- if(event.EventType==EET_GUI_EVENT)
- {
- if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
- {
- switch(event.GUIEvent.Caller->getID())
- {
- case 256: // continue
- setVisible(false);
- break;
- case 257: // exit
- dev->closeDevice();
- break;
- }
- }
- }
-
- return false;
-}
-#endif
-
|