From a3d39b32e590ca088a1fe79bdd4e1cd3e47605b5 Mon Sep 17 00:00:00 2001 From: karlis <2995621482@qq.com> Date: Thu, 23 Mar 2023 22:36:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=89=80=E6=9C=89La?= =?UTF-8?q?yer=E7=9A=84styles=E6=88=90=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Editor/GraphicElement.cpp | 2 +- .../src/Editor/LayerManager.cpp | 8 +++--- .../src/Editor/LayerWrapper.cpp | 28 +++++++++---------- .../src/Editor/LayerWrapper.h | 8 +++--- .../src/Editor/RightBar/InfoDisplayWidget.cpp | 2 +- .../src/Editor/util/PaintingUtil.cpp | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp index ceef5cf..ce379d1 100644 --- a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp +++ b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp @@ -141,7 +141,7 @@ bool SimpleElement::isClosed() const void GroupElement::paint(QPainter* painter, QTransform transform, const LayerStyleContainer& styles) { - sourceLayer->paint(painter, transform, true); + sourceLayer->paint(painter, transform, true, styles); } bool GroupElement::isClosed() const diff --git a/ArchitectureColoredPainting/src/Editor/LayerManager.cpp b/ArchitectureColoredPainting/src/Editor/LayerManager.cpp index 917941a..ecc624c 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerManager.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerManager.cpp @@ -61,10 +61,10 @@ bool LayerManager::combine() const for (auto &layer : selectedLayers) if (layer->getParent() != prevCommonFather) return false; - auto newCommonFather = new FolderLayerWrapper(); - newCommonFather->setParent(static_cast(prevCommonFather)); - for (auto &layer : selectedLayers) - layer->setParent(newCommonFather); + //auto newCommonFather = new FolderLayerWrapper(); + //newCommonFather->setParent(static_cast(prevCommonFather)); + //for (auto &layer : selectedLayers) + // layer->setParent(newCommonFather); return true; } bool LayerManager::changeParent(FolderLayerWrapper *newParent) const diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp index 9289788..a0ca73f 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp @@ -59,6 +59,7 @@ FolderLayerWrapper::FolderLayerWrapper(QJsonObject json, ElementManager *element qDebug() << json.value("name").toString() << " " << this; QJsonArray childrenJson = json.value("children").toArray(); QJsonValue referencedJson = json.value("referenced-by"); + styles = new LayerStyleContainer(LayerStyleContainer::TYPE_ALL); if (!referencedJson.isNull()) { auto p = reinterpret_cast(elementManager->getElementById(referencedJson.toInt())); @@ -79,11 +80,11 @@ FolderLayerWrapper::FolderLayerWrapper(QJsonObject json, ElementManager *element LeafLayerWrapper::LeafLayerWrapper(QJsonObject json, ElementManager* elementManager, FolderLayerWrapper* parent) : LayerWrapper(json, parent, elementManager), - wrappedElement(elementManager->getElementById(json.value("element").toInt())), - styles(LayerStyleContainer::fromJson( - wrappedElement->isClosed() ? LayerStyleContainer::TYPE_CLOSED : LayerStyleContainer::TYPE_UNCLOSED, - json.value("styles").toArray())) + wrappedElement(elementManager->getElementById(json.value("element").toInt())) { + styles = new LayerStyleContainer(LayerStyleContainer::fromJson( + wrappedElement->isClosed() ? LayerStyleContainer::TYPE_CLOSED : LayerStyleContainer::TYPE_UNCLOSED, + json.value("styles").toArray())); qDebug() << json.value("name").toString() << " " << this; if(wrappedElement != nullptr) wrappedElement->referencedCount++; @@ -157,7 +158,7 @@ void LeafLayerWrapper::refresh(LayerWrapper* layer) cache.clear(); if (wrappedElement != nullptr) { - cache.addPath(wrappedElement->getPaintObject(this->styles)); + cache.addPath(wrappedElement->getPaintObject(*this->styles)); } LayerWrapper::refresh(); } @@ -291,7 +292,7 @@ QJsonObject LeafLayerWrapper::toJson() const QJsonObject json = LayerWrapper::toJson(); json.insert("element", elementManager->getElementIndex(wrappedElement)); json.insert("is-folder", false); - json.insert("styles", styles.toJson()); + json.insert("styles", styles->toJson()); return json; } @@ -303,7 +304,7 @@ int FolderLayerWrapper::getReferencedBy()const return -1; } -void LayerWrapper::paint(QPainter* painter, QTransform transform, bool force) +void LayerWrapper::paint(QPainter* painter, QTransform transform, bool force, LayerStyleContainer styles) { // if (this->selected) // { @@ -315,26 +316,24 @@ void LayerWrapper::paint(QPainter* painter, QTransform transform, bool force) // } } -void FolderLayerWrapper::paint(QPainter* painter, QTransform transform, bool force) +void FolderLayerWrapper::paint(QPainter* painter, QTransform transform, bool force, LayerStyleContainer styles) { if (hidden && !force) return; - LayerWrapper::paint(painter, transform, force); transform = property.transform * transform; for (auto it = children.rbegin(); it != children.rend(); ++it) - (*it)->paint(painter, transform, force); + (*it)->paint(painter, transform, force, styles | *this->styles); } -void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool force) +void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool force, LayerStyleContainer styles) { if (hidden && !force) return; - LayerWrapper::paint(painter, transform, force); transform = property.transform * transform; //qDebug() << transform; if (wrappedElement != nullptr) { - wrappedElement->paint(painter, transform, styles); + wrappedElement->paint(painter, transform, styles | *this->styles); } } @@ -454,7 +453,8 @@ bool LeafLayerWrapper::referencingGroupElement() const bool LayerWrapper::canApplyStyles() const { - return typeid(*this) == typeid(LeafLayerWrapper) && !referencingGroupElement(); + return true; + //return typeid(*this) == typeid(LeafLayerWrapper) && !referencingGroupElement(); } void LayerWrapper::paintVisualBounding(QPainter* painter) const diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h index 128de4d..52b3de3 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h @@ -39,6 +39,7 @@ class LayerWrapper QTreeWidgetItem* qTreeWidgetItem; bool selected; bool hidden; + LayerStyleContainer* styles; struct SimpleProperty { QString name = ""; @@ -61,7 +62,7 @@ class LayerWrapper FolderLayerWrapper*getParent() const; // invoke by manager, then invoke parent's applyStyles LayerWrapper(QJsonObject json, FolderLayerWrapper*parent, ElementManager* elementManager=nullptr); LayerWrapper() = default; - virtual void paint(QPainter* painter, QTransform transform=QTransform(), bool force = false); + virtual void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false, LayerStyleContainer styles = LayerStyleContainer(LayerStyleContainer::TYPE_ALL)); // TODO : export Function // virtual LayerWrapper *addChild() = 0; // Leaf Child Only // virtual LayerWrapper *addParent() = 0; // Folder Parent Only @@ -102,7 +103,7 @@ class FolderLayerWrapper : public LayerWrapper QTreeWidgetItem* getQTreeItem() override; QJsonObject toJson() const override; int getReferencedBy()const; - void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false) override; + void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false, LayerStyleContainer styles = LayerStyleContainer(LayerStyleContainer::TYPE_ALL)) override; void collectDownReachable(std::set& reachable) override; void refreshTreeItem() override; size_t referencedCount(bool excludeSelf = false) const override; @@ -114,14 +115,13 @@ class LeafLayerWrapper : public LayerWrapper { public: GraphicElement *wrappedElement; - LayerStyleContainer styles; public: ~LeafLayerWrapper(); void refresh(LayerWrapper* layer = nullptr) override; LeafLayerWrapper(QJsonObject json, ElementManager *elementManager, FolderLayerWrapper*parent); QJsonObject toJson() const override; - void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false) override; + void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false, LayerStyleContainer styles = LayerStyleContainer(LayerStyleContainer::TYPE_ALL)) override; void collectDownReachable(std::set& reachable) override; QTreeWidgetItem* getQTreeItem() override; void refreshTreeItem() override; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp index 588e17b..91b1837 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/InfoDisplayWidget.cpp @@ -102,7 +102,7 @@ void InfoDisplayWidget::refresh() if (this->displayLayer->canApplyStyles()) { ui.styleList->setDisabled(false); - ui.styleList->setStyleContainer(&static_cast(this->displayLayer)->styles); + ui.styleList->setStyleContainer(static_cast(this->displayLayer)->styles); } else { diff --git a/ArchitectureColoredPainting/src/Editor/util/PaintingUtil.cpp b/ArchitectureColoredPainting/src/Editor/util/PaintingUtil.cpp index 9615563..70c875f 100644 --- a/ArchitectureColoredPainting/src/Editor/util/PaintingUtil.cpp +++ b/ArchitectureColoredPainting/src/Editor/util/PaintingUtil.cpp @@ -113,7 +113,7 @@ void PaintingUtil::handleLayerWrapper(LayerWrapper* nowLayer, QTransform transfo QTransform transformInverted = leafTransform.inverted(); //++zIndexCount; - auto baseStyles = leafLayer->styles.toBaseStyles(); + auto baseStyles = leafLayer->styles->toBaseStyles(); qDebug() << baseStyles.size(); for (auto& baseStyle : std::views::reverse(baseStyles)) { double lineWidth = 0;