summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qlayoutitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel/qlayoutitem.cpp')
-rw-r--r--src/gui/kernel/qlayoutitem.cpp834
1 files changed, 0 insertions, 834 deletions
diff --git a/src/gui/kernel/qlayoutitem.cpp b/src/gui/kernel/qlayoutitem.cpp
deleted file mode 100644
index aeb96e9ef5..0000000000
--- a/src/gui/kernel/qlayoutitem.cpp
+++ /dev/null
@@ -1,834 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qlayout.h"
-
-#include "qapplication.h"
-#include "qlayoutengine_p.h"
-#include "qmenubar.h"
-#include "qtoolbar.h"
-#include "qevent.h"
-#include "qstyle.h"
-#include "qvariant.h"
-#include "qwidget_p.h"
-
-QT_BEGIN_NAMESPACE
-
-inline static QRect fromLayoutItemRect(QWidgetPrivate *priv, const QRect &rect)
-{
- return rect.adjusted(priv->leftLayoutItemMargin, priv->topLayoutItemMargin,
- -priv->rightLayoutItemMargin, -priv->bottomLayoutItemMargin);
-}
-
-inline static QSize fromLayoutItemSize(QWidgetPrivate *priv, const QSize &size)
-{
- return fromLayoutItemRect(priv, QRect(QPoint(0, 0), size)).size();
-}
-
-inline static QRect toLayoutItemRect(QWidgetPrivate *priv, const QRect &rect)
-{
- return rect.adjusted(-priv->leftLayoutItemMargin, -priv->topLayoutItemMargin,
- priv->rightLayoutItemMargin, priv->bottomLayoutItemMargin);
-}
-
-inline static QSize toLayoutItemSize(QWidgetPrivate *priv, const QSize &size)
-{
- return toLayoutItemRect(priv, QRect(QPoint(0, 0), size)).size();
-}
-
-/*!
- Returns a QVariant storing this QSizePolicy.
-*/
-QSizePolicy::operator QVariant() const
-{
- return QVariant(QVariant::SizePolicy, this);
-}
-
-/*!
- \class QLayoutItem
- \brief The QLayoutItem class provides an abstract item that a
- QLayout manipulates.
-
- \ingroup geomanagement
-
- This is used by custom layouts.
-
- Pure virtual functions are provided to return information about
- the layout, including, sizeHint(), minimumSize(), maximumSize()
- and expanding().
-
- The layout's geometry can be set and retrieved with setGeometry()
- and geometry(), and its alignment with setAlignment() and
- alignment().
-
- isEmpty() returns whether the layout item is empty. If the
- concrete item is a QWidget, it can be retrieved using widget().
- Similarly for layout() and spacerItem().
-
- Some layouts have width and height interdependencies. These can
- be expressed using hasHeightForWidth(), heightForWidth(), and
- minimumHeightForWidth(). For more explanation see the \e{Qt
- Quarterly} article
- \l{http://qt.nokia.com/doc/qq/qq04-height-for-width.html}{Trading
- Height for Width}.
-
- \sa QLayout
-*/
-
-/*!
- \class QSpacerItem
- \ingroup geomanagement
- \brief The QSpacerItem class provides blank space in a layout.
-
- Normally, you don't need to use this class directly. Qt's
- built-in layout managers provide the following functions for
- manipulating empty space in layouts:
-
- \table
- \header \o Class
- \o Functions
- \row \o QHBoxLayout
- \o \l{QBoxLayout::addSpacing()}{addSpacing()},
- \l{QBoxLayout::addStretch()}{addStretch()},
- \l{QBoxLayout::insertSpacing()}{insertSpacing()},
- \l{QBoxLayout::insertStretch()}{insertStretch()}
- \row \o QGridLayout
- \o \l{QGridLayout::setRowMinimumHeight()}{setRowMinimumHeight()},
- \l{QGridLayout::setRowStretch()}{setRowStretch()},
- \l{QGridLayout::setColumnMinimumWidth()}{setColumnMinimumWidth()},
- \l{QGridLayout::setColumnStretch()}{setColumnStretch()}
- \endtable
-
- \sa QLayout, QWidgetItem, QLayoutItem::spacerItem()
-*/
-
-/*!
- \class QWidgetItem
- \ingroup geomanagement
- \brief The QWidgetItem class is a layout item that represents a widget.
-
- Normally, you don't need to use this class directly. Qt's
- built-in layout managers provide the following functions for
- manipulating widgets in layouts:
-
- \table
- \header \o Class
- \o Functions
- \row \o QBoxLayout
- \o \l{QBoxLayout::addWidget()}{addWidget()},
- \l{QBoxLayout::insertWidget()}{insertWidget()},
- \l{QBoxLayout::setStretchFactor()}{setStretchFactor()}
- \row \o QGridLayout
- \o \l{QGridLayout::addWidget()}{addWidget()}
- \row \o QStackedLayout
- \o \l{QStackedLayout::addWidget()}{addWidget()},
- \l{QStackedLayout::insertWidget()}{insertWidget()},
- \l{QStackedLayout::currentWidget()}{currentWidget()},
- \l{QStackedLayout::setCurrentWidget()}{setCurrentWidget()},
- \l{QStackedLayout::widget()}{widget()}
- \endtable
-
- \sa QLayout, QSpacerItem, QLayoutItem::widget()
-*/
-
-/*!
- \fn QLayoutItem::QLayoutItem(Qt::Alignment alignment)
-
- Constructs a layout item with an \a alignment.
- Not all subclasses support alignment.
-*/
-
-/*!
- \fn Qt::Alignment QLayoutItem::alignment() const
-
- Returns the alignment of this item.
-*/
-
-/*!
- Sets the alignment of this item to \a alignment.
-
- \bold{Note:} Item alignment is only supported by QLayoutItem subclasses
- where it would have a visual effect. Except for QSpacerItem, which provides
- blank space for layouts, all public Qt classes that inherit QLayoutItem
- support item alignment.
-*/
-void QLayoutItem::setAlignment(Qt::Alignment alignment)
-{
- align = alignment;
-}
-
-/*!
- \fn QSize QLayoutItem::maximumSize() const
-
- Implemented in subclasses to return the maximum size of this item.
-*/
-
-/*!
- \fn QSize QLayoutItem::minimumSize() const
-
- Implemented in subclasses to return the minimum size of this item.
-*/
-
-/*!
- \fn QSize QLayoutItem::sizeHint() const
-
- Implemented in subclasses to return the preferred size of this item.
-*/
-
-/*!
- \fn Qt::Orientations QLayoutItem::expandingDirections() const
-
- Returns whether this layout item can make use of more space than
- sizeHint(). A value of Qt::Vertical or Qt::Horizontal means that
- it wants to grow in only one dimension, whereas Qt::Vertical |
- Qt::Horizontal means that it wants to grow in both dimensions.
-*/
-
-/*!
- \fn void QLayoutItem::setGeometry(const QRect &r)
-
- Implemented in subclasses to set this item's geometry to \a r.
-
- \sa geometry()
-*/
-
-/*!
- \fn QRect QLayoutItem::geometry() const
-
- Returns the rectangle covered by this layout item.
-
- \sa setGeometry()
-*/
-
-/*!
- \fn virtual bool QLayoutItem::isEmpty() const
-
- Implemented in subclasses to return whether this item is empty,
- i.e. whether it contains any widgets.
-*/
-
-/*!
- \fn QSpacerItem::QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy)
-
- Constructs a spacer item with preferred width \a w, preferred
- height \a h, horizontal size policy \a hPolicy and vertical size
- policy \a vPolicy.
-
- The default values provide a gap that is able to stretch if
- nothing else wants the space.
-*/
-
-/*!
- Changes this spacer item to have preferred width \a w, preferred
- height \a h, horizontal size policy \a hPolicy and vertical size
- policy \a vPolicy.
-
- The default values provide a gap that is able to stretch if
- nothing else wants the space.
-
- Note that if changeSize() is called after the spacer item has been added
- to a layout, it is necessary to invalidate the layout in order for the
- spacer item's new size to take effect.
-
- \sa QSpacerItem::invalidate()
-*/
-void QSpacerItem::changeSize(int w, int h, QSizePolicy::Policy hPolicy,
- QSizePolicy::Policy vPolicy)
-{
- width = w;
- height = h;
- sizeP = QSizePolicy(hPolicy, vPolicy);
-}
-
-/*!
- \fn QWidgetItem::QWidgetItem(QWidget *widget)
-
- Creates an item containing the given \a widget.
-*/
-
-/*!
- Destroys the QLayoutItem.
-*/
-QLayoutItem::~QLayoutItem()
-{
-}
-
-/*!
- Invalidates any cached information in this layout item.
-*/
-void QLayoutItem::invalidate()
-{
-}
-
-/*!
- If this item is a QLayout, it is returned as a QLayout; otherwise
- 0 is returned. This function provides type-safe casting.
-*/
-QLayout * QLayoutItem::layout()
-{
- return 0;
-}
-
-/*!
- If this item is a QSpacerItem, it is returned as a QSpacerItem;
- otherwise 0 is returned. This function provides type-safe casting.
-*/
-QSpacerItem * QLayoutItem::spacerItem()
-{
- return 0;
-}
-
-/*!
- \reimp
-*/
-QLayout * QLayout::layout()
-{
- return this;
-}
-
-/*!
- Returns a pointer to this object.
-*/
-QSpacerItem * QSpacerItem::spacerItem()
-{
- return this;
-}
-
-/*!
- If this item is a QWidget, it is returned as a QWidget; otherwise
- 0 is returned. This function provides type-safe casting.
-*/
-QWidget * QLayoutItem::widget()
-{
- return 0;
-}
-
-/*!
- Returns the widget managed by this item.
-*/
-QWidget *QWidgetItem::widget()
-{
- return wid;
-}
-
-/*!
- Returns true if this layout's preferred height depends on its
- width; otherwise returns false. The default implementation returns
- false.
-
- Reimplement this function in layout managers that support height
- for width.
-
- \sa heightForWidth(), QWidget::heightForWidth()
-*/
-bool QLayoutItem::hasHeightForWidth() const
-{
- return false;
-}
-
-/*!
- Returns the minimum height this widget needs for the given width,
- \a w. The default implementation simply returns heightForWidth(\a
- w).
-*/
-int QLayoutItem::minimumHeightForWidth(int w) const
-{
- return heightForWidth(w);
-}
-
-
-/*!
- Returns the preferred height for this layout item, given the width
- \a w.
-
- The default implementation returns -1, indicating that the
- preferred height is independent of the width of the item. Using
- the function hasHeightForWidth() will typically be much faster
- than calling this function and testing for -1.
-
- Reimplement this function in layout managers that support height
- for width. A typical implementation will look like this:
- \snippet doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp 0
-
- Caching is strongly recommended; without it layout will take
- exponential time.
-
- \sa hasHeightForWidth()
-*/
-int QLayoutItem::heightForWidth(int /* w */) const
-{
- return -1;
-}
-
-/*!
- Returns the control type(s) for the layout item. For a
- QWidgetItem, the control type comes from the widget's size
- policy; for a QLayoutItem, the control types is derived from the
- layout's contents.
-
- \sa QSizePolicy::controlType()
-*/
-QSizePolicy::ControlTypes QLayoutItem::controlTypes() const
-{
- // ### Qt 5: This function should probably be virtual instead
- if (const QWidget *widget = const_cast<QLayoutItem*>(this)->widget()) {
- return widget->sizePolicy().controlType();
- } else if (const QLayout *layout = const_cast<QLayoutItem*>(this)->layout()) {
- if (layout->count() == 0)
- return QSizePolicy::DefaultType;
- QSizePolicy::ControlTypes types;
- for (int i = layout->count() - 1; i >= 0; --i)
- types |= layout->itemAt(i)->controlTypes();
- return types;
- }
- return QSizePolicy::DefaultType;
-}
-
-/*!
- \reimp
-*/
-void QSpacerItem::setGeometry(const QRect &r)
-{
- rect = r;
-}
-
-/*!
- \reimp
-*/
-void QWidgetItem::setGeometry(const QRect &rect)
-{
- if (isEmpty())
- return;
-
- QRect r = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? fromLayoutItemRect(wid->d_func(), rect)
- : rect;
- const QSize widgetRectSurplus = r.size() - rect.size();
-
- /*
- For historical reasons, this code is done using widget rect
- coordinates, not layout item rect coordinates. However,
- QWidgetItem's sizeHint(), maximumSize(), and heightForWidth()
- all work in terms of layout item rect coordinates, so we have to
- add or subtract widgetRectSurplus here and there. The code could
- be much simpler if we did everything using layout item rect
- coordinates and did the conversion right before the call to
- QWidget::setGeometry().
- */
-
- QSize s = r.size().boundedTo(maximumSize() + widgetRectSurplus);
- int x = r.x();
- int y = r.y();
- if (align & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)) {
- QSize pref(sizeHint());
- QSizePolicy sp = wid->sizePolicy();
- if (sp.horizontalPolicy() == QSizePolicy::Ignored)
- pref.setWidth(wid->sizeHint().expandedTo(wid->minimumSize()).width());
- if (sp.verticalPolicy() == QSizePolicy::Ignored)
- pref.setHeight(wid->sizeHint().expandedTo(wid->minimumSize()).height());
- pref += widgetRectSurplus;
- if (align & Qt::AlignHorizontal_Mask)
- s.setWidth(qMin(s.width(), pref.width()));
- if (align & Qt::AlignVertical_Mask) {
- if (hasHeightForWidth())
- s.setHeight(qMin(s.height(),
- heightForWidth(s.width() - widgetRectSurplus.width())
- + widgetRectSurplus.height()));
- else
- s.setHeight(qMin(s.height(), pref.height()));
- }
- }
- Qt::Alignment alignHoriz = QStyle::visualAlignment(wid->layoutDirection(), align);
- if (alignHoriz & Qt::AlignRight)
- x = x + (r.width() - s.width());
- else if (!(alignHoriz & Qt::AlignLeft))
- x = x + (r.width() - s.width()) / 2;
-
- if (align & Qt::AlignBottom)
- y = y + (r.height() - s.height());
- else if (!(align & Qt::AlignTop))
- y = y + (r.height() - s.height()) / 2;
-
- wid->setGeometry(x, y, s.width(), s.height());
-}
-
-/*!
- \reimp
-*/
-QRect QSpacerItem::geometry() const
-{
- return rect;
-}
-
-/*!
- \reimp
-*/
-QRect QWidgetItem::geometry() const
-{
- return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? toLayoutItemRect(wid->d_func(), wid->geometry())
- : wid->geometry();
-}
-
-
-/*!
- \reimp
-*/
-bool QWidgetItem::hasHeightForWidth() const
-{
- if (isEmpty())
- return false;
- return wid->d_func()->hasHeightForWidth();
-}
-
-/*!
- \reimp
-*/
-int QWidgetItem::heightForWidth(int w) const
-{
- if (isEmpty())
- return -1;
-
- w = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? fromLayoutItemSize(wid->d_func(), QSize(w, 0)).width()
- : w;
-
- int hfw;
- if (wid->layout())
- hfw = wid->layout()->totalHeightForWidth(w);
- else
- hfw = wid->heightForWidth(w);
-
- if (hfw > wid->maximumHeight())
- hfw = wid->maximumHeight();
- if (hfw < wid->minimumHeight())
- hfw = wid->minimumHeight();
-
- hfw = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? toLayoutItemSize(wid->d_func(), QSize(0, hfw)).height()
- : hfw;
-
- if (hfw < 0)
- hfw = 0;
- return hfw;
-}
-
-/*!
- \reimp
-*/
-Qt::Orientations QSpacerItem::expandingDirections() const
-{
- return sizeP.expandingDirections();
-}
-
-/*!
- \reimp
-*/
-Qt::Orientations QWidgetItem::expandingDirections() const
-{
- if (isEmpty())
- return Qt::Orientations(0);
-
- Qt::Orientations e = wid->sizePolicy().expandingDirections();
- /*
- ### Qt 4.0:
- If the layout is expanding, we make the widget expanding, even if
- its own size policy isn't expanding. This behavior should be
- reconsidered.
- */
- if (wid->layout()) {
- if (wid->sizePolicy().horizontalPolicy() & QSizePolicy::GrowFlag
- && (wid->layout()->expandingDirections() & Qt::Horizontal))
- e |= Qt::Horizontal;
- if (wid->sizePolicy().verticalPolicy() & QSizePolicy::GrowFlag
- && (wid->layout()->expandingDirections() & Qt::Vertical))
- e |= Qt::Vertical;
- }
-
- if (align & Qt::AlignHorizontal_Mask)
- e &= ~Qt::Horizontal;
- if (align & Qt::AlignVertical_Mask)
- e &= ~Qt::Vertical;
- return e;
-}
-
-/*!
- \reimp
-*/
-QSize QSpacerItem::minimumSize() const
-{
- return QSize(sizeP.horizontalPolicy() & QSizePolicy::ShrinkFlag ? 0 : width,
- sizeP.verticalPolicy() & QSizePolicy::ShrinkFlag ? 0 : height);
-}
-
-/*!
- \reimp
-*/
-QSize QWidgetItem::minimumSize() const
-{
- if (isEmpty())
- return QSize(0, 0);
- return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? toLayoutItemSize(wid->d_func(), qSmartMinSize(this))
- : qSmartMinSize(this);
-}
-
-/*!
- \reimp
-*/
-QSize QSpacerItem::maximumSize() const
-{
- return QSize(sizeP.horizontalPolicy() & QSizePolicy::GrowFlag ? QLAYOUTSIZE_MAX : width,
- sizeP.verticalPolicy() & QSizePolicy::GrowFlag ? QLAYOUTSIZE_MAX : height);
-}
-
-/*!
- \reimp
-*/
-QSize QWidgetItem::maximumSize() const
-{
- if (isEmpty()) {
- return QSize(0, 0);
- } else {
- return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? toLayoutItemSize(wid->d_func(), qSmartMaxSize(this, align))
- : qSmartMaxSize(this, align);
- }
-}
-
-/*!
- \reimp
-*/
-QSize QSpacerItem::sizeHint() const
-{
- return QSize(width, height);
-}
-
-/*!
- \reimp
-*/
-QSize QWidgetItem::sizeHint() const
-{
- QSize s(0, 0);
- if (!isEmpty()) {
- s = wid->sizeHint().expandedTo(wid->minimumSizeHint());
- s = s.boundedTo(wid->maximumSize())
- .expandedTo(wid->minimumSize());
- s = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect)
- ? toLayoutItemSize(wid->d_func(), s)
- : s;
-
- if (wid->sizePolicy().horizontalPolicy() == QSizePolicy::Ignored)
- s.setWidth(0);
- if (wid->sizePolicy().verticalPolicy() == QSizePolicy::Ignored)
- s.setHeight(0);
- }
- return s;
-}
-
-/*!
- Returns true.
-*/
-bool QSpacerItem::isEmpty() const
-{
- return true;
-}
-
-/*!
- Returns true if the widget is hidden; otherwise returns false.
-
- \sa QWidget::isHidden()
-*/
-bool QWidgetItem::isEmpty() const
-{
- return wid->isHidden() || wid->isWindow();
-}
-
-/*!
- \class QWidgetItemV2
- \internal
-*/
-
-inline bool QWidgetItemV2::useSizeCache() const
-{
- return wid->d_func()->widgetItem == this;
-}
-
-void QWidgetItemV2::updateCacheIfNecessary() const
-{
- if (q_cachedMinimumSize.width() != Dirty)
- return;
-
- const QSize sizeHint(wid->sizeHint());
- const QSize minimumSizeHint(wid->minimumSizeHint());
- const QSize minimumSize(wid->minimumSize());
- const QSize maximumSize(wid->maximumSize());
- const QSizePolicy sizePolicy(wid->sizePolicy());
- const QSize expandedSizeHint(sizeHint.expandedTo(minimumSizeHint));
-
- const QSize smartMinSize(qSmartMinSize(sizeHint, minimumSizeHint, minimumSize, maximumSize, sizePolicy));
- const QSize smartMaxSize(qSmartMaxSize(expandedSizeHint, minimumSize, maximumSize, sizePolicy, align));
-
- const bool useLayoutItemRect = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect);
-
- q_cachedMinimumSize = useLayoutItemRect
- ? toLayoutItemSize(wid->d_func(), smartMinSize)
- : smartMinSize;
-
- q_cachedSizeHint = expandedSizeHint;
- q_cachedSizeHint = q_cachedSizeHint.boundedTo(maximumSize)
- .expandedTo(minimumSize);
- q_cachedSizeHint = useLayoutItemRect
- ? toLayoutItemSize(wid->d_func(), q_cachedSizeHint)
- : q_cachedSizeHint;
-
- if (wid->sizePolicy().horizontalPolicy() == QSizePolicy::Ignored)
- q_cachedSizeHint.setWidth(0);
- if (wid->sizePolicy().verticalPolicy() == QSizePolicy::Ignored)
- q_cachedSizeHint.setHeight(0);
-
- q_cachedMaximumSize = useLayoutItemRect
- ? toLayoutItemSize(wid->d_func(), smartMaxSize)
- : smartMaxSize;
-}
-
-QWidgetItemV2::QWidgetItemV2(QWidget *widget)
- : QWidgetItem(widget),
- q_cachedMinimumSize(Dirty, Dirty),
- q_cachedSizeHint(Dirty, Dirty),
- q_cachedMaximumSize(Dirty, Dirty),
- q_firstCachedHfw(0),
- q_hfwCacheSize(0),
- d(0)
-{
- QWidgetPrivate *wd = wid->d_func();
- if (!wd->widgetItem)
- wd->widgetItem = this;
-}
-
-QWidgetItemV2::~QWidgetItemV2()
-{
- if (wid) {
- QWidgetPrivate *wd = wid->d_func();
- if (wd->widgetItem == this)
- wd->widgetItem = 0;
- }
-}
-
-QSize QWidgetItemV2::sizeHint() const
-{
- if (isEmpty())
- return QSize(0, 0);
-
- if (useSizeCache()) {
- updateCacheIfNecessary();
- return q_cachedSizeHint;
- } else {
- return QWidgetItem::sizeHint();
- }
-}
-
-QSize QWidgetItemV2::minimumSize() const
-{
- if (isEmpty())
- return QSize(0, 0);
-
- if (useSizeCache()) {
- updateCacheIfNecessary();
- return q_cachedMinimumSize;
- } else {
- return QWidgetItem::minimumSize();
- }
-}
-
-QSize QWidgetItemV2::maximumSize() const
-{
- if (isEmpty())
- return QSize(0, 0);
-
- if (useSizeCache()) {
- updateCacheIfNecessary();
- return q_cachedMaximumSize;
- } else {
- return QWidgetItem::maximumSize();
- }
-}
-
-/*
- The height-for-width cache is organized as a circular buffer. The entries
-
- q_hfwCachedHfws[q_firstCachedHfw],
- ...,
- q_hfwCachedHfws[(q_firstCachedHfw + q_hfwCacheSize - 1) % HfwCacheMaxSize]
-
- contain the last cached values. When the cache is full, the first entry to
- be erased is the entry before q_hfwCachedHfws[q_firstCachedHfw]. When
- values are looked up, we try to move q_firstCachedHfw to point to that new
- entry (unless the cache is not full, in which case it would leave the cache
- in a broken state), so that the most recently used entry is also the last
- to be erased.
-*/
-
-int QWidgetItemV2::heightForWidth(int width) const
-{
- if (isEmpty())
- return -1;
-
- for (int i = 0; i < q_hfwCacheSize; ++i) {
- int offset = q_firstCachedHfw + i;
- const QSize &size = q_cachedHfws[offset % HfwCacheMaxSize];
- if (size.width() == width) {
- if (q_hfwCacheSize == HfwCacheMaxSize)
- q_firstCachedHfw = offset;
- return size.height();
- }
- }
-
- if (q_hfwCacheSize < HfwCacheMaxSize)
- ++q_hfwCacheSize;
- q_firstCachedHfw = (q_firstCachedHfw + HfwCacheMaxSize - 1) % HfwCacheMaxSize;
-
- int height = QWidgetItem::heightForWidth(width);
- q_cachedHfws[q_firstCachedHfw] = QSize(width, height);
- return height;
-}
-
-QT_END_NAMESPACE