From be2c7dfb97c4e617eaa2fef94da822c5e4e9ffd1 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Tue, 14 Dec 2010 03:07:37 +0200
Subject: [PATCH] pausemenu stuff

---
 data/pauseMenu.gui   | Bin 0 -> 15170 bytes
 src/guiPauseMenu.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++
 src/guiPauseMenu.h   |  53 +++++++++++++++++++
 3 files changed, 173 insertions(+)
 create mode 100644 data/pauseMenu.gui
 create mode 100644 src/guiPauseMenu.cpp
 create mode 100644 src/guiPauseMenu.h

diff --git a/data/pauseMenu.gui b/data/pauseMenu.gui
new file mode 100644
index 0000000000000000000000000000000000000000..78fa02a9a61656cbd04cad83c7770c29263dfc2d
GIT binary patch
literal 15170
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
MSY_rj?RT&L0)UCY?*IS*

literal 0
HcmV?d00001

diff --git a/src/guiPauseMenu.cpp b/src/guiPauseMenu.cpp
new file mode 100644
index 000000000..676c145f2
--- /dev/null
+++ b/src/guiPauseMenu.cpp
@@ -0,0 +1,120 @@
+/*
+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
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
+#include "guiPauseMenu.h"
+
+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;
+}
+
+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! 
+}
+
+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;
+}
+
+guiPauseMenu::~guiPauseMenu(void)
+{
+}
diff --git a/src/guiPauseMenu.h b/src/guiPauseMenu.h
new file mode 100644
index 000000000..28ac02bc9
--- /dev/null
+++ b/src/guiPauseMenu.h
@@ -0,0 +1,53 @@
+/*
+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
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
+#ifndef GUIPAUSEMENU_HEADER
+#define GUIPAUSEMENU_HEADER
+
+#include <irrlicht.h>
+using namespace irr;
+
+class guiPauseMenu : public IEventReceiver
+{
+private:
+	IrrlichtDevice *dev;
+	gui::IGUIEnvironment *guienv;
+	IEventReceiver *oldRecv;
+
+	gui::IGUIStaticText *root;
+
+	bool loadMenu();
+	void scaleGui();
+	void scaleGui(gui::IGUIElement *node,float factorX,float factorY);
+public:
+	guiPauseMenu(IrrlichtDevice *device,IEventReceiver *recv);
+
+	void setVisible(bool visible){root->setVisible(visible);};
+	bool isVisible(){return root->isVisible();};
+
+	bool OnEvent(const SEvent& event);
+
+	~guiPauseMenu(void);
+};
+
+#endif
+
-- 
GitLab