From 692397be2e787709cd6b0f729b1e5246b3ea404d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=8A=B2=E9=B9=8F?= Date: Tue, 2 Mar 2021 17:18:23 +0800 Subject: [PATCH] add blend layout config --- doric-Qt/doric/doric.pro.user | 2 +- doric-Qt/doric/resources/Flex.qml | 2 +- doric-Qt/doric/shader/DoricHLayoutNode.cpp | 2 +- doric-Qt/doric/shader/DoricStackNode.cpp | 10 ++++++- doric-Qt/doric/shader/DoricStackNode.h | 2 +- doric-Qt/doric/shader/DoricSuperNode.cpp | 5 ++++ doric-Qt/doric/shader/DoricSuperNode.h | 4 +-- doric-Qt/doric/shader/DoricVLayoutNode.cpp | 2 +- doric-Qt/doric/shader/DoricViewNode.cpp | 32 ++++++++++++++++++++-- doric-Qt/doric/shader/DoricViewNode.h | 4 +-- 10 files changed, 53 insertions(+), 12 deletions(-) diff --git a/doric-Qt/doric/doric.pro.user b/doric-Qt/doric/doric.pro.user index defeabde..37a3cca3 100644 --- a/doric-Qt/doric/doric.pro.user +++ b/doric-Qt/doric/doric.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/doric-Qt/doric/resources/Flex.qml b/doric-Qt/doric/resources/Flex.qml index 409ff709..7544d44e 100644 --- a/doric-Qt/doric/resources/Flex.qml +++ b/doric-Qt/doric/resources/Flex.qml @@ -271,7 +271,7 @@ Rectangle { } function updatePositions() { - if (flex.height != 0 && flex.width != 0) { + if (flex.height !== 0 && flex.width !== 0) { var rootNode = flexLayoutService.createNode(); processNode(flex, rootNode); var nodes = [] diff --git a/doric-Qt/doric/shader/DoricHLayoutNode.cpp b/doric-Qt/doric/shader/DoricHLayoutNode.cpp index 625d2d1c..04260492 100644 --- a/doric-Qt/doric/shader/DoricHLayoutNode.cpp +++ b/doric-Qt/doric/shader/DoricHLayoutNode.cpp @@ -18,9 +18,9 @@ void DoricHLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) { if (name == "space") { view->setProperty("spacing", prop.toInt()); } else if (name == "gravity") { - qWarning() << "gravity: " << prop.toInt(); switch (prop.toInt()) { case 1: + view->setProperty("alignItems", "center"); break; } } else { diff --git a/doric-Qt/doric/shader/DoricStackNode.cpp b/doric-Qt/doric/shader/DoricStackNode.cpp index 8e070cf2..d757c610 100644 --- a/doric-Qt/doric/shader/DoricStackNode.cpp +++ b/doric-Qt/doric/shader/DoricStackNode.cpp @@ -14,4 +14,12 @@ QQuickItem *DoricStackNode::build() { return item; } -void DoricStackNode::blendLayoutConfig() { DoricViewNode::blendLayoutConfig(); } +void DoricStackNode::blendLayoutConfig(QJSValue jsValue) { + DoricViewNode::blendLayoutConfig(jsValue); + QJSValue maxWidth = jsValue.property("maxWidth"); + if (maxWidth.isNumber()) { + } + QJSValue maxHeight = jsValue.property("maxHeight"); + if (maxHeight.isNumber()) { + } +} diff --git a/doric-Qt/doric/shader/DoricStackNode.h b/doric-Qt/doric/shader/DoricStackNode.h index 9843582f..c990e82a 100644 --- a/doric-Qt/doric/shader/DoricStackNode.h +++ b/doric-Qt/doric/shader/DoricStackNode.h @@ -9,7 +9,7 @@ public: QQuickItem *build() override; - void blendLayoutConfig() override; + void blendLayoutConfig(QJSValue jsValue) override; }; #endif // DORICSTACKNODE_H diff --git a/doric-Qt/doric/shader/DoricSuperNode.cpp b/doric-Qt/doric/shader/DoricSuperNode.cpp index fa298303..8a1e8269 100644 --- a/doric-Qt/doric/shader/DoricSuperNode.cpp +++ b/doric-Qt/doric/shader/DoricSuperNode.cpp @@ -49,3 +49,8 @@ QJSValue DoricSuperNode::getSubModel(QString id) { return QJSValue::UndefinedValue; } } + +void DoricSuperNode::blendSubLayoutConfig(DoricViewNode *viewNode, + QJSValue jsValue) { + viewNode->blendLayoutConfig(jsValue); +} diff --git a/doric-Qt/doric/shader/DoricSuperNode.h b/doric-Qt/doric/shader/DoricSuperNode.h index 388c61de..22b92d8e 100644 --- a/doric-Qt/doric/shader/DoricSuperNode.h +++ b/doric-Qt/doric/shader/DoricSuperNode.h @@ -10,8 +10,6 @@ private: protected: virtual void blend(QQuickItem *view, QString name, QJSValue prop) override; - void blendSubLayoutConfig(DoricViewNode *viewNode); - virtual void blendSubNode(QJSValue subProperties) = 0; public: @@ -21,6 +19,8 @@ public: QJSValue getSubModel(QString id); + void blendSubLayoutConfig(DoricViewNode *viewNode, QJSValue jsValue); + private: void mixinSubNode(QJSValue subNode); diff --git a/doric-Qt/doric/shader/DoricVLayoutNode.cpp b/doric-Qt/doric/shader/DoricVLayoutNode.cpp index cdc28ddb..31e6352a 100644 --- a/doric-Qt/doric/shader/DoricVLayoutNode.cpp +++ b/doric-Qt/doric/shader/DoricVLayoutNode.cpp @@ -18,9 +18,9 @@ void DoricVLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) { if (name == "space") { view->setProperty("spacing", prop.toInt()); } else if (name == "gravity") { - qWarning() << "gravity: " << prop.toInt(); switch (prop.toInt()) { case 1: + view->setProperty("alignItems", "center"); break; } } else { diff --git a/doric-Qt/doric/shader/DoricViewNode.cpp b/doric-Qt/doric/shader/DoricViewNode.cpp index 4085bcf0..d19f57df 100644 --- a/doric-Qt/doric/shader/DoricViewNode.cpp +++ b/doric-Qt/doric/shader/DoricViewNode.cpp @@ -4,9 +4,33 @@ #include "DoricSuperNode.h" #include "DoricViewNode.h" -void DoricViewNode::blendLayoutConfig() {} +void DoricViewNode::blendLayoutConfig(QJSValue jsObject) { + QJSValue margin = jsObject.property("margin"); + QJSValue widthSpec = jsObject.property("widthSpec"); + QJSValue heightSpec = jsObject.property("heightSpec"); -void DoricViewNode::setLayoutConfig(QJSValue layoutConfig) {} + if (widthSpec.isNumber()) { + switch (widthSpec.toInt()) { + case 1: + qCritical() << 1; + break; + case 2: + qCritical() << 1; + break; + default: + qCritical() << "default"; + break; + } + } +} + +void DoricViewNode::setLayoutConfig(QJSValue layoutConfig) { + if (mSuperNode != nullptr) { + mSuperNode->blendSubLayoutConfig(this, layoutConfig); + } else { + blendLayoutConfig(layoutConfig); + } +} void DoricViewNode::init(DoricSuperNode *superNode) { if (DoricUtils:: instanceof (this)) { @@ -26,6 +50,10 @@ QString DoricViewNode::getType() { return mType; } QQuickItem *DoricViewNode::getNodeView() { return mView; } void DoricViewNode::blend(QJSValue jsValue) { + QJSValue value = jsValue.property("layoutConfig"); + if (value.isObject()) { + setLayoutConfig(value); + } QJSValueIterator it(jsValue); while (it.hasNext()) { it.next(); diff --git a/doric-Qt/doric/shader/DoricViewNode.h b/doric-Qt/doric/shader/DoricViewNode.h index 4ad088d0..1d8c1381 100644 --- a/doric-Qt/doric/shader/DoricViewNode.h +++ b/doric-Qt/doric/shader/DoricViewNode.h @@ -16,8 +16,6 @@ protected: virtual QQuickItem *build() = 0; - virtual void blendLayoutConfig(); - void setLayoutConfig(QJSValue layoutConfig); private: @@ -55,5 +53,7 @@ public: virtual void blend(QJSValue jsValue); virtual void blend(QQuickItem *view, QString name, QJSValue prop); + + virtual void blendLayoutConfig(QJSValue jsObject); }; #endif // DORICVIEWNODE_H