Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickgridlayoutengine_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QQUICKGRIDLAYOUTENGINE_P_H
6#define QQUICKGRIDLAYOUTENGINE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists for the convenience
13// of the graphics view layout classes. This header
14// file may change from version to version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtGui/private/qgridlayoutengine_p.h>
20#include <QtGui/private/qlayoutpolicy_p.h>
21#include <QtCore/qmath.h>
22
23#include "qquickitem.h"
24#include "qquicklayout_p.h"
25#include "qdebug.h"
27
29public:
30 QQuickGridLayoutItem(QQuickItem *item, int row, int column,
31 int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = { })
32 : QGridLayoutItem(row, column, rowSpan, columnSpan, alignment), m_item(item), sizeHintCacheDirty(true), useFallbackToWidthOrHeight(true) {}
33
34
35 QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const override
36 {
37 Q_UNUSED(constraint); // Quick Layouts does not support constraint atm
38 return effectiveSizeHints()[which];
39 }
40
42 {
43 if (!sizeHintCacheDirty)
44 return cachedSizeHints;
45
46 QQuickLayout::effectiveSizeHints_helper(m_item, cachedSizeHints, nullptr, useFallbackToWidthOrHeight);
47 useFallbackToWidthOrHeight = false;
48
49 sizeHintCacheDirty = false;
50 return cachedSizeHints;
51 }
52
53 void setCachedSizeHints(QSizeF *sizeHints)
54 {
55 for (int i = 0; i < Qt::NSizeHints; ++i) {
56 cachedSizeHints[i] = sizeHints[i];
57 }
58 sizeHintCacheDirty = false;
59 }
60
62 {
63 qCDebug(lcQuickLayouts) << "QQuickGridLayoutItem::invalidate()";
64 sizeHintCacheDirty = true;
65 }
66
67 QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const override
68 {
69 return QQuickLayout::effectiveSizePolicy_helper(m_item, orientation, attachedLayoutObject(m_item, false));
70 }
71
72 void setGeometry(const QRectF &rect) override
73 {
74 QQuickLayoutAttached *info = attachedLayoutObject(m_item, false);
75 const QRectF r = info ? rect.marginsRemoved(info->effectiveQMargins()) : rect;
76 const QSizeF oldSize(m_item->width(), m_item->height());
77 const QSizeF newSize = r.size();
78 m_item->setPosition(r.topLeft());
79 if (newSize == oldSize) {
80 // We need to enforce a rearrange when the geometry is the same
81 if (QQuickLayout *lay = qobject_cast<QQuickLayout *>(m_item)) {
82 if (lay->invalidatedArrangement())
83 lay->rearrange(newSize);
84 }
85 } else {
86 m_item->setSize(newSize);
87 }
88 }
89
90 inline virtual QString toString() const override { return QDebug::toString(m_item); }
91
92 QQuickItem *layoutItem() const { return m_item; }
93
94 QQuickItem *m_item;
95private:
96 mutable QSizeF cachedSizeHints[Qt::NSizeHints];
97 mutable unsigned sizeHintCacheDirty : 1;
98 mutable unsigned useFallbackToWidthOrHeight : 1;
99};
100
102public:
103 QQuickGridLayoutEngine() : QGridLayoutEngine(Qt::AlignVCenter, true /*snapToPixelGrid*/) { }
104
105 int indexOf(QQuickItem *item) const {
106 for (int i = 0; i < q_items.size(); ++i) {
107 if (item == static_cast<QQuickGridLayoutItem*>(q_items.at(i))->layoutItem())
108 return i;
109 }
110 return -1;
111 }
112
113 QQuickGridLayoutItem *findLayoutItem(QQuickItem *layoutItem) const
114 {
115 for (int i = q_items.size() - 1; i >= 0; --i) {
116 QQuickGridLayoutItem *item = static_cast<QQuickGridLayoutItem*>(q_items.at(i));
117 if (item->layoutItem() == layoutItem)
118 return item;
119 }
120 return 0;
121 }
122
123 void setAlignment(QQuickItem *quickItem, Qt::Alignment alignment);
124
125 void setStretchFactor(QQuickItem *quickItem, int stretch, Qt::Orientation orientation);
126
127};
128
129
130
131QT_END_NAMESPACE
132
133#endif // QQUICKGRIDLAYOUTENGINE_P_H
void setStretchFactor(QQuickItem *quickItem, int stretch, Qt::Orientation orientation)
void setAlignment(QQuickItem *quickItem, Qt::Alignment alignment)
QQuickGridLayoutItem * findLayoutItem(QQuickItem *layoutItem) const
int indexOf(QQuickItem *item) const
QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const override
QSizeF * effectiveSizeHints() const
QQuickGridLayoutItem(QQuickItem *item, int row, int column, int rowSpan=1, int columnSpan=1, Qt::Alignment alignment={ })
void setCachedSizeHints(QSizeF *sizeHints)
QQuickItem * layoutItem() const
virtual QString toString() const override
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const override
void setGeometry(const QRectF &rect) override