diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-12-01 19:49:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-12-01 22:58:18 +0300 |
commit | d418537e26ec75bc656518dab293ff6313998682 (patch) | |
tree | 3c705f29207814276c2f036dc9b703b3b64cb7ed | |
parent | 5238a8fd782d5dc703aa788126748050f0cd604e (diff) | |
download | manaplus-d418537e26ec75bc656518dab293ff6313998682.tar.gz manaplus-d418537e26ec75bc656518dab293ff6313998682.tar.bz2 manaplus-d418537e26ec75bc656518dab293ff6313998682.tar.xz manaplus-d418537e26ec75bc656518dab293ff6313998682.zip |
Add batch drawing to touch manager.
-rw-r--r-- | src/touchmanager.cpp | 50 | ||||
-rw-r--r-- | src/touchmanager.h | 6 |
2 files changed, 42 insertions, 14 deletions
diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp index 7675cfb9b..f2c91f867 100644 --- a/src/touchmanager.cpp +++ b/src/touchmanager.cpp @@ -22,6 +22,7 @@ #include "configuration.h" #include "graphics.h" +#include "graphicsvertexes.h" #include "touchactions.h" #include "gui/theme.h" @@ -30,9 +31,13 @@ TouchManager touchManager; +extern int openGLMode; + TouchManager::TouchManager() : mKeyboard(nullptr), - mPad(nullptr) + mPad(nullptr), + mVertexes(new ImageCollection), + mRedraw(true) { for (int f = 0;f < actionsSize; f ++) mActions[f] = false; @@ -85,6 +90,7 @@ void TouchManager::loadTouchItem(TouchItem **item, std::string name, bool type, } theme->unload(skin); } + mRedraw = true; } void TouchManager::clear() @@ -104,6 +110,7 @@ void TouchManager::clear() } } mObjects.clear(); + mRedraw = true; } void TouchManager::unloadTouchItem(TouchItem **item0) @@ -116,23 +123,42 @@ void TouchManager::unloadTouchItem(TouchItem **item0) delete item; *item0 = nullptr; } + mRedraw = true; } void TouchManager::draw() { -// drawTouchItem(mPad); - for (TouchItemVectorCIter it = mObjects.begin(), it_end = mObjects.end(); - it != it_end; ++ it) + if (openGLMode != 2) + { + if (mRedraw) + { + mRedraw = false; + mVertexes->clear(); + for (TouchItemVectorCIter it = mObjects.begin(), + it_end = mObjects.end(); + it != it_end; ++ it) + { + const TouchItem *const item = *it; + if (item && item->image) + { + mainGraphics->calcTile(mVertexes, item->image, + item->x, item->y); + } + } + } + mainGraphics->drawTile(mVertexes); + } + else { - drawTouchItem(*it); + 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); + } } -// drawTouchItem(mKeyboard); -} - -void TouchManager::drawTouchItem(const TouchItem *const item) const -{ - if (item && item->image) - mainGraphics->drawImage(item->image, item->x, item->y); } bool TouchManager::processEvent(const gcn::MouseInput &mouseInput) diff --git a/src/touchmanager.h b/src/touchmanager.h index ae25d9a8c..43eaf65d1 100644 --- a/src/touchmanager.h +++ b/src/touchmanager.h @@ -32,6 +32,8 @@ #include "localconsts.h" +class ImageCollection; + typedef void (*TouchFuncPtr) (const gcn::MouseInput &mouseInput); const int actionsSize = 10; @@ -88,8 +90,6 @@ class TouchManager final void draw(); - void drawTouchItem(const TouchItem *const item) const; - bool processEvent(const gcn::MouseInput &mouseInput); bool isActionActive(const int index) const; @@ -104,7 +104,9 @@ class TouchManager final TouchItem *mKeyboard; TouchItem *mPad; TouchItemVector mObjects; + ImageCollection *mVertexes; bool mActions[actionsSize]; + bool mRedraw; }; extern TouchManager touchManager; |