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
28
29#include "mhegic.h"
30
31class MythPainter;
33class DSMCCPacket;
34class MHIImageData;
35class MHIContext;
36class MythAVCopy;
37class Dsmcc;
38class InteractiveTV;
39class MHStream;
40class MThread;
41class QByteArray;
42
43// Special value for the NetworkBootInfo version. Real values are a byte.
44static constexpr uint16_t NBI_VERSION_UNSET { 257 };
45
49class MHIContext : public MHContext, public QRunnable
50{
51 public:
52 explicit MHIContext(InteractiveTV *parent);
53 ~MHIContext() override;
54
55 void QueueDSMCCPacket(unsigned char *data, int length, int componentTag,
56 unsigned carouselId, int dataBroadcastId);
57 // A NetworkBootInfo sub-descriptor is present in the PMT.
58 void SetNetBootInfo(const unsigned char *data, uint length);
60 void Restart(int chanid, int sourceid, bool isLive);
61 // Offer a key press. Returns true if it accepts it.
62 // This will depend on the current profile.
63 bool OfferKey(const QString& key);
65 void UpdateOSD(InteractiveScreen *osdWindow, MythPainter *osdPainter);
67 void Reinit(QRect videoRect, QRect dispRect, float aspect);
68
70 void StopEngine(void);
71
72 // Test for an object in the carousel.
73 // Returns true if the object is present and
74 // so a call to GetCarouselData will not block and will return the data.
75 // Returns false if the object is not currently present because it has not
76 // yet appeared and also if it is not present in the containing directory.
77 bool CheckCarouselObject(const QString& objectPath) override; // MHContext
78
79 // Get an object from the carousel. Returns true and sets the data if
80 // it was able to retrieve the named object. Blocks if the object seems
81 // to be present but has not yet appeared. Returns false if the object
82 // cannot be retrieved.
83 bool GetCarouselData(const QString& objectPath, QByteArray &result) override; // MHContext
84
85 // Set the input register. This sets the keys that are to be handled
86 // by MHEG. Flushes the key queue.
87 void SetInputRegister(int num) override; // MHContext
88
90 void RequireRedraw(const QRegion &region) override; // MHContext
91
93 bool CheckStop(void) override // MHContext
94 { return m_stop; }
95
97 void GetInitialStreams(int &audioTag, int &videoTag) const;
98
101 bool isBoxed, MHRgba lineColour, MHRgba fillColour) override; // MHContext
102 MHTextDisplay *CreateText(void) override; // MHContext
103 MHBitmapDisplay *CreateBitmap(bool tiled) override; // MHContext
105 void DrawRect(int xPos, int yPos, int width, int height,
106 MHRgba colour) override; // MHContext
107 void DrawBackground(const QRegion &reg) override; // MHContext
108 void DrawVideo(const QRect &videoRect, const QRect &dispRect) override; // MHContext
109
110 void DrawImage(int x, int y, QRect rect, const QImage &image,
111 bool bScaled = false, bool bUnder = false);
112
113 int GetChannelIndex(const QString &str) override; // MHContext
115 bool GetServiceInfo(int channelId, int &netId, int &origNetId,
116 int &transportId, int &serviceId) override; // MHContext
117 bool TuneTo(int channel, int tuneinfo) override; // MHContext
118
120 bool BeginStream(const QString &str, MHStream* notify) override; // MHContext
121 void EndStream() override; // MHContext
122 // Called when the stream starts or stops
123 bool StreamStarted(bool bStarted = true);
125 bool BeginAudio(int tag) override; // MHContext
127 void StopAudio() override; // MHContext
129 bool BeginVideo(int tag) override; // MHContext
131 void StopVideo() override; // MHContext
132 // Get current stream position, -1 if unknown
133 std::chrono::milliseconds GetStreamPos() override; // MHContext
134 // Get current stream size, -1 if unknown
135 std::chrono::milliseconds GetStreamMaxPos() override; // MHContext
136 // Set current stream position
137 std::chrono::milliseconds SetStreamPos(std::chrono::milliseconds pos) override; // MHContext
138 // Play or pause a stream
139 void StreamPlay(bool play) override; // MHContext
140
141 // Get the context id strings. The format of these strings is specified
142 // by the UK MHEG profile.
143 const char *GetReceiverId(void) override // MHContext
144 { return "MYT001001"; } // Version number?
145 const char *GetDSMCCId(void) override // MHContext
146 { return "DSMMYT001"; } // DSMCC version.
147
148 // InteractionChannel
149 // 0= Active, 1= Inactive, 2= Disabled
150 int GetICStatus() override; // MHContext
151
152 // Operations used by the display classes
153 // Add an item to the display vector
154 void AddToDisplay(const QImage &image, QRect rect, bool bUnder = false);
155 int ScaleX(int n, bool roundup = false) const;
156 int ScaleY(int n, bool roundup = false) const;
157 QRect Scale(QRect r) const;
158 int ScaleVideoX(int n, bool roundup = false) const;
159 int ScaleVideoY(int n, bool roundup = false) const;
160 QRect ScaleVideo(QRect r) const;
161
162 FT_Face GetFontFace(void) { return m_face; }
163 bool IsFaceLoaded(void) const { return m_faceLoaded; }
164 bool LoadFont(const QString& name);
165 bool ImageUpdated(void) const { return m_updated; }
166
167 static const int kStdDisplayWidth = 720;
168 static const int kStdDisplayHeight = 576;
169
170 protected:
171 void run(void) override; // QRunnable
172 void ProcessDSMCCQueue(void);
173 void NetworkBootRequested(void);
174 void ClearDisplay(void);
175 void ClearQueue(void);
176 bool LoadChannelCache();
177 bool GetDSMCCObject(const QString &objectPath, QByteArray &result);
178 bool CheckAccess(const QString &objectPath, QByteArray &cert);
179
181
182 // Pointer to the DSMCC object carousel.
183 Dsmcc *m_dsmcc {nullptr};
186
187 MHInteractionChannel m_ic; // Interaction channel
188 MHStream *m_notify {nullptr};
189
190 QMutex m_keyLock;
193
194 MHEG *m_engine; // Pointer to the MHEG engine
195
196 mutable QMutex m_runLock;
197 QWaitCondition m_engineWait; // protected by m_runLock
198 bool m_stop {false}; // protected by m_runLock
200 bool m_updated {false};
201
202 std::list<MHIImageData*> m_display; // List of items to display
203
204 FT_Face m_face {nullptr};
205 bool m_faceLoaded {false};
206
208
211 bool m_isLive {false};
213
214 int m_audioTag {-1};
215 int m_videoTag {-1};
216 QList<int> m_tuneInfo;
217
219 std::vector<unsigned char> m_nbiData;
220
223
224 // Channel index database cache
225 using Val_t = QPair< int, int >; // transportid, chanid
226 using Key_t = QPair< int, int >; // networkid, serviceid
227 using ChannelCache_t = QMultiMap< Key_t, Val_t >;
230 static int Tid(ChannelCache_t::const_iterator it) { return it->first; }
231 static int Cid(ChannelCache_t::const_iterator it) { return it->second; }
232 static int Nid(ChannelCache_t::const_iterator it) { return it.key().first; }
233 static int Sid(ChannelCache_t::const_iterator it) { return it.key().second; }
234};
235
236// Object for drawing text.
237class MHIText : public MHTextDisplay
238{
239 public:
240 explicit MHIText(MHIContext *parent)
241 : m_parent(parent) {}
242 ~MHIText() override = default;
243
244 void Draw(int x, int y) override; // MHTextDisplay
245 void Clear(void) override; // MHTextDisplay
246 void AddText(int x, int y, const QString &str, MHRgba colour) override; // MHTextDisplay
247
248 void SetSize(int width, int height) override; // MHTextDisplay
249 void SetFont(int size, bool isBold, bool isItalic) override; // MHTextDisplay
250
251 QRect GetBounds(const QString &str, int &strLen, int maxSize = -1) override; // MHTextDisplay
252
253 public:
255 QImage m_image;
256 int m_fontSize {12};
257 bool m_fontItalic {false};
258 bool m_fontBold {false};
259 int m_width {0};
260 int m_height {0};
261};
262
267{
268 public:
269 MHIBitmap(MHIContext *parent, bool tiled);
270 ~MHIBitmap() override;
271
272 // Deleted functions should be public.
273 MHIBitmap(const MHIBitmap &) = delete; // not copyable
274 MHIBitmap &operator=(const MHIBitmap &) = delete; // not copyable
275
277 void CreateFromPNG(const unsigned char *data, int length) override; // MHBitmapDisplay
278
280 void CreateFromMPEG(const unsigned char *data, int length) override; // MHBitmapDisplay
281
283 void CreateFromJPEG(const unsigned char *data, int length) override; // MHBitmapDisplay
284
294 void Draw(int x, int y, QRect rect, bool tiled, bool bUnder) override; // MHBitmapDisplay
295
297 void ScaleImage(int newWidth, int newHeight) override; // MHBitmapDisplay
298
299 // Gets
300 QSize GetSize(void) override { return m_image.size(); } // MHBitmapDisplay
301 bool IsOpaque(void) override { return !m_image.isNull() && m_opaque; } // MHBitmapDisplay
302
303 public:
306 QImage m_image;
307 bool m_opaque {false};
309};
310
314class MHIDLA : public MHDLADisplay
315{
316 public:
317 MHIDLA(MHIContext *parent, bool isBoxed,
318 MHRgba lineColour, MHRgba fillColour)
319 : m_parent(parent), m_boxed(isBoxed),
320 m_boxLineColour(lineColour), m_boxFillColour(fillColour) {}
322 void Draw(int x, int y) override; // MHDLADisplay
324 void SetSize(int width, int height) override // MHDLADisplay
325 {
326 m_width = width;
327 m_height = height;
328 Clear();
329 }
330 void SetLineSize(int width) override // MHDLADisplay
331 { m_lineWidth = width; }
332 void SetLineColour(MHRgba colour) override // MHDLADisplay
333 { m_lineColour = colour; }
334 void SetFillColour(MHRgba colour) override // MHDLADisplay
335 { m_fillColour = colour; }
336
338 void Clear(void) override; // MHDLADisplay
339
340 // add items to the drawing.
341 void DrawLine(int x1, int y1, int x2, int y2) override; // MHDLADisplay
342 void DrawBorderedRectangle(int x, int y, int width, int height) override; // MHDLADisplay
343 void DrawOval(int x, int y, int width, int height) override; // MHDLADisplay
344 void DrawArcSector(int x, int y, int width, int height,
345 int start, int arc, bool isSector) override; // MHDLADisplay
346 void DrawPoly(bool isFilled, const MHPointVec& xArray, const MHPointVec& yArray) override; // MHDLADisplay
347
348 protected:
349 void DrawRect(int x, int y, int width, int height, MHRgba colour);
350 void DrawLineSub(int x1, int y1, int x2, int y2, bool swapped);
351
352 protected:
354 QImage m_image;
355 int m_width {0};
356 int m_height {0};
357 bool m_boxed;
362 int m_lineWidth {0};
363};
364
369{
370 public:
371 DSMCCPacket(unsigned char *data, int length, int tag,
372 unsigned car, int dbid)
373 : m_componentTag(tag), m_carouselId(car),
375 {
376 m_data.assign(data, data+length);
377 }
378
379 public:
380 std::vector<uint8_t> m_data;
382 unsigned m_carouselId;
384};
385
386#endif // MHI_H
std::vector< int > MHPointVec
Definition: BaseClasses.h:31
Data for the queued DSMCC tables.
Definition: mhi.h:369
int m_componentTag
Definition: mhi.h:381
DSMCCPacket(unsigned char *data, int length, int tag, unsigned car, int dbid)
Definition: mhi.h:371
unsigned m_carouselId
Definition: mhi.h:382
int m_dataBroadcastId
Definition: mhi.h:383
std::vector< uint8_t > m_data
Definition: mhi.h:380
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:267
void Draw(int x, int y, QRect rect, bool tiled, bool bUnder) override
Draw the completed drawing onto the display.
Definition: mhi.cpp:1808
MHIBitmap & operator=(const MHIBitmap &)=delete
QSize GetSize(void) override
Definition: mhi.h:300
bool m_opaque
Definition: mhi.h:307
MHIBitmap(MHIContext *parent, bool tiled)
Definition: mhi.cpp:1797
void ScaleImage(int newWidth, int newHeight) override
Scale the bitmap. Only used for image derived from MPEG I-frames.
Definition: mhi.cpp:1974
void CreateFromMPEG(const unsigned char *data, int length) override
Create bitmap from single I frame MPEG.
Definition: mhi.cpp:1871
MHIContext * m_parent
Definition: mhi.h:304
MythAVCopy * m_copyCtx
Definition: mhi.h:308
void CreateFromPNG(const unsigned char *data, int length) override
Create bitmap from PNG.
Definition: mhi.cpp:1836
QImage m_image
Definition: mhi.h:306
bool m_tiled
Definition: mhi.h:305
MHIBitmap(const MHIBitmap &)=delete
bool IsOpaque(void) override
Definition: mhi.h:301
void CreateFromJPEG(const unsigned char *data, int length) override
Create bitmap from JPEG.
Definition: mhi.cpp:1852
~MHIBitmap() override
Definition: mhi.cpp:1803
Contains various utility functions for interactive television.
Definition: mhi.h:50
ChannelCache_t m_channelCache
Definition: mhi.h:228
bool OfferKey(const QString &key)
Definition: mhi.cpp:614
void StreamPlay(bool play) override
Definition: mhi.cpp:1166
void Reinit(QRect videoRect, QRect dispRect, float aspect)
The display area has changed.
Definition: mhi.cpp:630
const char * GetDSMCCId(void) override
Definition: mhi.h:145
FT_Face m_face
Definition: mhi.h:204
void QueueDSMCCPacket(unsigned char *data, int length, int componentTag, unsigned carouselId, int dataBroadcastId)
Definition: mhi.cpp:297
MHTextDisplay * CreateText(void) override
Definition: mhi.cpp:1180
Dsmcc * m_dsmcc
Definition: mhi.h:183
QMutex m_displayLock
Definition: mhi.h:199
bool GetServiceInfo(int channelId, int &netId, int &origNetId, int &transportId, int &serviceId) override
Get netId etc from the channel index.
Definition: mhi.cpp:984
bool CheckStop(void) override
Check whether we have requested a stop.
Definition: mhi.h:93
std::chrono::milliseconds GetStreamMaxPos() override
Definition: mhi.cpp:1151
QPair< int, int > Val_t
Definition: mhi.h:225
int m_videoTag
Definition: mhi.h:215
QRect ScaleVideo(QRect r) const
Definition: mhi.cpp:788
int m_currentStream
Definition: mhi.h:210
MythDeque< DSMCCPacket * > m_dsmccQueue
Definition: mhi.h:185
static int Cid(ChannelCache_t::const_iterator it)
Definition: mhi.h:231
void ClearQueue(void)
Definition: mhi.cpp:150
void NetworkBootRequested(void)
Definition: mhi.cpp:346
bool GetDSMCCObject(const QString &objectPath, QByteArray &result)
Definition: mhi.cpp:394
std::chrono::milliseconds GetStreamPos() override
Definition: mhi.cpp:1145
QMutex m_keyLock
Definition: mhi.h:190
std::list< MHIImageData * > m_display
Definition: mhi.h:202
void DrawImage(int x, int y, QRect rect, const QImage &image, bool bScaled=false, bool bUnder=false)
Definition: mhi.cpp:1209
MThread * m_engineThread
Definition: mhi.h:207
QPair< int, int > Key_t
Definition: mhi.h:226
void GetInitialStreams(int &audioTag, int &videoTag) const
Get the initial component tags.
Definition: mhi.cpp:741
QMutex m_channelMutex
Definition: mhi.h:229
int m_keyProfile
Definition: mhi.h:192
const char * GetReceiverId(void) override
Definition: mhi.h:143
void StopVideo() override
Stop displaying video.
Definition: mhi.cpp:1139
void StopEngine(void)
Stop the MHEG engine if it's running and waits until it has.
Definition: mhi.cpp:158
QMutex m_dsmccLock
Definition: mhi.h:184
MythDeque< int > m_keyQueue
Definition: mhi.h:191
void RequireRedraw(const QRegion &region) override
An area of the screen/image needs to be redrawn.
Definition: mhi.cpp:751
QList< int > m_tuneInfo
Definition: mhi.h:216
MHStream * m_notify
Definition: mhi.h:188
bool GetCarouselData(const QString &objectPath, QByteArray &result) override
Definition: mhi.cpp:442
int m_audioTag
Definition: mhi.h:214
std::chrono::milliseconds SetStreamPos(std::chrono::milliseconds pos) override
Definition: mhi.cpp:1157
bool m_faceLoaded
Definition: mhi.h:205
MHBitmapDisplay * CreateBitmap(bool tiled) override
Definition: mhi.cpp:1186
static int Tid(ChannelCache_t::const_iterator it)
Definition: mhi.h:230
bool TuneTo(int channel, int tuneinfo) override
Definition: mhi.cpp:1009
int GetICStatus() override
Definition: mhi.cpp:664
int GetChannelIndex(const QString &str) override
Definition: mhi.cpp:897
void Restart(int chanid, int sourceid, bool isLive)
Restart the MHEG engine.
Definition: mhi.cpp:175
bool CheckAccess(const QString &objectPath, QByteArray &cert)
Definition: mhi.cpp:402
MHEG * m_engine
Definition: mhi.h:194
QRect m_videoDisplayRect
Definition: mhi.h:221
void SetNetBootInfo(const unsigned char *data, uint length)
Definition: mhi.cpp:321
QRect m_videoRect
Definition: mhi.h:221
int ScaleVideoX(int n, bool roundup=false) const
Definition: mhi.cpp:778
bool LoadChannelCache()
Definition: mhi.cpp:862
~MHIContext() override
Definition: mhi.cpp:129
int m_currentSource
Definition: mhi.h:212
std::vector< unsigned char > m_nbiData
Definition: mhi.h:219
QMultiMap< Key_t, Val_t > ChannelCache_t
Definition: mhi.h:227
bool BeginVideo(int tag) override
Begin displaying video.
Definition: mhi.cpp:1125
InteractiveTV * m_parent
Definition: mhi.h:180
void ProcessDSMCCQueue(void)
Definition: mhi.cpp:277
QRect Scale(QRect r) const
Definition: mhi.cpp:772
bool CheckCarouselObject(const QString &objectPath) override
Definition: mhi.cpp:374
MHIContext(InteractiveTV *parent)
Definition: mhi.cpp:79
static int Sid(ChannelCache_t::const_iterator it)
Definition: mhi.h:233
void ClearDisplay(void)
Definition: mhi.cpp:141
void SetInputRegister(int num) override
Definition: mhi.cpp:656
bool BeginStream(const QString &str, MHStream *notify) override
Begin playing the specified stream.
Definition: mhi.cpp:1034
QWaitCondition m_engineWait
Definition: mhi.h:197
MHDLADisplay * CreateDynamicLineArt(bool isBoxed, MHRgba lineColour, MHRgba fillColour) override
Creation functions for various visibles.
Definition: mhi.cpp:1173
bool StreamStarted(bool bStarted=true)
Definition: mhi.cpp:1089
void AddToDisplay(const QImage &image, QRect rect, bool bUnder=false)
Definition: mhi.cpp:794
void DrawVideo(const QRect &videoRect, const QRect &dispRect) override
Definition: mhi.cpp:838
uint m_lastNbiVersion
Definition: mhi.h:218
void DrawRect(int xPos, int yPos, int width, int height, MHRgba colour) override
Additional drawing functions.
Definition: mhi.cpp:1192
bool IsFaceLoaded(void) const
Definition: mhi.h:163
static const int kStdDisplayWidth
Definition: mhi.h:167
int ScaleVideoY(int n, bool roundup=false) const
Definition: mhi.cpp:783
bool m_isLive
Definition: mhi.h:211
bool m_stop
Definition: mhi.h:198
void EndStream() override
Definition: mhi.cpp:1079
bool m_updated
Definition: mhi.h:200
bool BeginAudio(int tag) override
Begin playing audio.
Definition: mhi.cpp:1105
QRect m_displayRect
Definition: mhi.h:222
MHInteractionChannel m_ic
Definition: mhi.h:187
void StopAudio() override
Stop playing audio.
Definition: mhi.cpp:1119
void UpdateOSD(InteractiveScreen *osdWindow, MythPainter *osdPainter)
Update the display.
Definition: mhi.cpp:671
void DrawBackground(const QRegion &reg) override
Definition: mhi.cpp:1232
int ScaleX(int n, bool roundup=false) const
Definition: mhi.cpp:762
static int Nid(ChannelCache_t::const_iterator it)
Definition: mhi.h:232
int m_currentChannel
Definition: mhi.h:209
void run(void) override
Definition: mhi.cpp:242
int ScaleY(int n, bool roundup=false) const
Definition: mhi.cpp:767
bool LoadFont(const QString &name)
Definition: mhi.cpp:99
static const int kStdDisplayHeight
Definition: mhi.h:168
QMutex m_runLock
Definition: mhi.h:196
bool ImageUpdated(void) const
Definition: mhi.h:165
FT_Face GetFontFace(void)
Definition: mhi.h:162
Object for displaying Dynamic Line Art.
Definition: mhi.h:315
MHRgba m_boxFillColour
Fill colour for the background.
Definition: mhi.h:359
MHIDLA(MHIContext *parent, bool isBoxed, MHRgba lineColour, MHRgba fillColour)
Definition: mhi.h:317
void SetLineSize(int width) override
Definition: mhi.h:330
void DrawPoly(bool isFilled, const MHPointVec &xArray, const MHPointVec &yArray) override
Definition: mhi.cpp:1704
void DrawLine(int x1, int y1, int x2, int y2) override
Definition: mhi.cpp:1558
void DrawBorderedRectangle(int x, int y, int width, int height) override
Definition: mhi.cpp:1654
int m_width
Width of the drawing.
Definition: mhi.h:355
MHRgba m_boxLineColour
Line colour for the background.
Definition: mhi.h:358
void SetLineColour(MHRgba colour) override
Definition: mhi.h:332
void DrawRect(int x, int y, int width, int height, MHRgba colour)
Definition: mhi.cpp:1456
void Clear(void) override
Clear the drawing.
Definition: mhi.cpp:1498
void Draw(int x, int y) override
Draw the completed drawing onto the display.
Definition: mhi.cpp:1510
MHRgba m_lineColour
Current line colour.
Definition: mhi.h:360
void DrawArcSector(int x, int y, int width, int height, int start, int arc, bool isSector) override
Definition: mhi.cpp:1692
int m_lineWidth
Current line width.
Definition: mhi.h:362
void DrawOval(int x, int y, int width, int height) override
Definition: mhi.cpp:1686
bool m_boxed
Does it have a border?
Definition: mhi.h:357
void DrawLineSub(int x1, int y1, int x2, int y2, bool swapped)
Definition: mhi.cpp:1580
QImage m_image
Definition: mhi.h:354
MHRgba m_fillColour
Current fill colour.
Definition: mhi.h:361
MHIContext * m_parent
Definition: mhi.h:353
void SetFillColour(MHRgba colour) override
Definition: mhi.h:334
void SetSize(int width, int height) override
Set the box size. Also clears the drawing.
Definition: mhi.h:324
int m_height
Height of the drawing.
Definition: mhi.h:356
Data for items in the interactive television display stack.
Definition: mhi.cpp:71
Definition: mhi.h:238
void SetFont(int size, bool isBold, bool isItalic) override
Definition: mhi.cpp:1253
MHIContext * m_parent
Definition: mhi.h:254
QImage m_image
Definition: mhi.h:255
int m_width
Definition: mhi.h:259
bool m_fontBold
Definition: mhi.h:258
void AddText(int x, int y, const QString &str, MHRgba colour) override
Definition: mhi.cpp:1372
MHIText(MHIContext *parent)
Definition: mhi.h:240
bool m_fontItalic
Definition: mhi.h:257
int m_height
Definition: mhi.h:260
void Clear(void) override
Definition: mhi.cpp:1356
int m_fontSize
Definition: mhi.h:256
void SetSize(int width, int height) override
Definition: mhi.cpp:1247
void Draw(int x, int y) override
Definition: mhi.cpp:1242
QRect GetBounds(const QString &str, int &strLen, int maxSize=-1) override
Definition: mhi.cpp:1281
~MHIText() override=default
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
unsigned int uint
Definition: compat.h:60
unsigned short uint16_t
Definition: iso6937tables.h:3
static constexpr uint16_t NBI_VERSION_UNSET
Definition: mhi.h:44
static int x1
Definition: mythsocket.cpp:54
static int x2
Definition: mythsocket.cpp:55