85 lines
1.8 KiB
C++
85 lines
1.8 KiB
C++
#include "RenderPreviewProvider.h"
|
|
|
|
#include "Canvas.h"
|
|
#include "CanvasPreview.h"
|
|
#include "Color.h"
|
|
|
|
static inline QColor colorToQColor(Color color)
|
|
{
|
|
color.normalize();
|
|
return QColor(color.r * 255.0, color.g * 255.0, color.b * 255.0, color.a * 255.0);
|
|
}
|
|
|
|
RenderPreviewProvider::RenderPreviewProvider() :
|
|
QQuickImageProvider(QQuickImageProvider::Image)
|
|
{
|
|
canvas = NULL;
|
|
pixbuf = new QImage(1, 1, QImage::Format_ARGB32);
|
|
}
|
|
|
|
RenderPreviewProvider::~RenderPreviewProvider()
|
|
{
|
|
delete pixbuf;
|
|
}
|
|
|
|
QImage RenderPreviewProvider::requestImage(const QString &, QSize *size, const QSize &)
|
|
{
|
|
if (canvas)
|
|
{
|
|
canvas->getPreview()->updateLive(this);
|
|
}
|
|
|
|
if (size)
|
|
{
|
|
*size = pixbuf->size();
|
|
}
|
|
|
|
return *pixbuf;
|
|
}
|
|
|
|
void RenderPreviewProvider::setCanvas(const Canvas *canvas)
|
|
{
|
|
if (not this->canvas)
|
|
{
|
|
this->canvas = canvas;
|
|
canvas->getPreview()->initLive(this);
|
|
}
|
|
}
|
|
|
|
void RenderPreviewProvider::releaseCanvas()
|
|
{
|
|
if (canvas)
|
|
{
|
|
canvas->getPreview()->updateLive(this);
|
|
canvas = NULL;
|
|
}
|
|
}
|
|
|
|
void RenderPreviewProvider::setToneMapping(const ColorProfile &profile)
|
|
{
|
|
if (canvas)
|
|
{
|
|
canvas->getPreview()->setToneMapping(profile);
|
|
canvas->getPreview()->updateLive(this);
|
|
}
|
|
}
|
|
|
|
void RenderPreviewProvider::canvasResized(int width, int height)
|
|
{
|
|
if (QSize(width, height) != pixbuf->size())
|
|
{
|
|
delete pixbuf;
|
|
pixbuf = new QImage(width, height, QImage::Format_ARGB32);
|
|
}
|
|
pixbuf->fill(Qt::black);
|
|
}
|
|
|
|
void RenderPreviewProvider::canvasCleared(const Color &col)
|
|
{
|
|
pixbuf->fill(colorToQColor(col));
|
|
}
|
|
|
|
void RenderPreviewProvider::canvasPainted(int x, int y, const Color &col)
|
|
{
|
|
pixbuf->setPixel(x, pixbuf->height() - 1 - y, colorToQColor(col).rgb());
|
|
}
|