为新的QImage渲染方式修改了头文件

修改了GraphicElement、LayerWrapper
dev-VirtualTexture
ArgonarioD 2023-02-07 15:57:59 +08:00
parent 2f1e1a0e53
commit 2d44fd4d9f
3 changed files with 65 additions and 10 deletions

View File

@ -4,37 +4,87 @@
#include <QJsonObject>
#include <QPainterPath>
#include <string>
#include "../Renderer/Painting/ElementStyle.h"
class LayerWrapper;
class LeafLayerWrapper;
class FolderLayerWrapper;
class ComposedPainterPath;
class GraphicElement
{
public:
QString name="";
public:
QString name = "";
// TODO: 改为BitmapPath
virtual QPainterPath getPaintObject() const = 0;
};
class SimpleElement : public GraphicElement
{
private:
private:
QJsonObject jsonSource;
// TODO: 改为ComposedPainterPath
QPainterPath painterPath;
void loadSvgFile(const QString& filePath);
public:
public:
SimpleElement(QJsonObject jsonSource);
~SimpleElement() = default;
QPainterPath getPaintObject() const override;
};
class GroupElement : public GraphicElement
{
public:
FolderLayerWrapper *sourceLayer;
public:
FolderLayerWrapper* sourceLayer;
public:
public:
GroupElement() = default;
GroupElement(FolderLayerWrapper *mSourceLayer);
GroupElement(FolderLayerWrapper* mSourceLayer);
~GroupElement() = default;
QPainterPath getPaintObject() const override;
void setSourceLayer(FolderLayerWrapper *sourceLayer);
void setSourceLayer(FolderLayerWrapper* sourceLayer);
};
//******************************** BitmapPath ********************************//
class BitmapPath
{
protected:
QRectF boundingRect;
QImage stylesAppliedCache;
void applyTransformation(QTransform &transformation);
public:
/**
* painterQImage
*/
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;
};
/**
* cacheRender
*/
class ComposedPainterPath : public BitmapPath
{
public:
/**
* ElementStylezealedStylePath
*/
struct SinglePath {
shared_ptr<QPainterPath> path;
bool zealed;
};
const vector<SinglePath> paths;
virtual QImage getStylesAppliedCache() const override;
};

View File

@ -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;

View File

@ -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;