fix layout bug
This commit is contained in:
parent
0f2a6ef55c
commit
3721c856fb
@ -140,8 +140,12 @@ void DoricLayouts::measureSelf(QSizeF targetSize) {
|
|||||||
DoricLayouts *parentDoricLayout =
|
DoricLayouts *parentDoricLayout =
|
||||||
(DoricLayouts *)(parent->property("doricLayout").toULongLong());
|
(DoricLayouts *)(parent->property("doricLayout").toULongLong());
|
||||||
if (parentDoricLayout != nullptr &&
|
if (parentDoricLayout != nullptr &&
|
||||||
parentDoricLayout->layoutType == DoricLayoutType::DoricHLayout &&
|
parentDoricLayout->widthSpec == DoricLayoutSpec::DoricLayoutFit) {
|
||||||
this->weight > 0) {
|
width = targetSize.width();
|
||||||
|
} else if (parentDoricLayout != nullptr &&
|
||||||
|
parentDoricLayout->layoutType ==
|
||||||
|
DoricLayoutType::DoricHLayout &&
|
||||||
|
this->weight > 0) {
|
||||||
width = 0;
|
width = 0;
|
||||||
setMeasuredWidth(0);
|
setMeasuredWidth(0);
|
||||||
} else {
|
} else {
|
||||||
@ -223,15 +227,17 @@ void DoricLayouts::measureContent(QSizeF targetSize) {
|
|||||||
DoricLayouts *parentDoricLayout =
|
DoricLayouts *parentDoricLayout =
|
||||||
(DoricLayouts *)(parent->property("doricLayout").toULongLong());
|
(DoricLayouts *)(parent->property("doricLayout").toULongLong());
|
||||||
if (parentDoricLayout != nullptr) {
|
if (parentDoricLayout != nullptr) {
|
||||||
if (parentDoricLayout->layoutType != DoricLayoutType::DoricUndefined &&
|
|
||||||
parentDoricLayout->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (parentDoricLayout->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
this->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
this->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
setMeasuredWidth(targetSize.width());
|
setMeasuredWidth(this->contentWidth + this->paddingLeft +
|
||||||
|
this->paddingRight);
|
||||||
}
|
}
|
||||||
if (parentDoricLayout->layoutType != DoricLayoutType::DoricUndefined &&
|
|
||||||
parentDoricLayout->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (parentDoricLayout->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
this->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
this->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
setMeasuredHeight(targetSize.height());
|
setMeasuredHeight(this->contentHeight + this->paddingTop +
|
||||||
|
this->paddingBottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -515,12 +521,12 @@ void DoricLayouts::layoutStack() {
|
|||||||
if (this->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (this->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
layout->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
layout->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
layout->measuredWidth =
|
layout->measuredWidth =
|
||||||
this->measuredWidth - layout->marginLeft - layout->marginRight;
|
this->contentWidth - layout->marginLeft - layout->marginRight;
|
||||||
}
|
}
|
||||||
if (this->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (this->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
layout->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
layout->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
layout->measuredHeight =
|
layout->measuredHeight =
|
||||||
this->measuredHeight - layout->marginTop - layout->marginBottom;
|
this->contentHeight - layout->marginTop - layout->marginBottom;
|
||||||
}
|
}
|
||||||
layout->layout();
|
layout->layout();
|
||||||
|
|
||||||
@ -536,11 +542,7 @@ void DoricLayouts::layoutStack() {
|
|||||||
DoricGravity::DoricGravityCenterX) {
|
DoricGravity::DoricGravityCenterX) {
|
||||||
layout->setMeasuredX(this->measuredWidth / 2 - layout->measuredWidth / 2);
|
layout->setMeasuredX(this->measuredWidth / 2 - layout->measuredWidth / 2);
|
||||||
} else {
|
} else {
|
||||||
if (layout->marginLeft || layout->marginRight) {
|
layout->setMeasuredX(this->paddingLeft);
|
||||||
layout->setMeasuredX(this->paddingLeft);
|
|
||||||
} else {
|
|
||||||
layout->setMeasuredX(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((gravity & DoricGravity::DoricGravityTop) ==
|
if ((gravity & DoricGravity::DoricGravityTop) ==
|
||||||
@ -555,11 +557,7 @@ void DoricLayouts::layoutStack() {
|
|||||||
layout->setMeasuredY(this->measuredHeight / 2 -
|
layout->setMeasuredY(this->measuredHeight / 2 -
|
||||||
layout->measuredHeight / 2);
|
layout->measuredHeight / 2);
|
||||||
} else {
|
} else {
|
||||||
if (layout->marginTop || layout->marginBottom) {
|
layout->setMeasuredY(this->paddingTop);
|
||||||
layout->setMeasuredY(this->paddingTop);
|
|
||||||
} else {
|
|
||||||
layout->setMeasuredY(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gravity) {
|
if (!gravity) {
|
||||||
@ -613,12 +611,7 @@ void DoricLayouts::layoutVLayout() {
|
|||||||
if (this->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (this->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
layout->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
layout->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
layout->measuredWidth =
|
layout->measuredWidth =
|
||||||
this->measuredWidth - layout->marginLeft - layout->marginRight;
|
this->contentWidth - layout->marginLeft - layout->marginRight;
|
||||||
}
|
|
||||||
if (this->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
|
||||||
layout->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
|
||||||
layout->measuredHeight = this->measuredHeight - yStart -
|
|
||||||
layout->marginTop - layout->marginBottom;
|
|
||||||
}
|
}
|
||||||
layout->layout();
|
layout->layout();
|
||||||
int gravity = layout->alignment | this->gravity;
|
int gravity = layout->alignment | this->gravity;
|
||||||
@ -677,16 +670,10 @@ void DoricLayouts::layoutHLayout() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->widthSpec == DoricLayoutSpec::DoricLayoutFit &&
|
|
||||||
layout->widthSpec == DoricLayoutSpec::DoricLayoutMost) {
|
|
||||||
layout->measuredWidth = this->measuredWidth - xStart -
|
|
||||||
layout->marginLeft - layout->marginRight;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
if (this->heightSpec == DoricLayoutSpec::DoricLayoutFit &&
|
||||||
layout->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
layout->heightSpec == DoricLayoutSpec::DoricLayoutMost) {
|
||||||
layout->measuredHeight =
|
layout->measuredHeight =
|
||||||
this->measuredHeight - layout->marginTop - layout->marginBottom;
|
this->contentHeight - layout->marginTop - layout->marginBottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->layout();
|
layout->layout();
|
||||||
|
Reference in New Issue
Block a user