Compare commits

..

No commits in common. "52734adda8d8c79099fd121dec98302f143ea4c5" and "25eec60e5c0c079de22f747cbd0637e93941776e" have entirely different histories.

11 changed files with 62 additions and 300 deletions

View File

@ -105,7 +105,6 @@
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp" /> <ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp" />
<ClCompile Include="src\Editor\LayerStyleDialog.cpp" />
<ClCompile Include="src\Editor\EditorWidget.cpp" /> <ClCompile Include="src\Editor\EditorWidget.cpp" />
<ClCompile Include="src\Editor\EditorWidgetItem.cpp" /> <ClCompile Include="src\Editor\EditorWidgetItem.cpp" />
<ClCompile Include="src\Editor\ElementManager.cpp" /> <ClCompile Include="src\Editor\ElementManager.cpp" />
@ -192,7 +191,6 @@
<QtMoc Include="src\MainWindow.h" /> <QtMoc Include="src\MainWindow.h" />
<QtMoc Include="src\Editor\EditorWidget.h" /> <QtMoc Include="src\Editor\EditorWidget.h" />
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h" /> <QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h" />
<QtMoc Include="src\Editor\LayerStyleDialog.h" />
<ClInclude Include="src\Editor\ElementManager.h" /> <ClInclude Include="src\Editor\ElementManager.h" />
<QtMoc Include="src\Editor\ElementPoolWidget.h" /> <QtMoc Include="src\Editor\ElementPoolWidget.h" />
<ClInclude Include="src\Editor\GraphicElement.h" /> <ClInclude Include="src\Editor\GraphicElement.h" />

View File

@ -219,9 +219,6 @@
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp"> <ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\Editor\LayerStyleDialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="src\Renderer\RendererGLWidget.h"> <QtMoc Include="src\Renderer\RendererGLWidget.h">
@ -260,9 +257,6 @@
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h"> <QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</QtMoc> </QtMoc>
<QtMoc Include="src\Editor\LayerStyleDialog.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\data.json" /> <None Include="..\data.json" />
@ -396,6 +390,9 @@
<ClInclude Include="src\Editor\GraphicElement.h"> <ClInclude Include="src\Editor\GraphicElement.h">
<Filter>Header Files\Editor</Filter> <Filter>Header Files\Editor</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\Editor\LayerStyle.h">
<Filter>Header Files\Editor</Filter>
</ClInclude>
<ClInclude Include="src\Editor\LayerManager.h"> <ClInclude Include="src\Editor\LayerManager.h">
<Filter>Header Files\Editor</Filter> <Filter>Header Files\Editor</Filter>
</ClInclude> </ClInclude>
@ -456,9 +453,6 @@
<ClInclude Include="src\Editor\util\PaintingUtil.h"> <ClInclude Include="src\Editor\util\PaintingUtil.h">
<Filter>Header Files\Editor\util</Filter> <Filter>Header Files\Editor\util</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\Editor\LayerStyle.h">
<Filter>Header Files\Editor</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtRcc Include="res\MainWindow.qrc"> <QtRcc Include="res\MainWindow.qrc">

View File

@ -43,7 +43,7 @@ PixelPath GroupElement::getPaintObject() const
} }
//TODO: apply styles and send back //TODO: apply styles and send back
PixelPath SimpleElement::getPaintObject(std::vector<std::shared_ptr<LayerStyle>>* styles) const { PixelPath SimpleElement::getPaintObject(std::vector<Renderer::ElementStyleStrokeDemo> styles) const {
PixelPath result; PixelPath result;
Renderer::ElementStyleStrokeDemo demo(2); Renderer::ElementStyleStrokeDemo demo(2);
auto [img, mov] = renderer->drawElement(painterPath, demo, 1.0); auto [img, mov] = renderer->drawElement(painterPath, demo, 1.0);
@ -59,7 +59,7 @@ PixelPath SimpleElement::getPaintObject(std::vector<std::shared_ptr<LayerStyle>>
return result; return result;
} }
PixelPath GroupElement::getPaintObject(std::vector<std::shared_ptr<LayerStyle>>* styles) const { PixelPath GroupElement::getPaintObject(std::vector<Renderer::ElementStyleStrokeDemo> styles) const {
return getPaintObject(); return getPaintObject();
} }

View File

@ -1,7 +1,6 @@
#pragma once #pragma once
#include "LayerWrapper.h" #include "LayerWrapper.h"
#include "LayerStyle.h"
#include <QJsonArray> #include <QJsonArray>
#include <QJsonObject> #include <QJsonObject>
#include <QPainterPath> #include <QPainterPath>
@ -27,7 +26,7 @@ public:
// TODO: ¸ÄΪBitmapPath // TODO: ¸ÄΪBitmapPath
virtual QJsonObject toJson() const; virtual QJsonObject toJson() const;
virtual PixelPath getPaintObject() const = 0; virtual PixelPath getPaintObject() const = 0;
virtual PixelPath getPaintObject(std::vector<std::shared_ptr<LayerStyle>>*) const = 0; virtual PixelPath getPaintObject(std::vector<Renderer::ElementStyleStrokeDemo>) const = 0;
}; };
class SimpleElement : public GraphicElement class SimpleElement : public GraphicElement
@ -42,7 +41,7 @@ public:
SimpleElement(QJsonObject jsonSource); SimpleElement(QJsonObject jsonSource);
~SimpleElement() = default; ~SimpleElement() = default;
PixelPath getPaintObject() const override; PixelPath getPaintObject() const override;
PixelPath getPaintObject(std::vector<std::shared_ptr<LayerStyle>>*) const override; PixelPath getPaintObject(std::vector<Renderer::ElementStyleStrokeDemo>) const override;
}; };
class GroupElement : public GraphicElement class GroupElement : public GraphicElement
@ -55,7 +54,7 @@ public:
GroupElement(FolderLayerWrapper* mSourceLayer); GroupElement(FolderLayerWrapper* mSourceLayer);
~GroupElement() = default; ~GroupElement() = default;
PixelPath getPaintObject() const override; PixelPath getPaintObject() const override;
PixelPath getPaintObject(std::vector<std::shared_ptr<LayerStyle>>*) const override; PixelPath getPaintObject(std::vector<Renderer::ElementStyleStrokeDemo>) const override;
void setSourceLayer(FolderLayerWrapper* sourceLayer); void setSourceLayer(FolderLayerWrapper* sourceLayer);
}; };

View File

@ -1,68 +1,6 @@
#include "LayerStyle.h" #include "LayerStyle.h"
#include <QHBoxLayout>
#include <QDialogButtonBox>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
const std::vector<std::pair<QString, std::function<std::shared_ptr<LayerStyle>()>>> LayerStyle::types = { std::vector<Renderer::BaseStyle> StrokeElementStyle::toBaseStyles() const
{
QStringLiteral("Ãè±ß"),
[]() { return std::make_shared<StrokeElementLayerStyle>(); }
},
{
QStringLiteral("Ìî³ä"),
[]() { return std::make_shared<FillElementLayerStyle>(); }
}
};
//const std::vector<std::pair<QString, std::function<LayerStyle*()>>> LayerStyle::types = {
// {
// QStringLiteral("Ãè±ß"),
// []() { return new StrokeElementLayerStyle; }
// },
// {
// QStringLiteral("Ìî³ä"),
// []() { return new FillElementLayerStyle; }
// }
//};
std::vector<Renderer::BaseStyle> StrokeElementLayerStyle::toBaseStyles() const
{ {
return std::vector<Renderer::BaseStyle>(); return std::vector<Renderer::BaseStyle>();
} }
QWidget* StrokeElementLayerStyle::getInputWidget() const
{
QLabel* le = new QLabel;
le->setText(QStringLiteral("Ãè±ß"));
return le;
}
QWidget* StrokeElementLayerStyle::getListDisplayWidget() const
{
QWidget* w = new QWidget;
QLabel* name = new QLabel(w);
name->setText(QStringLiteral("Ãè±ß"));
QHBoxLayout* layout = new QHBoxLayout(w);
layout->setMargin(0);
layout->addWidget(name);
return w;
}
std::vector<Renderer::BaseStyle> FillElementLayerStyle::toBaseStyles() const
{
return std::vector<Renderer::BaseStyle>();
}
QWidget* FillElementLayerStyle::getInputWidget() const
{
QLineEdit* name = new QLineEdit;
name->setText(QStringLiteral("Ìî³ä"));
return name;
}
QWidget* FillElementLayerStyle::getListDisplayWidget() const
{
return nullptr;
}

View File

@ -1,49 +1,24 @@
#pragma once #pragma once
#include <map>
#include <functional>
#include <utility>
#include <QWidget>
#include <QObject>
#include <QListWidget>
#include "../Renderer/Painting/ElementStyle.h" #include "../Renderer/Painting/ElementStyle.h"
#include "../Renderer/Painting/MaterialStyleStroke.h" #include "../Renderer/Painting/MaterialStyleStroke.h"
#include "../Renderer/Painting/MaterialStyleFill.h"
/**
* StylegetInputWidget()
* StylegetInputWidget()
*
* LayerStyleElementStylestyle
*
*/
class LayerStyle class LayerStyle
{ {
public: public:
const static std::vector<std::pair<QString, std::function<std::shared_ptr<LayerStyle>()>>> types; virtual void apply() = 0;
//const static std::vector<std::pair<QString, std::function<LayerStyle*()>>> types;
virtual QWidget* getInputWidget() const = 0;
virtual QWidget* getListDisplayWidget() const = 0;
virtual ~LayerStyle() {};
}; };
class StrokeElementLayerStyle : public Renderer::ElementStyle, public LayerStyle struct EditorStrokeMaterialStyle
{ {
public: float applyWidth;
std::vector<Renderer::BaseStyle> toBaseStyles() const override; Renderer::StrokeType strokeType;
QWidget* getInputWidget() const override; Renderer::StrokeEndType endType;
QWidget* getListDisplayWidget() const override; std::shared_ptr<Renderer::MaterialStroke> materialStroke;
StrokeElementLayerStyle() = default;
~StrokeElementLayerStyle() = default;
std::vector<std::unique_ptr<Renderer::MaterialStroke>> materialStyles;
}; };
class FillElementLayerStyle : public Renderer::ElementStyle, public LayerStyle class StrokeElementStyle : Renderer::ElementStyle
{ {
public: public:
std::vector<Renderer::BaseStyle> toBaseStyles() const override; virtual std::vector<Renderer::BaseStyle> toBaseStyles() const override;
QWidget* getInputWidget() const override; std::vector<EditorStrokeMaterialStyle> materialStyles;
QWidget* getListDisplayWidget() const override;
FillElementLayerStyle() = default;
~FillElementLayerStyle() = default;
std::vector<std::unique_ptr<Renderer::MaterialFill>> materialStyles;
}; };

View File

@ -1,53 +0,0 @@
#include "LayerStyleDialog.h"
#include <QComboBox>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QDebug>
LayerStyleDialog::LayerStyleDialog(QWidget* parent, std::shared_ptr<LayerStyle> existedStyle) : QDialog(parent)
{
QVBoxLayout* dialogLayout = new QVBoxLayout(this);
dialogLayout->setAlignment(Qt::AlignmentFlag::AlignHCenter);
this->setLayout(dialogLayout);
if (existedStyle)
{
this->layerStyle = existedStyle;
QWidget* styleWidget = layerStyle->getInputWidget();
styleWidget->setParent(this);
dialogLayout->addWidget(styleWidget);
// do something
}
else
{
this->layerStyle = LayerStyle::types[0].second();
QComboBox* typeSelector = new QComboBox(this);
for (auto& pair : LayerStyle::types) {
typeSelector->addItem(pair.first);
}
dialogLayout->addWidget(typeSelector);
this->styleContainer = new QGridLayout(this);
dialogLayout->addLayout(styleContainer);
this->styleWidget = this->layerStyle->getInputWidget();
this->styleWidget->setParent(this);
this->styleContainer->addWidget(styleWidget);
connect(typeSelector, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &LayerStyleDialog::onStyleTypeSelectorChanged);
}
}
void LayerStyleDialog::onStyleTypeSelectorChanged(int index)
{
if (this->styleWidget)
{
this->styleContainer->removeWidget(this->styleWidget);
this->styleWidget->setParent(nullptr);
delete styleWidget;
}
this->layerStyle = std::move(LayerStyle::types[index].second());
this->styleWidget = this->layerStyle->getInputWidget();
this->styleWidget->setParent(this);
this->styleContainer->addWidget(styleWidget, 0, 0, 1, 1);
}

View File

@ -1,18 +0,0 @@
#pragma once
#include "LayerStyle.h"
#include <QDialog>
#include <QGridLayout>
class LayerStyleDialog : public QDialog
{
Q_OBJECT
private:
QWidget* styleWidget;
QGridLayout* styleContainer;
public:
LayerStyleDialog(QWidget* parent = nullptr, std::shared_ptr<LayerStyle> existedStyle = nullptr);
std::shared_ptr<LayerStyle> layerStyle;
private slots:
void onStyleTypeSelectorChanged(int index);
};

View File

@ -106,7 +106,7 @@ void LeafLayerWrapper::refresh()
cache.clear(); cache.clear();
if (wrappedElement != nullptr) if (wrappedElement != nullptr)
{ {
cache.addPath(wrappedElement->getPaintObject(&(this->styles))); cache.addPath(wrappedElement->getPaintObject(this->styles));
} }
LayerWrapper::refresh(); LayerWrapper::refresh();
} }

View File

@ -90,8 +90,7 @@ class LeafLayerWrapper : public LayerWrapper
{ {
public: public:
GraphicElement *wrappedElement; GraphicElement *wrappedElement;
//const vector<Renderer::ElementStyleStrokeDemo> styles; const vector<Renderer::ElementStyleStrokeDemo> styles;
vector<std::shared_ptr<LayerStyle>> styles;
public: public:
~LeafLayerWrapper() = default; ~LeafLayerWrapper() = default;

View File

@ -1,11 +1,9 @@
#include "InfoDisplayWidget.h" #include "InfoDisplayWidget.h"
#include "LayerStyleDialog.h"
#include <QLineEdit> #include <QLineEdit>
#include <QTextBlock> #include <QTextBlock>
#include <QListWidget> #include <QListWidget>
#include <QPushButton> #include <QPushButton>
#include <QDialog> #include <QDialog>
#include <QComboBox>
#include <QDialogButtonBox> #include <QDialogButtonBox>
void InfoDisplayWidget::setLayer(LayerWrapper *layer) void InfoDisplayWidget::setLayer(LayerWrapper *layer)
@ -76,131 +74,63 @@ void InfoDisplayWidget::generateLayerForm()
layout->addRow("scale-Y:", scaleY); layout->addRow("scale-Y:", scaleY);
layout->setRowWrapPolicy(QFormLayout::DontWrapRows); layout->setRowWrapPolicy(QFormLayout::DontWrapRows);
LeafLayerWrapper* leafP = dynamic_cast<LeafLayerWrapper*>(this->displayLayer); bool styleEnabled = true;
if (leafP) { if (styleEnabled) {
QListWidget* styleList = new QListWidget(this); QListWidget* styleList = new QListWidget(this);
QListWidgetItem* item = new QListWidgetItem("样式列表");
QListWidgetItem* header = new QListWidgetItem; item->setFlags(Qt::NoItemFlags);
QWidget* headerWidget = new QWidget(styleList); styleList->addItem(item);
QHBoxLayout* headerLayout = new QHBoxLayout; static vector<QString> styleNames = { "样例1", "样例2", "样例3" , "样例4" , "样例5" , "样例6" , "样例7" , "样例8" };
auto createStyleItem = [this, styleList](int index) {
QLabel* headerLabel = new QLabel(headerWidget);
headerLabel->setText("样式列表");
headerLabel->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
QPushButton* addStyleButton = new QPushButton("+", headerWidget);
addStyleButton->setFixedSize(QSize(20, 20));
connect(addStyleButton, &QPushButton::clicked, [this]() {
QDialog* dialog = new LayerStyleDialog(this);
dialog->exec();
});
headerLayout->addWidget(headerLabel);
headerLayout->addWidget(addStyleButton);
headerLayout->setContentsMargins(5, 0, 5, 0);
headerWidget->setLayout(headerLayout);
header->setFlags(Qt::NoItemFlags);
styleList->addItem(header);
styleList->setItemWidget(header, headerWidget);
//static vector<QString> styleNames = { "样例1", "样例2", "样例3" };
// auto createStyleItem = [this, styleList](int index) {
// QListWidgetItem* item = new QListWidgetItem;
// QWidget* w = new QWidget;
// item->setSizeHint(QSize(50, 40));
// QHBoxLayout* layout = new QHBoxLayout;
// QPushButton* deleteButton = new QPushButton(w);
// QPushButton* detailButton = new QPushButton(w);
// QLabel* name = new QLabel(w);
// name->setText(styleNames[index]);
// detailButton->setText("...");
// detailButton->setFixedSize(QSize(20, 20));
// deleteButton->setText("×");
// deleteButton->setFixedSize(QSize(20, 20));
// connect(detailButton, &QPushButton::clicked, [styleList, item, this, index]() {
// QDialog dlg(this);
// dlg.setWindowTitle("样式详情");
// dlg.resize(400, 200);
// QGridLayout *contentLayout = new QGridLayout(&dlg);
// QLineEdit* name = new QLineEdit(styleNames[index], &dlg);
// auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel);
// contentLayout->addWidget(buttonBox);
// connect(buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept);
// connect(buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject);
// bool updateStyle = dlg.exec();
// if (updateStyle) {
// styleNames[index] = name->text();
// qDebug() << name->text();
// // 在此处修改新样式信息至内存
// emit requireRefreshPreview();
// emit requireSelfRefresh();
// }
// });
// connect(deleteButton, &QPushButton::clicked, [styleList,item,this]() {
// styleList->removeItemWidget(item);
// delete item;
// // 删除layer对应样式
// emit requireRefreshPreview();
// emit requireSelfRefresh();
// });
// layout->addWidget(name);
// layout->addWidget(detailButton);
// layout->addWidget(deleteButton);
// w->setLayout(layout);
// styleList->addItem(item);
// styleList->setItemWidget(item, w);
// };
// for (int i = 0; i < styleNames.size(); i++)
// createStyleItem(i);
if (leafP->styles.empty())
{
leafP->styles.push_back(std::shared_ptr<LayerStyle>(new StrokeElementLayerStyle()));
}
for (auto& style : leafP->styles)
{
QListWidgetItem* item = new QListWidgetItem; QListWidgetItem* item = new QListWidgetItem;
QWidget* w = new QWidget; QWidget* w = new QWidget;
item->setSizeHint(QSize(50, 40)); item->setSizeHint(QSize(50, 40));
QHBoxLayout* layout = new QHBoxLayout; QHBoxLayout* layout = new QHBoxLayout;
layout->setAlignment(Qt::AlignmentFlag::AlignRight);
QPushButton* detailButton = new QPushButton(w);
QPushButton* deleteButton = new QPushButton(w); QPushButton* deleteButton = new QPushButton(w);
QPushButton* detailButton = new QPushButton(w);
QLabel* name = new QLabel(w);
name->setText(styleNames[index]);
detailButton->setText("..."); detailButton->setText("...");
detailButton->setFixedSize(QSize(20, 20)); detailButton->setFixedSize(QSize(20, 20));
deleteButton->setText("×"); deleteButton->setText("×");
deleteButton->setFixedSize(QSize(20, 20)); deleteButton->setFixedSize(QSize(20, 20));
connect(detailButton, &QPushButton::clicked, [styleList, item, this, index]() {
connect(detailButton, &QPushButton::clicked, [this, &style]() { QDialog dlg(this);
LayerStyleDialog* dialog = new LayerStyleDialog(this, style); dlg.setWindowTitle("样式详情");
/*dialog->setAttribute(Qt::WA_DeleteOnClose); dlg.resize(400, 200);
QVBoxLayout* layout = new QVBoxLayout(dialog); QGridLayout *contentLayout = new QGridLayout(&dlg);
QLineEdit* name = new QLineEdit(styleNames[index], &dlg);
QComboBox* typeSelector = new QComboBox(dialog); auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel);
for (auto &pair : LayerStyle::types) { contentLayout->addWidget(buttonBox);
typeSelector->addItem(pair.first); connect(buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject);
bool updateStyle = dlg.exec();
if (updateStyle) {
styleNames[index] = name->text();
qDebug() << name->text();
// 在此处修改新样式信息至内存
emit requireRefreshPreview();
emit requireSelfRefresh();
} }
layout->addWidget(typeSelector);
QWidget* styleWidget = style->getInputWidget();
styleWidget->setParent(dialog);
layout->addWidget(styleWidget);*/
dialog->exec();
}); });
connect(deleteButton, &QPushButton::clicked, [styleList,item,this]() {
QWidget* styleDisplayWidget = style->getListDisplayWidget(); styleList->removeItemWidget(item);
styleDisplayWidget->setParent(w); delete item;
styleDisplayWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); // 删除layer对应样式
emit requireRefreshPreview();
layout->addWidget(styleDisplayWidget); emit requireSelfRefresh();
});
layout->addWidget(name);
layout->addWidget(detailButton); layout->addWidget(detailButton);
layout->addWidget(deleteButton); layout->addWidget(deleteButton);
w->setLayout(layout); w->setLayout(layout);
styleList->addItem(item); styleList->addItem(item);
styleList->setItemWidget(item, w); styleList->setItemWidget(item, w);
//style->addListItem(styleList); };
} for (int i = 0; i < styleNames.size(); i++)
createStyleItem(i);
layout->addRow(styleList); layout->addRow(styleList);
} }
} }