diff --git a/doric-Qt/doric/DoricRegistry.cpp b/doric-Qt/doric/DoricRegistry.cpp index 7441bafc..c7d4063b 100644 --- a/doric-Qt/doric/DoricRegistry.cpp +++ b/doric-Qt/doric/DoricRegistry.cpp @@ -4,6 +4,7 @@ #include "shader/DoricRootNode.h" #include "shader/DoricStackNode.h" #include "shader/DoricVLayoutNode.h" +#include "shader/DoricHLayoutNode.h" DoricRegistry::DoricRegistry() { registerNativePlugin("shader"); @@ -11,7 +12,7 @@ DoricRegistry::DoricRegistry() { registerViewNode("Root"); registerViewNode("Stack"); registerViewNode("VLayout"); - registerViewNode("HLayout"); + registerViewNode("HLayout"); } bool DoricRegistry::acquirePluginInfo(QString name) { diff --git a/doric-Qt/doric/doric.pro b/doric-Qt/doric/doric.pro index 2940c9c2..db523cfd 100644 --- a/doric-Qt/doric/doric.pro +++ b/doric-Qt/doric/doric.pro @@ -33,6 +33,7 @@ SOURCES += \ plugin/DoricShaderPlugin.cpp \ shader/DoricGroupNode.cpp \ shader/DoricHLayoutNode.cpp \ + shader/DoricLayout.cpp \ shader/DoricRootNode.cpp \ shader/DoricStackNode.cpp \ shader/DoricSuperNode.cpp \ @@ -78,6 +79,7 @@ HEADERS += \ plugin/DoricShaderPlugin.h \ shader/DoricGroupNode.h \ shader/DoricHLayoutNode.h \ + shader/DoricLayout.h \ shader/DoricRootNode.h \ shader/DoricStackNode.h \ shader/DoricSuperNode.h \ diff --git a/doric-Qt/doric/resources/vlayout.qml b/doric-Qt/doric/resources/vlayout.qml index 88d34cc9..ae6377f6 100644 --- a/doric-Qt/doric/resources/vlayout.qml +++ b/doric-Qt/doric/resources/vlayout.qml @@ -2,5 +2,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.5 Column { + } diff --git a/doric-Qt/doric/shader/DoricHLayoutNode.cpp b/doric-Qt/doric/shader/DoricHLayoutNode.cpp index fd84e93c..625d2d1c 100644 --- a/doric-Qt/doric/shader/DoricHLayoutNode.cpp +++ b/doric-Qt/doric/shader/DoricHLayoutNode.cpp @@ -19,6 +19,10 @@ void DoricHLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) { view->setProperty("spacing", prop.toInt()); } else if (name == "gravity") { qWarning() << "gravity: " << prop.toInt(); + switch (prop.toInt()) { + case 1: + break; + } } else { DoricGroupNode::blend(view, name, prop); } diff --git a/doric-Qt/doric/shader/DoricLayout.cpp b/doric-Qt/doric/shader/DoricLayout.cpp new file mode 100644 index 00000000..6a8b2128 --- /dev/null +++ b/doric-Qt/doric/shader/DoricLayout.cpp @@ -0,0 +1,10 @@ +#include "DoricLayout.h" + +void DoricLayout::apply(int frameSizeWidth, int frameSizeHeight) { + this->resolved = false; + this->measure(frameSizeWidth, frameSizeHeight); +} + +void DoricLayout::apply() {} + +void DoricLayout::measure(int targetSizeWidth, int targetSizeHeight) {} diff --git a/doric-Qt/doric/shader/DoricLayout.h b/doric-Qt/doric/shader/DoricLayout.h new file mode 100644 index 00000000..9c84affc --- /dev/null +++ b/doric-Qt/doric/shader/DoricLayout.h @@ -0,0 +1,94 @@ +#ifndef DORICLAYOUT_H +#define DORICLAYOUT_H + +#include + +enum DoricLayoutType { + DoricUndefined = 0, + DoricStack = 1, + DoricVLayout = 2, + DoricHLayout = 3, +}; + +enum DoricLayoutSpec { + DoricLayoutJust = 0, + DoricLayoutFit = 1, + DoricLayoutMost = 2, +}; + +enum DoricGravity { + DoricGravitySpecified = 1, + DoricGravityStart = 1 << 1, + DoricGravityEnd = 1 << 2, + DoricGravityShiftX = 0, + DoricGravityShiftY = 4, + DoricGravityLeft = (DoricGravityStart | DoricGravitySpecified) + << DoricGravityShiftX, + DoricGravityRight = (DoricGravityEnd | DoricGravitySpecified) + << DoricGravityShiftX, + DoricGravityTop = (DoricGravityStart | DoricGravitySpecified) + << DoricGravityShiftY, + DoricGravityBottom = (DoricGravityEnd | DoricGravitySpecified) + << DoricGravityShiftY, + DoricGravityCenterX = DoricGravitySpecified << DoricGravityShiftX, + DoricGravityCenterY = DoricGravitySpecified << DoricGravityShiftY, + DoricGravityCenter = DoricGravityCenterX | DoricGravityCenterY, +}; + +class DoricLayout : public QObject { + Q_OBJECT +public: + DoricLayoutSpec widthSpec; + DoricLayoutSpec heightSpec; + DoricGravity alignment; + DoricGravity gravity; + int width; + int height; + int marginLeft; + int marginTop; + int marginRight; + int marginBottom; + int paddingLeft; + int paddingTop; + int paddingRight; + int paddingBottom; + + int weight; + + QQuickItem *view; + + DoricLayoutType layoutType; + bool disabled; + int maxWidth; + int maxHeight; + int minWidth; + int minHeight; + + bool resolved; + int measuredWidth; + int measuredHeight; + int measuredX; + int measuredY; + + bool undefined; + + DoricLayout(QObject *parent = nullptr) : QObject(parent) { + widthSpec = DoricLayoutJust; + heightSpec = DoricLayoutJust; + maxWidth = INT_MAX; + maxHeight = INT_MAX; + minWidth = INT_MIN; + minHeight = INT_MIN; + } + + void measure(int targetSizeWidth, int targetSizeHeight); + + void apply(); + + void apply(int frameSizeWidth, int frameSizeHeight); + + int contentWidth; + int contentHeight; +}; + +#endif // DORICLAYOUT_H diff --git a/doric-Qt/doric/shader/DoricVLayoutNode.cpp b/doric-Qt/doric/shader/DoricVLayoutNode.cpp index afcd14d5..cdc28ddb 100644 --- a/doric-Qt/doric/shader/DoricVLayoutNode.cpp +++ b/doric-Qt/doric/shader/DoricVLayoutNode.cpp @@ -19,6 +19,10 @@ void DoricVLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) { view->setProperty("spacing", prop.toInt()); } else if (name == "gravity") { qWarning() << "gravity: " << prop.toInt(); + switch (prop.toInt()) { + case 1: + break; + } } else { DoricGroupNode::blend(view, name, prop); }