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
qquickitemgroup.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 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
6
7#include <QtQuick/private/qquickimplicitsizeitem_p_p.h>
8
10
11QQuickItemGroup::QQuickItemGroup(QQuickItem *parent)
12 : QQuickImplicitSizeItem(*(new QQuickImplicitSizeItemPrivate), parent)
13{
14}
15
16QQuickItemGroup::~QQuickItemGroup()
17{
18 const auto children = childItems();
19 for (QQuickItem *child : children)
20 unwatch(child);
21}
22
23void QQuickItemGroup::watch(QQuickItem *item)
24{
25 QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
26}
27
28void QQuickItemGroup::unwatch(QQuickItem *item)
29{
30 QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
31}
32
33QSizeF QQuickItemGroup::calculateImplicitSize() const
34{
35 qreal width = 0;
36 qreal height = 0;
37 const auto children = childItems();
38 for (QQuickItem *child : children) {
39 width = qMax(width, child->implicitWidth());
40 height = qMax(height, child->implicitHeight());
41 }
42 return QSizeF(width, height);
43}
44
45void QQuickItemGroup::updateImplicitSize()
46{
47 QSizeF size = calculateImplicitSize();
48 setImplicitSize(size.width(), size.height());
49}
50
51void QQuickItemGroup::itemChange(ItemChange change, const ItemChangeData &data)
52{
53 QQuickImplicitSizeItem::itemChange(change, data);
54 switch (change) {
55 case ItemChildAddedChange:
56 watch(data.item);
57 data.item->setSize(QSizeF(width(), height()));
58 updateImplicitSize();
59 break;
60 case ItemChildRemovedChange:
61 unwatch(data.item);
62 updateImplicitSize();
63 break;
64 default:
65 break;
66 }
67}
68
69void QQuickItemGroup::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
70{
71 QQuickImplicitSizeItem::geometryChange(newGeometry, oldGeometry);
72
73 if (newGeometry.size() != oldGeometry.size()) {
74 const auto children = childItems();
75 for (QQuickItem *child : children)
76 child->setSize(newGeometry.size());
77 }
78}
79
80void QQuickItemGroup::itemImplicitWidthChanged(QQuickItem *)
81{
82 setImplicitWidth(calculateImplicitSize().width());
83}
84
85void QQuickItemGroup::itemImplicitHeightChanged(QQuickItem *)
86{
87 setImplicitHeight(calculateImplicitSize().height());
88}
89
90QT_END_NAMESPACE
91
92#include "moc_qquickitemgroup_p.cpp"