1 | Index: mythgallery/glsingleview.cpp
|
---|
2 | ===================================================================
|
---|
3 | --- mythgallery/glsingleview.cpp (revision 10014)
|
---|
4 | +++ mythgallery/glsingleview.cpp (working copy)
|
---|
5 | @@ -25,12 +25,14 @@
|
---|
6 | using namespace std;
|
---|
7 |
|
---|
8 | #include <qtimer.h>
|
---|
9 | +#include <qdatetime.h>
|
---|
10 | #include <qimage.h>
|
---|
11 | #include <qlayout.h>
|
---|
12 | #include <qsize.h>
|
---|
13 | #include <qfileinfo.h>
|
---|
14 | #include <qdir.h>
|
---|
15 | #include <qpainter.h>
|
---|
16 | +#include <qobject.h>
|
---|
17 |
|
---|
18 | #include <mythtv/mythcontext.h>
|
---|
19 | #include <mythtv/lcddevice.h>
|
---|
20 | @@ -131,7 +133,7 @@
|
---|
21 | QString transType = gContext->GetSetting("SlideshowOpenGLTransition");
|
---|
22 | if (!transType.isEmpty() && m_effectMap.contains(transType))
|
---|
23 | m_effectMethod = m_effectMap[transType];
|
---|
24 | -
|
---|
25 | + m_transTimeout = gContext->GetNumSetting("SlideshowOpenGLTransitionLength", 0);
|
---|
26 | if (!m_effectMethod || transType == QString("random (gl)"))
|
---|
27 | {
|
---|
28 | m_effectMethod = getRandomEffect();
|
---|
29 | @@ -156,6 +158,7 @@
|
---|
30 | // ---------------------------------------------------------------
|
---|
31 |
|
---|
32 | m_timer = new QTimer(this);
|
---|
33 | + m_time = new QTime();
|
---|
34 | connect(m_timer, SIGNAL(timeout()),
|
---|
35 | SLOT(slotTimeOut()));
|
---|
36 |
|
---|
37 | @@ -217,6 +220,7 @@
|
---|
38 |
|
---|
39 | m_timer->stop();
|
---|
40 | delete m_timer;
|
---|
41 | + delete m_time;
|
---|
42 |
|
---|
43 | if (m_texItem[0].tex)
|
---|
44 | glDeleteTextures(1, &m_texItem[0].tex);
|
---|
45 | @@ -294,9 +298,7 @@
|
---|
46 | (this->*m_effectMethod)();
|
---|
47 | }
|
---|
48 | else
|
---|
49 | - {
|
---|
50 | paintTexture();
|
---|
51 | - }
|
---|
52 |
|
---|
53 | if (glGetError())
|
---|
54 | VERBOSE(VB_GENERAL, LOC_ERR + "OpenGL error detected");
|
---|
55 | @@ -780,7 +782,7 @@
|
---|
56 |
|
---|
57 | void GLSingleView::effectBlend(void)
|
---|
58 | {
|
---|
59 | - if (m_i > 100)
|
---|
60 | + if (m_time->elapsed() > 1000.0*m_transTimeout)
|
---|
61 | {
|
---|
62 | paintTexture();
|
---|
63 | m_effectRunning = false;
|
---|
64 | @@ -790,6 +792,7 @@
|
---|
65 |
|
---|
66 | int a = (m_curr == 0) ? 1 : 0;
|
---|
67 | int b = m_curr;
|
---|
68 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
69 |
|
---|
70 | TexItem& ta = m_texItem[a];
|
---|
71 | TexItem& tb = m_texItem[b];
|
---|
72 | @@ -819,7 +822,7 @@
|
---|
73 |
|
---|
74 | glBegin(GL_QUADS);
|
---|
75 | {
|
---|
76 | - glColor4f(0.0f, 0.0f, 0.0f, 1.0f / (100.0f) * (float)m_i);
|
---|
77 | + glColor4f(0.0f, 0.0f, 0.0f, 1.0f * t);
|
---|
78 | glVertex3f(-1.0f, -1.0f, 0.0f);
|
---|
79 | glVertex3f(+1.0f, -1.0f, 0.0f);
|
---|
80 | glVertex3f(+1.0f, +1.0f, 0.0f);
|
---|
81 | @@ -835,7 +838,7 @@
|
---|
82 |
|
---|
83 | glBegin(GL_QUADS);
|
---|
84 | {
|
---|
85 | - glColor4f(1.0f, 1.0f, 1.0f, 1.0f / (100.0f) * (float)m_i);
|
---|
86 | + glColor4f(1.0f, 1.0f, 1.0f, 1.0f * t);
|
---|
87 | glTexCoord2f(0.0f, 0.0f);
|
---|
88 | glVertex3f(-tb.cx, -tb.cy, 0.0f);
|
---|
89 |
|
---|
90 | @@ -855,14 +858,13 @@
|
---|
91 |
|
---|
92 | void GLSingleView::effectZoomBlend(void)
|
---|
93 | {
|
---|
94 | - if (m_i > 100)
|
---|
95 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
96 | {
|
---|
97 | paintTexture();
|
---|
98 | m_effectRunning = false;
|
---|
99 | m_tmout = -1;
|
---|
100 | return;
|
---|
101 | }
|
---|
102 | -
|
---|
103 | int a = (m_curr == 0) ? 1 : 0;
|
---|
104 | int b = m_curr;
|
---|
105 | float zf = 0.75f;
|
---|
106 | @@ -873,7 +875,7 @@
|
---|
107 | glMatrixMode(GL_TEXTURE);
|
---|
108 | glLoadIdentity();
|
---|
109 | glRotatef(ta.angle, 0.0f, 0.0f, 1.0f);
|
---|
110 | - float t = 1.0f / (100.00f) * (float)m_i;
|
---|
111 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
112 | glBindTexture(GL_TEXTURE_2D, ta.tex);
|
---|
113 |
|
---|
114 | glBegin(GL_QUADS);
|
---|
115 | @@ -901,7 +903,7 @@
|
---|
116 |
|
---|
117 | glBegin(GL_QUADS);
|
---|
118 | {
|
---|
119 | - glColor4f(1.0f, 1.0f, 1.0f, 1.0f / (100.0f) * (float) m_i);
|
---|
120 | + glColor4f(1.0f, 1.0f, 1.0f, 0.0f + t);
|
---|
121 | glTexCoord2f(0.0f, 0.0f);
|
---|
122 | glVertex3f(-tb.cx, -tb.cy, 0.0f);
|
---|
123 |
|
---|
124 | @@ -921,7 +923,7 @@
|
---|
125 |
|
---|
126 | void GLSingleView::effectRotate(void)
|
---|
127 | {
|
---|
128 | - if (m_i > 100)
|
---|
129 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
130 | {
|
---|
131 | paintTexture();
|
---|
132 | m_effectRunning = false;
|
---|
133 | @@ -934,6 +936,7 @@
|
---|
134 |
|
---|
135 | int a = (m_curr == 0) ? 1 : 0;
|
---|
136 | int b = m_curr;
|
---|
137 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
138 |
|
---|
139 | TexItem& ta = m_texItem[a];
|
---|
140 | TexItem& tb = m_texItem[b];
|
---|
141 | @@ -962,10 +965,10 @@
|
---|
142 |
|
---|
143 | glMatrixMode(GL_MODELVIEW);
|
---|
144 | glLoadIdentity();
|
---|
145 | - float rotate = 360.0f/100.0f*(float)m_i;
|
---|
146 | + float rotate = 360.0f * t;
|
---|
147 | glRotatef(((m_dir == 0) ? -1 : 1) * rotate,
|
---|
148 | 0.0f, 0.0f, 1.0f);
|
---|
149 | - float scale = 1.0f/100.0f*(100.0f-(float)(m_i));
|
---|
150 | + float scale = 1.0f * (1.0f - t);
|
---|
151 | glScalef(scale, scale, 1.0f);
|
---|
152 |
|
---|
153 | glMatrixMode(GL_TEXTURE);
|
---|
154 | @@ -996,7 +999,7 @@
|
---|
155 |
|
---|
156 | void GLSingleView::effectBend(void)
|
---|
157 | {
|
---|
158 | - if (m_i > 100)
|
---|
159 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
160 | {
|
---|
161 | paintTexture();
|
---|
162 | m_effectRunning = false;
|
---|
163 | @@ -1009,6 +1012,7 @@
|
---|
164 |
|
---|
165 | int a = (m_curr == 0) ? 1 : 0;
|
---|
166 | int b = m_curr;
|
---|
167 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
168 |
|
---|
169 | TexItem& ta = m_texItem[a];
|
---|
170 | TexItem& tb = m_texItem[b];
|
---|
171 | @@ -1037,7 +1041,7 @@
|
---|
172 |
|
---|
173 | glMatrixMode(GL_MODELVIEW);
|
---|
174 | glLoadIdentity();
|
---|
175 | - glRotatef(90.0f/100.0f*(float)m_i,
|
---|
176 | + glRotatef(90.0f * t,
|
---|
177 | (m_dir == 0) ? 1.0f : 0.0f,
|
---|
178 | (m_dir == 1) ? 1.0f : 0.0f,
|
---|
179 | 0.0f);
|
---|
180 | @@ -1069,7 +1073,7 @@
|
---|
181 |
|
---|
182 | void GLSingleView::effectFade(void)
|
---|
183 | {
|
---|
184 | - if (m_i > 100)
|
---|
185 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
186 | {
|
---|
187 | paintTexture();
|
---|
188 | m_effectRunning = false;
|
---|
189 | @@ -1079,13 +1083,15 @@
|
---|
190 |
|
---|
191 | int a;
|
---|
192 | float opacity;
|
---|
193 | - if (m_i <= 50)
|
---|
194 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
195 | +
|
---|
196 | + if (m_time->elapsed() < 1000.0f * m_transTimeout * 0.5f)
|
---|
197 | {
|
---|
198 | a = (m_curr == 0) ? 1 : 0;
|
---|
199 | - opacity = 1.0f - 1.0f/50.0f*(float)(m_i);
|
---|
200 | + opacity = 1.0f - (2.0f * t);
|
---|
201 | }
|
---|
202 | else {
|
---|
203 | - opacity = 1.0f/50.0f*(float)(m_i-50.0f);
|
---|
204 | + opacity = 2.0f * (t - 0.5);
|
---|
205 | a = m_curr;
|
---|
206 | }
|
---|
207 |
|
---|
208 | @@ -1120,7 +1126,7 @@
|
---|
209 |
|
---|
210 | void GLSingleView::effectInOut(void)
|
---|
211 | {
|
---|
212 | - if (m_i > 100)
|
---|
213 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
214 | {
|
---|
215 | paintTexture();
|
---|
216 | m_effectRunning = false;
|
---|
217 | @@ -1135,7 +1141,8 @@
|
---|
218 |
|
---|
219 | int a;
|
---|
220 | bool out;
|
---|
221 | - if (m_i <= 50)
|
---|
222 | + float tt = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
223 | + if (m_time->elapsed() <= 1000.0f * m_transTimeout * 0.5f)
|
---|
224 | {
|
---|
225 | a = (m_curr == 0) ? 1 : 0;
|
---|
226 | out = 1;
|
---|
227 | @@ -1151,8 +1158,8 @@
|
---|
228 | glMatrixMode(GL_MODELVIEW);
|
---|
229 | glLoadIdentity();
|
---|
230 | float t = (out) ?
|
---|
231 | - 1.0f / 50.0f * (50.0f - m_i) :
|
---|
232 | - 1.0f / 50.0f * (m_i - 50.0f);
|
---|
233 | + 1.0f / 0.5f * (0.5f - tt) :
|
---|
234 | + 1.0f / 0.5f * (tt - 0.5f);
|
---|
235 |
|
---|
236 | glScalef(t, t, 1.0f);
|
---|
237 | t = 1.0f - t;
|
---|
238 | @@ -1190,7 +1197,7 @@
|
---|
239 |
|
---|
240 | void GLSingleView::effectSlide(void)
|
---|
241 | {
|
---|
242 | - if (m_i > 100)
|
---|
243 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
244 | {
|
---|
245 | paintTexture();
|
---|
246 | m_effectRunning = false;
|
---|
247 | @@ -1203,6 +1210,7 @@
|
---|
248 |
|
---|
249 | int a = (m_curr == 0) ? 1 : 0;
|
---|
250 | int b = m_curr;
|
---|
251 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
252 |
|
---|
253 | TexItem& ta = m_texItem[a];
|
---|
254 | TexItem& tb = m_texItem[b];
|
---|
255 | @@ -1231,7 +1239,7 @@
|
---|
256 |
|
---|
257 | glMatrixMode(GL_MODELVIEW);
|
---|
258 | glLoadIdentity();
|
---|
259 | - float trans = 2.0f/100.0f*(float)m_i;
|
---|
260 | + float trans = 2.0f * t;
|
---|
261 | glTranslatef((m_dir % 2 == 0) ? ((m_dir == 2)? 1 : -1) * trans : 0.0f,
|
---|
262 | (m_dir % 2 == 1) ? ((m_dir == 1)? 1 : -1) * trans : 0.0f,
|
---|
263 | 0.0f);
|
---|
264 | @@ -1265,7 +1273,7 @@
|
---|
265 |
|
---|
266 | void GLSingleView::effectFlutter(void)
|
---|
267 | {
|
---|
268 | - if (m_i > 100)
|
---|
269 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
270 | {
|
---|
271 | paintTexture();
|
---|
272 | m_effectRunning = false;
|
---|
273 | @@ -1275,6 +1283,7 @@
|
---|
274 |
|
---|
275 | int a = (m_curr == 0) ? 1 : 0;
|
---|
276 | int b = m_curr;
|
---|
277 | + float t = 1.0f * (float)m_time->elapsed() / (1000.0f * m_transTimeout);
|
---|
278 |
|
---|
279 | TexItem& ta = m_texItem[a];
|
---|
280 | TexItem& tb = m_texItem[b];
|
---|
281 | @@ -1318,11 +1327,11 @@
|
---|
282 |
|
---|
283 | glMatrixMode(GL_MODELVIEW);
|
---|
284 | glLoadIdentity();
|
---|
285 | - float rotate = 60.0f/100.0f*(float)m_i;
|
---|
286 | + float rotate = 60.0f*t;
|
---|
287 | glRotatef(rotate, 1.0f, 0.0f, 0.0f);
|
---|
288 | - float scale = 1.0f/100.0f*(100.0f-(float)m_i);
|
---|
289 | + float scale = 1.0f*(1-t);
|
---|
290 | glScalef(scale, scale, scale);
|
---|
291 | - glTranslatef(1.0f/100.0f*(float)m_i, 1.0f/100.0f*(float)m_i, 0.0f);
|
---|
292 | + glTranslatef(1.0f*t, 1.0f*t, 0.0f);
|
---|
293 |
|
---|
294 | glMatrixMode(GL_TEXTURE);
|
---|
295 | glLoadIdentity();
|
---|
296 | @@ -1386,10 +1395,10 @@
|
---|
297 |
|
---|
298 | void GLSingleView::effectCube(void)
|
---|
299 | {
|
---|
300 | - int tot = 200;
|
---|
301 | - int rotStart = 50;
|
---|
302 | + float tot = 1000.0f * m_transTimeout;
|
---|
303 | + float rotStart = 250.0f * m_transTimeout;
|
---|
304 |
|
---|
305 | - if (m_i > tot)
|
---|
306 | + if (m_time->elapsed() > 1000.0f * m_transTimeout)
|
---|
307 | {
|
---|
308 | paintTexture();
|
---|
309 | m_effectRunning = false;
|
---|
310 | @@ -1435,7 +1444,7 @@
|
---|
311 | glLoadIdentity();
|
---|
312 |
|
---|
313 | float trans = 5.0f *
|
---|
314 | - (float) ((m_i <= tot / 2) ? m_i : tot - m_i) / (float)tot;
|
---|
315 | + (float) (((float)m_time->elapsed() <= tot / 2) ? (float)m_time->elapsed() : tot - (float)m_time->elapsed()) / (float)tot;
|
---|
316 |
|
---|
317 | glTranslatef(0.0f, 0.0f, -znear - 1.0f - trans);
|
---|
318 |
|
---|
319 | @@ -1547,10 +1556,10 @@
|
---|
320 | }
|
---|
321 | glEnd();
|
---|
322 |
|
---|
323 | - if (m_i >= rotStart && m_i < (tot-rotStart))
|
---|
324 | + if ((float)m_time->elapsed() >= rotStart && (float)m_time->elapsed() < (tot-rotStart))
|
---|
325 | {
|
---|
326 | - xrot += 360.0f / (float)(tot - 2 * rotStart);
|
---|
327 | - yrot += 180.0f / (float)(tot - 2 * rotStart);
|
---|
328 | + xrot = 360.0f * ((float)m_time->elapsed() - ( rotStart))/(tot - 2 * rotStart);
|
---|
329 | + yrot = 180.0f * ((float)m_time->elapsed() - ( rotStart))/(tot - 2 * rotStart);
|
---|
330 | }
|
---|
331 |
|
---|
332 | m_i++;
|
---|
333 | @@ -1602,7 +1611,9 @@
|
---|
334 | m_tmout = 10;
|
---|
335 | m_effectRunning = true;
|
---|
336 | m_i = 0;
|
---|
337 | + m_disp = 0;
|
---|
338 | }
|
---|
339 | + m_time->restart();
|
---|
340 | }
|
---|
341 | }
|
---|
342 |
|
---|
343 | Index: mythgallery/glsingleview.h
|
---|
344 | ===================================================================
|
---|
345 | --- mythgallery/glsingleview.h (revision 10014)
|
---|
346 | +++ mythgallery/glsingleview.h (working copy)
|
---|
347 | @@ -30,6 +30,7 @@
|
---|
348 |
|
---|
349 | class QImage;
|
---|
350 | class QTimer;
|
---|
351 | +class QTime;
|
---|
352 |
|
---|
353 | class GLSingleView;
|
---|
354 |
|
---|
355 | @@ -94,12 +95,14 @@
|
---|
356 | float m_sx, m_sy;
|
---|
357 |
|
---|
358 | QTimer *m_timer;
|
---|
359 | + QTime *m_time;
|
---|
360 | int m_tmout;
|
---|
361 | int m_delay;
|
---|
362 | + float m_transTimeout;
|
---|
363 | bool m_effectRunning;
|
---|
364 | bool m_running;
|
---|
365 | int m_slideShow;
|
---|
366 | -
|
---|
367 | + int m_disp;
|
---|
368 | GLuint m_texInfo;
|
---|
369 | bool m_showInfo;
|
---|
370 | int m_maxTexDim;
|
---|
371 | Index: mythgallery/gallerysettings.cpp
|
---|
372 | ===================================================================
|
---|
373 | --- mythgallery/gallerysettings.cpp (revision 10014)
|
---|
374 | +++ mythgallery/gallerysettings.cpp (working copy)
|
---|
375 | @@ -92,6 +92,17 @@
|
---|
376 | return gc;
|
---|
377 | };
|
---|
378 |
|
---|
379 | +static HostSpinBox *SlideshowOpenGLTransitionLength()
|
---|
380 | +{
|
---|
381 | + HostSpinBox *gc = new HostSpinBox("SlideshowOpenGLTransitionLength", 1, 10, 1);
|
---|
382 | + gc->setLabel(QObject::tr("Durration of OpenGL Transition (seconds)"));
|
---|
383 | + gc->setValue(2);
|
---|
384 | + gc->setHelpText(QObject::tr("This is the durration of the OpenGL transition "
|
---|
385 | + "selected above, in seconds."));
|
---|
386 | + return gc;
|
---|
387 | +};
|
---|
388 | +
|
---|
389 | +
|
---|
390 | #endif /* OPENGL_SUPPORT */
|
---|
391 |
|
---|
392 | static HostComboBox *SlideshowTransition()
|
---|
393 | @@ -129,7 +140,6 @@
|
---|
394 | "picture in single view mode."));
|
---|
395 | return gc;
|
---|
396 | };
|
---|
397 | -
|
---|
398 | static HostSpinBox *SlideshowDelay()
|
---|
399 | {
|
---|
400 | HostSpinBox *gc = new HostSpinBox("SlideshowDelay", 1, 600, 1);
|
---|
401 | @@ -172,6 +182,7 @@
|
---|
402 |
|
---|
403 | ConfigurationGroup* openGLConfig = new VerticalConfigurationGroup(false);
|
---|
404 | openGLConfig->addChild(SlideshowOpenGLTransition());
|
---|
405 | + openGLConfig->addChild(SlideshowOpenGLTransitionLength());
|
---|
406 | addTarget("1", openGLConfig);
|
---|
407 |
|
---|
408 | ConfigurationGroup* regularConfig = new VerticalConfigurationGroup(false);
|
---|