add gravity handle & nested layout with rectangle with height handle
This commit is contained in:
parent
fc104c4ec1
commit
0c151c435f
@ -23,8 +23,8 @@ void DoricDemoBridge::navigate(QVariant route) {
|
|||||||
{
|
{
|
||||||
const QUrl url(QStringLiteral("qrc:/doric/qml/view.qml"));
|
const QUrl url(QStringLiteral("qrc:/doric/qml/view.qml"));
|
||||||
view->setSource(url);
|
view->setSource(url);
|
||||||
view->setWidth(450);
|
view->setWidth(405);
|
||||||
view->setHeight(800);
|
view->setHeight(720);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -33,8 +33,8 @@ void DoricDemoBridge::navigate(QVariant route) {
|
|||||||
component.loadUrl(url);
|
component.loadUrl(url);
|
||||||
QQuickItem *quickItem = qobject_cast<QQuickItem *>(component.create());
|
QQuickItem *quickItem = qobject_cast<QQuickItem *>(component.create());
|
||||||
DoricPanel *panel = new DoricPanel(view->engine(), quickItem);
|
DoricPanel *panel = new DoricPanel(view->engine(), quickItem);
|
||||||
quickItem->setWidth(450);
|
quickItem->setWidth(405);
|
||||||
quickItem->setHeight(800);
|
quickItem->setHeight(720);
|
||||||
quickItem->setParentItem(view->rootObject());
|
quickItem->setParentItem(view->rootObject());
|
||||||
|
|
||||||
panel->config(script, name, NULL);
|
panel->config(script, name, NULL);
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<file alias="hlayout.qml">resources/hlayout.qml</file>
|
<file alias="hlayout.qml">resources/hlayout.qml</file>
|
||||||
<file alias="text.qml">resources/text.qml</file>
|
<file alias="text.qml">resources/text.qml</file>
|
||||||
<file alias="util.mjs">resources/util.mjs</file>
|
<file alias="util.mjs">resources/util.mjs</file>
|
||||||
|
<file alias="gravity.mjs">resources/gravity.mjs</file>
|
||||||
<file>test-layout.qml</file>
|
<file>test-layout.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
32
doric-Qt/doric/resources/gravity.mjs
Normal file
32
doric-Qt/doric/resources/gravity.mjs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// gravity.mjs
|
||||||
|
export function enumerate() {
|
||||||
|
const SPECIFIED = 1;
|
||||||
|
const START = 1 << 1;
|
||||||
|
const END = 1 << 2;
|
||||||
|
const SHIFT_X = 0;
|
||||||
|
const SHIFT_Y = 4;
|
||||||
|
const LEFT = (START | SPECIFIED) << SHIFT_X;
|
||||||
|
const RIGHT = (END | SPECIFIED) << SHIFT_X;
|
||||||
|
const TOP = (START | SPECIFIED) << SHIFT_Y;
|
||||||
|
const BOTTOM = (END | SPECIFIED) << SHIFT_Y;
|
||||||
|
const CENTER_X = SPECIFIED << SHIFT_X;
|
||||||
|
const CENTER_Y = SPECIFIED << SHIFT_Y;
|
||||||
|
const CENTER = CENTER_X | CENTER_Y;
|
||||||
|
|
||||||
|
var gravity = {
|
||||||
|
SPECIFIED,
|
||||||
|
START,
|
||||||
|
END,
|
||||||
|
SHIFT_X,
|
||||||
|
SHIFT_Y,
|
||||||
|
LEFT,
|
||||||
|
RIGHT,
|
||||||
|
TOP,
|
||||||
|
BOTTOM,
|
||||||
|
CENTER_X,
|
||||||
|
CENTER_Y,
|
||||||
|
CENTER
|
||||||
|
}
|
||||||
|
|
||||||
|
return gravity
|
||||||
|
}
|
@ -3,16 +3,18 @@ import QtQuick.Controls 2.5
|
|||||||
import QtQuick.Layouts 1.15
|
import QtQuick.Layouts 1.15
|
||||||
|
|
||||||
import "util.mjs" as Util
|
import "util.mjs" as Util
|
||||||
|
import "gravity.mjs" as Gravity
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
property var tag: "HLayout"
|
||||||
|
|
||||||
property var uuid: Util.uuidv4()
|
property var uuid: Util.uuidv4()
|
||||||
|
|
||||||
property int widthSpec: 0
|
property int widthSpec: 0
|
||||||
property int heightSpec: 0
|
property int heightSpec: 0
|
||||||
property int childrenRectWidth: childrenRect.width
|
property int childrenRectWidth: childrenRect.width
|
||||||
property int childrenRectHeight: childrenRect.height
|
property int childrenRectHeight: childrenRect.height
|
||||||
|
|
||||||
property var tag: "HLayout"
|
|
||||||
|
|
||||||
onWidthChanged: () => {
|
onWidthChanged: () => {
|
||||||
console.log(tag, uuid + " onWidthChanged: " + this.width)
|
console.log(tag, uuid + " onWidthChanged: " + this.width)
|
||||||
}
|
}
|
||||||
@ -24,8 +26,10 @@ Rectangle {
|
|||||||
onWidthSpecChanged: () => {
|
onWidthSpecChanged: () => {
|
||||||
console.log(tag, uuid + " onWidthSpecChanged: " + this.widthSpec)
|
console.log(tag, uuid + " onWidthSpecChanged: " + this.widthSpec)
|
||||||
console.log(tag, uuid + " parent width: " + parent.width)
|
console.log(tag, uuid + " parent width: " + parent.width)
|
||||||
|
|
||||||
if (this.widthSpec === 2) {
|
if (this.widthSpec === 2) {
|
||||||
this.width = parent.width
|
this.width = parent.width
|
||||||
|
// children[0].width = parent.width
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,6 +39,7 @@ Rectangle {
|
|||||||
|
|
||||||
if (this.heightSpec === 2) {
|
if (this.heightSpec === 2) {
|
||||||
this.height = parent.height
|
this.height = parent.height
|
||||||
|
children[0].height = parent.height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +61,19 @@ Rectangle {
|
|||||||
color: 'transparent'
|
color: 'transparent'
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
property int gravity: 0
|
||||||
|
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
||||||
|
onChildrenChanged: () => {
|
||||||
|
console.log(tag, uuid + " gravity: " + gravity)
|
||||||
|
for (var i = 0;i !== children.length;i++) {
|
||||||
|
switch(this.gravity) {
|
||||||
|
case Gravity.enumerate().CENTER_X:
|
||||||
|
children[i].Layout.alignment = Qt.AlignHCenter
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,18 @@ import QtQuick.Controls 2.5
|
|||||||
import QtQuick.Layouts 1.15
|
import QtQuick.Layouts 1.15
|
||||||
|
|
||||||
import "util.mjs" as Util
|
import "util.mjs" as Util
|
||||||
|
import "gravity.mjs" as Gravity
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
property var tag: "VLayout"
|
||||||
|
|
||||||
property var uuid: Util.uuidv4()
|
property var uuid: Util.uuidv4()
|
||||||
|
|
||||||
property int widthSpec: 0
|
property int widthSpec: 0
|
||||||
property int heightSpec: 0
|
property int heightSpec: 0
|
||||||
property int childrenRectWidth: childrenRect.width
|
property int childrenRectWidth: childrenRect.width
|
||||||
property int childrenRectHeight: childrenRect.height
|
property int childrenRectHeight: childrenRect.height
|
||||||
|
|
||||||
property var tag: "VLayout"
|
|
||||||
|
|
||||||
onWidthChanged: () => {
|
onWidthChanged: () => {
|
||||||
console.log(tag, uuid + " onWidthChanged: " + this.width)
|
console.log(tag, uuid + " onWidthChanged: " + this.width)
|
||||||
}
|
}
|
||||||
@ -24,8 +26,10 @@ Rectangle {
|
|||||||
onWidthSpecChanged: () => {
|
onWidthSpecChanged: () => {
|
||||||
console.log(tag, uuid + " onWidthSpecChanged: " + this.widthSpec)
|
console.log(tag, uuid + " onWidthSpecChanged: " + this.widthSpec)
|
||||||
console.log(tag, uuid + " parent width: " + parent.width)
|
console.log(tag, uuid + " parent width: " + parent.width)
|
||||||
|
|
||||||
if (this.widthSpec === 2) {
|
if (this.widthSpec === 2) {
|
||||||
this.width = parent.width
|
this.width = parent.width
|
||||||
|
children[0].width = parent.width
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,6 +39,7 @@ Rectangle {
|
|||||||
|
|
||||||
if (this.heightSpec === 2) {
|
if (this.heightSpec === 2) {
|
||||||
this.height = parent.height
|
this.height = parent.height
|
||||||
|
// children[0].height = parent.height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +61,20 @@ Rectangle {
|
|||||||
color: 'transparent'
|
color: 'transparent'
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
property int gravity: 0
|
||||||
|
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
||||||
|
onChildrenChanged: () => {
|
||||||
|
console.log(tag, uuid + " gravity: " + gravity)
|
||||||
|
|
||||||
|
for (var i = 0;i !== children.length;i++) {
|
||||||
|
switch(this.gravity) {
|
||||||
|
case Gravity.enumerate().CENTER_X:
|
||||||
|
children[i].Layout.alignment = Qt.AlignHCenter
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,7 @@ void DoricHLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) {
|
|||||||
if (name == "space") {
|
if (name == "space") {
|
||||||
view->childItems().at(0)->setProperty("spacing", prop.toInt());
|
view->childItems().at(0)->setProperty("spacing", prop.toInt());
|
||||||
} else if (name == "gravity") {
|
} else if (name == "gravity") {
|
||||||
switch (prop.toInt()) {
|
view->childItems().at(0)->setProperty("gravity", prop.toInt());
|
||||||
case 1:
|
|
||||||
view->setProperty("alignItems", "center");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
DoricGroupNode::blend(view, name, prop);
|
DoricGroupNode::blend(view, name, prop);
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,7 @@ void DoricVLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) {
|
|||||||
if (name == "space") {
|
if (name == "space") {
|
||||||
view->childItems().at(0)->setProperty("spacing", prop.toInt());
|
view->childItems().at(0)->setProperty("spacing", prop.toInt());
|
||||||
} else if (name == "gravity") {
|
} else if (name == "gravity") {
|
||||||
switch (prop.toInt()) {
|
view->childItems().at(0)->setProperty("gravity", prop.toInt());
|
||||||
case 1:
|
|
||||||
view->setProperty("alignItems", "center");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
DoricGroupNode::blend(view, name, prop);
|
DoricGroupNode::blend(view, name, prop);
|
||||||
}
|
}
|
||||||
|
@ -14,18 +14,22 @@ ApplicationWindow {
|
|||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
property int gravity: 0
|
||||||
|
onGravityChanged: {
|
||||||
|
console.log(children[0].Layout.alignment)
|
||||||
|
children[0].Layout.alignment = 1
|
||||||
|
}
|
||||||
|
|
||||||
spacing: 0
|
spacing: 0
|
||||||
width: 400
|
height: 600
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
width: 100
|
width: 100
|
||||||
height: 100
|
height: 100
|
||||||
color: 'black'
|
color: 'black'
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
width: 100
|
width: 100
|
||||||
height: 100
|
height: 100
|
||||||
color: 'yellow'
|
color: 'yellow'
|
||||||
|
Reference in New Issue
Block a user