paysages3d/src/interface/modeler/RenderPreviewProvider.cpp

75 lines
1.9 KiB
C++
Raw Normal View History

2014-09-09 15:56:52 +00:00
#include "RenderPreviewProvider.h"
#include "Canvas.h"
#include "CanvasPreview.h"
#include "Color.h"
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);
}
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
}
RenderPreviewProvider::~RenderPreviewProvider() {
2014-09-09 15:56:52 +00:00
delete pixbuf;
}
QImage RenderPreviewProvider::requestImage(const QString &, QSize *size, const QSize &) {
if (canvas) {
2014-09-09 15:56:52 +00:00
canvas->getPreview()->updateLive(this);
}
if (size) {
2014-09-09 15:56:52 +00:00
*size = pixbuf->size();
}
return *pixbuf;
}
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);
}
}
void RenderPreviewProvider::releaseCanvas() {
if (canvas) {
2014-09-09 15:56:52 +00:00
canvas->getPreview()->updateLive(this);
canvas = NULL;
}
}
void RenderPreviewProvider::hide() {
2015-09-13 23:35:25 +00:00
pixbuf->fill(Qt::black);
}
void RenderPreviewProvider::setToneMapping(const ColorProfile &profile) {
if (canvas) {
2014-09-09 15:56:52 +00:00
canvas->getPreview()->setToneMapping(profile);
canvas->getPreview()->updateLive(this);
}
}
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
}
void RenderPreviewProvider::canvasCleared(const Color &col) {
2014-09-09 15:56:52 +00:00
pixbuf->fill(colorToQColor(col));
}
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());
}