diff --git a/qt/lc_renderdialog.cpp b/qt/lc_renderdialog.cpp
index 771d22f2..bd8a9102 100644
--- a/qt/lc_renderdialog.cpp
+++ b/qt/lc_renderdialog.cpp
@@ -11,6 +11,32 @@
#define LC_POVRAY_MEMORY_MAPPED_FILE 1
#endif
+void lcRenderPreviewWidget::resizeEvent(QResizeEvent* Event)
+{
+ mScaledImage = QImage();
+
+ QWidget::resizeEvent(Event);
+}
+
+void lcRenderPreviewWidget::paintEvent(QPaintEvent* PaintEvent)
+{
+ Q_UNUSED(PaintEvent);
+
+ QPainter Painter(this);
+
+ if (!mImage.isNull())
+ {
+ QSize Size = size();
+
+ if (mScaledImage.isNull())
+ mScaledImage = mImage.scaled(Size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+
+ Painter.drawImage((Size.width() - mScaledImage.width()) / 2, (Size.height() - mScaledImage.height()) / 2, mScaledImage);
+ }
+ else
+ Painter.fillRect(rect(), Qt::white);
+}
+
lcRenderDialog::lcRenderDialog(QWidget* Parent)
: QDialog(Parent),
ui(new Ui::lcRenderDialog)
@@ -30,7 +56,7 @@ lcRenderDialog::lcRenderDialog(QWidget* Parent)
QImage Image(LC_POVRAY_PREVIEW_WIDTH, LC_POVRAY_PREVIEW_HEIGHT, QImage::Format_RGB32);
Image.fill(QColor(255, 255, 255));
- ui->preview->setPixmap(QPixmap::fromImage(Image));
+ ui->preview->SetImage(Image);
connect(&mUpdateTimer, SIGNAL(timeout()), this, SLOT(Update()));
mUpdateTimer.start(500);
@@ -173,6 +199,10 @@ void lcRenderDialog::on_RenderButton_clicked()
#endif
mProcess->start(POVRayPath, Arguments);
+ mImage = QImage(ui->WidthEdit->text().toInt(), ui->HeightEdit->text().toInt(), QImage::Format_ARGB32);
+ mImage.fill(QColor(255, 255, 255));
+ ui->preview->SetImage(mImage);
+
if (mProcess->waitForStarted())
{
ui->RenderButton->setText(tr("Cancel"));
@@ -255,9 +285,6 @@ void lcRenderDialog::Update()
int Height = Header->Height;
int PixelsWritten = Header->PixelsWritten;
- if (!Header->PixelsRead)
- mImage = QImage(Width, Height, QImage::Format_ARGB32);
-
quint8* Pixels = (quint8*)(Header + 1);
for (int y = 0; y < Height; y++)
@@ -274,7 +301,7 @@ void lcRenderDialog::Update()
ui->RenderProgress->setMaximum(mImage.width() * mImage.height());
ui->RenderProgress->setValue(int(Header->PixelsRead));
- ui->preview->setPixmap(QPixmap::fromImage(mImage.scaled(LC_POVRAY_PREVIEW_WIDTH, LC_POVRAY_PREVIEW_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
+ ui->preview->SetImage(mImage);
#endif
}
@@ -296,7 +323,7 @@ void lcRenderDialog::ShowResult()
return;
}
- ui->preview->setPixmap(QPixmap::fromImage(mImage.scaled(LC_POVRAY_PREVIEW_WIDTH, LC_POVRAY_PREVIEW_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
+ ui->preview->SetImage(mImage);
QString FileName = ui->OutputEdit->text();
diff --git a/qt/lc_renderdialog.h b/qt/lc_renderdialog.h
index fee070dd..5242ac20 100644
--- a/qt/lc_renderdialog.h
+++ b/qt/lc_renderdialog.h
@@ -6,6 +6,31 @@ namespace Ui {
class lcRenderDialog;
}
+class lcRenderPreviewWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ lcRenderPreviewWidget(QWidget* Parent)
+ : QWidget(Parent)
+ {
+ }
+
+ void SetImage(QImage Image)
+ {
+ mImage = Image;
+ mScaledImage = QImage();
+ update();
+ }
+
+protected:
+ virtual void resizeEvent(QResizeEvent* Event) override;
+ virtual void paintEvent(QPaintEvent* PaintEvent) override;
+
+ QImage mImage;
+ QImage mScaledImage;
+};
+
class lcRenderDialog : public QDialog
{
Q_OBJECT
diff --git a/qt/lc_renderdialog.ui b/qt/lc_renderdialog.ui
index 2630599c..71da3e50 100644
--- a/qt/lc_renderdialog.ui
+++ b/qt/lc_renderdialog.ui
@@ -18,6 +18,12 @@
-
+
+
+ 0
+ 0
+
+
Settings
@@ -113,17 +119,21 @@
+ -
+
+
- -
-
-
-
-
-
-
+
+
+ lcRenderPreviewWidget
+ QWidget
+
+ 1
+
+
QualityComboBox
OutputEdit