/
SlideShowPicture.h
129 lines (112 loc) · 3.83 KB
/
SlideShowPicture.h
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#pragma once
/*
* Copyright (C) 2005-2013 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#include "threads/CriticalSection.h"
#include "guilib/gui3d.h"
#include "utils/StdString.h"
#include "guilib/DirtyRegion.h"
typedef uint32_t color_t;
class CBaseTexture;
class CSlideShowPic
{
public:
enum DISPLAY_EFFECT { EFFECT_NONE = 0, EFFECT_FLOAT, EFFECT_ZOOM, EFFECT_RANDOM, EFFECT_PANORAMA, EFFECT_NO_TIMEOUT };
enum TRANSISTION_EFFECT { TRANSISTION_NONE = 0, FADEIN_FADEOUT, CROSSFADE, TRANSISTION_ZOOM, TRANSISTION_ROTATE };
struct TRANSISTION
{
TRANSISTION_EFFECT type;
int start;
int length;
};
CSlideShowPic();
~CSlideShowPic();
void SetTexture(int iSlideNumber, CBaseTexture* pTexture, DISPLAY_EFFECT dispEffect = EFFECT_RANDOM, TRANSISTION_EFFECT transEffect = FADEIN_FADEOUT);
void UpdateTexture(CBaseTexture* pTexture);
bool IsLoaded() const { return m_bIsLoaded;};
void UnLoad() {m_bIsLoaded = false;};
void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
void Render();
void Close();
bool IsFinished() const { return m_bIsFinished;};
bool DrawNextImage() const { return m_bDrawNextImage;};
int GetWidth() const { return (int)m_fWidth;};
int GetHeight() const { return (int)m_fHeight;};
void Keep();
bool StartTransistion();
int GetTransistionTime(int iType) const;
void SetTransistionTime(int iType, int iTime);
int SlideNumber() const { return m_iSlideNumber;};
void Zoom(float fZoomAmount, bool immediate = false);
void Rotate(float fRotateAngle, bool immediate = false);
void Pause(bool bPause);
void SetInSlideshow(bool slideshow);
void SetOriginalSize(int iOriginalWidth, int iOriginalHeight, bool bFullSize);
bool FullSize() const { return m_bFullSize;};
int GetOriginalWidth();
int GetOriginalHeight();
void Move(float dX, float dY);
float GetZoom() const { return m_fZoomAmount;};
bool m_bIsComic;
bool m_bCanMoveHorizontally;
private:
void UpdateVertices(float cur_x[4], float cur_y[4], const float new_x[4], const float new_y[4], CDirtyRegionList &dirtyregions);
void Render(float *x, float *y, CBaseTexture* pTexture, color_t color);
CBaseTexture *m_pImage;
int m_iOriginalWidth;
int m_iOriginalHeight;
int m_iSlideNumber;
bool m_bIsLoaded;
bool m_bIsFinished;
bool m_bDrawNextImage;
bool m_bIsDirty;
CStdString m_strFileName;
float m_fWidth;
float m_fHeight;
color_t m_alpha;
// stuff relative to middle position
float m_fPosX;
float m_fPosY;
float m_fPosZ;
float m_fVelocityX;
float m_fVelocityY;
float m_fVelocityZ;
float m_fZoomAmount;
float m_fZoomLeft;
float m_fZoomTop;
float m_ax[4], m_ay[4];
float m_sx[4], m_sy[4];
float m_bx[4], m_by[4];
float m_ox[4], m_oy[4];
// transistion and display effects
DISPLAY_EFFECT m_displayEffect;
TRANSISTION m_transistionStart;
TRANSISTION m_transistionEnd;
TRANSISTION m_transistionTemp; // used for rotations + zooms
float m_fAngle; // angle (between 0 and 2pi to display the image)
float m_fTransistionAngle;
float m_fTransistionZoom;
int m_iCounter;
int m_iTotalFrames;
bool m_bPause;
bool m_bNoEffect;
bool m_bFullSize;
bool m_bTransistionImmediately;
CCriticalSection m_textureAccess;
};