#include "GradientImageProvider.h"

#include <QPainter>
#include <QLinearGradient>
#include <QDebug>

GradientImageProvider::GradientImageProvider() :
    QQuickImageProvider (QQuickImageProvider::Image)
{

}

QImage GradientImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
{
    QStringList colors = id.split("-");

    // We need at least two colors!
    if (colors.size() < 2)
        return QImage();

    qDebug() << "Generate Image: " << colors;

    if (!requestedSize.isValid())
        *size = QSize(96,96);
    else
        *size = requestedSize;

    // Make a new image
    QImage image(*size,QImage::Format_ARGB32);
    image.fill(0);

    QPainter p(&image);
    p.setRenderHints(QPainter::HighQualityAntialiasing |
                     QPainter::Antialiasing);

    // Setup gradient
    QLinearGradient gradient;
    gradient.setColorAt(0.0, QColor(colors[0]));
    gradient.setColorAt(1.0, QColor(colors[1]));
    gradient.setStart(0,0);
    gradient.setFinalStop(0,size->height());

    p.setBrush(gradient);
    p.setPen(Qt::NoPen);

    // Draw our ellipse
    QRect r(0,0,size->width(),size->height());
    p.drawEllipse(r.adjusted(1,1,-1,-1));

    // Draw border if there are more than 2 colors
    if (colors.size() > 2) {
        p.setBrush(Qt::NoBrush);
        p.setPen(QPen(QColor(colors[2]),10));
        p.drawEllipse(r.adjusted(5,5,-5,-5));
    }

    return image;
}