整合了Editor部分类的抽象模型

dev-VirtualTexture
白封羽 2022-11-19 16:12:55 +08:00
parent cbc4c2ebf5
commit 722b4bfacd
9 changed files with 139 additions and 0 deletions

View File

@ -99,7 +99,10 @@
<ItemGroup>
<ClCompile Include="src\CaptionButton.cpp" />
<ClCompile Include="src\Editor\EditorWidget.cpp" />
<ClCompile Include="src\Editor\ElementManager.cpp" />
<ClCompile Include="src\Editor\GraphicElement.cpp" />
<ClCompile Include="src\Editor\LayerManager.cpp" />
<ClCompile Include="src\Editor\LayerWrapper.cpp" />
<ClCompile Include="src\IconWidget.cpp" />
<ClCompile Include="src\main.cpp" />
<ClCompile Include="src\MainWindow.cpp" />
@ -151,7 +154,11 @@
</ItemGroup>
<ItemGroup>
<QtMoc Include="src\MainWindow.h" />
<ClInclude Include="src\Editor\ElementManager.h" />
<ClInclude Include="src\Editor\GraphicElement.h" />
<ClInclude Include="src\Editor\LayerManager.h" />
<ClInclude Include="src\Editor\LayerStyle.h" />
<ClInclude Include="src\Editor\LayerWrapper.h" />
<ClInclude Include="src\Renderer\Painting\Element.h" />
<ClInclude Include="src\Renderer\Painting\Painting.h" />
<ClInclude Include="src\SvgParser.h" />

View File

@ -129,6 +129,15 @@
<ClCompile Include="src\Editor\GraphicElement.cpp">
<Filter>Source Files\Editor</Filter>
</ClCompile>
<ClCompile Include="src\Editor\ElementManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Editor\LayerManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Editor\LayerWrapper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="src\Renderer\RendererGLWidget.h">
@ -272,6 +281,18 @@
<ClInclude Include="src\Editor\GraphicElement.h">
<Filter>Header Files\Editor</Filter>
</ClInclude>
<ClInclude Include="src\Editor\ElementManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Editor\LayerManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Editor\LayerStyle.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\Editor\LayerWrapper.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<QtRcc Include="MainWindow.qrc">

View File

@ -0,0 +1,15 @@
#include "ElementManager.h"
ElementManager *ElementManager::getInstance()
{
return nullptr;
}
void ElementManager::addElement(GraphicElement *element)
{
}
void ElementManager::removeElement(GraphicElement *pElement)
{
}
GraphicElement *ElementManager::getElementById(int index)
{
return nullptr;
}

View File

@ -0,0 +1,19 @@
#pragma once
#include "GraphicElement.h"
#include <vector>
using std::vector;
class ElementManager
{
private:
static ElementManager *INSTANCE;
vector<GraphicElement> mElements;
public:
static ElementManager *getInstance();
void addElement(GraphicElement *element);
void removeElement(GraphicElement *pElement);
/**
* only used in initialization
*/
GraphicElement *getElementById(int index);
};

View File

@ -0,0 +1,5 @@
#include "LayerManager.h"
void LayerManager::paint(QPainter *painter) const
{
}

View File

@ -0,0 +1,18 @@
#pragma once
#include "LayerWrapper.h"
#include <QPainter>
#include <utility>
#include <vector>
using std::pair;
using std::vector;
class LayerManager
{
private:
using LayerPtrs = vector<LayerWrapper *>;
LayerWrapper root;
LayerPtrs selectedLayers;
LayerPtrs involvedLeafLayersCache;
public:
void paint(QPainter *painter) const;
};

View File

@ -0,0 +1,6 @@
#pragma once
class LayerStyle
{
public:
virtual void apply() = 0;
};

View File

@ -0,0 +1,11 @@
#include "LayerWrapper.h"
void LayerWrapper::applyStyles(SimpleElement &element)
{
}
void FolderLayerWrapper::addChild(LayerWrapper *child)
{
}
void FolderLayerWrapper::removeChild(LayerWrapper *child)
{
}

View File

@ -0,0 +1,37 @@
#pragma once
#include "GraphicElement.h"
#include "LayerStyle.h"
#include <QLine>
#include <QPoint>
#include <memory>
#include <vector>
using std::shared_ptr;
using std::vector;
class LayerWrapper
{
protected:
shared_ptr<LayerWrapper> parent;
QPointF referencePoint;
vector<LayerStyle> styles;
QPainterPath cache;
public:
void applyStyles(SimpleElement &element); // invoke by manager, then invoke parent's applyStyles
// todo: provide atomic operations for Events
};
class FolderLayerWrapper : public LayerWrapper
{
private:
vector<shared_ptr<LayerWrapper>> children;
public:
void addChild(LayerWrapper *child);
void removeChild(LayerWrapper *child);
};
class LeafLayerWrapper : public LayerWrapper
{
private:
shared_ptr<SimpleElement> wrappedElement;
};