00001 #ifndef MYTHPAINTER_H_
00002 #define MYTHPAINTER_H_
00003
00004 #include <QMap>
00005 #include <QString>
00006 #include <QTextLayout>
00007 #include <QWidget>
00008 #include <QPaintDevice>
00009 #include <QMutex>
00010
00011 class QRect;
00012 class QRegion;
00013 class QPoint;
00014 class QColor;
00015
00016 #include "compat.h"
00017 #include "mythuiexp.h"
00018
00019 #include <list>
00020
00021 class MythFontProperties;
00022 class MythImage;
00023 class UIEffects;
00024
00025 typedef QVector<QTextLayout *> LayoutVector;
00026 typedef QVector<QTextLayout::FormatRange> FormatVector;
00027
00028 class MUI_PUBLIC MythPainter
00029 {
00030 public:
00031 MythPainter();
00032 virtual ~MythPainter();
00033
00034 virtual QString GetName(void) = 0;
00035 virtual bool SupportsAnimation(void) = 0;
00036 virtual bool SupportsAlpha(void) = 0;
00037 virtual bool SupportsClipping(void) = 0;
00038 virtual void FreeResources(void) { }
00039 virtual void Begin(QPaintDevice *parent) { m_Parent = parent; }
00040 virtual void End() { m_Parent = NULL; }
00041
00042 virtual void SetClipRect(const QRect &clipRect);
00043 virtual void SetClipRegion(const QRegion &clipRegion);
00044 virtual void Clear(QPaintDevice *device, const QRegion ®ion);
00045
00046 QPaintDevice *GetParent(void) { return m_Parent; }
00047
00048 virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
00049 int alpha) = 0;
00050
00051 void DrawImage(int x, int y, MythImage *im, int alpha);
00052 void DrawImage(const QPoint &topLeft, MythImage *im, int alph);
00053
00054 virtual void DrawText(const QRect &dest, const QString &msg, int flags,
00055 const MythFontProperties &font, int alpha,
00056 const QRect &boundRect);
00057 virtual void DrawTextLayout(const QRect &canvasRect,
00058 const LayoutVector & layouts,
00059 const FormatVector & formats,
00060 const MythFontProperties &font, int alpha,
00061 const QRect &destRect);
00062 virtual void DrawRect(const QRect &area, const QBrush &fillBrush,
00063 const QPen &linePen, int alpha);
00064 virtual void DrawRoundRect(const QRect &area, int cornerRadius,
00065 const QBrush &fillBrush, const QPen &linePen,
00066 int alpha);
00067 virtual void DrawEllipse(const QRect &area, const QBrush &fillBrush,
00068 const QPen &linePen, int alpha);
00069
00070 virtual void PushTransformation(const UIEffects &zoom, QPointF center = QPointF());
00071 virtual void PopTransformation(void) { }
00072
00073 MythImage *GetFormatImage();
00074 void DeleteFormatImage(MythImage *im);
00075
00076 void SetDebugMode(bool showBorders, bool showNames)
00077 {
00078 m_showBorders = showBorders;
00079 m_showNames = showNames;
00080 }
00081
00082 bool ShowBorders(void) { return m_showBorders; }
00083 bool ShowTypeNames(void) { return m_showNames; }
00084
00085 void SetMaximumCacheSizes(int hardware, int software);
00086
00087 protected:
00088 void DrawTextPriv(MythImage *im, const QString &msg, int flags,
00089 const QRect &r, const MythFontProperties &font);
00090 void DrawRectPriv(MythImage *im, const QRect &area, int radius, int ellipse,
00091 const QBrush &fillBrush, const QPen &linePen);
00092
00093 MythImage *GetImageFromString(const QString &msg, int flags, const QRect &r,
00094 const MythFontProperties &font);
00095 MythImage *GetImageFromTextLayout(const LayoutVector & layouts,
00096 const FormatVector & formats,
00097 const MythFontProperties &font,
00098 QRect &canvas, QRect &dest);
00099 MythImage *GetImageFromRect(const QRect &area, int radius, int ellipse,
00100 const QBrush &fillBrush,
00101 const QPen &linePen);
00102
00103 virtual MythImage* GetFormatImagePriv(void) = 0;
00104 virtual void DeleteFormatImagePriv(MythImage *im) = 0;
00105 void ExpireImages(int max = 0);
00106
00107 void CheckFormatImage(MythImage *im);
00108
00109 QPaintDevice *m_Parent;
00110 int m_HardwareCacheSize;
00111 int m_MaxHardwareCacheSize;
00112
00113 private:
00114 int m_SoftwareCacheSize;
00115 int m_MaxSoftwareCacheSize;
00116
00117 QList<MythImage*> m_allocatedImages;
00118 QMutex m_allocationLock;
00119
00120 QMap<QString, MythImage *> m_StringToImageMap;
00121 std::list<QString> m_StringExpireList;
00122
00123 bool m_showBorders;
00124 bool m_showNames;
00125 };
00126
00127 #endif