add doric layout

This commit is contained in:
王劲鹏 2021-02-25 18:06:08 +08:00 committed by osborn
parent 63c8e864d1
commit 46ecc85ece
7 changed files with 117 additions and 1 deletions

View File

@ -4,6 +4,7 @@
#include "shader/DoricRootNode.h"
#include "shader/DoricStackNode.h"
#include "shader/DoricVLayoutNode.h"
#include "shader/DoricHLayoutNode.h"
DoricRegistry::DoricRegistry() {
registerNativePlugin<DoricShaderPlugin>("shader");
@ -11,7 +12,7 @@ DoricRegistry::DoricRegistry() {
registerViewNode<DoricRootNode>("Root");
registerViewNode<DoricStackNode>("Stack");
registerViewNode<DoricVLayoutNode>("VLayout");
registerViewNode<DoricVLayoutNode>("HLayout");
registerViewNode<DoricHLayoutNode>("HLayout");
}
bool DoricRegistry::acquirePluginInfo(QString name) {

View File

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

View File

@ -2,5 +2,6 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
Column {
}

View File

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

View File

@ -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) {}

View File

@ -0,0 +1,94 @@
#ifndef DORICLAYOUT_H
#define DORICLAYOUT_H
#include <QQuickItem>
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

View File

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