refactor doric panel; add blend method

This commit is contained in:
王劲鹏 2021-02-19 19:01:31 +08:00 committed by osborn
parent 7ced952a57
commit ea0b87df24
11 changed files with 81 additions and 28 deletions

View File

@ -1,7 +1,7 @@
#include "DoricPanel.h" #include "DoricPanel.h"
#include "shader/DoricRootNode.h" #include "shader/DoricRootNode.h"
DoricPanel::DoricPanel() {} DoricPanel::DoricPanel(QQuickItem *quickItem) { mQuickItem = quickItem; }
void DoricPanel::config(QString script, QString alias, QString extra) { void DoricPanel::config(QString script, QString alias, QString extra) {
DoricContext *context = DoricContext::create(script, alias, extra); DoricContext *context = DoricContext::create(script, alias, extra);
@ -10,6 +10,6 @@ void DoricPanel::config(QString script, QString alias, QString extra) {
void DoricPanel::config(DoricContext *context) { void DoricPanel::config(DoricContext *context) {
this->mContext = context; this->mContext = context;
this->mContext->getRootNode()->setRootView(this); this->mContext->getRootNode()->setRootView(mQuickItem);
this->mContext->build(width(), height()); this->mContext->build(mQuickItem->width(), mQuickItem->height());
} }

View File

@ -5,14 +5,16 @@
#include "DoricContext.h" #include "DoricContext.h"
class DoricPanel : public QQuickItem { class DoricPanel {
private: private:
DoricContext *mContext; DoricContext *mContext;
int renderedWidth = -1; int renderedWidth = -1;
int renderedHeight = -1; int renderedHeight = -1;
QQuickItem *mQuickItem;
public: public:
DoricPanel(); DoricPanel(QQuickItem *quickItem);
void config(QString script, QString alias, QString extra); void config(QString script, QString alias, QString extra);

View File

@ -21,23 +21,18 @@ void DoricDemoBridge::navigate(QVariant route) {
view->setHeight(800); view->setHeight(800);
} }
DoricPanel *panel = new DoricPanel(); {
panel->setParentItem(view->rootObject()); QQmlComponent component(view->engine());
panel->setWidth(450); const QUrl url(QStringLiteral("qrc:/doric/qml/panel.qml"));
panel->setHeight(800); component.loadUrl(url);
QQuickItem *quickItem = qobject_cast<QQuickItem *>(component.create());
DoricPanel *panel = new DoricPanel(quickItem);
quickItem->setWidth(450);
quickItem->setHeight(800);
quickItem->setParentItem(view->rootObject());
panel->config(script, name, NULL); panel->config(script, name, NULL);
QQmlEngine *engine = view->engine();
QQmlComponent component(engine);
const QUrl empty(QStringLiteral("qrc:/doric/qml/panel.qml"));
component.loadUrl(empty);
QQuickItem *childItem = qobject_cast<QQuickItem *>(component.create());
if (childItem == nullptr) {
qCritical() << component.errorString();
return;
} }
childItem->setParentItem(view->rootObject());
view->show(); view->show();
break; break;

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.14.0, 2021-02-19T15:04:39. --> <!-- Written by QtCreator 4.14.0, 2021-02-19T18:27:52. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@ -1,8 +1,5 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.5 import QtQuick.Controls 2.5
Rectangle { StackView {
width: 100
height: 100
color: 'red'
} }

View File

@ -1 +1,19 @@
#include "DoricGroupNode.h" #include "DoricGroupNode.h"
void DoricGroupNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (name == "children") {
mChildViewIds.clear();
if (prop.isArray()) {
qDebug() << prop.toString();
}
} else {
DoricSuperNode::blend(view, name, prop);
}
}
void DoricGroupNode::blend(QJSValue jsValue) {
DoricViewNode::blend(jsValue);
configChildNode();
}
void DoricGroupNode::configChildNode() {}

View File

@ -6,6 +6,17 @@
class DoricGroupNode : public DoricSuperNode { class DoricGroupNode : public DoricSuperNode {
public: public:
using DoricSuperNode::DoricSuperNode; using DoricSuperNode::DoricSuperNode;
virtual void blend(QQuickItem *view, QString name, QJSValue prop) override;
virtual void blend(QJSValue jsValue) override;
protected:
QList<DoricViewNode *> mChildNodes;
QList<QString> mChildViewIds;
void configChildNode();
}; };
#endif // DORICGROUPNODE_H #endif // DORICGROUPNODE_H

View File

@ -1 +1,11 @@
#include "DoricSuperNode.h" #include "DoricSuperNode.h"
void DoricSuperNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (name == "subviews") {
if (prop.isArray()) {
qDebug() << prop.toString();
}
} else {
DoricViewNode::blend(view, name, prop);
}
}

View File

@ -6,6 +6,8 @@
class DoricSuperNode : public DoricViewNode { class DoricSuperNode : public DoricViewNode {
protected: protected:
virtual void blend(QQuickItem *view, QString name, QJSValue prop) override;
void blendSubLayoutConfig(DoricViewNode *viewNode); void blendSubLayoutConfig(DoricViewNode *viewNode);
public: public:

View File

@ -1,6 +1,8 @@
#include "DoricViewNode.h" #include <QJSValueIterator>
#include "../utils/DoricUtils.h" #include "../utils/DoricUtils.h"
#include "DoricSuperNode.h" #include "DoricSuperNode.h"
#include "DoricViewNode.h"
void DoricViewNode::blendLayoutConfig() {} void DoricViewNode::blendLayoutConfig() {}
@ -19,4 +21,18 @@ QString DoricViewNode::getId() { return mId; }
void DoricViewNode::setId(QString id) { mId = id; } void DoricViewNode::setId(QString id) { mId = id; }
void DoricViewNode::blend(QJSValue jsValue) { qDebug() << jsValue.toString(); } void DoricViewNode::blend(QJSValue jsValue) {
QJSValueIterator it(jsValue);
while (it.hasNext()) {
it.next();
qDebug() << it.name() << ": " << it.value().toString();
blend(mView, it.name(), it.value());
}
}
void DoricViewNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (name == "width") {
} else if (name == "height") {
}
}

View File

@ -33,6 +33,8 @@ public:
void setId(QString id); void setId(QString id);
void blend(QJSValue jsValue); virtual void blend(QJSValue jsValue);
virtual void blend(QQuickItem *view, QString name, QJSValue prop);
}; };
#endif // DORICVIEWNODE_H #endif // DORICVIEWNODE_H