MythTV  master
mythpainter.h
Go to the documentation of this file.
1 #ifndef MYTHPAINTER_H_
2 #define MYTHPAINTER_H_
3 
4 #include <QMap>
5 #include <QString>
6 #include <QTextLayout>
7 #include <QWidget>
8 #include <QPaintDevice>
9 #include <QMutex>
10 #include <QSet>
11 
12 class QRect;
13 class QRegion;
14 class QPoint;
15 class QColor;
16 
17 #include "mythuiexp.h"
18 
19 #include <list>
20 #include <memory>
21 
22 #ifdef _MSC_VER
23 # include <cstdint> // int64_t
24 #endif
25 
26 class MythFontProperties;
27 class MythImage;
28 class UIEffects;
29 
30 using LayoutVector = QVector<QTextLayout *>;
31 using FormatVector = QVector<QTextLayout::FormatRange>;
32 using ProcSource = std::shared_ptr<QByteArray>;
33 
34 class MUI_PUBLIC MythPainter : public QObject
35 {
36  Q_OBJECT
37 
38  public:
39  MythPainter();
47  ~MythPainter() override = default;
48 
49  virtual QString GetName(void) = 0;
50  virtual bool SupportsAnimation(void) = 0;
51  virtual bool SupportsAlpha(void) = 0;
52  virtual bool SupportsClipping(void) = 0;
53  virtual void FreeResources(void) { }
54  virtual void Begin(QPaintDevice* /*Parent*/) { }
55  virtual void End() { }
56 
57  virtual void SetClipRect(QRect clipRect);
58  virtual void SetClipRegion(const QRegion &clipRegion);
59  virtual void Clear(QPaintDevice *device, const QRegion &region);
60 
61  virtual void DrawImage(QRect dest, MythImage *im, QRect src, int alpha) = 0;
62 
63  void DrawImage(int x, int y, MythImage *im, int alpha);
64  void DrawImage(QPoint topLeft, MythImage *im, int alph);
65  virtual void DrawProcedural(QRect /*Area*/, int /*Alpha*/,
66  const ProcSource& /*VertexSource*/,
67  const ProcSource& /*FragmentSource*/,
68  const QString& /*SourceHash*/) { }
69 
70  virtual void DrawText(QRect r, const QString &msg, int flags,
71  const MythFontProperties &font, int alpha,
72  QRect boundRect);
73  virtual void DrawTextLayout(QRect canvasRect,
74  const LayoutVector & layouts,
75  const FormatVector & formats,
76  const MythFontProperties &font, int alpha,
77  QRect destRect);
78  virtual void DrawRect(QRect area, const QBrush &fillBrush,
79  const QPen &linePen, int alpha);
80  virtual void DrawRoundRect(QRect area, int cornerRadius,
81  const QBrush &fillBrush, const QPen &linePen,
82  int alpha);
83  virtual void DrawEllipse(QRect area, const QBrush &fillBrush,
84  const QPen &linePen, int alpha);
85 
86  virtual void PushTransformation([[maybe_unused]] const UIEffects &zoom,
87  [[maybe_unused]] QPointF center = QPointF()) {};
88  virtual void PopTransformation(void) { }
89 
93  MythImage *GetFormatImage();
94  void DeleteFormatImage(MythImage *im);
95 
96  void SetDebugMode(bool showBorders, bool showNames)
97  {
98  m_showBorders = showBorders;
99  m_showNames = showNames;
100  }
101 
102  bool ShowBorders(void) const { return m_showBorders; }
103  bool ShowTypeNames(void) const { return m_showNames; }
104 
105  void SetMaximumCacheSizes(int hardware, int software);
106 
107  protected:
108  static void DrawTextPriv(MythImage *im, const QString &msg, int flags,
109  QRect r, const MythFontProperties &font);
110  static void DrawRectPriv(MythImage *im, QRect area, int radius, int ellipse,
111  const QBrush &fillBrush, const QPen &linePen);
112 
113  MythImage *GetImageFromString(const QString &msg, int flags, QRect r,
114  const MythFontProperties &font);
115  MythImage *GetImageFromTextLayout(const LayoutVector & layouts,
116  const FormatVector & formats,
117  const MythFontProperties &font,
118  QRect &canvas, QRect &dest);
119  MythImage *GetImageFromRect(QRect area, int radius, int ellipse,
120  const QBrush &fillBrush,
121  const QPen &linePen);
122 
124  virtual MythImage* GetFormatImagePriv(void) = 0;
125  virtual void DeleteFormatImagePriv(MythImage *im) = 0;
126  void ExpireImages(int64_t max = 0);
127 
128  // This needs to be called by classes inheriting from MythPainter
129  // in the destructor.
130  virtual void Teardown(void);
131 
132  void CheckFormatImage(MythImage *im);
133 
134  float m_frameTime { 0 };
135 
136  int m_hardwareCacheSize { 0 };
137  int m_maxHardwareCacheSize { 0 };
138 
139  private:
140  int64_t m_softwareCacheSize {0};
141  int64_t m_maxSoftwareCacheSize {48LL * 1024 * 1024};
142 
144  QSet<MythImage*> m_allocatedImages;
145 
146  QMap<QString, MythImage *> m_stringToImageMap;
147  std::list<QString> m_stringExpireList;
148 
149  bool m_showBorders {false};
150  bool m_showNames {false};
151 };
152 
153 #endif
MythPainter::m_allocatedImages
QSet< MythImage * > m_allocatedImages
Definition: mythpainter.h:144
FormatVector
QVector< QTextLayout::FormatRange > FormatVector
Definition: mythpainter.h:31
build_compdb.dest
dest
Definition: build_compdb.py:9
MUI_PUBLIC
#define MUI_PUBLIC
Definition: mythuiexp.h:9
MythPainter::m_allocationLock
QMutex m_allocationLock
Definition: mythpainter.h:143
MythPainter::DrawProcedural
virtual void DrawProcedural(QRect, int, const ProcSource &, const ProcSource &, const QString &)
Definition: mythpainter.h:65
MythPainter::m_stringExpireList
std::list< QString > m_stringExpireList
Definition: mythpainter.h:147
MythPainter::m_stringToImageMap
QMap< QString, MythImage * > m_stringToImageMap
Definition: mythpainter.h:146
MythFontProperties
Definition: mythfontproperties.h:13
formats
const std::array< const std::string, 8 > formats
Definition: vbilut.cpp:189
MythPainter::FreeResources
virtual void FreeResources(void)
Definition: mythpainter.h:53
MythPainter::End
virtual void End()
Definition: mythpainter.h:55
MythPainter::ShowBorders
bool ShowBorders(void) const
Definition: mythpainter.h:102
MythPainter::ShowTypeNames
bool ShowTypeNames(void) const
Definition: mythpainter.h:103
MythPainter::SetDebugMode
void SetDebugMode(bool showBorders, bool showNames)
Definition: mythpainter.h:96
ProcSource
std::shared_ptr< QByteArray > ProcSource
Definition: mythpainter.h:32
Clear
#define Clear(a)
Definition: audiooutputopensles.cpp:54
LayoutVector
QVector< QTextLayout * > LayoutVector
Definition: mythpainter.h:30
MythPainter
Definition: mythpainter.h:34
MythImage
Definition: mythimage.h:36
UIEffects
Definition: mythuianimation.h:13
MythPainter::PopTransformation
virtual void PopTransformation(void)
Definition: mythpainter.h:88
MythPainter::Begin
virtual void Begin(QPaintDevice *)
Definition: mythpainter.h:54
mythuiexp.h
MythPainter::PushTransformation
virtual void PushTransformation([[maybe_unused]] const UIEffects &zoom, [[maybe_unused]] QPointF center=QPointF())
Definition: mythpainter.h:86