#include "ShapeWidget.h"

#include <QPainter>
#include <QPainterPath>
#include <QSvgRenderer>
#include <QApplication>
#include <QFileInfoList>
#include <QDir>


ShapeWidget::ShapeWidget(QWidget* parent /*= nullptr*/) : QWidget(parent) {
    SetMaskCode(-1, 0);

    QString svgPath = QString("%1/ProjectDisplay/svg").arg(QApplication::applicationDirPath());
    QDir dir(svgPath);
    QFileInfoList subFileList = dir.entryInfoList(QDir::Files | QDir::CaseSensitive);

    for (int i = 0; i < subFileList.size(); i++) {
        QString suffix = subFileList[i].suffix();
        if (suffix.compare("svg") == 0) {
            ++m_shapeCodeCount;
        }
    }
}

void ShapeWidget::Rotate(int angle) {
    m_rotate += angle;
    if (m_rotate >= 360) {
        m_rotate = m_rotate - 360;
    }
    else if (m_rotate <= 0) {
        m_rotate = m_rotate + 360;
    }

    resize(width() + 1, height() + 1);
    update();
    resize(width() - 1, height() - 1);
}

void ShapeWidget::Shape(int shape) {
    m_shapeCode += shape;
    if (m_shapeCode >= m_shapeCodeCount) {
        m_shapeCode = 0;
    }
    else if (m_shapeCode < 0) {
        m_shapeCode = m_shapeCodeCount - 1;
    }
    resize(width() + 1, height() + 1);
    update();
    resize(width() - 1, height() - 1);
}

void ShapeWidget::paintEvent(QPaintEvent* event) {
    return;
    QWidget::paintEvent(event);
    if (-1 == m_shapeCode) {
        return;
    }
    
    int radius = qMax(width(), height());
    QPointF center(width() / 2, height() / 2);
    QRadialGradient gradient(center, radius);
    gradient.setColorAt(0, Qt::white);
    gradient.setColorAt(1, Qt::black);
    
    QPainter p(this);

    p.setBrush(gradient);
    p.drawEllipse(0, 0, radius, radius);
}

void ShapeWidget::resizeEvent(QResizeEvent* event) {
    QSvgRenderer render;
    const QString svgPath = QString("%1/ProjectDisplay/svg/%2.svg").arg(QApplication::applicationDirPath()).arg(m_shapeCode);
    render.load(svgPath);

    QSize size = render.defaultSize();
    QPixmap pix(width(), height());        // 可以在这儿直接缩放处理
    pix.fill(Qt::transparent); // 像素清空

    QPainter painter(&pix);
    painter.setRenderHints(QPainter::Antialiasing);
    painter.translate(width() / 2.0f, height() / 2.0f);
    painter.rotate(m_rotate);
    painter.translate(-width() / 2.0f, -height() / 2.0f);
    render.render(&painter);

    setMask(pix.mask());

    QWidget::resizeEvent(event);
}