3#ifndef SUBTITLESCREEN_H
4#define SUBTITLESCREEN_H
6#include "libmythbase/mythconfig.h"
32class TestSubtitleScreen;
44 QSize
CalcSize(
float layoutSpacing = 0.0F)
const;
45 void CalcPadding(
bool isFirst,
bool isLast,
int &left,
int &right)
const;
48 bool PreRender(
bool isFirst,
bool isLast,
int &x,
int y,
int height);
68 QSize
CalcSize(
float layoutSpacing = 0.0F)
const;
79 friend class TestSubtitleScreen;
83 std::chrono::milliseconds start,
84 std::chrono::milliseconds duration,
86 m_base(
std::move(base)), m_safeArea(safearea),
87 m_start(start), m_duration(duration), m_subScreen(
p) {}
94 virtual void Layout(
void);
95 virtual void PreRender(
void);
97 virtual void Draw(
void);
98 virtual int CacheNum(
void)
const {
return -1; }
99 QStringList ToSRT(
void)
const;
105 std::chrono::milliseconds m_start {0ms};
106 std::chrono::milliseconds m_duration {0ms};
108 int m_xAnchorPoint {0};
109 int m_yAnchorPoint {0};
120 std::chrono::milliseconds start,
121 std::chrono::milliseconds duration,
123 const QStringList &subs) :
128 void WrapLongLines(
void)
override;
130 void Init(
const QStringList &subs);
137 const QString &base =
"",
138 QRect safearea = QRect(),
144 void Layout(
void)
override;
146 void Init(
const std::vector<CC608Text*> &
buffers);
154 const std::vector<CC708String*> &list,
155 const QString &base =
"",
156 QRect safearea = QRect(),
158 float aspect = 1.77777F) :
161 m_bgFillAlpha(win.GetFillAlpha()),
162 m_bgFillColor(win.GetFillColor())
164 Init(win, list, aspect);
166 void Draw(
void)
override;
171 const std::vector<CC708String*> &list,
185 void EnableSubtitles(
int type,
bool forced_only =
false);
186 void DisableForcedSubtitles(
void);
189 void ClearAllSubtitles(
void);
190 void ClearNonDisplayedSubtitles(
void);
191 void ClearDisplayedSubtitles(
void);
192 void DisplayDVDButton(AVSubtitle* dvdButton, QRect &buttonPos);
194 void SetZoom(
int percent);
195 int GetZoom(
void)
const;
196 void SetDelay(std::chrono::milliseconds ms);
197 std::chrono::milliseconds GetDelay(
void)
const;
200 void Clear708Cache(uint64_t mask);
201 void SetElementAdded(
void);
202 void SetElementResized(
void);
203 void SetElementDeleted(
void);
205 QSize CalcTextSize(
const QString &text,
207 float layoutSpacing)
const;
209 bool isFirst,
bool isLast,
210 int &left,
int &right)
const;
216 static QString GetTeletextFontName(
void);
217 static int GetTeletextBackgroundAlpha(
void);
220 bool Create(
void)
override;
221 void Pulse(
void)
override;
224 void ResetElementState(
void);
225 void OptimiseDisplayedArea(
void);
226 void DisplayAVSubtitles(
void);
227 int DisplayScaledAVSubtitles(
const AVSubtitleRect *rect, QRect &bbox,
228 bool top, QRect &display,
int forced,
229 const QString& imagename,
230 std::chrono::milliseconds displayuntil,
231 std::chrono::milliseconds late);
233 void DisplayRawTextSubtitles(
void);
234 void DrawTextSubtitles(
const QStringList &subs, std::chrono::milliseconds start,
235 std::chrono::milliseconds duration);
236 void DisplayCC608Subtitles(
void);
237 void DisplayCC708Subtitles(
void);
238 void AddScaledImage(QImage &img, QRect &pos);
248 int m_textFontZoom {100};
249 int m_textFontZoomPrev {100};
250 std::chrono::milliseconds m_textFontDelayMs {0ms};
251 std::chrono::milliseconds m_textFontDelayMsPrev {0ms};
252 std::chrono::milliseconds m_textFontMinDurationMs {50ms};
253 std::chrono::milliseconds m_textFontMinDurationMsPrev {50ms};
254 std::chrono::milliseconds m_textFontDurationExtensionMs {0ms};
255 std::chrono::milliseconds m_textFontDurationExtensionMsPrev {0ms};
256 bool m_refreshModified {
false};
257 bool m_refreshDeleted {
false};
258 bool m_atEnd {
false};
266 bool InitialiseAssLibrary(
void);
267 void LoadAssFonts(
void);
268 void CleanupAssLibrary(
void);
269 void InitialiseAssTrack(
int tracknum);
270 void CleanupAssTrack(
void);
271 void AddAssEvent(
char *event, uint32_t starttime, uint32_t endtime);
272 void ResizeAssRenderer(
void);
273 void RenderAssTrack(std::chrono::milliseconds timecode,
bool force);
275 ASS_Library *m_assLibrary {
nullptr};
276 ASS_Renderer *m_assRenderer {
nullptr};
277 int m_assTrackNum {-1};
278 ASS_Track *m_assTrack {
nullptr};
279 uint m_assFontCount {0};
FormattedTextChunk(void)=default
MythFontProperties * m_textFont
FormattedTextChunk(QString t, CC708CharacterAttribute formatting, SubtitleScreen *p)
QSize CalcSize(float layoutSpacing=0.0F) const
CC708CharacterAttribute m_format
const SubtitleScreen * m_parent
void CalcPadding(bool isFirst, bool isLast, int &left, int &right) const
bool Split(FormattedTextChunk &newChunk)
bool PreRender(bool isFirst, bool isLast, int &x, int y, int height)
QString ToLogString(void) const
QSize CalcSize(float layoutSpacing=0.0F) const
QList< FormattedTextChunk > chunks
FormattedTextLine(int x=-1, int y=-1, int o_x=-1, int o_y=-1)
FormattedTextSubtitle608(const std::vector< CC608Text * > &buffers, const QString &base="", QRect safearea=QRect(), SubtitleScreen *p=nullptr)
int CacheNum(void) const override
FormattedTextSubtitle708(const CC708Window &win, int num, const std::vector< CC708String * > &list, const QString &base="", QRect safearea=QRect(), SubtitleScreen *p=nullptr, float aspect=1.77777F)
FormattedTextSubtitleSRT(const QString &base, QRect safearea, std::chrono::milliseconds start, std::chrono::milliseconds duration, SubtitleScreen *p, const QStringList &subs)
FormattedTextSubtitle(void)=default
virtual void WrapLongLines(void)
virtual int CacheNum(void) const
virtual ~FormattedTextSubtitle()=default
FormattedTextSubtitle(QString base, QRect safearea, std::chrono::milliseconds start, std::chrono::milliseconds duration, SubtitleScreen *p)
QVector< FormattedTextLine > m_lines
Screen in which all other widgets are contained and rendered.
void InitializeFonts(bool wasResized)
void DisplayTextSubtitles(void)
class SubtitleFormat * GetSubtitleFormat(void)
int EnabledSubtitleType(void) const
void SetFontSize(int pixelSize)
QList< FormattedTextSubtitle * > m_qInited