From f6ebe583228a31372a9978af138b9072af7f0c28 Mon Sep 17 00:00:00 2001
From: karlis <2995621482@qq.com>
Date: Mon, 27 Mar 2023 13:24:22 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=9B=B4=E6=94=B9?=
=?UTF-8?q?=E7=94=BB=E5=B8=83=E5=A4=A7=E5=B0=8F=E7=9A=84=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=20|=20#3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EditorSettingWidget.ui | 13 ++++++++
.../EditorWidgetItem.ui | 14 ++++-----
.../src/Editor/EditorWidgetItem.cpp | 7 +++--
.../src/Editor/PreviewWindow.cpp | 31 ++++++++++++++++---
.../src/Editor/PreviewWindow.h | 5 ++-
.../Editor/RightBar/EditorSettingWidget.cpp | 5 +++
.../src/Editor/RightBar/EditorSettingWidget.h | 2 +-
7 files changed, 60 insertions(+), 17 deletions(-)
diff --git a/ArchitectureColoredPainting/EditorSettingWidget.ui b/ArchitectureColoredPainting/EditorSettingWidget.ui
index fc73390..8a388fb 100644
--- a/ArchitectureColoredPainting/EditorSettingWidget.ui
+++ b/ArchitectureColoredPainting/EditorSettingWidget.ui
@@ -54,6 +54,19 @@
+ -
+
+
+
+ 120
+ 16777215
+
+
+
+ 设置画布尺寸
+
+
+
diff --git a/ArchitectureColoredPainting/EditorWidgetItem.ui b/ArchitectureColoredPainting/EditorWidgetItem.ui
index 1ac2ea4..a1eb7a1 100644
--- a/ArchitectureColoredPainting/EditorWidgetItem.ui
+++ b/ArchitectureColoredPainting/EditorWidgetItem.ui
@@ -70,9 +70,9 @@
0
- -17
- 1024
- 1024
+ 0
+ 0
+ 0
@@ -83,14 +83,14 @@
- 1024
- 1024
+ 0
+ 0
- 1024
- 1024
+ 16777215
+ 16777215
diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp
index d694c05..146abab 100644
--- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp
+++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp
@@ -40,6 +40,7 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p
//connect(treeWidget, &LayerTreeWidget::requireRefreshElementWidget, elementInfoDisplayWidget, &ElementPoolWidget::refresh);
// connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshElementWidget, elementInfoDisplayWidget, &ElementPoolWidget::refresh);
connect(treeWidget, &LayerTreeWidget::displayLayerChange, this, &EditorWidgetItem::onLayerChange);
+ connect(editorSettingWidget, &EditorSettingWidget::canvasSizeChanged, previewWindow, &PreviewWindow::resize);
// connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireRefreshPreview, this,
// &EditorWidgetItem::triggerRefreshPreview);
// connect(treeWidget, &LayerTreeWidget::requireRefreshPreview, this,
@@ -72,7 +73,7 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p
elementInfoDisplayWidget->setElementManager(elementManager);
treeWidget->elementManager = elementManager;
//qDebug() << layerManager->toJson();
- previewWindow->initialize(layerManager,QSize(jsonDoc.object().value("width").toDouble(),jsonDoc.object().value("height").toDouble()));
+ previewWindow->initialize(layerManager,QSize(jsonDoc.object().value("width").toInt(),jsonDoc.object().value("height").toInt()));
if (layerManager->getRoot() != nullptr)
@@ -151,8 +152,8 @@ void EditorWidgetItem::saveImpl(QString filePath) const
QJsonObject source1 = layerManager->toJson();
QJsonObject source2 = elementManager->toJson();
QJsonObject json;
- json.insert("width", 1080);
- json.insert("height", 1080);
+ json.insert("width", previewWindow->referSize.width());
+ json.insert("height", previewWindow->referSize.height());
json.insert("root-layer", source1.value("root-layer"));
json.insert("elements", source2.value("elements"));
json.insert("project-name", this->projectName);
diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp
index f910c5a..fbe64c8 100644
--- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp
+++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.cpp
@@ -18,11 +18,32 @@ PreviewWindow::PreviewWindow(QWidget* parent) : QOpenGLWidget(parent)
backgroundColor = QColor(255, 255, 255, 255);
}
-void PreviewWindow::initialize(LayerManager* layerManager, QSize windowSize)
+void PreviewWindow::initialize(LayerManager* layerManager, QSize referSize, QSize windowSize)
{
this->logicalSize = windowSize;
this->layerManager = layerManager;
- this->setFixedSize(windowSize);
+ this->resize(referSize);
+}
+
+void PreviewWindow::resize(QSize _referSize)
+{
+ if (!_referSize.isValid())
+ return;
+ if (_referSize.width() == 0 || _referSize.height() == 0)
+ return;
+ this->referSize = _referSize;
+ if (referSize.width() > referSize.height())
+ {
+ actualSize.setWidth(logicalSize.width());
+ actualSize.setHeight(logicalSize.width() * referSize.height() / referSize.width());
+ }
+ else
+ {
+ actualSize.setHeight(logicalSize.height());
+ actualSize.setWidth(logicalSize.height() * referSize.width() / referSize.height());
+ }
+ this->setFixedSize(actualSize);
+ this->viewportRect = QRectF(QPointF(0, 0), actualSize);
}
void PreviewWindow::show()
@@ -51,7 +72,7 @@ void PreviewWindow::paintGL()
glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
glClear(GL_COLOR_BUFFER_BIT);
painter->begin(this);
- painter->setWindow(0, 0, logicalSize.width() * devicePixelRatioF(), logicalSize.height() * devicePixelRatioF());
+ painter->setWindow(0, 0, actualSize.width() * devicePixelRatioF(), actualSize.height() * devicePixelRatioF());
painter->setRenderHint(QPainter::Antialiasing);
painter->setRenderHint(QPainter::HighQualityAntialiasing);
layerManager->paint(painter, this->size(), currentLayer);
@@ -141,12 +162,12 @@ void PreviewWindow::wheelEvent(QWheelEvent* event)
if (event->delta() > 0 && zoomStep < ZOOM_STEP_MAX)
{
zoomStep++;
- this->setFixedSize(logicalSize * (1 + zoomStep * ZOOM_RATE));
+ this->setFixedSize(actualSize * (1 + zoomStep * ZOOM_RATE));
}
else if (event->delta() < 0 && zoomStep > ZOOM_STEP_MIN)
{
zoomStep--;
- this->setFixedSize(logicalSize * (1 + zoomStep * ZOOM_RATE));
+ this->setFixedSize(actualSize * (1 + zoomStep * ZOOM_RATE));
}
this->repaint();
}
diff --git a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h
index 1d7761a..0bf5ae2 100644
--- a/ArchitectureColoredPainting/src/Editor/PreviewWindow.h
+++ b/ArchitectureColoredPainting/src/Editor/PreviewWindow.h
@@ -28,6 +28,7 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions
LayerManager *layerManager;
Renderer::ElementRenderer* renderer;
QSize logicalSize;
+ QSize actualSize;
QRectF viewportRect;
LayerWrapper* currentLayer;
QPointF m_lastPos;
@@ -38,8 +39,10 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions
void wheelEvent(QWheelEvent* event) override;
public:
+ QSize referSize;
PreviewWindow(QWidget *parent = nullptr);
- void initialize(LayerManager *layerManager, QSize windowSize = QSize(1920, 1080));
+ void initialize(LayerManager *layerManager,QSize referSize, QSize windowSize = QSize(720, 720));
+ void resize(QSize _referSize);
void show();
void initializeGL() override;
void paintGL() override;
diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp
index 979af0b..ae44476 100644
--- a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp
+++ b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.cpp
@@ -18,4 +18,9 @@ EditorSettingWidget::EditorSettingWidget(QWidget* parent)
QString name = QInputDialog::getText(this, QString::fromLocal8Bit("ÖØÃüÃû"), QString::fromLocal8Bit("ÇëÊäÈëеÄÏîÄ¿Ãû³Æ"));
emit projectNameChanged(name);
});
+ connect(ui.resizeButton, &QPushButton::clicked, this, [this]() {
+ int width = QInputDialog::getInt(this, QString::fromLocal8Bit("ÖØÉ軲¼´óС"), QString::fromLocal8Bit("ÇëÊäÈëеĻ²¼¿í¶È"));
+ int height = QInputDialog::getInt(this, QString::fromLocal8Bit("ÖØÉ軲¼´óС"), QString::fromLocal8Bit("ÇëÊäÈëеĻ²¼¸ß¶È"));
+ emit canvasSizeChanged(QSize(width, height));
+ });
}
\ No newline at end of file
diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h
index ba0166c..358131f 100644
--- a/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h
+++ b/ArchitectureColoredPainting/src/Editor/RightBar/EditorSettingWidget.h
@@ -16,6 +16,6 @@ class EditorSettingWidget :
signals:
void backgroundColorChanged(QColor);
void projectNameChanged(QString);
-
+ void canvasSizeChanged(QSize);
};