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); };