blob: cd1b94a8dbbfc80d791570edaa1d2779598a27de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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;
}
|