MythTV master
mhi.h
Go to the documentation of this file.
1#ifndef MHI_H
2#define MHI_H
3
4// Misc header
5#include <ft2build.h>
6#include FT_FREETYPE_H
7
8// STL headers
9#include <list>
10#include <vector>
11
12// Qt headers
13#include <QWaitCondition>
14#include <QRunnable>
15#include <QString>
16#include <QMutex>
17#include <QImage>
18#include <QList>
19#include <QRect>
20#include <QPair>
21#include <QMap> // for QMap
22#include <QRegion> // for QRegion
23#include <QSize> // for QSize
24
25// MythTV headers
26#include "libmythbase/mythconfig.h"
29
30#include "mhegic.h"
31
32class MythPainter;
34class DSMCCPacket;
35class MHIImageData;
36class MHIContext;
37class MythAVCopy;
38class Dsmcc;
39class InteractiveTV;
40class MHStream;
41class MThread;
42class QByteArray;
43
44// Special value for the NetworkBootInfo version. Real values are a byte.
45static constexpr uint16_t NBI_VERSION_UNSET { 257 };
46
50class MHIContext : public MHContext, public QRunnable
51{
52 public:
53 explicit MHIContext(InteractiveTV *parent);
54 ~MHIContext() override;
55
56 void QueueDSMCCPacket(unsigned char *data, int length, int componentTag,
57 unsigned carouselId, int dataBroadcastId);
58 // A NetworkBootInfo sub-descriptor is present in the PMT.
59 void SetNetBootInfo(const unsigned char *data, uint length);
61 void Restart(int chanid, int sourceid, bool isLive);
62 // Offer a key press. Returns true if it accepts it.
63 // This will depend on the current profile.
64 bool OfferKey(const QString& key);
66 void UpdateOSD(InteractiveScreen *osdWindow, MythPainter *osdPainter);
68 void Reinit(QRect videoRect, QRect dispRect, float aspect);
69
71 void StopEngine(void);
72
73 // Test for an object in the carousel.
74 // Returns true if the object is present and
75 // so a call to GetCarouselData will not block and will return the data.
76 // Returns false if the object is not currently present because it has not
77 // yet appeared and also if it is not present in the containing directory.
78 bool CheckCarouselObject(const QString& objectPath) override; // MHContext
79
80 // Get an object from the carousel. Returns true and sets the data if
81 // it was able to retrieve the named object. Blocks if the object seems
82 // to be present but has not yet appeared. Returns false if the object
83 // cannot be retrieved.
84 bool GetCarouselData(const QString& objectPath, QByteArray &result) override; // MHContext
85
86 // Set the input register. This sets the keys that are to be handled
87 // by MHEG. Flushes the key queue.
88 void SetInputRegister(int num) override; // MHContext
89
91 void RequireRedraw(const QRegion &region) override; // MHContext
92
94 bool CheckStop(void) override // MHContext
95 { return m_stop; }
96
98 void GetInitialStreams(int &audioTag, int &videoTag) const;
99
102 bool isBoxed, MHRgba lineColour, MHRgba fillColour) override; // MHContext
103 MHTextDisplay *CreateText(void) override; // MHContext
104 MHBitmapDisplay *CreateBitmap(bool tiled) override; // MHContext
106 void DrawRect(int xPos, int yPos, int width, int height,
107 MHRgba colour) override; // MHContext
108 void DrawBackground(const QRegion &reg) override; // MHContext
109 void DrawVideo(const QRect &videoRect, const QRect &dispRect) override; // MHContext
110
111 void DrawImage(int x, int y, QRect rect, const QImage &image,
112 bool bScaled = false, bool bUnder = false);
113
114 int GetChannelIndex(const QString &str) override; // MHContext
116 bool GetServiceInfo(int channelId, int &netId, int &origNetId,
117 int &transportId, int &serviceId) override; // MHContext
118 bool TuneTo(int channel, int tuneinfo) override; // MHContext
119
121 bool BeginStream(const QString &str, MHStream* notify) override; // MHContext
122 void EndStream() override; // MHContext
123 // Called when the stream starts or stops
124 bool StreamStarted(bool bStarted = true);
126 bool BeginAudio(int tag) override; // MHContext
128 void StopAudio() override; // MHContext
130 bool BeginVideo(int tag) override; // MHContext
132 void StopVideo() override; // MHContext
133 // Get current stream position, -1 if unknown
134 std::chrono::milliseconds GetStreamPos() override; // MHContext
135 // Get current stream size, -1 if unknown
136 std::chrono::milliseconds GetStreamMaxPos() override; // MHContext
137 // Set current stream position
138 std::chrono::milliseconds SetStreamPos(std::chrono::milliseconds pos) override; // MHContext
139 // Play or pause a stream
140 void StreamPlay(bool play) override; // MHContext
141
142 // Get the context id strings. The format of these strings is specified
143 // by the UK MHEG profile.
144 const char *GetReceiverId(void) override // MHContext
145 { return "MYT001001"; } // Version number?
146 const char *GetDSMCCId(void) override // MHContext
147 { return "DSMMYT001"; } // DSMCC version.
148
149 // InteractionChannel
150 // 0= Active, 1= Inactive, 2= Disabled
151 int GetICStatus() override; // MHContext
152
153 // Operations used by the display classes
154 // Add an item to the display vector
155 void AddToDisplay(const QImage &image, QRect rect, bool bUnder = false);
156 int ScaleX(int n, bool roundup = false) const;
157 int ScaleY(int n, bool roundup = false) const;
158 QRect Scale(QRect r) const;
159 int ScaleVideoX(int n, bool roundup = false) const;
160 int ScaleVideoY(int n, bool roundup = false) const;
161 QRect ScaleVideo(QRect r) const;
162
163 FT_Face GetFontFace(void) { return m_face; }
164 bool IsFaceLoaded(void) const { return m_faceLoaded; }
165 bool LoadFont(const QString& name);
166 bool ImageUpdated(void) const { return m_updated; }
167
168 static const int kStdDisplayWidth = 720;
169 static const int kStdDisplayHeight = 576;
170
171 protected:
172 void run(void) override; // QRunnable
173 void ProcessDSMCCQueue(void);
174 void NetworkBootRequested(void);
175 void ClearDisplay(void);
176 void ClearQueue(void);
177 bool LoadChannelCache();
178 bool GetDSMCCObject(const QString &objectPath, QByteArray &result);
179 bool CheckAccess(const QString &objectPath, QByteArray &cert);
180
182
183 // Pointer to the DSMCC object carousel.
184 Dsmcc *m_dsmcc {nullptr};
187
188 MHInteractionChannel m_ic; // Interaction channel
189 MHStream *m_notify {nullptr};
190
191 QMutex m_keyLock;
194
195 MHEG *m_engine; // Pointer to the MHEG engine
196
197 mutable QMutex m_runLock;
198 QWaitCondition m_engineWait; // protected by m_runLock
199 bool m_stop {false}; // protected by m_runLock
201 bool m_updated {false};
202
203 std::list<MHIImageData*> m_display; // List of items to display
204
205 FT_Face m_face {nullptr};
206 bool m_faceLoaded {false};
207
209
212 bool m_isLive {false};
214
215 int m_audioTag {-1};
216 int m_videoTag {-1};
217 QList<int> m_tuneInfo;
218
220 std::vector<unsigned char> m_nbiData;
221
224
225 // Channel index database cache
226 using Val_t = QPair< int, int >; // transportid, chanid
227 using Key_t = QPair< int, int >; // networkid, serviceid
228 using ChannelCache_t = QMultiMap< Key_t, Val_t >;
231 static int Tid(ChannelCache_t::const_iterator it) { return it->first; }
232 static int Cid(ChannelCache_t::const_iterator it) { return it->second; }
233 static int Nid(ChannelCache_t::const_iterator it) { return it.key().first; }
234 static int Sid(ChannelCache_t::const_iterator it) { return it.key().second; }
235};
236
237// Object for drawing text.
238class MHIText : public MHTextDisplay
239{
240 public:
241 explicit MHIText(MHIContext *parent)
242 : m_parent(parent) {}
243 ~MHIText() override = default;
244
245 void Draw(int x, int y) override; // MHTextDisplay
246 void Clear(void) override; // MHTextDisplay
247 void AddText(int x, int y, const QString &str, MHRgba colour) override; // MHTextDisplay
248
249 void SetSize(int width, int height) override; // MHTextDisplay
250 void SetFont(int size, bool isBold, bool isItalic) override; // MHTextDisplay
251
252 QRect GetBounds(const QString &str, int &strLen, int maxSize = -1) override; // MHTextDisplay
253
254 public:
256 QImage m_image;
257 int m_fontSize {12};
258 bool m_fontItalic {false};
259 bool m_fontBold {false};
260 int m_width {0};
261 int m_height {0};
262};
263
268{
269 public:
270 MHIBitmap(MHIContext *parent, bool tiled);
271 ~MHIBitmap() override;
272
273 // Deleted functions should be public.
274 MHIBitmap(const MHIBitmap &) = delete; // not copyable
275 MHIBitmap &operator=(const MHIBitmap &) = delete; // not copyable
276
278 void CreateFromPNG(const unsigned char *data, int length) override; // MHBitmapDisplay
279
281 void CreateFromMPEG(const unsigned char *data, int length) override; // MHBitmapDisplay
282
284 void CreateFromJPEG(const unsigned char *data, int length) override; // MHBitmapDisplay
285
295 void Draw(int x, int y, QRect rect, bool tiled, bool bUnder) override; // MHBitmapDisplay
296
298 void ScaleImage(int newWidth, int newHeight) override; // MHBitmapDisplay
299
300 // Gets
301 QSize GetSize(void) override { return m_image.size(); } // MHBitmapDisplay
302 bool IsOpaque(void) override { return !m_image.isNull() && m_opaque; } // MHBitmapDisplay
303
304 public:
307 QImage m_image;
308 bool m_opaque {false};
310};
311
315class MHIDLA : public MHDLADisplay
316{
317 public:
318 MHIDLA(MHIContext *parent, bool isBoxed,
319 MHRgba lineColour, MHRgba fillColour)
320 : m_parent(parent), m_boxed(isBoxed),
321 m_boxLineColour(lineColour), m_boxFillColour(fillColour) {}
323 void Draw(int x, int y) override; // MHDLADisplay
325 void SetSize(int width, int height) override // MHDLADisplay
326 {
327 m_width = width;
328 m_height = height;
329 Clear();
330 }
331 void SetLineSize(int width) override // MHDLADisplay
332 { m_lineWidth = width; }
333 void SetLineColour(MHRgba colour) override // MHDLADisplay
334 { m_lineColour = colour; }
335 void SetFillColour(MHRgba colour) override // MHDLADisplay
336 { m_fillColour = colour; }
337
339 void Clear(void) override; // MHDLADisplay
340
341 // add items to the drawing.
342 void DrawLine(int x1, int y1, int x2, int y2) override; // MHDLADisplay
343 void DrawBorderedRectangle(int x, int y, int width, int height) override; // MHDLADisplay
344 void DrawOval(int x, int y, int width, int height) override; // MHDLADisplay
345 void DrawArcSector(int x, int y, int width, int height,
346 int start, int arc, bool isSector) override; // MHDLADisplay
347 void DrawPoly(bool isFilled, const MHPointVec& xArray, const MHPointVec& yArray) override; // MHDLADisplay
348
349 protected:
350 void DrawRect(int x, int y, int width, int height, MHRgba colour);
351 void DrawLineSub(int x1, int y1, int x2, int y2, bool swapped);
352
353 protected:
355 QImage m_image;
356 int m_width {0};
357 int m_height {0};
358 bool m_boxed;
363 int m_lineWidth {0};
364};
365
370{
371 public:
372 DSMCCPacket(unsigned char *data, int length, int tag,
373 unsigned car, int dbid)
374 : m_data(data), m_length(length),
375 m_componentTag(tag), m_carouselId(car),
377 {
378 }
379
381 {
382 free(m_data);
383 }
384
385 public:
386 unsigned char *m_data {nullptr};
389 unsigned m_carouselId;
391};
392
393#endif // MHI_H
std::vector< int > MHPointVec
Definition: BaseClasses.h:31
Data for the queued DSMCC tables.
Definition: mhi.h:370
int m_length
Definition: mhi.h:387
int m_componentTag
Definition: mhi.h:388
DSMCCPacket(unsigned char *data, int length, int tag, unsigned car, int dbid)
Definition: mhi.h:372
unsigned char * m_data
Definition: mhi.h:386
~DSMCCPacket()
Definition: mhi.h:380
unsigned m_carouselId
Definition: mhi.h:389
int m_dataBroadcastId
Definition: mhi.h:390
Definition: dsmcc.h:78
This is the interface between an MHEG engine and a MythTV TV object.
Definition: interactivetv.h:18
Definition: freemheg.h:61
Object for drawing bitmaps.
Definition: mhi.h:268
void Draw(int x, int y, QRect rect, bool tiled, bool bUnder) override
Draw the completed drawing onto the display.
Definition: mhi.cpp:1802
MHIBitmap & operator=(const MHIBitmap &)=delete
QSize GetSize(void) override
Definition: mhi.h:301
bool m_opaque
Definition: mhi.h:308
MHIBitmap(MHIContext *parent, bool tiled)
Definition: mhi.cpp:1791
void ScaleImage(int newWidth, int newHeight) override
Scale the bitmap. Only used for image derived from MPEG I-frames.
Definition: mhi.cpp:1968
void CreateFromMPEG(const unsigned char *data, int length) override
Create bitmap from single I frame MPEG.
Definition: mhi.cpp:1865
MHIContext * m_parent
Definition: mhi.h:305
MythAVCopy * m_copyCtx
Definition: mhi.h:309
void CreateFromPNG(const unsigned char *data, int length) override
Create bitmap from PNG.
Definition: mhi.cpp:1830
QImage m_image
Definition: mhi.h:307
bool m_tiled
Definition: mhi.h:306
MHIBitmap(const MHIBitmap &)=delete
bool IsOpaque(void) override
Definition: mhi.h:302
void CreateFromJPEG(const unsigned char *data, int length) override
Create bitmap from JPEG.
Definition: mhi.cpp:1846
~MHIBitmap() override
Definition: mhi.cpp:1797
Contains various utility functions for interactive television.
Definition: mhi.h:51
ChannelCache_t m_channelCache
Definition: mhi.h:229
bool OfferKey(const QString &key)
Definition: mhi.cpp:608
void StreamPlay(bool play) override
Definition: mhi.cpp:1160
void Reinit(QRect videoRect, QRect dispRect, float aspect)
The display area has changed.
Definition: mhi.cpp:624
const char * GetDSMCCId(void) override
Definition: mhi.h:146
FT_Face m_face
Definition: mhi.h:205
void QueueDSMCCPacket(unsigned char *data, int length, int componentTag, unsigned carouselId, int dataBroadcastId)
Definition: mhi.cpp:295
MHTextDisplay * CreateText(void) override
Definition: mhi.cpp:1174
Dsmcc * m_dsmcc
Definition: mhi.h:184
QMutex m_displayLock
Definition: mhi.h:200
bool GetServiceInfo(int channelId, int &netId, int &origNetId, int &transportId, int &serviceId) override
Get netId etc from the channel index.
Definition: mhi.cpp:978
bool CheckStop(void) override
Check whether we have requested a stop.
Definition: mhi.h:94
std::chrono::milliseconds GetStreamMaxPos() override
Definition: mhi.cpp:1145
QPair< int, int > Val_t
Definition: mhi.h:226
int m_videoTag
Definition: mhi.h:216
QRect ScaleVideo(QRect r) const
Definition: mhi.cpp:782
int m_currentStream
Definition: mhi.h:211
MythDeque< DSMCCPacket * > m_dsmccQueue
Definition: mhi.h:186
static int Cid(ChannelCache_t::const_iterator it)
Definition: mhi.h:232
void ClearQueue(void)
Definition: mhi.cpp:149
void NetworkBootRequested(void)
Definition: mhi.cpp:340
bool GetDSMCCObject(const QString &objectPath, QByteArray &result)
Definition: mhi.cpp:388
std::chrono::milliseconds GetStreamPos() override
Definition: mhi.cpp:1139
QMutex m_keyLock
Definition: mhi.h:191
std::list< MHIImageData * > m_display
Definition: mhi.h:203
void DrawImage(int x, int y, QRect rect, const QImage &image, bool bScaled=false, bool bUnder=false)
Definition: mhi.cpp:1203
MThread * m_engineThread
Definition: mhi.h:208
QPair< int, int > Key_t
Definition: mhi.h:227
void GetInitialStreams(int &audioTag, int &videoTag) const
Get the initial component tags.
Definition: mhi.cpp:735
QMutex m_channelMutex
Definition: mhi.h:230
int m_keyProfile
Definition: mhi.h:193
const char * GetReceiverId(void) override
Definition: mhi.h:144
void StopVideo() override
Stop displaying video.
Definition: mhi.cpp:1133
void StopEngine(void)
Stop the MHEG engine if it's running and waits until it has.
Definition: mhi.cpp:157
QMutex m_dsmccLock
Definition: mhi.h:185
MythDeque< int > m_keyQueue
Definition: mhi.h:192
void RequireRedraw(const QRegion &region) override
An area of the screen/image needs to be redrawn.
Definition: mhi.cpp:745
QList< int > m_tuneInfo
Definition: mhi.h:217
MHStream * m_notify
Definition: mhi.h:189
bool GetCarouselData(const QString &objectPath, QByteArray &result) override
Definition: mhi.cpp:436
int m_audioTag
Definition: mhi.h:215
std::chrono::milliseconds SetStreamPos(std::chrono::milliseconds pos) override
Definition: mhi.cpp:1151
bool m_faceLoaded
Definition: mhi.h:206
MHBitmapDisplay * CreateBitmap(bool tiled) override
Definition: mhi.cpp:1180
static int Tid(ChannelCache_t::const_iterator it)
Definition: mhi.h:231
bool TuneTo(int channel, int tuneinfo) override
Definition: mhi.cpp:1003
int GetICStatus() override
Definition: mhi.cpp:658
int GetChannelIndex(const QString &str) override
Definition: mhi.cpp:891
void Restart(int chanid, int sourceid, bool isLive)
Restart the MHEG engine.
Definition: mhi.cpp:174
bool CheckAccess(const QString &objectPath, QByteArray &cert)
Definition: mhi.cpp:396
MHEG * m_engine
Definition: mhi.h:195
QRect m_videoDisplayRect
Definition: mhi.h:222
void SetNetBootInfo(const unsigned char *data, uint length)
Definition: mhi.cpp:315
QRect m_videoRect
Definition: mhi.h:222
int ScaleVideoX(int n, bool roundup=false) const
Definition: mhi.cpp:772
bool LoadChannelCache()
Definition: mhi.cpp:856
~MHIContext() override
Definition: mhi.cpp:128
int m_currentSource
Definition: mhi.h:213
std::vector< unsigned char > m_nbiData
Definition: mhi.h:220
QMultiMap< Key_t, Val_t > ChannelCache_t
Definition: mhi.h:228
bool BeginVideo(int tag) override
Begin displaying video.
Definition: mhi.cpp:1119
InteractiveTV * m_parent
Definition: mhi.h:181
void ProcessDSMCCQueue(void)
Definition: mhi.cpp:276
QRect Scale(QRect r) const
Definition: mhi.cpp:766
bool CheckCarouselObject(const QString &objectPath) override
Definition: mhi.cpp:368
MHIContext(InteractiveTV *parent)
Definition: mhi.cpp:78
static int Sid(ChannelCache_t::const_iterator it)
Definition: mhi.h:234
void ClearDisplay(void)
Definition: mhi.cpp:140
void SetInputRegister(int num) override
Definition: mhi.cpp:650
bool BeginStream(const QString &str, MHStream *notify) override
Begin playing the specified stream.
Definition: mhi.cpp:1028
QWaitCondition m_engineWait
Definition: mhi.h:198
MHDLADisplay * CreateDynamicLineArt(bool isBoxed, MHRgba lineColour, MHRgba fillColour) override
Creation functions for various visibles.
Definition: mhi.cpp:1167
bool StreamStarted(bool bStarted=true)
Definition: mhi.cpp:1083
void AddToDisplay(const QImage &image, QRect rect, bool bUnder=false)
Definition: mhi.cpp:788
void DrawVideo(const QRect &videoRect, const QRect &dispRect) override
Definition: mhi.cpp:832
uint m_lastNbiVersion
Definition: mhi.h:219
void DrawRect(int xPos, int yPos, int width, int height, MHRgba colour) override
Additional drawing functions.
Definition: mhi.cpp:1186
bool IsFaceLoaded(void) const
Definition: mhi.h:164
static const int kStdDisplayWidth
Definition: mhi.h:168
int ScaleVideoY(int n, bool roundup=false) const
Definition: mhi.cpp:777
bool m_isLive
Definition: mhi.h:212
bool m_stop
Definition: mhi.h:199
void EndStream() override
Definition: mhi.cpp:1073
bool m_updated
Definition: mhi.h:201
bool BeginAudio(int tag) override
Begin playing audio.
Definition: mhi.cpp:1099
QRect m_displayRect
Definition: mhi.h:223
MHInteractionChannel m_ic
Definition: mhi.h:188
void StopAudio() override
Stop playing audio.
Definition: mhi.cpp:1113
void UpdateOSD(InteractiveScreen *osdWindow, MythPainter *osdPainter)
Update the display.
Definition: mhi.cpp:665
void DrawBackground(const QRegion &reg) override
Definition: mhi.cpp:1226
int ScaleX(int n, bool roundup=false) const
Definition: mhi.cpp:756
static int Nid(ChannelCache_t::const_iterator it)
Definition: mhi.h:233
int m_currentChannel
Definition: mhi.h:210
void run(void) override
Definition: mhi.cpp:241
int ScaleY(int n, bool roundup=false) const
Definition: mhi.cpp:761
bool LoadFont(const QString &name)
Definition: mhi.cpp:98
static const int kStdDisplayHeight
Definition: mhi.h:169
QMutex m_runLock
Definition: mhi.h:197
bool ImageUpdated(void) const
Definition: mhi.h:166
FT_Face GetFontFace(void)
Definition: mhi.h:163
Object for displaying Dynamic Line Art.
Definition: mhi.h:316
MHRgba m_boxFillColour
Fill colour for the background.
Definition: mhi.h:360
MHIDLA(MHIContext *parent, bool isBoxed, MHRgba lineColour, MHRgba fillColour)
Definition: mhi.h:318
void SetLineSize(int width) override
Definition: mhi.h:331
void DrawPoly(bool isFilled, const MHPointVec &xArray, const MHPointVec &yArray) override
Definition: mhi.cpp:1698
void DrawLine(int x1, int y1, int x2, int y2) override
Definition: mhi.cpp:1552
void DrawBorderedRectangle(int x, int y, int width, int height) override
Definition: mhi.cpp:1648
int m_width
Width of the drawing.
Definition: mhi.h:356
MHRgba m_boxLineColour
Line colour for the background.
Definition: mhi.h:359
void SetLineColour(MHRgba colour) override
Definition: mhi.h:333
void DrawRect(int x, int y, int width, int height, MHRgba colour)
Definition: mhi.cpp:1450
void Clear(void) override
Clear the drawing.
Definition: mhi.cpp:1492
void Draw(int x, int y) override
Draw the completed drawing onto the display.
Definition: mhi.cpp:1504
MHRgba m_lineColour
Current line colour.
Definition: mhi.h:361
void DrawArcSector(int x, int y, int width, int height, int start, int arc, bool isSector) override
Definition: mhi.cpp:1686
int m_lineWidth
Current line width.
Definition: mhi.h:363
void DrawOval(int x, int y, int width, int height) override
Definition: mhi.cpp:1680
bool m_boxed
Does it have a border?
Definition: mhi.h:358
void DrawLineSub(int x1, int y1, int x2, int y2, bool swapped)
Definition: mhi.cpp:1574
QImage m_image
Definition: mhi.h:355
MHRgba m_fillColour
Current fill colour.
Definition: mhi.h:362
MHIContext * m_parent
Definition: mhi.h:354
void SetFillColour(MHRgba colour) override
Definition: mhi.h:335
void SetSize(int width, int height) override
Set the box size. Also clears the drawing.
Definition: mhi.h:325
int m_height
Height of the drawing.
Definition: mhi.h:357
Data for items in the interactive television display stack.
Definition: mhi.cpp:70
Definition: mhi.h:239
void SetFont(int size, bool isBold, bool isItalic) override
Definition: mhi.cpp:1247
MHIContext * m_parent
Definition: mhi.h:255
QImage m_image
Definition: mhi.h:256
int m_width
Definition: mhi.h:260
bool m_fontBold
Definition: mhi.h:259
void AddText(int x, int y, const QString &str, MHRgba colour) override
Definition: mhi.cpp:1366
MHIText(MHIContext *parent)
Definition: mhi.h:241
bool m_fontItalic
Definition: mhi.h:258
int m_height
Definition: mhi.h:261
void Clear(void) override
Definition: mhi.cpp:1350
int m_fontSize
Definition: mhi.h:257
void SetSize(int width, int height) override
Definition: mhi.cpp:1241
void Draw(int x, int y) override
Definition: mhi.cpp:1236
QRect GetBounds(const QString &str, int &strLen, int maxSize=-1) override
Definition: mhi.cpp:1275
~MHIText() override=default
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
unsigned int uint
Definition: freesurround.h:24
unsigned short uint16_t
Definition: iso6937tables.h:3
static constexpr uint16_t NBI_VERSION_UNSET
Definition: mhi.h:45
static int x1
Definition: mythsocket.cpp:50
static int x2
Definition: mythsocket.cpp:51