3 #ifndef SUBTITLESCREEN_H
4 #define SUBTITLESCREEN_H
18 #include <QStringList>
30 class TestSubtitleScreen;
42 QSize
CalcSize(
float layoutSpacing = 0.0F)
const;
43 void CalcPadding(
bool isFirst,
bool isLast,
int &left,
int &right)
const;
46 bool PreRender(
bool isFirst,
bool isLast,
int &x,
int y,
int height);
66 QSize
CalcSize(
float layoutSpacing = 0.0F)
const;
77 friend class TestSubtitleScreen;
81 std::chrono::milliseconds start,
82 std::chrono::milliseconds duration,
84 m_base(std::move(base)), m_safeArea(safearea),
85 m_start(start), m_duration(duration), m_subScreen(
p) {}
92 virtual void Layout(
void);
93 virtual void PreRender(
void);
95 virtual void Draw(
void);
96 virtual int CacheNum(
void)
const {
return -1; }
97 QStringList ToSRT(
void)
const;
103 std::chrono::milliseconds m_start {0ms};
104 std::chrono::milliseconds m_duration {0ms};
106 int m_xAnchorPoint {0};
107 int m_yAnchorPoint {0};
118 std::chrono::milliseconds start,
119 std::chrono::milliseconds duration,
121 const QStringList &subs) :
128 void Init(
const QStringList &subs);
135 const QString &base =
"",
136 QRect safearea = QRect(),
142 void Layout(
void)
override;
144 void Init(
const std::vector<CC608Text*> &
buffers);
152 const std::vector<CC708String*> &list,
153 const QString &base =
"",
154 QRect safearea = QRect(),
156 float aspect = 1.77777F) :
159 m_bgFillAlpha(win.GetFillAlpha()),
160 m_bgFillColor(win.GetFillColor())
162 Init(win, list, aspect);
164 void Draw(
void)
override;
169 const std::vector<CC708String*> &list,
183 void EnableSubtitles(
int type,
bool forced_only =
false);
184 void DisableForcedSubtitles(
void);
187 void ClearAllSubtitles(
void);
188 void ClearNonDisplayedSubtitles(
void);
189 void ClearDisplayedSubtitles(
void);
190 void DisplayDVDButton(AVSubtitle* dvdButton, QRect &buttonPos);
193 int GetZoom(
void)
const;
194 void SetDelay(std::chrono::milliseconds ms);
195 std::chrono::milliseconds GetDelay(
void)
const;
198 void Clear708Cache(uint64_t mask);
199 void SetElementAdded(
void);
200 void SetElementResized(
void);
201 void SetElementDeleted(
void);
203 QSize CalcTextSize(
const QString &text,
205 float layoutSpacing)
const;
207 bool isFirst,
bool isLast,
208 int &left,
int &right)
const;
214 static QString GetTeletextFontName(
void);
215 static int GetTeletextBackgroundAlpha(
void);
218 bool Create(
void)
override;
219 void Pulse(
void)
override;
222 void ResetElementState(
void);
223 void OptimiseDisplayedArea(
void);
224 void DisplayAVSubtitles(
void);
225 int DisplayScaledAVSubtitles(
const AVSubtitleRect *rect, QRect &bbox,
226 bool top, QRect &display,
int forced,
227 const QString& imagename,
228 std::chrono::milliseconds displayuntil,
229 std::chrono::milliseconds late);
230 void DisplayTextSubtitles(
void);
231 void DisplayRawTextSubtitles(
void);
232 void DrawTextSubtitles(
const QStringList &subs, std::chrono::milliseconds start,
233 std::chrono::milliseconds duration);
234 void DisplayCC608Subtitles(
void);
235 void DisplayCC708Subtitles(
void);
236 void AddScaledImage(QImage &img, QRect &pos);
237 void InitializeFonts(
bool wasResized);
246 int m_textFontZoom {100};
247 int m_textFontZoomPrev {100};
248 std::chrono::milliseconds m_textFontDelayMs {0ms};
249 std::chrono::milliseconds m_textFontDelayMsPrev {0ms};
250 std::chrono::milliseconds m_textFontMinDurationMs {50ms};
251 std::chrono::milliseconds m_textFontMinDurationMsPrev {50ms};
252 std::chrono::milliseconds m_textFontDurationExtensionMs {0ms};
253 std::chrono::milliseconds m_textFontDurationExtensionMsPrev {0ms};
254 bool m_refreshModified {
false};
255 bool m_refreshDeleted {
false};
256 bool m_atEnd {
false};
264 bool InitialiseAssLibrary(
void);
265 void LoadAssFonts(
void);
266 void CleanupAssLibrary(
void);
267 void InitialiseAssTrack(
int tracknum);
268 void CleanupAssTrack(
void);
269 void AddAssEvent(
char *event, uint32_t starttime, uint32_t endtime);
270 void ResizeAssRenderer(
void);
271 void RenderAssTrack(std::chrono::milliseconds timecode,
bool force);
273 ASS_Library *m_assLibrary {
nullptr};
274 ASS_Renderer *m_assRenderer {
nullptr};
275 int m_assTrackNum {-1};
276 ASS_Track *m_assTrack {
nullptr};
278 #endif // USING_LIBASS
281 #endif // SUBTITLESCREEN_H