Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'map/window_handle.cpp')
-rw-r--r--map/window_handle.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/map/window_handle.cpp b/map/window_handle.cpp
new file mode 100644
index 0000000000..cd1b94a8db
--- /dev/null
+++ b/map/window_handle.cpp
@@ -0,0 +1,98 @@
+#include "window_handle.hpp"
+
+WindowHandle::WindowHandle() :
+ m_hasPendingUpdates(false),
+ m_isUpdatesEnabled(true),
+ m_needRedraw(true),
+ m_stallsCount(0)
+{
+}
+
+void WindowHandle::setVideoTimer(shared_ptr<VideoTimer> const & videoTimer)
+{
+ m_videoTimer = videoTimer;
+ m_frameFn = videoTimer->frameFn();
+ m_videoTimer->setFrameFn(bind(&WindowHandle::checkedFrameFn, this));
+ m_stallsCount = 0;
+}
+
+void WindowHandle::checkedFrameFn()
+{
+ if (needRedraw())
+ m_stallsCount = 0;
+ else
+ ++m_stallsCount;
+
+ if (m_stallsCount >= 60)
+ {
+// LOG(LINFO, ("PausedDOWN"));
+ m_videoTimer->pause();
+ }
+ else
+ m_frameFn();
+}
+
+WindowHandle::~WindowHandle() {}
+
+bool WindowHandle::needRedraw() const
+{
+ return m_isUpdatesEnabled && m_needRedraw;
+}
+
+void WindowHandle::checkTimer()
+{
+ switch (m_videoTimer->state())
+ {
+ case VideoTimer::EStopped:
+ m_videoTimer->start();
+ break;
+ case VideoTimer::EPaused:
+// LOG(LINFO, ("WokenUP"));
+ m_videoTimer->resume();
+ break;
+ default:
+ break;
+ }
+}
+
+void WindowHandle::setNeedRedraw(bool flag)
+{
+ m_needRedraw = flag;
+ if (m_needRedraw && m_isUpdatesEnabled)
+ checkTimer();
+}
+
+shared_ptr<yg::gl::RenderContext> const & WindowHandle::renderContext()
+{
+ return m_renderContext;
+}
+
+void WindowHandle::setRenderContext(shared_ptr<yg::gl::RenderContext> const & renderContext)
+{
+ m_renderContext = renderContext;
+}
+
+bool WindowHandle::setUpdatesEnabled(bool doEnable)
+{
+ bool res = false;
+
+ bool wasUpdatesEnabled = m_isUpdatesEnabled;
+ m_isUpdatesEnabled = doEnable;
+
+ if ((!wasUpdatesEnabled) && (doEnable) && (m_hasPendingUpdates))
+ {
+ setNeedRedraw(true);
+ m_hasPendingUpdates = false;
+ res = true;
+ }
+
+ return res;
+}
+
+void WindowHandle::invalidate()
+{
+ if (m_isUpdatesEnabled)
+ setNeedRedraw(true);
+ else
+ m_hasPendingUpdates = true;
+}