Changeset 846 for trunk/src/gui/graphicsview/qgraphicslayoutitem.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/graphicsview/qgraphicslayoutitem.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 49 49 #include "qgraphicslayoutitem_p.h" 50 50 #include "qwidget.h" 51 #include "qgraphicswidget.h" 51 52 52 53 #include <QtDebug> … … 128 129 { 129 130 sizeHintCacheDirty = true; 130 size Policy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);131 sizeHintWithConstraintCacheDirty = true; 131 132 } 132 133 … … 137 138 { 138 139 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 } 141 151 142 152 for (int i = 0; i < Qt::NSizeHints; ++i) { 143 cachedSizeHints[i] = constraint;153 sizeHintCache[i] = constraint; 144 154 if (userSizeHints) 145 combineSize( cachedSizeHints[i], userSizeHints[i]);155 combineSize(sizeHintCache[i], userSizeHints[i]); 146 156 } 147 157 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]; 152 162 153 163 normalizeHints(minS.rwidth(), prefS.rwidth(), maxS.rwidth(), descentS.rwidth()); … … 175 185 // COMBINE_SIZE(descentS, q->sizeHint(Qt::MinimumDescent, constraint)); 176 186 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; 180 194 } 181 195 … … 232 246 if (size == userSizeHints[which]) 233 247 return; 234 } else if ( !size.isValid()) {248 } else if (size.width() < 0 && size.height() < 0) { 235 249 return; 236 250 } … … 260 274 } 261 275 276 277 bool 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 297 bool 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 262 322 /*! 263 323 \class QGraphicsLayoutItem … … 323 383 324 384 Qt uses QGraphicsLayoutItem to provide layout functionality in the 325 \l{ TheGraphics View Framework}, but in the future its use may spread385 \l{Graphics View Framework}, but in the future its use may spread 326 386 throughout Qt itself. 327 387 … … 340 400 Q_D(QGraphicsLayoutItem); 341 401 d->init(); 402 d->sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 342 403 d->q_ptr = this; 343 404 } … … 350 411 { 351 412 Q_D(QGraphicsLayoutItem); 413 d->init(); 352 414 d->q_ptr = this; 353 415 } … … 769 831 Q_D(QGraphicsLayoutItem); 770 832 d->sizeHintCacheDirty = true; 833 d->sizeHintWithConstraintCacheDirty = true; 771 834 } 772 835
Note:
See TracChangeset
for help on using the changeset viewer.