From 2816d8f638de2f7f06ca1086d1c8846e8971f421 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Thu, 23 Dec 2010 15:31:50 +0200 Subject: redoing gui stuff --- src/guiPauseMenu.cpp | 146 +++++++-------------------------------------------- 1 file changed, 19 insertions(+), 127 deletions(-) (limited to 'src/guiPauseMenu.cpp') 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 -Original author Kabak Dmitry , 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(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 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::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 - -- cgit v1.2.3