diff options
Diffstat (limited to 'map/window_handle.cpp')
-rw-r--r-- | map/window_handle.cpp | 98 |
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; +} |