parent
2f1e1a0e53
commit
2d44fd4d9f
|
@ -4,20 +4,27 @@
|
|||
#include <QJsonObject>
|
||||
#include <QPainterPath>
|
||||
#include <string>
|
||||
|
||||
#include "../Renderer/Painting/ElementStyle.h"
|
||||
|
||||
class LayerWrapper;
|
||||
class LeafLayerWrapper;
|
||||
class FolderLayerWrapper;
|
||||
class ComposedPainterPath;
|
||||
|
||||
class GraphicElement
|
||||
{
|
||||
public:
|
||||
QString name = "";
|
||||
// TODO: 改为BitmapPath
|
||||
virtual QPainterPath getPaintObject() const = 0;
|
||||
};
|
||||
|
||||
class SimpleElement : public GraphicElement
|
||||
{
|
||||
private:
|
||||
QJsonObject jsonSource;
|
||||
// TODO: 改为ComposedPainterPath
|
||||
QPainterPath painterPath;
|
||||
void loadSvgFile(const QString& filePath);
|
||||
|
||||
|
@ -26,6 +33,7 @@ class SimpleElement : public GraphicElement
|
|||
~SimpleElement() = default;
|
||||
QPainterPath getPaintObject() const override;
|
||||
};
|
||||
|
||||
class GroupElement : public GraphicElement
|
||||
{
|
||||
public:
|
||||
|
@ -38,3 +46,45 @@ class GroupElement : public GraphicElement
|
|||
QPainterPath getPaintObject() const override;
|
||||
void setSourceLayer(FolderLayerWrapper* sourceLayer);
|
||||
};
|
||||
|
||||
//******************************** BitmapPath ********************************//
|
||||
|
||||
class BitmapPath
|
||||
{
|
||||
protected:
|
||||
QRectF boundingRect;
|
||||
QImage stylesAppliedCache;
|
||||
void applyTransformation(QTransform &transformation);
|
||||
|
||||
public:
|
||||
/**
|
||||
* 用painter的引用将它的QImage画到画布上
|
||||
*/
|
||||
virtual void paint(QPainter* painter) const = 0;
|
||||
virtual QImage getStylesAppliedCache() const = 0;
|
||||
};
|
||||
|
||||
class FolderBitmapPath : public BitmapPath
|
||||
{
|
||||
public:
|
||||
const vector<BitmapPath*> children;
|
||||
virtual QImage getStylesAppliedCache() const override;
|
||||
};
|
||||
|
||||
/**
|
||||
* 当获取cache的时候应该调用Render的接口
|
||||
*/
|
||||
class ComposedPainterPath : public BitmapPath
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* 因为ElementStyle应该被应用至整个叶子图层节点,所以它应该只用zealed来确定某些Style是否应该被作用于该Path
|
||||
*/
|
||||
struct SinglePath {
|
||||
shared_ptr<QPainterPath> path;
|
||||
bool zealed;
|
||||
};
|
||||
|
||||
const vector<SinglePath> paths;
|
||||
virtual QImage getStylesAppliedCache() const override;
|
||||
};
|
|
@ -25,7 +25,8 @@ class LayerWrapper
|
|||
protected:
|
||||
shared_ptr<LayerWrapper> parent;
|
||||
QPointF referencePoint;
|
||||
vector<LayerStyle> styles;
|
||||
// vector<LayerStyle> styles;
|
||||
// TODO: 将cache移到子类,对Leaf用ComposedPainterPath,对Folder用FolderBitmapPath
|
||||
QPainterPath cache;
|
||||
|
||||
public:
|
||||
|
@ -38,10 +39,12 @@ class LayerWrapper
|
|||
double rotation = 0;
|
||||
bool flipHorizontally = 0;
|
||||
bool flipVertically = 0;
|
||||
// TODO: 将QPainterPath改为BitmapPath
|
||||
void apply(QPainterPath &cache) const;
|
||||
} property;
|
||||
void setParent(LayerWrapper *newParent);
|
||||
virtual void refresh();
|
||||
// TODO: 将QPainterPath改为BitmapPath/QImage,或者直接将其删除,绘制时直接使用BitmapPath的paint方法
|
||||
QPainterPath getCache();
|
||||
LayerWrapper *getParent() const; // invoke by manager, then invoke parent's applyStyles
|
||||
LayerWrapper(QJsonObject json, LayerWrapper *parent);
|
||||
|
@ -71,6 +74,7 @@ class LeafLayerWrapper : public LayerWrapper
|
|||
{
|
||||
public:
|
||||
GraphicElement *wrappedElement;
|
||||
const vector<Renderer::ElementStyle> styles;
|
||||
|
||||
public:
|
||||
void refresh() override;
|
||||
|
|
|
@ -21,6 +21,7 @@ int main(int argc, char* argv[])
|
|||
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||
QApplication a(argc, argv);
|
||||
FramelessHelper::Core::setApplicationOSThemeAware();
|
||||
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
|
||||
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
|
||||
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
|
||||
MainWindow w;
|
||||
|
|
Loading…
Reference in New Issue