summaryrefslogtreecommitdiff
path: root/src/input/touch/touchmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/touch/touchmanager.h')
-rw-r--r--src/input/touch/touchmanager.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/src/input/touch/touchmanager.h b/src/input/touch/touchmanager.h
new file mode 100644
index 000000000..f12bb850a
--- /dev/null
+++ b/src/input/touch/touchmanager.h
@@ -0,0 +1,203 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2011-2015 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/>.
+ */
+
+#ifndef INPUT_TOUCH_TOUCHMANAGER_H
+#define INPUT_TOUCH_TOUCHMANAGER_H
+
+#include "listeners/configlistener.h"
+
+#include "enums/input/inputaction.h"
+
+#include "gui/rect.h"
+
+#include <vector>
+
+#include "localconsts.h"
+
+class Image;
+class ImageCollection;
+class ImageRect;
+class MouseInput;
+
+typedef void (*TouchFuncPtr) (const MouseInput &restrict mouseInput);
+
+const int actionsSize = static_cast<int>(InputAction::TOTAL);
+const int buttonsCount = 12;
+
+struct TouchItem final
+{
+ TouchItem(const std::string &text0,
+ const Rect &rect0,
+ const int type0,
+ const std::string &restrict eventPressed0,
+ const std::string &restrict eventReleased0,
+ ImageRect *restrict const images0,
+ Image *restrict const icon0,
+ const int x0, const int y0,
+ const int width0, const int height0,
+ const TouchFuncPtr ptrAll,
+ const TouchFuncPtr ptrPressed,
+ const TouchFuncPtr ptrReleased,
+ const TouchFuncPtr ptrOut) :
+ text(text0),
+ rect(rect0),
+ type(type0),
+ eventPressed(eventPressed0),
+ eventReleased(eventReleased0),
+ images(images0),
+ icon(icon0),
+ x(x0),
+ y(y0),
+ width(width0),
+ height(height0),
+ funcAll(ptrAll),
+ funcPressed(ptrPressed),
+ funcReleased(ptrReleased),
+ funcOut(ptrOut)
+ {
+ }
+
+ A_DELETE_COPY(TouchItem)
+
+ std::string text;
+ Rect rect;
+ int type;
+ std::string eventPressed;
+ std::string eventReleased;
+ ImageRect *images;
+ Image *icon;
+ int x;
+ int y;
+ int width;
+ int height;
+ TouchFuncPtr funcAll;
+ TouchFuncPtr funcPressed;
+ TouchFuncPtr funcReleased;
+ TouchFuncPtr funcOut;
+};
+
+typedef std::vector<TouchItem*> TouchItemVector;
+typedef TouchItemVector::const_iterator TouchItemVectorCIter;
+typedef TouchItemVector::iterator TouchItemVectorIter;
+
+class TouchManager final : public ConfigListener
+{
+ public:
+ TouchManager();
+
+ ~TouchManager();
+
+ A_DELETE_COPY(TouchManager)
+
+ enum Types
+ {
+ NORMAL = 0,
+ LEFT = 1,
+ RIGHT = 2
+ };
+
+ void init() restrict2;
+
+ void loadTouchItem(TouchItem **restrict item,
+ const std::string &restrict name,
+ const std::string &restrict imageName,
+ const std::string &restrict text,
+ int x, int y,
+ const int width, const int height,
+ const int type,
+ const std::string &restrict eventPressed,
+ const std::string &restrict eventReleased,
+ const TouchFuncPtr fAll = nullptr,
+ const TouchFuncPtr fPressed = nullptr,
+ const TouchFuncPtr fReleased = nullptr,
+ const TouchFuncPtr fOut = nullptr)
+ restrict2 A_NONNULL(2);
+
+ void clear() restrict2;
+
+ void draw() restrict2;
+
+ void safeDraw() restrict2;
+
+ void drawText() restrict2;
+
+ bool processEvent(const MouseInput &mouseInput) restrict2;
+
+ bool isActionActive(const InputActionT index) restrict2 const;
+
+ void setActionActive(const InputActionT index,
+ const bool value) restrict2
+ {
+ if (static_cast<int>(index) >= 0 &&
+ static_cast<int>(index) < actionsSize)
+ {
+ mActions[static_cast<size_t>(index)] = value;
+ }
+ }
+
+ void resize(const int width, const int height) restrict2;
+
+ static void unload(TouchItem *restrict const item);
+
+ void unloadTouchItem(TouchItem *restrict *unloadItem) restrict2;
+
+ void optionChanged(const std::string &value) restrict2 override final;
+
+ void loadPad() restrict2;
+
+ void loadButtons() restrict2;
+
+ void loadKeyboard() restrict2;
+
+ int getPadSize() restrict2 const
+ { return (mJoystickSize + 2) * 50; }
+
+ void setInGame(const bool b) restrict2;
+
+ void setTempHide(const bool b) restrict2;
+
+ void shutdown() restrict2;
+
+ static void executeAction(const std::string &restrict event);
+
+ private:
+ TouchItem *mKeyboard;
+ TouchItem *mPad;
+ TouchItem *mButtons[buttonsCount] A_NONNULLPOINTER;
+ TouchItemVector mObjects;
+ ImageCollection *mVertexes A_NONNULLPOINTER;
+ bool mActions[actionsSize];
+ bool mRedraw;
+ bool mShowJoystick;
+ bool mShowButtons;
+ bool mShowKeyboard;
+ int mButtonsSize;
+ int mJoystickSize;
+ int mButtonsFormat;
+ int mWidth;
+ int mHeight;
+ bool mShow;
+ bool mInGame;
+ bool mTempHideButtons;
+};
+
+extern TouchManager touchManager;
+
+#endif // INPUT_TOUCH_TOUCHMANAGER_H