2014-09-09 15:56:52 +00:00
|
|
|
#include "RenderPreviewProvider.h"
|
|
|
|
|
|
|
|
#include "Canvas.h"
|
|
|
|
#include "CanvasPreview.h"
|
|
|
|
#include "Color.h"
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
static inline QColor colorToQColor(Color color) {
|
2014-09-09 15:56:52 +00:00
|
|
|
color.normalize();
|
|
|
|
return QColor(color.r * 255.0, color.g * 255.0, color.b * 255.0, color.a * 255.0);
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
RenderPreviewProvider::RenderPreviewProvider() : QQuickImageProvider(QQuickImageProvider::Image) {
|
2014-09-09 15:56:52 +00:00
|
|
|
canvas = NULL;
|
|
|
|
pixbuf = new QImage(1, 1, QImage::Format_ARGB32);
|
2015-09-13 23:35:25 +00:00
|
|
|
hide();
|
2014-09-09 15:56:52 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
RenderPreviewProvider::~RenderPreviewProvider() {
|
2014-09-09 15:56:52 +00:00
|
|
|
delete pixbuf;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
QImage RenderPreviewProvider::requestImage(const QString &, QSize *size, const QSize &) {
|
|
|
|
if (canvas) {
|
2014-09-09 15:56:52 +00:00
|
|
|
canvas->getPreview()->updateLive(this);
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
if (size) {
|
2014-09-09 15:56:52 +00:00
|
|
|
*size = pixbuf->size();
|
|
|
|
}
|
|
|
|
|
|
|
|
return *pixbuf;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::setCanvas(const Canvas *canvas) {
|
|
|
|
if (not this->canvas) {
|
2014-09-09 15:56:52 +00:00
|
|
|
this->canvas = canvas;
|
2015-09-13 23:35:25 +00:00
|
|
|
pixbuf->fill(Qt::black);
|
2014-09-09 15:56:52 +00:00
|
|
|
canvas->getPreview()->initLive(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::releaseCanvas() {
|
|
|
|
if (canvas) {
|
2014-09-09 15:56:52 +00:00
|
|
|
canvas->getPreview()->updateLive(this);
|
|
|
|
canvas = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::hide() {
|
2015-09-13 23:35:25 +00:00
|
|
|
pixbuf->fill(Qt::black);
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::setToneMapping(const ColorProfile &profile) {
|
|
|
|
if (canvas) {
|
2014-09-09 15:56:52 +00:00
|
|
|
canvas->getPreview()->setToneMapping(profile);
|
|
|
|
canvas->getPreview()->updateLive(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::canvasResized(int width, int height) {
|
|
|
|
if (QSize(width, height) != pixbuf->size()) {
|
2014-09-09 15:56:52 +00:00
|
|
|
delete pixbuf;
|
|
|
|
pixbuf = new QImage(width, height, QImage::Format_ARGB32);
|
|
|
|
}
|
2015-07-22 16:05:24 +00:00
|
|
|
pixbuf->fill(Qt::black);
|
2014-09-09 15:56:52 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::canvasCleared(const Color &col) {
|
2014-09-09 15:56:52 +00:00
|
|
|
pixbuf->fill(colorToQColor(col));
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void RenderPreviewProvider::canvasPainted(int x, int y, const Color &col) {
|
2014-09-09 15:56:52 +00:00
|
|
|
pixbuf->setPixel(x, pixbuf->height() - 1 - y, colorToQColor(col).rgb());
|
|
|
|
}
|