Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/graphicsview/qgraphicslayoutitem.cpp

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    4949#include "qgraphicslayoutitem_p.h"
    5050#include "qwidget.h"
     51#include "qgraphicswidget.h"
    5152
    5253#include <QtDebug>
     
    128129{
    129130    sizeHintCacheDirty = true;
    130     sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
     131    sizeHintWithConstraintCacheDirty = true;
    131132}
    132133
     
    137138{
    138139    Q_Q(const QGraphicsLayoutItem);
    139     if (!sizeHintCacheDirty && cachedConstraint == constraint)
    140         return cachedSizeHints;
     140    QSizeF *sizeHintCache;
     141    const bool hasConstraint = constraint.width() >= 0 || constraint.height() >= 0;
     142    if (hasConstraint) {
     143        if (!sizeHintWithConstraintCacheDirty && constraint == cachedConstraint)
     144            return cachedSizeHintsWithConstraints;
     145        sizeHintCache = cachedSizeHintsWithConstraints;
     146    } else {
     147        if (!sizeHintCacheDirty)
     148            return cachedSizeHints;
     149        sizeHintCache = cachedSizeHints;
     150    }
    141151
    142152    for (int i = 0; i < Qt::NSizeHints; ++i) {
    143         cachedSizeHints[i] = constraint;
     153        sizeHintCache[i] = constraint;
    144154        if (userSizeHints)
    145             combineSize(cachedSizeHints[i], userSizeHints[i]);
     155            combineSize(sizeHintCache[i], userSizeHints[i]);
    146156    }
    147157
    148     QSizeF &minS = cachedSizeHints[Qt::MinimumSize];
    149     QSizeF &prefS = cachedSizeHints[Qt::PreferredSize];
    150     QSizeF &maxS = cachedSizeHints[Qt::MaximumSize];
    151     QSizeF &descentS = cachedSizeHints[Qt::MinimumDescent];
     158    QSizeF &minS = sizeHintCache[Qt::MinimumSize];
     159    QSizeF &prefS = sizeHintCache[Qt::PreferredSize];
     160    QSizeF &maxS = sizeHintCache[Qt::MaximumSize];
     161    QSizeF &descentS = sizeHintCache[Qt::MinimumDescent];
    152162
    153163    normalizeHints(minS.rwidth(), prefS.rwidth(), maxS.rwidth(), descentS.rwidth());
     
    175185    // COMBINE_SIZE(descentS, q->sizeHint(Qt::MinimumDescent, constraint));
    176186
    177     cachedConstraint = constraint;
    178     sizeHintCacheDirty = false;
    179     return cachedSizeHints;
     187    if (hasConstraint) {
     188        cachedConstraint = constraint;
     189        sizeHintWithConstraintCacheDirty = false;
     190    } else {
     191        sizeHintCacheDirty = false;
     192    }
     193    return sizeHintCache;
    180194}
    181195
     
    232246        if (size == userSizeHints[which])
    233247            return;
    234     } else if (!size.isValid()) {
     248    } else if (size.width() < 0 && size.height() < 0) {
    235249        return;
    236250    }
     
    260274}
    261275
     276
     277bool QGraphicsLayoutItemPrivate::hasHeightForWidth() const
     278{
     279    Q_Q(const QGraphicsLayoutItem);
     280    if (isLayout) {
     281        const QGraphicsLayout *l = static_cast<const QGraphicsLayout *>(q);
     282        for (int i = l->count() - 1; i >= 0; --i) {
     283            if (QGraphicsLayoutItemPrivate::get(l->itemAt(i))->hasHeightForWidth())
     284                return true;
     285        }
     286    } else if (QGraphicsItem *item = q->graphicsItem()) {
     287        if (item->isWidget()) {
     288            QGraphicsWidget *w = static_cast<QGraphicsWidget *>(item);
     289            if (w->layout()) {
     290                return QGraphicsLayoutItemPrivate::get(w->layout())->hasHeightForWidth();
     291            }
     292        }
     293    }
     294    return q->sizePolicy().hasHeightForWidth();
     295}
     296
     297bool QGraphicsLayoutItemPrivate::hasWidthForHeight() const
     298{
     299    // enable this code when we add QSizePolicy::hasWidthForHeight() (For 4.8)
     300#if 1
     301    return false;
     302#else
     303    Q_Q(const QGraphicsLayoutItem);
     304    if (isLayout) {
     305        const QGraphicsLayout *l = static_cast<const QGraphicsLayout *>(q);
     306        for (int i = l->count() - 1; i >= 0; --i) {
     307            if (QGraphicsLayoutItemPrivate::get(l->itemAt(i))->hasWidthForHeight())
     308                return true;
     309        }
     310    } else if (QGraphicsItem *item = q->graphicsItem()) {
     311        if (item->isWidget()) {
     312            QGraphicsWidget *w = static_cast<QGraphicsWidget *>(item);
     313            if (w->layout()) {
     314                return QGraphicsLayoutItemPrivate::get(w->layout())->hasWidthForHeight();
     315            }
     316        }
     317    }
     318    return q->sizePolicy().hasWidthForHeight();
     319#endif
     320}
     321
    262322/*!
    263323    \class QGraphicsLayoutItem
     
    323383
    324384    Qt uses QGraphicsLayoutItem to provide layout functionality in the
    325     \l{The Graphics View Framework}, but in the future its use may spread
     385    \l{Graphics View Framework}, but in the future its use may spread
    326386    throughout Qt itself.
    327387
     
    340400    Q_D(QGraphicsLayoutItem);
    341401    d->init();
     402    d->sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
    342403    d->q_ptr = this;
    343404}
     
    350411{
    351412    Q_D(QGraphicsLayoutItem);
     413    d->init();
    352414    d->q_ptr = this;
    353415}
     
    769831    Q_D(QGraphicsLayoutItem);
    770832    d->sizeHintCacheDirty = true;
     833    d->sizeHintWithConstraintCacheDirty = true;
    771834}
    772835
Note: See TracChangeset for help on using the changeset viewer.