8#include <QtQml/qqmlinfo.h>
9#include <QtCore/qcoreapplication.h>
11#include <QtQuick/private/qquicktransition_p.h>
51#if QT_CONFIG(quick_viewtransitions)
52 delete transitionableItem;
59#if QT_CONFIG(quick_viewtransitions)
60 transitionableItem ? transitionableItem->itemX() :
68#if QT_CONFIG(quick_viewtransitions)
69 transitionableItem ? transitionableItem->itemY() :
76#if QT_CONFIG(quick_viewtransitions)
77 if (transitionableItem)
78 transitionableItem->moveTo(
pos);
84#if QT_CONFIG(quick_viewtransitions)
89 if (!transitionableItem)
96 return transitionableItem ? transitionableItem->prepareTransition(transitioner,
index, viewBounds) :
false;
101 if (transitionableItem)
102 transitionableItem->startTransition(transitioner,
index);
151#if QT_CONFIG(quick_viewtransitions)
152 delete d->transitioner;
165 if (
d->positioningDirty)
181 d->setPositioningDirty();
185#if QT_CONFIG(quick_viewtransitions)
189 return d->transitioner ?
d->transitioner->populateTransition :
nullptr;
195 if (!
d->transitioner)
197 if (
d->transitioner->populateTransition != transition) {
198 d->transitioner->populateTransition = transition;
206 return d->transitioner ?
d->transitioner->displacedTransition :
nullptr;
212 if (!
d->transitioner)
214 if (mt ==
d->transitioner->displacedTransition)
217 d->transitioner->displacedTransition = mt;
224 return d->transitioner ?
d->transitioner->addTransition :
nullptr;
230 if (!
d->transitioner)
232 if (
add ==
d->transitioner->addTransition)
235 d->transitioner->addTransition =
add;
242#if QT_CONFIG(quick_viewtransitions)
246#if QT_CONFIG(quick_viewtransitions)
248 d->transitioner->setPopulateTransitionEnabled(
true);
252#if QT_CONFIG(quick_viewtransitions)
254 d->transitioner->setPopulateTransitionEnabled(
false);
262 d->setPositioningDirty();
274 d->setPositioningDirty();
280void QQuickBasePositioner::forceLayout()
291 if (
d->doingPositioning)
294 d->positioningDirty =
false;
295 d->doingPositioning =
true;
304#if QT_CONFIG(quick_viewtransitions)
314 int wIdx = oldItems.
find(posItem);
317 posItem.
isNew =
true;
326#if QT_CONFIG(quick_viewtransitions)
327 if (
d->transitioner) {
329 addedIndex = posItem.
index;
333 else if (!
d->transitioner->populateTransitionEnabled())
353#if QT_CONFIG(quick_viewtransitions)
354 if (
d->transitioner) {
356 addedIndex =
item->index;
368#if QT_CONFIG(quick_viewtransitions)
369 if (
d->transitioner) {
372 if (addedIndex >= 0) {
386 if (!
d->anchorConflict) {
391#if QT_CONFIG(quick_viewtransitions)
392 if (
d->transitioner) {
398 d->transitioner->resetTargetLists();
402 d->doingPositioning =
false;
407 emit positioningComplete();
442#if QT_CONFIG(quick_viewtransitions)
449#if QT_CONFIG(quick_viewtransitions)
451 delete items->
at(
i).transitionableItem;
477 if (specificProperty) {
478 if (specificPropertyOwner ==
child.item) {
479 property = specificProperty;
487 property->setIsFirstItem(ii == 0);
490 if (prevLastProperty)
499 if (prevLastProperty && prevLastProperty != lastProperty)
512 if (specificProperty) {
513 if (specificPropertyOwner ==
child.item) {
514 property = specificProperty;
522 property->setIsFirstItem(
false);
523 property->setIsLastItem(
false);
541 d->setPositioningDirty();
542 emit paddingChanged();
543 if (!
d->extra.isAllocated() || !
d->extra->explicitTopPadding)
544 emit topPaddingChanged();
545 if (!
d->extra.isAllocated() || !
d->extra->explicitLeftPadding)
546 emit leftPaddingChanged();
547 if (!
d->extra.isAllocated() || !
d->extra->explicitRightPadding)
548 emit rightPaddingChanged();
549 if (!
d->extra.isAllocated() || !
d->extra->explicitBottomPadding)
550 emit bottomPaddingChanged();
561 if (
d->extra.isAllocated() &&
d->extra->explicitTopPadding)
562 return d->extra->topPadding;
575 d->setTopPadding(0,
true);
581 if (
d->extra.isAllocated() &&
d->extra->explicitLeftPadding)
582 return d->extra->leftPadding;
595 d->setLeftPadding(0,
true);
601 if (
d->extra.isAllocated() &&
d->extra->explicitRightPadding)
602 return d->extra->rightPadding;
615 d->setRightPadding(0,
true);
621 if (
d->extra.isAllocated() &&
d->extra->explicitBottomPadding)
622 return d->extra->bottomPadding;
635 d->setBottomPadding(0,
true);
644 , explicitTopPadding(
false)
645 , explicitLeftPadding(
false)
646 , explicitRightPadding(
false)
647 , explicitBottomPadding(
false)
654 qreal oldPadding =
q->topPadding();
661 emit q->topPaddingChanged();
668 qreal oldPadding =
q->leftPadding();
675 emit q->leftPaddingChanged();
682 qreal oldPadding =
q->rightPadding();
689 emit q->rightPaddingChanged();
696 qreal oldPadding =
q->bottomPadding();
703 emit q->bottomPaddingChanged();
761 if (m_index ==
index)
955 voffset +=
child.item->height();
977 d->anchorConflict =
true;
983 if (
d->anchorConflict) {
984 qmlWarning(
this) <<
"Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column."
985 <<
" Column will not function.";
1138 q->prePositioning();
1139 emit q->effectiveLayoutDirectionChanged();
1173 d->effectiveLayoutDirectionChange();
1198 if (!
d->isLeftToRight())
1199 qSwap(hoffset1, hoffset2);
1200 qreal hoffset = hoffset1;
1208 if (
d->isLeftToRight()) {
1212 hoffsets << hoffset;
1217 hoffset +=
child.item->width();
1221 if (hoffset - hoffset1 != 0)
1223 contentSize->
setWidth(hoffset + hoffset2);
1225 if (
d->isLeftToRight())
1238 hoffset =
end - hoffsets[acc++] -
child.item->width();
1257 d->anchorConflict =
true;
1263 if (
d->anchorConflict)
1264 qmlWarning(
this) <<
"Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row."
1265 <<
" Row will not function.";
1429 q->prePositioning();
1430 emit q->effectiveLayoutDirectionChanged();
1431 emit q->effectiveHorizontalAlignmentChanged(
q->effectiveHAlign());
1440 , m_columnSpacing(-1)
1441 , m_useRowSpacing(
false)
1442 , m_useColumnSpacing(
false)
1443 , m_flow(LeftToRight)
1444 , m_hItemAlign(AlignLeft)
1445 , m_vItemAlign(AlignTop)
1505 if (m_flow !=
flow) {
1529 m_useRowSpacing =
true;
1551 m_useColumnSpacing =
true;
1585 d->effectiveLayoutDirectionChange();
1652 return m_hItemAlign;
1656 if (m_hItemAlign != align) {
1657 m_hItemAlign = align;
1659 emit horizontalAlignmentChanged(align);
1666 HAlignment effectiveAlignment = m_hItemAlign;
1679 return effectiveAlignment;
1685 return m_vItemAlign;
1689 if (m_vItemAlign != align) {
1690 m_vItemAlign = align;
1692 emit verticalAlignmentChanged(align);
1704 if (m_columns <= 0 && m_rows <= 0) {
1706 r = (numVisible+3)/4;
1707 }
else if (m_rows <= 0) {
1708 r = (numVisible+(m_columns-1))/m_columns;
1709 }
else if (m_columns <= 0) {
1710 c = (numVisible+(m_rows-1))/m_rows;
1713 if (
r == 0 ||
c == 0) {
1719 if (numVisible >
r *
c) {
1720 qmlWarning(
this) <<
"Grid contains more visible items (" << numVisible <<
") than rows*columns (" <<
r *
c <<
")";
1727 for (
int i = 0;
i <
r;
i++) {
1728 for (
int j = 0;
j <
c;
j++) {
1734 if (childIndex == numVisible)
1738 if (
child.item->width() > maxColWidth[
j])
1739 maxColWidth[
j] =
child.item->width();
1740 if (
child.item->height() > maxRowHeight[
i])
1741 maxRowHeight[
i] =
child.item->height();
1745 for (
int j = 0;
j <
c;
j++) {
1746 for (
int i = 0;
i <
r;
i++) {
1752 if (childIndex == numVisible)
1756 if (
child.item->width() > maxColWidth[
j])
1757 maxColWidth[
j] =
child.item->width();
1758 if (
child.item->height() > maxRowHeight[
i])
1759 maxRowHeight[
i] =
child.item->height();
1768 for (
int j = 0;
j < maxColWidth.
size();
j++) {
1771 widthSum += maxColWidth[
j];
1775 qreal heightSum = 0;
1776 for (
int i = 0;
i < maxRowHeight.
size();
i++) {
1779 heightSum += maxRowHeight[
i];
1793 if (!
d->isLeftToRight())
1803 childXOffset += maxColWidth[curCol] -
child.item->width();
1805 childXOffset += (maxColWidth[curCol] -
child.item->width())/2.0;
1807 if (!
d->isLeftToRight())
1808 childXOffset -= maxColWidth[curCol];
1812 alignYOffset += (maxRowHeight[curRow] -
child.item->height())/2.0;
1814 alignYOffset += maxRowHeight[curRow] -
child.item->height();
1820 if (
d->isLeftToRight())
1828 if (
d->isLeftToRight())
1841 if (
d->isLeftToRight())
1862 d->anchorConflict =
true;
1867 if (
d->anchorConflict)
1868 qmlWarning(
this) <<
"Cannot specify anchors for items inside Grid." <<
" Grid will not function.";
2010 q->prePositioning();
2011 emit q->effectiveLayoutDirectionChanged();
2049 if (
d->flow !=
flow) {
2078 return d->layoutDirection;
2087 d->effectiveLayoutDirectionChange();
2114 if (!
d->isLeftToRight())
2115 qSwap(hoffset1, hoffset2);
2116 qreal hoffset = hoffset1;
2118 qreal voffset = voffset1;
2128 if (
widthValid() && hoffset != hoffset1 && hoffset +
child.item->width() + hoffset2 >
width()) {
2130 voffset += linemax +
spacing();
2136 hoffset += linemax +
spacing();
2141 if (
d->isLeftToRight()) {
2145 hoffsets << hoffset;
2155 hoffset +=
child.item->width();
2157 linemax =
qMax(linemax,
child.item->height());
2159 voffset +=
child.item->height();
2161 linemax =
qMax(linemax,
child.item->width());
2165 if (
d->isLeftToRight())
2176 hoffset =
end - hoffsets[acc++] -
child.item->width();
2191 d->anchorConflict =
true;
2196 if (
d->anchorConflict)
2197 qmlWarning(
this) <<
"Cannot specify anchors for items inside Flow." <<
" Flow will not function.";
2202#include "moc_qquickpositioners_p.cpp"
qreal y() const
This convenience function is equivalent to calling pos().y().
qreal x() const
This convenience function is equivalent to calling pos().x().
bool isVisible() const
Returns true if the item is visible; otherwise, false is returned.
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void remove(qsizetype i, qsizetype n=1)
qsizetype count() const noexcept
static QObjectPrivate * get(QObject *o)
const QObjectList & children() const
Returns a list of child objects.
QObject * parent() const
Returns a pointer to the parent object.
\inmodule QtCore\reentrant
Anchors usedAnchors() const
void watchChanges(QQuickItem *other)
void setLeftPadding(qreal value, bool reset=false)
static Qt::LayoutDirection getEffectiveLayoutDirection(const QQuickBasePositioner *positioner)
void setPositioningDirty()
void setBottomPadding(qreal value, bool reset=false)
void setRightPadding(qreal value, bool reset=false)
void setTopPadding(qreal value, bool reset=false)
void unwatchChanges(QQuickItem *other)
QLazilyAllocated< ExtraData > extra
static Qt::LayoutDirection getLayoutDirection(const QQuickBasePositioner *positioner)
void moveTo(const QPointF &pos)
void updatePadding(qreal lp, qreal tp, qreal rp, qreal bp)
PositionedItem(QQuickItem *i)
For specifying a base for QQuickGraphics layouts.
void setBottomPadding(qreal padding)
virtual void reportConflictingAnchors()=0
QQuickBasePositioner(PositionerType, QQuickItem *parent)
void setRightPadding(qreal padding)
void positionItemY(qreal, PositionedItem *target)
void setLeftPadding(qreal padding)
QPODVector< PositionedItem, 8 > positionedItems
void updateAttachedProperties(QQuickPositionerAttached *specificProperty=nullptr, QQuickItem *specificPropertyOwner=nullptr) const
void setTopPadding(qreal padding)
void updatePolish() override
This function should perform any layout as required for this item.
static QQuickPositionerAttached * qmlAttachedProperties(QObject *obj)
virtual void doPositioning(QSizeF *contentSize)=0
void itemChange(ItemChange, const ItemChangeData &) override
Called when change occurs for this item.
void positionItemX(qreal, PositionedItem *target)
void resetBottomPadding()
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
void removePositionedItem(QPODVector< PositionedItem, 8 > *items, int index)
void positionItem(qreal x, qreal y, PositionedItem *target)
void clearPositionedItems(QPODVector< PositionedItem, 8 > *items)
void setPadding(qreal padding)
QPODVector< PositionedItem, 8 > unpositionedItems
void reportConflictingAnchors() override
void doPositioning(QSizeF *contentSize) override
QQuickColumn(QQuickItem *parent=nullptr)
\qmltype Column \instantiates QQuickColumn \inqmlmodule QtQuick \inherits Item
\qmltype Flow \instantiates QQuickFlow \inqmlmodule QtQuick \inherits Item
void effectiveLayoutDirectionChange() override
void layoutDirectionChanged()
void doPositioning(QSizeF *contentSize) override
Qt::LayoutDirection layoutDirection
void reportConflictingAnchors() override
void setLayoutDirection(Qt::LayoutDirection)
QQuickFlow(QQuickItem *parent=nullptr)
Qt::LayoutDirection effectiveLayoutDirection
\qmltype Grid \instantiates QQuickGrid \inqmlmodule QtQuick \inherits Item
void effectiveLayoutDirectionChange() override
void reportConflictingAnchors() override
void setColumns(const int columns)
\qmlproperty int QtQuick::Grid::columns
void columnSpacingChanged()
void setRows(const int rows)
HAlignment effectiveHAlign() const
Qt::LayoutDirection layoutDirection
VAlignment vItemAlign() const
void setColumnSpacing(qreal)
\qmlproperty qreal QtQuick::Grid::columnSpacing
QQuickGrid(QQuickItem *parent=nullptr)
void setHItemAlign(HAlignment align)
void doPositioning(QSizeF *contentSize) override
void setVItemAlign(VAlignment align)
void setLayoutDirection(Qt::LayoutDirection)
Qt::LayoutDirection effectiveLayoutDirection
void layoutDirectionChanged()
void setRowSpacing(qreal)
\qmlproperty qreal QtQuick::Grid::rowSpacing
HAlignment hItemAlign() const
\qmlproperty enumeration QtQuick::Grid::horizontalItemAlignment \qmlproperty enumeration QtQuick::Gri...
void removeItemChangeListener(QQuickItemChangeListener *, ChangeTypes types)
void addItemChangeListener(QQuickItemChangeListener *listener, ChangeTypes types)
static QQuickItemPrivate * get(QQuickItem *item)
void transitionNextReposition(QQuickItemViewTransitionableItem *item, QQuickItemViewTransitioner::TransitionType type, bool isTarget)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
QList< QQuickItem * > childItems() const
Returns the children of this item.
void componentComplete() override
\reimp Derived classes should call the base class method before adding their own actions to perform a...
qreal width
This property holds the width of this item.
virtual void itemChange(ItemChange, const ItemChangeData &)
Called when change occurs for this item.
bool isComponentComplete() const
Returns true if construction of the QML component is complete; otherwise returns false.
QQuickItem * parent
\qmlproperty Item QtQuick::Item::parent This property holds the visual parent of the item.
bool heightValid() const
Returns whether the height property has been set explicitly.
bool widthValid() const
Returns whether the width property has been set explicitly.
qreal height
This property holds the height of this item.
ItemChange
Used in conjunction with QQuickItem::itemChange() to notify the item about certain types of changes.
void setImplicitSize(qreal, qreal)
void setIndex(int index)
\qmlattachedproperty int QtQuick::Positioner::index
void isFirstItemChanged()
QQuickPositionerAttached(QObject *parent)
\qmltype Positioner \instantiates QQuickPositionerAttached \inqmlmodule QtQuick
void setIsFirstItem(bool isFirstItem)
\qmlattachedproperty bool QtQuick::Positioner::isFirstItem \qmlattachedproperty bool QtQuick::Positio...
void setIsLastItem(bool isLastItem)
\qmltype Row \instantiates QQuickRow \inqmlmodule QtQuick \inherits Item
void effectiveLayoutDirectionChange() override
Qt::LayoutDirection effectiveLayoutDirection
void reportConflictingAnchors() override
void setLayoutDirection(Qt::LayoutDirection)
QQuickRow(QQuickItem *parent=nullptr)
Qt::LayoutDirection layoutDirection
void layoutDirectionChanged()
void doPositioning(QSizeF *contentSize) override
\inmodule QtCore\reentrant
constexpr void setHeight(qreal h) noexcept
Sets the height to the given finite height.
constexpr void setWidth(qreal w) noexcept
Sets the width to the given finite width.
constexpr qreal width() const noexcept
Returns the width.
constexpr qreal height() const noexcept
Returns the height.
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
constexpr const T & qMax(const T &a, const T &b)
GLint GLint GLint GLint GLint x
[0]
GLenum GLenum GLsizei count
GLint GLint GLint yoffset
GLdouble GLdouble GLdouble GLdouble q
static void add(QPainterPath &path, const QWingedEdge &list, int edge, QPathEdge::Traversal traversal)
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
QQuickAnchors * anchors(QQuickItem *item)
static QList< QQuickStateAction > prepareTransition(QQuickDrawer *drawer, QQuickTransition *transition, qreal to)
QQuickItem * qobject_cast< QQuickItem * >(QObject *o)
static QT_BEGIN_NAMESPACE const QQuickItemPrivate::ChangeTypes watchedChanges
static QT_BEGIN_NAMESPACE const QQuickItemPrivate::ChangeTypes watchedChanges
#define QT_CONFIG(feature)
if(qFloatDistance(a, b)<(1<< 7))
[0]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent