merge
commit
096c3ac848
|
@ -104,6 +104,7 @@
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\Editor\RightBar\EditorSettingWidget.cpp" />
|
||||||
<ClCompile Include="src\Editor\EditorWidgetComponent\ColorPicker.cpp" />
|
<ClCompile Include="src\Editor\EditorWidgetComponent\ColorPicker.cpp" />
|
||||||
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp" />
|
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.cpp" />
|
||||||
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerStyleDialog.cpp" />
|
<ClCompile Include="src\Editor\EditorWidgetComponent\LayerStyleDialog.cpp" />
|
||||||
|
@ -154,6 +155,7 @@
|
||||||
<ClCompile Include="src\Renderer\VirtualTextureManager.cpp" />
|
<ClCompile Include="src\Renderer\VirtualTextureManager.cpp" />
|
||||||
<ClCompile Include="src\SvgParser.cpp" />
|
<ClCompile Include="src\SvgParser.cpp" />
|
||||||
<ClCompile Include="src\Editor\EditorWidgetComponent\StrokeStyleWidget.cpp" />
|
<ClCompile Include="src\Editor\EditorWidgetComponent\StrokeStyleWidget.cpp" />
|
||||||
|
<QtUic Include="EditorSettingWidget.ui" />
|
||||||
<QtUic Include="EditorWidget.ui" />
|
<QtUic Include="EditorWidget.ui" />
|
||||||
<QtUic Include="EditorWidgetItem.ui" />
|
<QtUic Include="EditorWidgetItem.ui" />
|
||||||
<QtUic Include="MainWindow.ui" />
|
<QtUic Include="MainWindow.ui" />
|
||||||
|
@ -197,6 +199,7 @@
|
||||||
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h" />
|
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.h" />
|
||||||
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerStyleDialog.h" />
|
<QtMoc Include="src\Editor\EditorWidgetComponent\LayerStyleDialog.h" />
|
||||||
<QtMoc Include="src\Editor\EditorWidgetComponent\ColorPicker.h" />
|
<QtMoc Include="src\Editor\EditorWidgetComponent\ColorPicker.h" />
|
||||||
|
<QtMoc Include="src\Editor\RightBar\EditorSettingWidget.h" />
|
||||||
<ClInclude Include="src\Editor\util\EncodeUtil.hpp" />
|
<ClInclude Include="src\Editor\util\EncodeUtil.hpp" />
|
||||||
<ClInclude Include="src\Editor\util\JsonUtil.hpp" />
|
<ClInclude Include="src\Editor\util\JsonUtil.hpp" />
|
||||||
<ClInclude Include="src\Editor\ElementManager.h" />
|
<ClInclude Include="src\Editor\ElementManager.h" />
|
||||||
|
|
|
@ -82,6 +82,9 @@
|
||||||
<QtUic Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.ui">
|
<QtUic Include="src\Editor\EditorWidgetComponent\LayerCreateWidget.ui">
|
||||||
<Filter>Form Files</Filter>
|
<Filter>Form Files</Filter>
|
||||||
</QtUic>
|
</QtUic>
|
||||||
|
<QtUic Include="EditorSettingWidget.ui">
|
||||||
|
<Filter>Form Files</Filter>
|
||||||
|
</QtUic>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\Editor\EditorWidgetItem.cpp">
|
<ClCompile Include="src\Editor\EditorWidgetItem.cpp">
|
||||||
|
@ -234,6 +237,9 @@
|
||||||
<ClCompile Include="src\Editor\EditorWidgetComponent\ColorPicker.cpp">
|
<ClCompile Include="src\Editor\EditorWidgetComponent\ColorPicker.cpp">
|
||||||
<Filter>Source Files\Editor</Filter>
|
<Filter>Source Files\Editor</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Editor\RightBar\EditorSettingWidget.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtMoc Include="src\Renderer\RendererGLWidget.h">
|
<QtMoc Include="src\Renderer\RendererGLWidget.h">
|
||||||
|
@ -281,6 +287,9 @@
|
||||||
<QtMoc Include="src\Editor\EditorWidgetComponent\ColorPicker.h">
|
<QtMoc Include="src\Editor\EditorWidgetComponent\ColorPicker.h">
|
||||||
<Filter>Header Files\Editor</Filter>
|
<Filter>Header Files\Editor</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
<QtMoc Include="src\Editor\RightBar\EditorSettingWidget.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</QtMoc>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\data.json" />
|
<None Include="..\data.json" />
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EditorSettingWidget</class>
|
||||||
|
<widget class="QWidget" name="EditorSettingWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="backgroundColorButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>设置背景颜色</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EditorSettingWidget</class>
|
||||||
|
<widget class="QWidget" name="EditorSettingWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item alignment="Qt::AlignHCenter">
|
||||||
|
<widget class="QPushButton" name="backgroundColorButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>设置背景颜色</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item alignment="Qt::AlignHCenter">
|
||||||
|
<widget class="QPushButton" name="renameButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>设置项目名称</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -147,7 +147,7 @@
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="InfoDisplayWidget" name="LayerDisplay">
|
<widget class="InfoDisplayWidget" name="LayerDisplay">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
@ -159,6 +159,11 @@
|
||||||
<string>图元池</string>
|
<string>图元池</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="EditorSettingWidget" name="EditorSetting">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>设置</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -229,6 +234,12 @@
|
||||||
<header>ElementPoolWidget.h</header>
|
<header>ElementPoolWidget.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>EditorSettingWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">EditorSettingWidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|
|
@ -4,6 +4,11 @@ layout(local_size_x = 8, local_size_y = 8) in;
|
||||||
|
|
||||||
layout(location = 0) uniform ivec2 pixelOffset;
|
layout(location = 0) uniform ivec2 pixelOffset;
|
||||||
|
|
||||||
|
layout(std140, binding = 1) uniform ubo
|
||||||
|
{
|
||||||
|
vec3 backgroundColor;
|
||||||
|
};
|
||||||
|
|
||||||
layout(rgba8, binding = 0) uniform image2D gBaseColor;
|
layout(rgba8, binding = 0) uniform image2D gBaseColor;
|
||||||
layout(rg8, binding = 1) uniform image2D gMetallicRoughness;
|
layout(rg8, binding = 1) uniform image2D gMetallicRoughness;
|
||||||
|
|
||||||
|
@ -1353,7 +1358,7 @@ void main()
|
||||||
vec3 debugBVH = vec3(0);
|
vec3 debugBVH = vec3(0);
|
||||||
// bool debugHit = false;
|
// bool debugHit = false;
|
||||||
//vec4 color = vec4(0.76, 0.33, 0.15, -1);
|
//vec4 color = vec4(0.76, 0.33, 0.15, -1);
|
||||||
vec4 color = vec4(1,1,1, -1);
|
vec4 color = vec4(backgroundColor, -1);
|
||||||
vec2 metallicRoughness = vec2(0, 0.8);
|
vec2 metallicRoughness = vec2(0, 0.8);
|
||||||
stack.top = 0;
|
stack.top = 0;
|
||||||
uint index = 0, visitTime = 0;
|
uint index = 0, visitTime = 0;
|
||||||
|
|
|
@ -47,3 +47,11 @@ EditorWidget::EditorWidget(QWidget* parent) : QWidget(parent)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorWidget::renameTab(QWidget* target, QString name)
|
||||||
|
{
|
||||||
|
int index = this->tabWidget->indexOf(target);
|
||||||
|
if (index != -1)
|
||||||
|
{
|
||||||
|
this->tabWidget->setTabText(index, name);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,6 @@ private:
|
||||||
public:
|
public:
|
||||||
EditorWidget(QWidget* parent = nullptr);
|
EditorWidget(QWidget* parent = nullptr);
|
||||||
~EditorWidget()=default;
|
~EditorWidget()=default;
|
||||||
|
void renameTab(QWidget* target, QString name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#include "EditorWidgetItem.h"
|
#include "EditorWidgetItem.h"
|
||||||
|
#include "EditorWidget.h"
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent)
|
EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
QImage x;
|
QImage x;
|
||||||
|
this->parent = parent;
|
||||||
displayLayer = nullptr;
|
displayLayer = nullptr;
|
||||||
displayElement = nullptr;
|
displayElement = nullptr;
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
@ -12,9 +15,12 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p
|
||||||
this->filePath = filePath;
|
this->filePath = filePath;
|
||||||
layerInfoDisplayWidget = dynamic_cast<InfoDisplayWidget *>(tabWidget->widget(0));
|
layerInfoDisplayWidget = dynamic_cast<InfoDisplayWidget *>(tabWidget->widget(0));
|
||||||
elementInfoDisplayWidget = dynamic_cast<ElementPoolWidget *>(tabWidget->widget(1));
|
elementInfoDisplayWidget = dynamic_cast<ElementPoolWidget *>(tabWidget->widget(1));
|
||||||
|
editorSettingWidget = dynamic_cast<EditorSettingWidget*>(tabWidget->widget(2));
|
||||||
elementInfoDisplayWidget->enableEdit();
|
elementInfoDisplayWidget->enableEdit();
|
||||||
qDebug() << layerInfoDisplayWidget;
|
qDebug() << layerInfoDisplayWidget;
|
||||||
qDebug() << elementInfoDisplayWidget;
|
qDebug() << elementInfoDisplayWidget;
|
||||||
|
connect(editorSettingWidget, &EditorSettingWidget::backgroundColorChanged, this, &EditorWidgetItem::handleBackgroundColorChange);
|
||||||
|
connect(editorSettingWidget, &EditorSettingWidget::projectNameChanged, this, &EditorWidgetItem::handleProjectNameChange);
|
||||||
connect(previewWindow, &PreviewWindow::refreshElementPreviewByIndex, elementInfoDisplayWidget, &ElementPoolWidget::refreshPictureByIndex);
|
connect(previewWindow, &PreviewWindow::refreshElementPreviewByIndex, elementInfoDisplayWidget, &ElementPoolWidget::refreshPictureByIndex);
|
||||||
connect(previewWindow, &PreviewWindow::layerInfoChanged, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh);
|
connect(previewWindow, &PreviewWindow::layerInfoChanged, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh);
|
||||||
connect(treeWidget, &LayerTreeWidget::displayLayerChange, previewWindow, &PreviewWindow::currentLayerChanged);
|
connect(treeWidget, &LayerTreeWidget::displayLayerChange, previewWindow, &PreviewWindow::currentLayerChanged);
|
||||||
|
@ -53,6 +59,15 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p
|
||||||
treeWidget->refresh();
|
treeWidget->refresh();
|
||||||
treeWidget->addTopLevelItem(treeWidget->root->getQTreeItem());
|
treeWidget->addTopLevelItem(treeWidget->root->getQTreeItem());
|
||||||
}
|
}
|
||||||
|
this->backgroundColor = source.value("background-color").toVariant().value<QColor>();
|
||||||
|
this->projectName = source.value("project-name").toString();
|
||||||
|
qDebug() << this->backgroundColor;
|
||||||
|
qDebug() << this->projectName;
|
||||||
|
QTimer::singleShot(300, this, [this]() {
|
||||||
|
handleBackgroundColorChange(this->backgroundColor);
|
||||||
|
handleProjectNameChange(this->projectName);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorWidgetItem::~EditorWidgetItem()
|
EditorWidgetItem::~EditorWidgetItem()
|
||||||
|
@ -100,9 +115,28 @@ void EditorWidgetItem::saveImpl(QString filePath) const
|
||||||
json.insert("height", 1080);
|
json.insert("height", 1080);
|
||||||
json.insert("root-layer", source1.value("root-layer"));
|
json.insert("root-layer", source1.value("root-layer"));
|
||||||
json.insert("elements", source2.value("elements"));
|
json.insert("elements", source2.value("elements"));
|
||||||
|
json.insert("project-name", this->projectName);
|
||||||
|
json.insert("background-color", QJsonValue::fromVariant(QVariant::fromValue(this->backgroundColor)));
|
||||||
QJsonDocument doc(json);
|
QJsonDocument doc(json);
|
||||||
QFile file(filePath);
|
QFile file(filePath);
|
||||||
file.open(QIODevice::WriteOnly);
|
file.open(QIODevice::WriteOnly);
|
||||||
file.write(doc.toJson());
|
file.write(doc.toJson());
|
||||||
file.close();
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWidgetItem::handleBackgroundColorChange(QColor color)
|
||||||
|
{
|
||||||
|
this->backgroundColor = color;
|
||||||
|
previewWindow->setBackgroundColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorWidgetItem::handleProjectNameChange(QString name)
|
||||||
|
{
|
||||||
|
this->projectName = name;
|
||||||
|
auto parent = dynamic_cast<EditorWidget*>(this->parent);
|
||||||
|
qDebug() << name << " " << parent<<" "<<this;
|
||||||
|
if (parent != nullptr)
|
||||||
|
{
|
||||||
|
parent->renameTab(this, name);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
#include "LayerManager.h"
|
#include "LayerManager.h"
|
||||||
#include "LayerTreeWidget.h"
|
#include "LayerTreeWidget.h"
|
||||||
#include "PreviewWindow.h"
|
#include "PreviewWindow.h"
|
||||||
|
#include "EditorSettingWidget.h"
|
||||||
#include "ui_EditorWidgetItem.h"
|
#include "ui_EditorWidgetItem.h"
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QTreeWidget>
|
#include <QTreeWidget>
|
||||||
|
@ -26,11 +27,17 @@ class EditorWidgetItem : public QWidget
|
||||||
QTabWidget *tabWidget;
|
QTabWidget *tabWidget;
|
||||||
InfoDisplayWidget* layerInfoDisplayWidget;
|
InfoDisplayWidget* layerInfoDisplayWidget;
|
||||||
ElementPoolWidget* elementInfoDisplayWidget;
|
ElementPoolWidget* elementInfoDisplayWidget;
|
||||||
|
EditorSettingWidget* editorSettingWidget;
|
||||||
// QT DATA PART
|
// QT DATA PART
|
||||||
LayerWrapper *displayLayer;
|
LayerWrapper *displayLayer;
|
||||||
GraphicElement *displayElement;
|
GraphicElement *displayElement;
|
||||||
QString filePath;
|
QWidget* parent;
|
||||||
void saveImpl(QString filePath)const;
|
void saveImpl(QString filePath)const;
|
||||||
|
public:
|
||||||
|
// PROJECT INFO
|
||||||
|
QString filePath;
|
||||||
|
QString projectName;
|
||||||
|
QColor backgroundColor;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EditorWidgetItem(QString filePath, QWidget *parent = nullptr);
|
EditorWidgetItem(QString filePath, QWidget *parent = nullptr);
|
||||||
|
@ -38,6 +45,8 @@ class EditorWidgetItem : public QWidget
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
void save() const;
|
void save() const;
|
||||||
void saveAs(QString filePath)const;
|
void saveAs(QString filePath)const;
|
||||||
|
void handleBackgroundColorChange(QColor color);
|
||||||
|
void handleProjectNameChange(QString name);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onLayerChange(LayerWrapper *layer);
|
void onLayerChange(LayerWrapper *layer);
|
||||||
|
|
|
@ -92,7 +92,7 @@ QJsonObject GroupElement::toJson() const
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleElement::paint(QPainter* painter, QTransform transform, const vector<std::shared_ptr<LayerStyle>> &styles)
|
void SimpleElement::paint(QPainter* painter, QTransform transform, const vector<std::shared_ptr<LayerStyle>>& styles)
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->setTransform(transform);
|
painter->setTransform(transform);
|
||||||
|
@ -102,12 +102,15 @@ void SimpleElement::paint(QPainter* painter, QTransform transform, const vector<
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Renderer::ElementStyleStrokeDemo demo(2);
|
|
||||||
std::shared_ptr<Renderer::ElementStyle> style;
|
std::shared_ptr<Renderer::ElementStyle> style;
|
||||||
style = styles[0];
|
style = styles[0];
|
||||||
QVector2D scale(transform.m11(), transform.m22());
|
|
||||||
scale /= transform.m33();
|
double angle = atan(transform.m12() / transform.m11());
|
||||||
double maxScale = std::max(scale.x(), scale.y());
|
double maxScale;
|
||||||
|
if (fabs(cos(angle))>1e-5)
|
||||||
|
maxScale = std::max(fabs(transform.m11() / cos(angle)), fabs(transform.m22() / cos(angle)));
|
||||||
|
else
|
||||||
|
maxScale = std::max(fabs(transform.m12() / sin(angle)), fabs(transform.m21() / sin(angle)));
|
||||||
double pixelRatio = maxScale * QGuiApplication::primaryScreen()->devicePixelRatio();
|
double pixelRatio = maxScale * QGuiApplication::primaryScreen()->devicePixelRatio();
|
||||||
auto [img, mov] = Renderer::ElementRenderer::instance()->drawElement(painterPath, *style, pixelRatio);
|
auto [img, mov] = Renderer::ElementRenderer::instance()->drawElement(painterPath, *style, pixelRatio);
|
||||||
transform.translate(mov.x(), mov.y());
|
transform.translate(mov.x(), mov.y());
|
||||||
|
@ -117,7 +120,7 @@ void SimpleElement::paint(QPainter* painter, QTransform transform, const vector<
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupElement::paint(QPainter* painter, QTransform transform, const vector<std::shared_ptr<LayerStyle>> &styles)
|
void GroupElement::paint(QPainter* painter, QTransform transform, const vector<std::shared_ptr<LayerStyle>>& styles)
|
||||||
{
|
{
|
||||||
sourceLayer->paint(painter, transform);
|
sourceLayer->paint(painter, transform);
|
||||||
}
|
}
|
||||||
|
@ -125,7 +128,7 @@ void GroupElement::paint(QPainter* painter, QTransform transform, const vector<s
|
||||||
|
|
||||||
QPixmap SimpleElement::getPreview(QSize size)
|
QPixmap SimpleElement::getPreview(QSize size)
|
||||||
{
|
{
|
||||||
QPixmap result(size + QSize(5,5));
|
QPixmap result(size + QSize(5, 5));
|
||||||
QPainter painter(&result);
|
QPainter painter(&result);
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
painter.setRenderHint(QPainter::Antialiasing);
|
||||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
|
@ -143,7 +146,7 @@ QPixmap GroupElement::getPreview(QSize size)
|
||||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
sourceLayer->paint(&painter, QTransform(), true);
|
sourceLayer->paint(&painter, QTransform(), true);
|
||||||
painter.end();
|
painter.end();
|
||||||
QRect rect (cache.getBoundingRect().toRect());
|
QRect rect(cache.getBoundingRect().toRect());
|
||||||
rect.setTopLeft(rect.topLeft() - QPoint(5, 5));
|
rect.setTopLeft(rect.topLeft() - QPoint(5, 5));
|
||||||
rect.setBottomRight(rect.bottomRight() + QPoint(5, 5));
|
rect.setBottomRight(rect.bottomRight() + QPoint(5, 5));
|
||||||
result = result.copy(rect);
|
result = result.copy(rect);
|
||||||
|
|
|
@ -13,6 +13,7 @@ PreviewWindow::PreviewWindow(QWidget *parent) : QOpenGLWidget(parent)
|
||||||
painter->setRenderHint(QPainter::HighQualityAntialiasing);
|
painter->setRenderHint(QPainter::HighQualityAntialiasing);
|
||||||
layerManager = nullptr;
|
layerManager = nullptr;
|
||||||
currentLayer = nullptr;
|
currentLayer = nullptr;
|
||||||
|
backgroundColor = QColor(255, 255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreviewWindow::initialize(LayerManager *layerManager,QSize windowSize)
|
void PreviewWindow::initialize(LayerManager *layerManager,QSize windowSize)
|
||||||
|
@ -44,7 +45,7 @@ void PreviewWindow::initializeGL()
|
||||||
|
|
||||||
void PreviewWindow::paintGL()
|
void PreviewWindow::paintGL()
|
||||||
{
|
{
|
||||||
glClearColor(1.0, 1.0, 1.0, 1.0);
|
glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
painter->begin(this);
|
painter->begin(this);
|
||||||
painter->setRenderHint(QPainter::Antialiasing);
|
painter->setRenderHint(QPainter::Antialiasing);
|
||||||
|
@ -112,4 +113,10 @@ void PreviewWindow::mouseMoveEvent(QMouseEvent* event)
|
||||||
void PreviewWindow::mouseReleaseEvent(QMouseEvent* event)
|
void PreviewWindow::mouseReleaseEvent(QMouseEvent* event)
|
||||||
{
|
{
|
||||||
emit layerInfoChanged();
|
emit layerInfoChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreviewWindow::setBackgroundColor(QColor color)
|
||||||
|
{
|
||||||
|
this->backgroundColor = color;
|
||||||
|
this->repaint();
|
||||||
}
|
}
|
|
@ -23,6 +23,7 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions
|
||||||
QRectF viewportRect;
|
QRectF viewportRect;
|
||||||
LayerWrapper* currentLayer;
|
LayerWrapper* currentLayer;
|
||||||
QPointF m_lastPos;
|
QPointF m_lastPos;
|
||||||
|
QColor backgroundColor;
|
||||||
void mousePressEvent(QMouseEvent* event) override;
|
void mousePressEvent(QMouseEvent* event) override;
|
||||||
void mouseMoveEvent(QMouseEvent* event) override;
|
void mouseMoveEvent(QMouseEvent* event) override;
|
||||||
void mouseReleaseEvent(QMouseEvent* event) override;
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||||
|
@ -35,6 +36,7 @@ class PreviewWindow : public QOpenGLWidget, protected QOpenGLFunctions
|
||||||
void paintGL() override;
|
void paintGL() override;
|
||||||
void resizeGL(int w, int h) override;
|
void resizeGL(int w, int h) override;
|
||||||
Renderer::ElementRenderer* const getRenderer()const;
|
Renderer::ElementRenderer* const getRenderer()const;
|
||||||
|
void setBackgroundColor(QColor color);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void currentLayerChanged(LayerWrapper*);
|
void currentLayerChanged(LayerWrapper*);
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include "EditorSettingWidget.h"
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QColorDialog>
|
||||||
|
#include <QInputDialog>
|
||||||
|
|
||||||
|
EditorSettingWidget::EditorSettingWidget(QWidget* parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
ui.setupUi(this);
|
||||||
|
connect(ui.backgroundColorButton, &QPushButton::clicked, this, [this]() {
|
||||||
|
QColor color = QColorDialog::getColor(Qt::white, this, QString::fromLocal8Bit("选择背景颜色"));
|
||||||
|
if (color.isValid())
|
||||||
|
{
|
||||||
|
emit backgroundColorChanged(color);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(ui.renameButton, &QPushButton::clicked, this, [this]() {
|
||||||
|
QString name = QInputDialog::getText(this, QString::fromLocal8Bit("重命名"), QString::fromLocal8Bit("请输入新的项目名称"));
|
||||||
|
emit projectNameChanged(name);
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#pragma once
|
||||||
|
#include <qwidget.h>
|
||||||
|
#include "ui_EditorSettingWidget.h"
|
||||||
|
|
||||||
|
class EditorSettingWidget :
|
||||||
|
public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::EditorSettingWidget ui;
|
||||||
|
|
||||||
|
public:
|
||||||
|
EditorSettingWidget(QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void backgroundColorChanged(QColor);
|
||||||
|
void projectNameChanged(QString);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -273,7 +273,8 @@ GLuint Renderer::Model::loadPainting(std::string path)
|
||||||
}
|
}
|
||||||
else if (path == "1.json")
|
else if (path == "1.json")
|
||||||
{
|
{
|
||||||
float widths[] = { 0.43, 0.43 * 0.25 / 0.15, 0.43 * 0.25 / 0.15 };
|
painting.backgroundColor = QColor(196, 81, 35);
|
||||||
|
float widths[] = { 0.22, 0.22 * 0.25 / 0.15, 0.22 * 0.25 / 0.15 };
|
||||||
QPainterPath painterPaths[6];
|
QPainterPath painterPaths[6];
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
if (!SvgFileLoader().loadSvgFile(QString(std::format("../svg/{}.svg", i + 1).c_str()), painterPaths[i]))
|
if (!SvgFileLoader().loadSvgFile(QString(std::format("../svg/{}.svg", i + 1).c_str()), painterPaths[i]))
|
||||||
|
|
|
@ -9,7 +9,7 @@ using namespace Renderer;
|
||||||
|
|
||||||
constexpr int kMaxLineCount = 20;
|
constexpr int kMaxLineCount = 20;
|
||||||
|
|
||||||
Painting::Painting()
|
Painting::Painting(QColor backgroundColor) : backgroundColor(backgroundColor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,18 +171,21 @@ void Painting::generateBuffers(QOpenGLFunctions_4_5_Core* glFunc)
|
||||||
//std::cout << std::format("{} {} {} {}\n", contourBuffer->bvhOffset, stylePool[i.first->style], contourBuffer->pointsOffset, contourBuffer->linesOffset);
|
//std::cout << std::format("{} {} {} {}\n", contourBuffer->bvhOffset, stylePool[i.first->style], contourBuffer->pointsOffset, contourBuffer->linesOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
glFunc->glCreateBuffers(5, buffers.data());
|
glFunc->glCreateBuffers(6, buffers.data());
|
||||||
GLuint& bvhSSBO = buffers[0];
|
GLuint& bvhSSBO = buffers[0];
|
||||||
GLuint& bvhBoundSSBO = buffers[1];
|
GLuint& bvhBoundSSBO = buffers[1];
|
||||||
GLuint& elementOffsetSSBO = buffers[2];
|
GLuint& elementOffsetSSBO = buffers[2];
|
||||||
GLuint& elementIndexSSBO = buffers[3];
|
GLuint& elementIndexSSBO = buffers[3];
|
||||||
GLuint& elementDataSSBO = buffers[4];
|
GLuint& elementDataSSBO = buffers[4];
|
||||||
|
GLuint& backgroundColorUBO = buffers[5];
|
||||||
|
|
||||||
glFunc->glNamedBufferData(buffers[0], bvhChildren.size() * sizeof(bvhChildren[0]), bvhChildren.data(), GL_STATIC_READ);
|
glFunc->glNamedBufferData(buffers[0], bvhChildren.size() * sizeof(bvhChildren[0]), bvhChildren.data(), GL_STATIC_READ);
|
||||||
glFunc->glNamedBufferData(buffers[1], bvhBounds.size() * sizeof(bvhBounds[0]), bvhBounds.data(), GL_STATIC_READ);
|
glFunc->glNamedBufferData(buffers[1], bvhBounds.size() * sizeof(bvhBounds[0]), bvhBounds.data(), GL_STATIC_READ);
|
||||||
glFunc->glNamedBufferData(buffers[2], elementOffsets.size() * sizeof(elementOffsets[0]), elementOffsets.data(), GL_STATIC_READ);
|
glFunc->glNamedBufferData(buffers[2], elementOffsets.size() * sizeof(elementOffsets[0]), elementOffsets.data(), GL_STATIC_READ);
|
||||||
glFunc->glNamedBufferData(buffers[3], elementIndex.size() * sizeof(elementIndex[0]), elementIndex.data(), GL_STATIC_READ);
|
glFunc->glNamedBufferData(buffers[3], elementIndex.size() * sizeof(elementIndex[0]), elementIndex.data(), GL_STATIC_READ);
|
||||||
glFunc->glNamedBufferData(buffers[4], elementData.size() * sizeof(elementData[0]), elementData.data(), GL_STATIC_READ);
|
glFunc->glNamedBufferData(buffers[4], elementData.size() * sizeof(elementData[0]), elementData.data(), GL_STATIC_READ);
|
||||||
|
glm::vec3 color(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF());
|
||||||
|
glFunc->glNamedBufferData(buffers[5], sizeof(glm::vec3), &color, GL_STATIC_READ);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint Renderer::Painting::getElementCount()
|
GLuint Renderer::Painting::getElementCount()
|
||||||
|
|
|
@ -64,9 +64,10 @@ namespace Renderer
|
||||||
std::vector<GLuint> elementIndex;
|
std::vector<GLuint> elementIndex;
|
||||||
std::vector<GLfloat> elementData;
|
std::vector<GLfloat> elementData;
|
||||||
int paintingId = 0;
|
int paintingId = 0;
|
||||||
std::array<GLuint, 5> buffers;
|
std::array<GLuint, 6> buffers;
|
||||||
|
QColor backgroundColor;
|
||||||
|
|
||||||
Painting();
|
Painting(QColor backgroundColor = Qt::white);
|
||||||
void addElement(const Element& element, const ElementTransform& transform);
|
void addElement(const Element& element, const ElementTransform& transform);
|
||||||
void addElement(std::shared_ptr<Element> element, QVector4D bound, float rotation, int zIndex);
|
void addElement(std::shared_ptr<Element> element, QVector4D bound, float rotation, int zIndex);
|
||||||
void generateBuffers(QOpenGLFunctions_4_5_Core* glFunc);
|
void generateBuffers(QOpenGLFunctions_4_5_Core* glFunc);
|
||||||
|
|
|
@ -126,6 +126,7 @@ std::uint16_t Renderer::VirtualTextureManager::createVirtualTexture(Painting pai
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
glMain->BindBufferBase(GL_SHADER_STORAGE_BUFFER, i, painting.buffers[i]);
|
glMain->BindBufferBase(GL_SHADER_STORAGE_BUFFER, i, painting.buffers[i]);
|
||||||
|
glMain->BindBufferBase(GL_UNIFORM_BUFFER, 1, painting.buffers[5]);
|
||||||
|
|
||||||
for (auto level = levels - 1; level < levels; ++level)
|
for (auto level = levels - 1; level < levels; ++level)
|
||||||
{
|
{
|
||||||
|
@ -143,7 +144,7 @@ std::uint16_t Renderer::VirtualTextureManager::createVirtualTexture(Painting pai
|
||||||
GL_TRUE);
|
GL_TRUE);
|
||||||
|
|
||||||
program.bind();
|
program.bind();
|
||||||
glMain->Uniform2i(gl->GetUniformLocation(program.programId(), "pixelOffset"), static_cast<GLsizei>(pageSize) * i, static_cast<GLsizei>(pageSize) * j);
|
glMain->Uniform2i(0 /*pixelOffset*/, static_cast<GLsizei>(pageSize) * i, static_cast<GLsizei>(pageSize) * j);
|
||||||
glMain->BindImageTexture(0, baseColor, level, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
|
glMain->BindImageTexture(0, baseColor, level, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
|
||||||
glMain->BindImageTexture(1, metallicRoughness, level, GL_FALSE, 0, GL_READ_WRITE, GL_RG8);
|
glMain->BindImageTexture(1, metallicRoughness, level, GL_FALSE, 0, GL_READ_WRITE, GL_RG8);
|
||||||
glMain->DispatchCompute(pageSize / 8, pageSize / 8, 1);
|
glMain->DispatchCompute(pageSize / 8, pageSize / 8, 1);
|
||||||
|
@ -190,6 +191,7 @@ void Renderer::VirtualTextureManager::pageCommitmentById(const glm::u16vec2& pag
|
||||||
program.bind();
|
program.bind();
|
||||||
for (int i = 0; i < 5; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
gl->BindBufferBase(GL_SHADER_STORAGE_BUFFER, i, painting.buffers[i]);
|
gl->BindBufferBase(GL_SHADER_STORAGE_BUFFER, i, painting.buffers[i]);
|
||||||
|
glMain->BindBufferBase(GL_UNIFORM_BUFFER, 1, painting.buffers[5]);
|
||||||
gl->Uniform2i(gl->GetUniformLocation(program.programId(), "pixelOffset"), static_cast<GLsizei>(pageSize) * page.x, static_cast<GLsizei>(pageSize) * page.y);
|
gl->Uniform2i(gl->GetUniformLocation(program.programId(), "pixelOffset"), static_cast<GLsizei>(pageSize) * page.x, static_cast<GLsizei>(pageSize) * page.y);
|
||||||
gl->BindImageTexture(0, painting.baseColor, level, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
|
gl->BindImageTexture(0, painting.baseColor, level, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
|
||||||
gl->BindImageTexture(1, painting.metallicRoughness, level, GL_FALSE, 0, GL_READ_WRITE, GL_RG8);
|
gl->BindImageTexture(1, painting.metallicRoughness, level, GL_FALSE, 0, GL_READ_WRITE, GL_RG8);
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace Renderer
|
||||||
{
|
{
|
||||||
GLuint baseColor;
|
GLuint baseColor;
|
||||||
GLuint metallicRoughness;
|
GLuint metallicRoughness;
|
||||||
std::array<GLuint, 5> buffers;
|
std::array<GLuint, 6> buffers;
|
||||||
};
|
};
|
||||||
|
|
||||||
class VirtualTextureManager
|
class VirtualTextureManager
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <format>
|
#include <format>
|
||||||
#include "consoleapi2.h"
|
#include "consoleapi2.h"
|
||||||
|
#include <lib/qtmaterialstyle.h>
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
|
@ -50,6 +51,9 @@ int main(int argc, char* argv[])
|
||||||
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
Q_INIT_RESOURCE(resources);
|
Q_INIT_RESOURCE(resources);
|
||||||
|
QtMaterialTheme theme;
|
||||||
|
theme.setColor("primary1", QColor(0, 90, 158));
|
||||||
|
QtMaterialStyle::instance().setTheme(&theme);
|
||||||
//FramelessHelper::Core::setApplicationOSThemeAware();
|
//FramelessHelper::Core::setApplicationOSThemeAware();
|
||||||
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
|
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
|
||||||
//FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
|
//FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
|
||||||
|
|
Loading…
Reference in New Issue