From 21aeb0832b486e3b37abe60a4840ffa209a7370a Mon Sep 17 00:00:00 2001 From: ArgonarioD Date: Mon, 20 Mar 2023 19:31:16 +0800 Subject: [PATCH] =?UTF-8?q?[stroke]=20=E5=AF=B9=E6=8E=A5=E4=BA=86Renderer?= =?UTF-8?q?=E6=96=B9=E9=9D=A2=E6=8F=90=E4=BE=9B=E7=9A=84=E6=96=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StrokeStyleWidget.cpp | 56 ++++++++----------- .../EditorWidgetComponent/StrokeStyleWidget.h | 4 +- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp index 3984076..60b65c8 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.cpp @@ -3,7 +3,9 @@ #include "../ColorHelper.hpp" #include #include +#include #include +#include constexpr int COLUMN_WIDTH = 0; constexpr int COLUMN_COLOR = 1; @@ -17,7 +19,7 @@ inline Renderer::Material newMaterial() } StrokeStyleWidget::StrokeStyleWidget( - std::shared_ptr stroke, + const std::shared_ptr& stroke, QWidget* parent ) : QWidget(parent), stroke(stroke) { @@ -59,30 +61,16 @@ void StrokeStyleWidget::initStrokeSettings() connect(enableGradual, &QtMaterialCheckBox::toggled, [this](bool checked) { radialStroke(this->stroke)->gradual = checked; }); - -#define endTypeBoxLabel(start, end) QStringLiteral(start##" -> "##end) + this->endTypeBox = new QComboBox(this); - endTypeBox->addItem(endTypeBoxLabel("Բͷ", "Բͷ")); // kRound - endTypeBox->addItem(endTypeBoxLabel("ƽͷ", "Բͷ")); // kFlatRound - endTypeBox->addItem(endTypeBoxLabel("Բͷ", "ƽͷ")); // kRoundFlat - endTypeBox->addItem(endTypeBoxLabel("ƽͷ", "ƽͷ")); // kFlat + for (const auto& displayName : MaterialStyleStroke::strokeEndTypeNames | std::views::keys) + { + endTypeBox->addItem(displayName); + } endTypeBox->setCurrentIndex(static_cast(this->stroke->endType)); connect(endTypeBox, QOverload::of(&QComboBox::currentIndexChanged), [this](int index) { - switch (index) - { - case 0: - this->stroke->endType = Renderer::StrokeEndType::kRound; - break; - case 1: - this->stroke->endType = Renderer::StrokeEndType::kFlatRound; - break; - case 2: - this->stroke->endType = Renderer::StrokeEndType::kRoundFlat; - break; - case 3: - this->stroke->endType = Renderer::StrokeEndType::kFlat; - break; - } + const auto& [displayName, endType] = MaterialStyleStroke::strokeEndTypeNames[index]; + this->stroke->endType = endType; }); this->widthField = new QtMaterialTextField(this); @@ -99,7 +87,7 @@ void StrokeStyleWidget::initStrokeSettings() }); } -void StrokeStyleWidget::initTable(std::shared_ptr materialStroke) +void StrokeStyleWidget::initTable(const std::shared_ptr& materialStroke) { this->strokeTable = new QTableWidget(this); strokeTable->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow); @@ -132,22 +120,22 @@ void StrokeStyleWidget::initAddButton() addButton->setBackgroundColor(ColorHelper::instance().getPrimary1()); connect(addButton, &QtMaterialRaisedButton::clicked, [this] { handlingRowInsert = true; - auto materialMap = &radialStroke(this->stroke)->materialMap; + auto& materialMap = radialStroke(this->stroke)->materialMap; float newWidth; - if (materialMap->empty()) + if (materialMap.empty()) { newWidth = 1.f; } else { - const auto firstPair = materialMap->begin(); + const auto firstPair = materialMap.begin(); newWidth = firstPair->first / 2; } const Renderer::Material newMaterial(ColorHelper::instance().getPrimary1()); - (*materialMap)[newWidth] = newMaterial; - int newRow = this->strokeTable->rowCount(); + materialMap[newWidth] = newMaterial; + const int newRow = this->strokeTable->rowCount(); this->strokeTable->insertRow(newRow); - setTableRow(newRow, newWidth, (*materialMap)[newWidth]); + setTableRow(newRow, newWidth, materialMap[newWidth]); this->strokeTable->update(); handlingRowInsert = false; }); @@ -166,7 +154,7 @@ void StrokeStyleWidget::setTableRow(int row, float width, Renderer::Material& ma auto* colorPicker = new ColorPicker(*colorPtr, strokeTable); strokeTable->setCellWidget(row, COLUMN_COLOR, colorPicker); connect(colorPicker, &ColorPicker::colorChanged, [this, colorPtr](QColor color) { - *colorPtr = color; + *colorPtr = std::move(color); this->strokeTable->update(); }); @@ -191,7 +179,7 @@ void StrokeStyleWidget::setTableRow(int row, float width, Renderer::Material& ma void StrokeStyleWidget::onCurrentItemChanged(QTableWidgetItem* current, QTableWidgetItem* previous) { if (!current) return; - int column = current->column(); + const int column = current->column(); if (column != COLUMN_COLOR && column != COLUMN_OPERATIONS) { this->currentItemValue = current->data(Qt::EditRole); @@ -201,14 +189,14 @@ void StrokeStyleWidget::onCurrentItemChanged(QTableWidgetItem* current, QTableWi void StrokeStyleWidget::onCellChanged(int row, int column) { if (handlingRowInsert) return; - auto changedItem = strokeTable->item(row, column); - auto changedItemValue = changedItem->text().toFloat(); + const auto changedItem = strokeTable->item(row, column); + const auto changedItemValue = changedItem->text().toFloat(); if (changedItemValue < 0 || 1 < changedItemValue) { changedItem->setData(Qt::EditRole, this->currentItemValue.toFloat()); return; } - auto changedWidth = strokeTable->item(row, COLUMN_WIDTH)->data(Qt::EditRole).toFloat(); + const auto changedWidth = strokeTable->item(row, COLUMN_WIDTH)->data(Qt::EditRole).toFloat(); switch (column) { case COLUMN_WIDTH: diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h index d0bd250..c4d1bfc 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetComponent/StrokeStyleWidget.h @@ -21,12 +21,12 @@ private: bool handlingRowInsert = false; void initStrokeSettings(); - void initTable(std::shared_ptr materialStroke); + void initTable(const std::shared_ptr& materialStroke); void initAddButton(); void setTableRow(int row, float width, Renderer::Material& material); public: - StrokeStyleWidget(std::shared_ptr stroke, QWidget* parent = nullptr); + StrokeStyleWidget(const std::shared_ptr& stroke, QWidget* parent = nullptr); std::shared_ptr stroke; protected slots: