// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
export X := Rectangle {
// ><warning{':=' to declare a component is deprecated. The new syntax declare components with 'component MyComponent {'. Read the documentation for more info}
lay := GridLayout {
property<string> foo: "hello";
Row {
Text {
text: lay.foo + parent.width;
// > <error{Element 'Row' does not have a property 'width'}
colspan: 1 + 1;
rowspan: 2;
}
Text {
row: 3;
// ><warning{The 'row' property cannot be used for elements inside a Row. This was accepted by previous versions of Slint, but may become an error in the future}
col: -2;
// > <error{'col' must be a positive integer}
rowspan: 2.2;
// > <error{'rowspan' must be a positive integer}
colspan: -1;
// > <error{'colspan' must be a positive integer}
y: 0;
// ><error{The property 'y' cannot be set for elements placed in this layout, because the layout is already setting it}
animate x { duration: 100ms; }
// ><error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}
init => {
self.colspan = 45;
}
}
}
Row {
Text {
x: 12px;
// > <error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}
}}
Text{
row: 200000; // that's actually bigger than 65535
// > <error{'row' must be a positive integer}
Rectangle { row: 3; }
// ><error{row used outside of a GridLayout's cell}
}
}
lay2 := GridLayout {
property<int> negative: -5;
property<int> last_row: 4;
Text {
row: lay2.last_row;
col: -lay2.negative; // check that a unary minus isn't necessary an error
}
Text {
// > <error{Cannot mix auto-numbering and runtime expressions for the 'col' property}
row: 0; // mixing runtime expr and literal is ok
}
}
lay3 := GridLayout {
Text {
row: lay2.last_row;
col: lay2.last_row;
}
Text {
// > <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
col: 1;
}
}
Text { colspan: 3; }
// ><error{colspan used outside of a GridLayout's cell}
col: 3;
// ><error{col used outside of a GridLayout's cell}
HorizontalLayout {
col: 3;
// ><error{col used outside of a GridLayout's cell}
}
flex := FlexboxLayout {
Text {
colspan: 1 + 1;
// > <error{colspan used outside of a GridLayout's cell}
rowspan: 2;
// ><error{rowspan used outside of a GridLayout's cell}
row: 3;
// ><error{row used outside of a GridLayout's cell}
col: 2;
// ><error{col used outside of a GridLayout's cell}
}
}
lay4 := GridLayout {
for _ in 5: Text {
// Using row/col properties here is allowed, to be able to get row and col from a model
row: 2;
col: 3;
}
for _ in 5: Row {
Rectangle {
row: 1;
// ><error{The property 'row' cannot be set for elements placed in this layout, because the layout is already setting it}
col: 2;
// ><error{The property 'col' cannot be set for elements placed in this layout, because the layout is already setting it}
rowspan: 2;
colspan: 2;
}
}
}
// Inside a `for`/`if`, setting one axis but not the other still has to
// line up with the surrounding GridLayout's other children. This shape
// (runtime `row`, auto-numbered `col` next to an auto-numbered sibling)
// was silently accepted in older Slint versions; it is now reported but
// only as a warning so that those files keep compiling.
lay5 := GridLayout {
for _[idx] in 5: Text {
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'col' property. This was accepted by previous versions of Slint, but may become an error in the future}
row: idx;
}
Text { }
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
}
lay6 := GridLayout {
if true: Text {
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'col' property. This was accepted by previous versions of Slint, but may become an error in the future}
row: lay2.last_row;
}
Text { }
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
}
// A single GridLayout that exercises both diagnostic levels. The first
// child seeds the numbering with auto (its row is missing); the second
// child has a runtime row only via piercing into the repeater body, so
// its `col` is still auto and the mix is reported as a warning; the
// third child has both row and col set directly so the lenient view
// also flags the mix, and it is reported as a real error.
lay7 := GridLayout {
Text { col: 1; }
for _[idx] in 5: Text {
row: idx;
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
}
Text {
row: lay2.last_row;
// > <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
col: lay2.last_row;
}
}
// Cover a mix of every shape that contributes a row/col classification:
// a plain auto-numbered element, a `for` that introduces the first
// runtime expression via piercing (warning), more auto siblings, a
// static element with direct runtime row/col (error), two more auto
// siblings, and finally an `if` with runtime row/col (warning).
lay8 := GridLayout {
Text { }
for _[idx] in 3: Text {
row: idx;
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
}
Text { }
Text {
row: lay2.last_row;
// > <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
col: lay2.last_row;
}
Text { }
Text { }
if true: Text {
row: lay2.last_row;
// > <warning{Cannot mix auto-numbering and runtime expressions for the 'row' property. This was accepted by previous versions of Slint, but may become an error in the future}
col: lay2.last_row;
}
}
}