#ifndef PAINTHELPER_H
#define PAINTHELPER_H

#include <QFont>
#include <QPainter>

class PainterEx : public QPainter
{
public:
    enum RoundedCorner
    {
        None                = 0x0000,
        TopLeft             = 0x0001,
        TopRight            = 0x0002,
        BottomLeft          = 0x0004,
        BottomRight         = 0x0008,
        Left                = TopLeft|BottomLeft,
        Right               = TopRight|BottomRight,
        Top                 = TopLeft|TopRight,
        Bottom              = BottomLeft|BottomRight,
        All                 = TopLeft|TopRight|BottomLeft|BottomRight,
    };
    Q_DECLARE_FLAGS(RoundedCorners, RoundedCorner)
    enum RectBorder
    {
        RectBorderNone                = 0x0000,
        RectBorderLeft                = 0x0001,
        RectBorderRight               = 0x0002,
        RectBorderTop                 = 0x0004,
        RectBorderBottom              = 0x0008,
        RectBorderAll                 = TopLeft|TopRight|BottomLeft|BottomRight,
        RectBorderExceptLeft          = RectBorderAll & (~RectBorderLeft),
        RectBorderExceptRight         = RectBorderAll & (~RectBorderRight),
        RectBorderExceptTop           = RectBorderAll & (~RectBorderTop),
        RectBorderExceptBottom        = RectBorderAll & (~RectBorderBottom),
    };
    Q_DECLARE_FLAGS(RectBorders, RectBorder)
public:
    explicit PainterEx(QPaintDevice *device);
    void SetBrushOnly(const QColor &color);
    void SetPenOnly(const QColor &color, qreal width = 1, Qt::PenStyle s = Qt::SolidLine);
    void DrawCircle(QPointF center, double radius, const QColor &brush = QColor(), const QPen &pen = QPen(Qt::transparent));
    void DrawTextTwice(const QRectF &textRect, const QString &text, const QColor &color = QColor(), Qt::Alignment flags = Qt::AlignHCenter|Qt::AlignVCenter);
    void DrawText(const QRectF &textRect, const QString &text, const QColor &color, Qt::Alignment flags = Qt::AlignHCenter|Qt::AlignVCenter);
    void DrawRoundedRect(const QRectF &rect, int radius, const QColor &color = QColor(), RoundedCorners flags = RoundedCorner::All);
    void DrawPixmap(const QRectF &rect, const QPixmap &pixmap);
    void DrawPixmap(const QRectF &rect, const QString &srcPath, int alpha = 255);
    void DrawBorder(const QRect &rect, const QPen &pen, RectBorders flags = RectBorder::RectBorderAll);
    void DrawTriangle(const QRect &rect, bool isUp, const QColor &brush = QColor(), const QPen &pen = QPen(Qt::transparent));
};
Q_DECLARE_OPERATORS_FOR_FLAGS(PainterEx::RoundedCorners)
Q_DECLARE_OPERATORS_FOR_FLAGS(PainterEx::RectBorders)

class FontEx : public QFont
{
public:
    enum NotoSansType
    {
        Unkown,
        Normal,
        Regular,
        Medium,
        Light,
        Bold
    };
public:
    explicit FontEx(const QString &family, int pixelSize, bool bold = false);
    explicit FontEx(NotoSansType type, int pixelSize);
    
signals:
    
public slots:
};

#endif // PAINTHELPER_H