summaryrefslogtreecommitdiff
path: root/src/touchmanager.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-11-09 01:53:40 +0300
committerAndrei Karas <akaras@inbox.ru>2012-11-12 18:54:58 +0300
commit363223352ee9c4c7c1d65e49cf48b38b538abaf2 (patch)
treefd43f37cdcbe02083ef66fdd54baca3f0c709f0b /src/touchmanager.cpp
parent9d66ae92ac714b4a4b21e588a3e2d481c352cd60 (diff)
downloadplus-363223352ee9c4c7c1d65e49cf48b38b538abaf2.tar.gz
plus-363223352ee9c4c7c1d65e49cf48b38b538abaf2.tar.bz2
plus-363223352ee9c4c7c1d65e49cf48b38b538abaf2.tar.xz
plus-363223352ee9c4c7c1d65e49cf48b38b538abaf2.zip
Moving Android on screen keyboard button from SDL to ManaPlus.
Also add basic functions for handling other on screen buttons.
Diffstat (limited to 'src/touchmanager.cpp')
-rw-r--r--src/touchmanager.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp
new file mode 100644
index 000000000..0278b9ddb
--- /dev/null
+++ b/src/touchmanager.cpp
@@ -0,0 +1,114 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2012 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * 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
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "touchmanager.h"
+
+#include "graphics.h"
+#include "touchactions.h"
+
+#include "gui/theme.h"
+
+#include "debug.h"
+
+TouchManager touchManager;
+
+TouchManager::TouchManager()
+{
+}
+
+TouchManager::~TouchManager()
+{
+ clear();
+}
+
+void TouchManager::init()
+{
+#ifdef ANDROID
+ Image *image = Theme::getImageFromThemeXml("keyboard_icon.xml", "");
+ TouchItem *keyboard = new TouchItem(gcn::Rectangle(10, 10,
+ image->getWidth(), image->getHeight()), image, 10, 10,
+ nullptr, nullptr, &showKeyboard);
+ mObjects.push_back(keyboard);
+#endif
+}
+
+void TouchManager::clear()
+{
+ for (TouchItemVectorCIter it = mObjects.begin(), it_end = mObjects.end();
+ it != it_end; ++ it)
+ {
+ const TouchItem *const item = *it;
+ if (item)
+ {
+ if (item->image)
+ item->image->decRef();
+ delete *it;
+ }
+ }
+ mObjects.clear();
+}
+
+void TouchManager::draw()
+{
+ for (TouchItemVectorCIter it = mObjects.begin(), it_end = mObjects.end();
+ it != it_end; ++ it)
+ {
+ const TouchItem *const item = *it;
+ if (item && item->image)
+ mainGraphics->drawImage(item->image, item->x, item->y);
+ }
+}
+
+bool TouchManager::processEvent(const gcn::MouseInput &mouseInput)
+{
+ const int x = mouseInput.getX();
+ const int y = mouseInput.getY();
+
+ for (TouchItemVectorCIter it = mObjects.begin(), it_end = mObjects.end();
+ it != it_end; ++ it)
+ {
+ const TouchItem *const item = *it;
+ if (item && item->rect.isPointInRect(x, y))
+ {
+ if (item->funcAll)
+ {
+ item->funcAll(mouseInput);
+ }
+ else
+ {
+ switch (mouseInput.getType())
+ {
+ case gcn::MouseInput::PRESSED:
+ if (item->funcPressed)
+ item->funcPressed(mouseInput);
+ break;
+ case gcn::MouseInput::RELEASED:
+ if (item->funcReleased)
+ item->funcReleased(mouseInput);
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+}