Better render dialog resizing. Fixes #386.

This commit is contained in:
Leonardo Zide
2019-09-14 12:05:30 -07:00
parent 132a62e6a8
commit 1c5fb8dd2d
3 changed files with 75 additions and 13 deletions
+33 -6
View File
@@ -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();
+25
View File
@@ -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
+17 -7
View File
@@ -18,6 +18,12 @@
<layout class="QVBoxLayout" name="topLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Settings</string>
</property>
@@ -113,17 +119,21 @@
</item>
</layout>
</item>
<item>
<widget class="lcRenderPreviewWidget" name="preview" native="true"/>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="preview">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>lcRenderPreviewWidget</class>
<extends>QWidget</extends>
<header>lc_renderdialog.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>QualityComboBox</tabstop>
<tabstop>OutputEdit</tabstop>