summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/gui.cpp18
-rw-r--r--src/gui/widgets/widget.h3
-rw-r--r--src/touchmanager.cpp5
-rw-r--r--src/touchmanager.h2
4 files changed, 25 insertions, 3 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index d54a924f1..49b6d2774 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -83,6 +83,8 @@
#include "input/inputmanager.h"
+#include "render/renderers.h"
+
#include "resources/imageset.h"
#include "resources/resourcemanager.h"
@@ -452,9 +454,19 @@ bool Gui::handleKeyInput()
void Gui::draw()
{
BLOCK_START("Gui::draw 1")
- mGraphics->pushClipArea(getTop()->getDimension());
- getTop()->draw(mGraphics);
- touchManager.draw();
+ Widget *const top = getTop();
+ mGraphics->pushClipArea(top->getDimension());
+
+ if (isBatchDrawRenders(openGLMode))
+ {
+ top->draw(mGraphics);
+ touchManager.draw();
+ }
+ else
+ {
+ top->safeDraw(mGraphics);
+ touchManager.safeDraw();
+ }
int mouseX;
int mouseY;
diff --git a/src/gui/widgets/widget.h b/src/gui/widgets/widget.h
index 8191754e5..86e54510f 100644
--- a/src/gui/widgets/widget.h
+++ b/src/gui/widgets/widget.h
@@ -122,6 +122,9 @@ class Widget notfinal : public Widget2
*/
virtual void draw(Graphics* graphics) = 0;
+ virtual void safeDraw(Graphics* graphics)
+ { draw(graphics); }
+
/**
* Called when a widget is given a chance to draw a frame around itself.
* The frame is not considered a part of the widget, it only allows a frame
diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp
index efa4758b1..19024fff4 100644
--- a/src/touchmanager.cpp
+++ b/src/touchmanager.cpp
@@ -268,6 +268,11 @@ void TouchManager::draw()
}
}
+void TouchManager::safeDraw()
+{
+ draw();
+}
+
bool TouchManager::processEvent(const MouseInput &mouseInput)
{
const int x = mouseInput.getTouchX();
diff --git a/src/touchmanager.h b/src/touchmanager.h
index 6a8e74627..87f99c8d0 100644
--- a/src/touchmanager.h
+++ b/src/touchmanager.h
@@ -125,6 +125,8 @@ class TouchManager final : public ConfigListener
void draw();
+ void safeDraw();
+
bool processEvent(const MouseInput &mouseInput);
bool isActionActive(const int index) const;