Ignore:
Timestamp:
Mar 8, 2010, 12:52:58 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.2 sources.

Location:
trunk
Files:
52 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/graphicsview/qgraph_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsanchorlayout.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsanchorlayout.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsanchorlayout_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsgridlayout.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsgridlayout.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsitem.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    269269
    270270/*!
     271    \variable QGraphicsItem::Type
     272
     273    The type value returned by the virtual type() function in standard
     274    graphics item classes in Qt. All such standard graphics item
     275    classes in Qt are associated with a unique value for Type,
     276    e.g. the value returned by QGraphicsPathItem::type() is 2.
     277
     278    \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 18
     279*/
     280
     281/*!
    271282    \variable QGraphicsItem::UserType
    272283
     
    277288
    278289    \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 1
     290
     291    \note UserType = 65536
    279292*/
    280293
     
    799812    }
    800813
    801     foreach (QGraphicsItem *child, children)
    802         child->d_ptr->updateAncestorFlag(childFlag, flag, enabled, false);
     814    for (int i = 0; i < children.size(); ++i)
     815        children.at(i)->d_ptr->updateAncestorFlag(childFlag, flag, enabled, false);
     816}
     817
     818void QGraphicsItemPrivate::updateAncestorFlags()
     819{
     820    int flags = 0;
     821    if (parent) {
     822        // Inherit the parent's ancestor flags.
     823        QGraphicsItemPrivate *pd = parent->d_ptr.data();
     824        flags = pd->ancestorFlags;
     825
     826        // Add in flags from the parent.
     827        if (pd->filtersDescendantEvents)
     828            flags |= AncestorFiltersChildEvents;
     829        if (pd->handlesChildEvents)
     830            flags |= AncestorHandlesChildEvents;
     831        if (pd->flags & QGraphicsItem::ItemClipsChildrenToShape)
     832            flags |= AncestorClipsChildren;
     833        if (pd->flags & QGraphicsItem::ItemIgnoresTransformations)
     834            flags |= AncestorIgnoresTransformations;
     835    }
     836
     837    if (ancestorFlags == flags)
     838        return; // No change; stop propagation.
     839    ancestorFlags = flags;
     840
     841    // Propagate to children recursively.
     842    for (int i = 0; i < children.size(); ++i)
     843        children.at(i)->d_ptr->updateAncestorFlags();
    803844}
    804845
     
    9851026    inDestructor is 1.
    9861027*/
    987 void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent)
     1028void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const QVariant *newParentVariant,
     1029                                               const QVariant *thisPointerVariant)
    9881030{
    9891031    Q_Q(QGraphicsItem);
    990     if (newParent == q) {
    991         qWarning("QGraphicsItem::setParentItem: cannot assign %p as a parent of itself", this);
    992         return;
    993     }
    9941032    if (newParent == parent)
    9951033        return;
    9961034
    997     const QVariant newParentVariant(q->itemChange(QGraphicsItem::ItemParentChange,
    998                                                   qVariantFromValue<QGraphicsItem *>(newParent)));
    999     newParent = qVariantValue<QGraphicsItem *>(newParentVariant);
    1000     if (newParent == parent)
    1001         return;
    1002 
    10031035    if (scene) {
    10041036        // Deliver the change to the index
    1005         scene->d_func()->index->itemChange(q, QGraphicsItem::ItemParentChange, newParentVariant);
     1037        if (scene->d_func()->indexMethod != QGraphicsScene::NoIndex)
     1038            scene->d_func()->index->itemChange(q, QGraphicsItem::ItemParentChange, newParent);
    10061039
    10071040        // Disable scene pos notifications for old ancestors
     
    10211054        q_ptr->prepareGeometryChange();
    10221055
    1023     const QVariant thisPointerVariant(qVariantFromValue<QGraphicsItem *>(q));
    10241056    if (parent) {
    10251057        // Remove from current parent
    10261058        parent->d_ptr->removeChild(q);
    1027         parent->itemChange(QGraphicsItem::ItemChildRemovedChange, thisPointerVariant);
     1059        if (thisPointerVariant)
     1060            parent->itemChange(QGraphicsItem::ItemChildRemovedChange, *thisPointerVariant);
    10281061    }
    10291062
     
    10431076    QGraphicsItem *parentFocusScopeItem = 0;
    10441077    while (p) {
    1045         if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
     1078        if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) {
    10461079            // If this item's focus scope's focus scope item points
    10471080            // to this item or a descendent, then clear it.
     
    10561089    }
    10571090
     1091    // Update graphics effect optimization flag
     1092    if (newParent && (graphicsEffect || mayHaveChildWithGraphicsEffect))
     1093        newParent->d_ptr->updateChildWithGraphicsEffectFlagRecursively();
     1094
    10581095    // Update focus scope item ptr in new scope.
    10591096    QGraphicsItem *newFocusScopeItem = subFocusItem ? subFocusItem : parentFocusScopeItem;
     
    10641101            QGraphicsItem *p = subFocusItem->d_ptr->parent;
    10651102            while (p) {
    1066                 if (p->flags() & QGraphicsItem::ItemIsFocusScope)
     1103                if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope)
    10671104                    ancestorScope = p;
    1068                 if (p->isPanel())
     1105                if (p->d_ptr->flags & QGraphicsItem::ItemIsPanel)
    10691106                    break;
    1070                 p = p->parentItem();
     1107                p = p->d_ptr->parent;
    10711108            }
    10721109            if (ancestorScope)
     
    10761113        QGraphicsItem *p = newParent;
    10771114        while (p) {
    1078             if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
     1115            if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) {
    10791116                p->d_ptr->focusScopeItem = newFocusScopeItem;
    10801117                // Ensure the new item is no longer the subFocusItem. The
     
    10901127
    10911128    if ((parent = newParent)) {
    1092         bool implicitUpdate = false;
    10931129        if (parent->d_func()->scene && parent->d_func()->scene != scene) {
    10941130            // Move this item to its new parent's scene
    10951131            parent->d_func()->scene->addItem(q);
    1096             implicitUpdate = true;
    10971132        } else if (!parent->d_func()->scene && scene) {
    10981133            // Remove this item from its former scene
     
    11011136
    11021137        parent->d_ptr->addChild(q);
    1103         parent->itemChange(QGraphicsItem::ItemChildAddedChange, thisPointerVariant);
     1138        if (thisPointerVariant)
     1139            parent->itemChange(QGraphicsItem::ItemChildAddedChange, *thisPointerVariant);
    11041140        if (scene) {
    1105             if (!implicitUpdate)
    1106                 scene->d_func()->markDirty(q_ptr);
    1107 
    11081141            // Re-enable scene pos notifications for new ancestors
    11091142            if (scenePosDescendants || (flags & QGraphicsItem::ItemSendsScenePositionChanges))
     
    11111144        }
    11121145
     1146        // Propagate dirty flags to the new parent
     1147        markParentDirty(/*updateBoundingRect=*/true);
     1148
    11131149        // Inherit ancestor flags from the new parent.
    1114         updateAncestorFlag(QGraphicsItem::GraphicsItemFlag(-2));
    1115         updateAncestorFlag(QGraphicsItem::GraphicsItemFlag(-1));
    1116         updateAncestorFlag(QGraphicsItem::ItemClipsChildrenToShape);
    1117         updateAncestorFlag(QGraphicsItem::ItemIgnoresTransformations);
     1150        updateAncestorFlags();
    11181151
    11191152        // Update item visible / enabled.
    1120         if (parent->isVisible() != visible) {
    1121             if (!parent->isVisible() || !explicitlyHidden)
    1122                 setVisibleHelper(parent->isVisible(), /* explicit = */ false, /* update = */ !implicitUpdate);
     1153        if (parent->d_ptr->visible != visible) {
     1154            if (!parent->d_ptr->visible || !explicitlyHidden)
     1155                setVisibleHelper(parent->d_ptr->visible, /* explicit = */ false, /* update = */ false);
    11231156        }
    11241157        if (parent->isEnabled() != enabled) {
    1125             if (!parent->isEnabled() || !explicitlyDisabled)
    1126                 setEnabledHelper(parent->isEnabled(), /* explicit = */ false, /* update = */ !implicitUpdate);
     1158            if (!parent->d_ptr->enabled || !explicitlyDisabled)
     1159                setEnabledHelper(parent->d_ptr->enabled, /* explicit = */ false, /* update = */ false);
    11271160        }
    11281161
    11291162        // Auto-activate if visible and the parent is active.
    1130         if (q->isVisible() && parent->isActive())
     1163        if (visible && parent->isActive())
    11311164            q->setActive(true);
    11321165    } else {
    11331166        // Inherit ancestor flags from the new parent.
    1134         updateAncestorFlag(QGraphicsItem::GraphicsItemFlag(-2));
    1135         updateAncestorFlag(QGraphicsItem::GraphicsItemFlag(-1));
    1136         updateAncestorFlag(QGraphicsItem::ItemClipsChildrenToShape);
    1137         updateAncestorFlag(QGraphicsItem::ItemIgnoresTransformations);
     1167        updateAncestorFlags();
    11381168
    11391169        if (!inDestructor) {
     
    11431173            if (!enabled && !explicitlyDisabled)
    11441174                setEnabledHelper(true, /* explicit = */ false);
    1145 
    1146             // If the item is being deleted, the whole scene will be updated.
    1147             if (scene)
    1148                 scene->d_func()->markDirty(q_ptr);
    11491175        }
    11501176    }
     
    11621188
    11631189    // Deliver post-change notification
    1164     q->itemChange(QGraphicsItem::ItemParentHasChanged, newParentVariant);
     1190    if (newParentVariant)
     1191        q->itemChange(QGraphicsItem::ItemParentHasChanged, *newParentVariant);
    11651192
    11661193    if (isObject)
     
    13511378    } else {
    13521379        d_ptr->resetFocusProxy();
    1353         d_ptr->setParentItemHelper(0);
     1380        setParentItem(0);
    13541381    }
    13551382
     
    15561583    \sa parentItem(), childItems()
    15571584*/
    1558 void QGraphicsItem::setParentItem(QGraphicsItem *parent)
    1559 {
    1560     d_ptr->setParentItemHelper(parent);
     1585void QGraphicsItem::setParentItem(QGraphicsItem *newParent)
     1586{
     1587    if (newParent == this) {
     1588        qWarning("QGraphicsItem::setParentItem: cannot assign %p as a parent of itself", this);
     1589        return;
     1590    }
     1591    if (newParent == d_ptr->parent)
     1592        return;
     1593
     1594    const QVariant newParentVariant(itemChange(QGraphicsItem::ItemParentChange,
     1595                                               qVariantFromValue<QGraphicsItem *>(newParent)));
     1596    newParent = qVariantValue<QGraphicsItem *>(newParentVariant);
     1597    if (newParent == d_ptr->parent)
     1598        return;
     1599
     1600    const QVariant thisPointerVariant(qVariantFromValue<QGraphicsItem *>(this));
     1601    d_ptr->setParentItemHelper(newParent, &newParentVariant, &thisPointerVariant);
    15611602}
    15621603
     
    16081649bool QGraphicsItem::isWindow() const
    16091650{
    1610     return isWidget() && (static_cast<const QGraphicsWidget *>(this)->windowType() & Qt::Window);
     1651    return d_ptr->isWidget && (static_cast<const QGraphicsWidget *>(this)->windowType() & Qt::Window);
    16111652}
    16121653
     
    16451686{
    16461687    if (enabled)
    1647         setFlags(flags() | flag);
     1688        setFlags(GraphicsItemFlags(d_ptr->flags) | flag);
    16481689    else
    1649         setFlags(flags() & ~flag);
     1690        setFlags(GraphicsItemFlags(d_ptr->flags) & ~flag);
    16501691}
    16511692
     
    16941735    if (quint32(d_ptr->flags) == quint32(flags))
    16951736        return;
    1696     if (d_ptr->scene)
    1697         d_ptr->scene->d_func()->index->itemChange(this, ItemFlagsChange, quint32(flags));
     1737    if (d_ptr->scene && d_ptr->scene->d_func()->indexMethod != QGraphicsScene::NoIndex)
     1738        d_ptr->scene->d_func()->index->itemChange(this, ItemFlagsChange, &flags);
    16981739
    16991740    // Flags that alter the geometry of the item (or its children).
     
    17041745
    17051746    // Keep the old flags to compare the diff.
    1706     GraphicsItemFlags oldFlags = this->flags();
     1747    GraphicsItemFlags oldFlags = GraphicsItemFlags(d_ptr->flags);
    17071748
    17081749    // Update flags.
     
    17331774    }
    17341775
     1776    if ((flags & ItemNegativeZStacksBehindParent) != (oldFlags & ItemNegativeZStacksBehindParent)) {
     1777        // NB! We change the flags directly here, so we must also update d_ptr->flags.
     1778        // Note that this has do be done before the ItemStacksBehindParent check
     1779        // below; otherwise we will loose the change.
     1780
     1781        // Update stack-behind.
     1782        if (d_ptr->z < qreal(0.0))
     1783            flags |= ItemStacksBehindParent;
     1784        else
     1785            flags &= ~ItemStacksBehindParent;
     1786        d_ptr->flags = flags;
     1787    }
     1788
    17351789    if ((flags & ItemStacksBehindParent) != (oldFlags & ItemStacksBehindParent)) {
     1790        // NB! This check has to come after the ItemNegativeZStacksBehindParent
     1791        // check above. Be careful.
     1792
    17361793        // Ensure child item sorting is up to date when toggling this flag.
    17371794        if (d_ptr->parent)
     
    17471804    }
    17481805
    1749     if ((flags & ItemNegativeZStacksBehindParent) != (oldFlags & ItemNegativeZStacksBehindParent)) {
    1750         // Update stack-behind.
    1751         setFlag(ItemStacksBehindParent, d_ptr->z < qreal(0.0));
    1752     }
    17531806
    17541807    if ((d_ptr->panelModality != NonModal)
     
    25162569        return;
    25172570
     2571    bool wasFullyTransparent = d_ptr->isOpacityNull();
    25182572    d_ptr->opacity = newOpacity;
    25192573
     
    25242578    if (d_ptr->scene) {
    25252579#ifndef QT_NO_GRAPHICSEFFECT
    2526         d_ptr->invalidateGraphicsEffectsRecursively();
     2580        d_ptr->invalidateParentGraphicsEffectsRecursively();
     2581        if (!(d_ptr->flags & ItemDoesntPropagateOpacityToChildren))
     2582            d_ptr->invalidateChildGraphicsEffectsRecursively(QGraphicsItemPrivate::OpacityChanged);
    25272583#endif //QT_NO_GRAPHICSEFFECT
    25282584        d_ptr->scene->d_func()->markDirty(this, QRectF(),
    25292585                                          /*invalidateChildren=*/true,
    25302586                                          /*force=*/false,
    2531                                           /*ignoreOpacity=*/true);
     2587                                          /*ignoreOpacity=*/d_ptr->isOpacityNull());
     2588        if (wasFullyTransparent)
     2589            d_ptr->paintedViewBoundingRectsNeedRepaint = 1;
    25322590    }
    25332591
     
    25692627        delete d_ptr->graphicsEffect;
    25702628        d_ptr->graphicsEffect = 0;
     2629    } else if (d_ptr->parent) {
     2630        d_ptr->parent->d_ptr->updateChildWithGraphicsEffectFlagRecursively();
    25712631    }
    25722632
     
    25812641}
    25822642#endif //QT_NO_GRAPHICSEFFECT
     2643
     2644void QGraphicsItemPrivate::updateChildWithGraphicsEffectFlagRecursively()
     2645{
     2646#ifndef QT_NO_GRAPHICSEFFECT
     2647    QGraphicsItemPrivate *itemPrivate = this;
     2648    do {
     2649        // parent chain already notified?
     2650        if (itemPrivate->mayHaveChildWithGraphicsEffect)
     2651            return;
     2652        itemPrivate->mayHaveChildWithGraphicsEffect = 1;
     2653    } while ((itemPrivate = itemPrivate->parent ? itemPrivate->parent->d_ptr.data() : 0));
     2654#endif
     2655}
    25832656
    25842657/*!
     
    29983071bool QGraphicsItem::hasFocus() const
    29993072{
     3073    if (!d_ptr->scene || !d_ptr->scene->isActive())
     3074        return false;
     3075
    30003076    if (d_ptr->focusProxy)
    30013077        return d_ptr->focusProxy->hasFocus();
    3002     return isActive() && (d_ptr->scene && d_ptr->scene->focusItem() == this);
     3078
     3079    if (d_ptr->scene->d_func()->focusItem != this)
     3080        return false;
     3081
     3082    return panel() == d_ptr->scene->d_func()->activePanel;
    30033083}
    30043084
     
    42584338        return;
    42594339
    4260     if (d_ptr->scene) {
     4340    if (d_ptr->scene && d_ptr->scene->d_func()->indexMethod != QGraphicsScene::NoIndex) {
    42614341        // Z Value has changed, we have to notify the index.
    4262         d_ptr->scene->d_func()->index->itemChange(this, ItemZValueChange, newZVariant);
     4342        d_ptr->scene->d_func()->index->itemChange(this, ItemZValueChange, &newZ);
    42634343    }
    42644344
     
    50275107*/
    50285108#ifndef QT_NO_GRAPHICSEFFECT
    5029 void QGraphicsItemPrivate::invalidateGraphicsEffectsRecursively()
     5109void QGraphicsItemPrivate::invalidateParentGraphicsEffectsRecursively()
    50305110{
    50315111    QGraphicsItemPrivate *itemPrivate = this;
     
    50385118        }
    50395119    } while ((itemPrivate = itemPrivate->parent ? itemPrivate->parent->d_ptr.data() : 0));
     5120}
     5121
     5122void QGraphicsItemPrivate::invalidateChildGraphicsEffectsRecursively(QGraphicsItemPrivate::InvalidateReason reason)
     5123{
     5124    if (!mayHaveChildWithGraphicsEffect)
     5125        return;
     5126
     5127    for (int i = 0; i < children.size(); ++i) {
     5128        QGraphicsItemPrivate *childPrivate = children.at(i)->d_ptr.data();
     5129        if (reason == OpacityChanged && (childPrivate->flags & QGraphicsItem::ItemIgnoresParentOpacity))
     5130            continue;
     5131        if (childPrivate->graphicsEffect) {
     5132            childPrivate->notifyInvalidated = 1;
     5133            static_cast<QGraphicsItemEffectSourcePrivate *>(childPrivate->graphicsEffect->d_func()->source->d_func())->invalidateCache();
     5134        }
     5135
     5136        childPrivate->invalidateChildGraphicsEffectsRecursively(reason);
     5137    }
    50405138}
    50415139#endif //QT_NO_GRAPHICSEFFECT
     
    52835381    // Make sure we notify effects about invalidated source.
    52845382#ifndef QT_NO_GRAPHICSEFFECT
    5285     d_ptr->invalidateGraphicsEffectsRecursively();
     5383    d_ptr->invalidateParentGraphicsEffectsRecursively();
    52865384#endif //QT_NO_GRAPHICSEFFECT
    52875385
     
    71767274    }
    71777275
    7178     QGraphicsItem *parent = this;
    7179     while ((parent = parent->d_ptr->parent)) {
    7180         QGraphicsItemPrivate *parentp = parent->d_ptr.data();
    7181         parentp->dirtyChildrenBoundingRect = 1;
    7182         // ### Only do this if the parent's effect applies to the entire subtree.
    7183         parentp->notifyBoundingRectChanged = 1;
    7184 #ifndef QT_NO_GRAPHICSEFFECT
    7185         if (parentp->scene && parentp->graphicsEffect) {
    7186             parentp->notifyInvalidated = 1;
    7187             static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()->source->d_func())->invalidateCache();
    7188         }
    7189 #endif
    7190     }
     7276    d_ptr->markParentDirty(/*updateBoundingRect=*/true);
    71917277}
    71927278
     
    1071610802}
    1071710803
    10718 QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *offset,
    10719                                                  QGraphicsEffect::PixmapPadMode mode) const
    10720 {
    10721     const bool deviceCoordinates = (system == Qt::DeviceCoordinates);
    10722     if (!info && deviceCoordinates) {
    10723         // Device coordinates without info not yet supported.
    10724         qWarning("QGraphicsEffectSource::pixmap: Not yet implemented, lacking device context");
    10725         return QPixmap();
    10726     }
    10727     if (!item->d_ptr->scene)
    10728         return QPixmap();
    10729     QGraphicsScenePrivate *scened = item->d_ptr->scene->d_func();
    10730 
    10731     const QRectF sourceRect = boundingRect(system);
     10804QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const
     10805{
    1073210806    QRectF effectRectF;
    1073310807
    10734     bool unpadded = false;
     10808    if (unpadded)
     10809        *unpadded = false;
     10810
    1073510811    if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) {
    1073610812        if (info) {
    1073710813            effectRectF = item->graphicsEffect()->boundingRectFor(boundingRect(Qt::DeviceCoordinates));
    10738             unpadded = (effectRectF.size() == sourceRect.size());
     10814            if (unpadded)
     10815                *unpadded = (effectRectF.size() == sourceRect.size());
    1073910816            if (info && system == Qt::LogicalCoordinates)
    1074010817                effectRectF = info->painter->worldTransform().inverted().mapRect(effectRectF);
     
    1074810825    } else {
    1074910826        effectRectF = sourceRect;
    10750         unpadded = true;
    10751     }
    10752 
    10753     QRect effectRect = effectRectF.toAlignedRect();
     10827        if (unpadded)
     10828            *unpadded = true;
     10829    }
     10830
     10831    return effectRectF.toAlignedRect();
     10832}
     10833
     10834QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *offset,
     10835                                                 QGraphicsEffect::PixmapPadMode mode) const
     10836{
     10837    const bool deviceCoordinates = (system == Qt::DeviceCoordinates);
     10838    if (!info && deviceCoordinates) {
     10839        // Device coordinates without info not yet supported.
     10840        qWarning("QGraphicsEffectSource::pixmap: Not yet implemented, lacking device context");
     10841        return QPixmap();
     10842    }
     10843    if (!item->d_ptr->scene)
     10844        return QPixmap();
     10845    QGraphicsScenePrivate *scened = item->d_ptr->scene->d_func();
     10846
     10847    bool unpadded;
     10848    const QRectF sourceRect = boundingRect(system);
     10849    QRect effectRect = paddedEffectRect(system, mode, sourceRect, &unpadded);
    1075410850
    1075510851    if (offset)
  • trunk/src/gui/graphicsview/qgraphicsitem.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsitem_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    154154        localCollisionHack(0),
    155155        inSetPosHelper(0),
    156         needSortChildren(1), // ### can be 0 by default?
     156        needSortChildren(0),
    157157        allChildrenDirty(0),
    158158        fullUpdatePending(0),
     
    179179        updateDueToGraphicsEffect(0),
    180180        scenePosDescendants(0),
     181        pendingPolish(0),
     182        mayHaveChildWithGraphicsEffect(0),
    181183        globalStackingOrder(-1),
    182184        q_ptr(0)
     
    196198    }
    197199
     200    void updateChildWithGraphicsEffectFlagRecursively();
    198201    void updateAncestorFlag(QGraphicsItem::GraphicsItemFlag childFlag,
    199202                            AncestorFlag flag = NoFlag, bool enabled = false, bool root = true);
     203    void updateAncestorFlags();
    200204    void setIsMemberOfGroup(bool enabled);
    201205    void remapItemPos(QEvent *event, QGraphicsItem *item);
     
    224228    int depth() const;
    225229#ifndef QT_NO_GRAPHICSEFFECT
    226     void invalidateGraphicsEffectsRecursively();
     230    enum InvalidateReason {
     231        OpacityChanged
     232    };
     233    void invalidateParentGraphicsEffectsRecursively();
     234    void invalidateChildGraphicsEffectsRecursively(InvalidateReason reason);
    227235#endif //QT_NO_GRAPHICSEFFECT
    228236    void invalidateDepthRecursively();
     
    230238    void addChild(QGraphicsItem *child);
    231239    void removeChild(QGraphicsItem *child);
    232     void setParentItemHelper(QGraphicsItem *parent);
     240    void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant,
     241                             const QVariant *thisPointerVariant);
    233242    void childrenBoundingRectHelper(QTransform *x, QRectF *rect);
    234243    void initStyleOption(QStyleOptionGraphicsItem *option, const QTransform &worldTransform,
     
    350359    }
    351360
     361    inline bool isOpacityNull() const
     362    { return (opacity < qreal(0.001)); }
     363
     364    static inline bool isOpacityNull(qreal opacity)
     365    { return (opacity < qreal(0.001)); }
     366
    352367    inline bool isFullyTransparent() const
    353368    {
    354         if (opacity < 0.001)
     369        if (isOpacityNull())
    355370            return true;
    356371        if (!parent)
    357372            return false;
    358373
    359         return calcEffectiveOpacity() < 0.001;
     374        return isOpacityNull(calcEffectiveOpacity());
    360375    }
    361376
     
    397412        return !visible || (childrenCombineOpacity() && isFullyTransparent());
    398413    }
     414
     415    inline void markParentDirty(bool updateBoundingRect = false);
    399416
    400417    void setFocusHelper(Qt::FocusReason focusReason, bool climb);
     
    485502    quint32 updateDueToGraphicsEffect : 1;
    486503    quint32 scenePosDescendants : 1;
     504    quint32 pendingPolish : 1;
     505    quint32 mayHaveChildWithGraphicsEffect : 1;
    487506
    488507    // Optional stacking order
     
    610629                   QPoint *offset,
    611630                   QGraphicsEffect::PixmapPadMode mode) const;
     631    QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
    612632
    613633    QGraphicsItem *item;
     
    721741{
    722742    if (needSortChildren) {
    723         qSort(children.begin(), children.end(), qt_notclosestLeaf);
    724743        needSortChildren = 0;
    725744        sequentialOrdering = 1;
     745        if (children.isEmpty())
     746            return;
     747        qSort(children.begin(), children.end(), qt_notclosestLeaf);
    726748        for (int i = 0; i < children.size(); ++i) {
    727             if (children[i]->d_ptr->siblingIndex != i) {
     749            if (children.at(i)->d_ptr->siblingIndex != i) {
    728750                sequentialOrdering = 0;
    729751                break;
     
    741763}
    742764
     765/*!
     766    \internal
     767*/
     768inline void QGraphicsItemPrivate::markParentDirty(bool updateBoundingRect)
     769{
     770    QGraphicsItemPrivate *parentp = this;
     771    while (parentp->parent) {
     772        parentp = parentp->parent->d_ptr.data();
     773        parentp->dirtyChildren = 1;
     774
     775        if (updateBoundingRect) {
     776            parentp->dirtyChildrenBoundingRect = 1;
     777            // ### Only do this if the parent's effect applies to the entire subtree.
     778            parentp->notifyBoundingRectChanged = 1;
     779        }
     780#ifndef QT_NO_GRAPHICSEFFECT
     781        if (parentp->graphicsEffect) {
     782            if (updateBoundingRect) {
     783                parentp->notifyInvalidated = 1;
     784                static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
     785                                                                ->source->d_func())->invalidateCache();
     786            }
     787            if (parentp->graphicsEffect->isEnabled()) {
     788                parentp->dirty = 1;
     789                parentp->fullUpdatePending = 1;
     790            }
     791        }
     792#endif
     793    }
     794}
     795
    743796QT_END_NAMESPACE
    744797
  • trunk/src/gui/graphicsview/qgraphicsitemanimation.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsitemanimation.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayout.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayout.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayout_p.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayout_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayoutitem.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayoutitem.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslayoutitem_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslinearlayout.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicslinearlayout.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsproxywidget.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsproxywidget.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsproxywidget_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsscene.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    252252#include <private/qgraphicseffect_p.h>
    253253#include <private/qgesturemanager_p.h>
     254#include <private/qpathclipper_p.h>
    254255
    255256// #define GESTURE_DEBUG
     
    293294      selectionChanging(0),
    294295      needSortTopLevelItems(true),
    295       unpolishedItemsModified(true),
    296296      holesInTopLevelSiblingIndex(false),
    297297      topLevelSequentialOrdering(true),
     
    374374        }
    375375    } else {
    376         updateAll = false;
     376        if (views.isEmpty()) {
     377            updateAll = false;
     378            return;
     379        }
    377380        for (int i = 0; i < views.size(); ++i)
    378381            views.at(i)->d_func()->processPendingUpdates();
     
    430433void QGraphicsScenePrivate::_q_polishItems()
    431434{
    432     QSet<QGraphicsItem *>::Iterator it = unpolishedItems.begin();
     435    if (unpolishedItems.isEmpty())
     436        return;
     437
    433438    const QVariant booleanTrueVariant(true);
    434     while (!unpolishedItems.isEmpty()) {
    435         QGraphicsItem *item = *it;
    436         it = unpolishedItems.erase(it);
    437         unpolishedItemsModified = false;
    438         if (!item->d_ptr->explicitlyHidden) {
     439    QGraphicsItem *item = 0;
     440    QGraphicsItemPrivate *itemd = 0;
     441    const int oldUnpolishedCount = unpolishedItems.count();
     442
     443    for (int i = 0; i < oldUnpolishedCount; ++i) {
     444        item = unpolishedItems.at(i);
     445        if (!item)
     446            continue;
     447        itemd = item->d_ptr.data();
     448        itemd->pendingPolish = false;
     449        if (!itemd->explicitlyHidden) {
    439450            item->itemChange(QGraphicsItem::ItemVisibleChange, booleanTrueVariant);
    440451            item->itemChange(QGraphicsItem::ItemVisibleHasChanged, booleanTrueVariant);
    441452        }
    442         if (item->isWidget()) {
     453        if (itemd->isWidget) {
    443454            QEvent event(QEvent::Polish);
    444455            QApplication::sendEvent((QGraphicsWidget *)item, &event);
    445456        }
    446         if (unpolishedItemsModified)
    447             it = unpolishedItems.begin();
     457    }
     458
     459    if (unpolishedItems.count() == oldUnpolishedCount) {
     460        // No new items were added to the vector.
     461        unpolishedItems.clear();
     462    } else {
     463        // New items were appended; keep them and remove the old ones.
     464        unpolishedItems.remove(0, oldUnpolishedCount);
     465        unpolishedItems.squeeze();
     466        QMetaObject::invokeMethod(q_ptr, "_q_polishItems", Qt::QueuedConnection);
    448467    }
    449468}
     
    600619            Q_ASSERT_X(parentItem->scene() == q, "QGraphicsScene::removeItem",
    601620                       "Parent item's scene is different from this item's scene");
    602             item->d_ptr->setParentItemHelper(0);
     621            item->setParentItem(0);
    603622        }
    604623    } else {
     
    639658    hoverItems.removeAll(item);
    640659    cachedItemsUnderMouse.removeAll(item);
    641     unpolishedItems.remove(item);
    642     unpolishedItemsModified = true;
     660    if (item->d_ptr->pendingPolish) {
     661        const int unpolishedIndex = unpolishedItems.indexOf(item);
     662        if (unpolishedIndex != -1)
     663            unpolishedItems[unpolishedIndex] = 0;
     664        item->d_ptr->pendingPolish = false;
     665    }
    643666    resetDirtyItem(item);
    644667
     
    19371960
    19381961    This convenience function is equivalent to calling items(QRectF(\a x, \a y, \a w, \a h), \a mode).
    1939    
     1962
    19401963    This function is deprecated and returns incorrect results if the scene
    19411964    contains items that ignore transformations. Use the overload that takes
     
    24832506        return;
    24842507    }
    2485     if (item->scene() == this) {
     2508    if (item->d_ptr->scene == this) {
    24862509        qWarning("QGraphicsScene::addItem: item has already been added to this scene");
    24872510        return;
    24882511    }
    24892512    // Remove this item from its existing scene
    2490     if (QGraphicsScene *oldScene = item->scene())
     2513    if (QGraphicsScene *oldScene = item->d_ptr->scene)
    24912514        oldScene->removeItem(item);
    24922515
     
    24972520    QGraphicsScene *targetScene = qVariantValue<QGraphicsScene *>(newSceneVariant);
    24982521    if (targetScene != this) {
    2499         if (targetScene && item->scene() != targetScene)
     2522        if (targetScene && item->d_ptr->scene != targetScene)
    25002523            targetScene->addItem(item);
    25012524        return;
    25022525    }
    25032526
     2527    if (d->unpolishedItems.isEmpty())
     2528        QMetaObject::invokeMethod(this, "_q_polishItems", Qt::QueuedConnection);
     2529    d->unpolishedItems.append(item);
     2530    item->d_ptr->pendingPolish = true;
     2531
    25042532    // Detach this item from its parent if the parent's scene is different
    25052533    // from this scene.
    2506     if (QGraphicsItem *itemParent = item->parentItem()) {
    2507         if (itemParent->scene() != this)
     2534    if (QGraphicsItem *itemParent = item->d_ptr->parent) {
     2535        if (itemParent->d_ptr->scene != this)
    25082536            item->setParentItem(0);
    25092537    }
     
    25352563    }
    25362564#ifndef QT_NO_CURSOR
    2537     if (d->allItemsUseDefaultCursor && item->hasCursor()) {
     2565    if (d->allItemsUseDefaultCursor && item->d_ptr->hasCursor) {
    25382566        d->allItemsUseDefaultCursor = false;
    25392567        if (d->allItemsIgnoreHoverEvents) // already enabled otherwise
     
    25432571
    25442572    // Enable touch events if the item accepts touch events.
    2545     if (d->allItemsIgnoreTouchEvents && item->acceptTouchEvents()) {
     2573    if (d->allItemsIgnoreTouchEvents && item->d_ptr->acceptTouchEvents) {
    25462574        d->allItemsIgnoreTouchEvents = false;
    25472575        d->enableTouchEventsOnViews();
     
    25762604
    25772605    // Add all children recursively
    2578     foreach (QGraphicsItem *child, item->children())
    2579         addItem(child);
     2606    item->d_ptr->ensureSortedChildren();
     2607    for (int i = 0; i < item->d_ptr->children.size(); ++i)
     2608        addItem(item->d_ptr->children.at(i));
    25802609
    25812610    // Resolve font and palette.
     
    25832612    item->d_ptr->resolvePalette(d->palette.resolve());
    25842613
    2585     if (d->unpolishedItems.isEmpty())
    2586         QMetaObject::invokeMethod(this, "_q_polishItems", Qt::QueuedConnection);
    2587     d->unpolishedItems.insert(item);
    2588     d->unpolishedItemsModified = true;
    25892614
    25902615    // Reenable selectionChanged() for individual items
     
    26202645    }
    26212646
    2622     if (item->flags() & QGraphicsItem::ItemSendsScenePositionChanges)
     2647    if (item->d_ptr->flags & QGraphicsItem::ItemSendsScenePositionChanges)
    26232648        d->registerScenePosItem(item);
    26242649
     
    37673792bool QGraphicsScenePrivate::itemAcceptsHoverEvents_helper(const QGraphicsItem *item) const
    37683793{
    3769     return (!item->isBlockedByModalPanel() &&
    3770             (item->acceptHoverEvents()
    3771              || (item->isWidget()
    3772                  && static_cast<const QGraphicsWidget *>(item)->d_func()->hasDecoration())));
     3794    return (item->d_ptr->acceptsHover
     3795            || (item->d_ptr->isWidget
     3796                && static_cast<const QGraphicsWidget *>(item)->d_func()->hasDecoration()))
     3797           && !item->isBlockedByModalPanel();
    37733798}
    37743799
     
    45834608        _q_polishItems();
    45844609
     4610    updateAll = false;
    45854611    QRectF exposedSceneRect;
    45864612    if (exposedRegion && indexMethod != QGraphicsScene::NoIndex) {
     
    46104636
    46114637    const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity);
    4612     const bool itemIsFullyTransparent = (opacity < 0.0001);
     4638    const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity);
    46134639    if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity()))
    46144640        return;
     
    46874713            && sourced->lastEffectTransform != painter->worldTransform())
    46884714        {
     4715            bool unclipped = false;
     4716            if (sourced->lastEffectTransform.type() <= QTransform::TxTranslate
     4717                && painter->worldTransform().type() <= QTransform::TxTranslate)
     4718            {
     4719                QRectF itemRect = item->boundingRect();
     4720                if (!item->d_ptr->children.isEmpty())
     4721                    itemRect |= item->childrenBoundingRect();
     4722
     4723                QRectF oldSourceRect = sourced->lastEffectTransform.mapRect(itemRect);
     4724                QRectF newSourceRect = painter->worldTransform().mapRect(itemRect);
     4725
     4726                QRect oldEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), oldSourceRect);
     4727                QRect newEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), newSourceRect);
     4728
     4729                QRect deviceRect(0, 0, painter->device()->width(), painter->device()->height());
     4730                if (deviceRect.contains(oldEffectRect) && deviceRect.contains(newEffectRect)) {
     4731                    sourced->setCachedOffset(newEffectRect.topLeft());
     4732                    unclipped = true;
     4733                }
     4734            }
     4735
    46894736            sourced->lastEffectTransform = painter->worldTransform();
    4690             sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged);
     4737
     4738            if (!unclipped)
     4739                sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged);
    46914740        }
    46924741
     
    47074756                                 bool wasDirtyParentSceneTransform, bool drawItem)
    47084757{
    4709     const bool itemIsFullyTransparent = (opacity < 0.0001);
     4758    const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity);
    47104759    const bool itemClipsChildrenToShape = (item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape);
    47114760    const bool itemHasChildren = !item->d_ptr->children.isEmpty();
     
    47224771            else
    47234772                painter->setWorldTransform(*transformPtr);
    4724             painter->setClipPath(item->shape(), Qt::IntersectClip);
     4773            QRectF clipRect;
     4774            const QPainterPath clipPath(item->shape());
     4775            if (QPathClipper::pathToRect(clipPath, &clipRect))
     4776                painter->setClipRect(clipRect, Qt::IntersectClip);
     4777            else
     4778                painter->setClipPath(clipPath, Qt::IntersectClip);
    47254779        }
    47264780
     
    47584812        }
    47594813
    4760         if (itemClipsToShape)
    4761             painter->setClipPath(item->shape(), Qt::IntersectClip);
     4814        if (itemClipsToShape) {
     4815            QRectF clipRect;
     4816            const QPainterPath clipPath(item->shape());
     4817            if (QPathClipper::pathToRect(clipPath, &clipRect))
     4818                painter->setClipRect(clipRect, Qt::IntersectClip);
     4819            else
     4820                painter->setClipPath(clipPath, Qt::IntersectClip);
     4821        }
    47624822        painter->setOpacity(opacity);
    47634823
     
    48604920        item->d_ptr->ignoreOpacity = 1;
    48614921
    4862     QGraphicsItem *p = item->d_ptr->parent;
    4863     while (p) {
    4864         p->d_ptr->dirtyChildren = 1;
    4865 #ifndef QT_NO_GRAPHICSEFFECT
    4866         if (p->d_ptr->graphicsEffect && p->d_ptr->graphicsEffect->isEnabled()) {
    4867             p->d_ptr->dirty = 1;
    4868             p->d_ptr->fullUpdatePending = 1;
    4869         }
    4870 #endif //QT_NO_GRAPHICSEFFECT
    4871         p = p->d_ptr->parent;
    4872     }
     4922    item->d_ptr->markParentDirty();
    48734923}
    48744924
     
    49454995
    49464996    const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity);
    4947     const bool itemIsFullyTransparent = !item->d_ptr->ignoreOpacity && opacity < 0.0001;
     4997    const bool itemIsFullyTransparent = !item->d_ptr->ignoreOpacity
     4998                                        && QGraphicsItemPrivate::isOpacityNull(opacity);
    49484999    if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity())) {
    49495000        resetDirtyItem(item, /*recursive=*/itemHasChildren);
     
    51185169        d->_q_polishItems();
    51195170
     5171    d->updateAll = false;
    51205172    QTransform viewTransform = painter->worldTransform();
    51215173    Q_UNUSED(options);
  • trunk/src/gui/graphicsview/qgraphicsscene.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsscene_bsp.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsscene_bsp_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsscene_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    109109    int selectionChanging;
    110110    QSet<QGraphicsItem *> selectedItems;
    111     QSet<QGraphicsItem *> unpolishedItems;
     111    QVector<QGraphicsItem *> unpolishedItems;
    112112    QList<QGraphicsItem *> topLevelItems;
    113113    bool needSortTopLevelItems;
    114     bool unpolishedItemsModified;
    115114    bool holesInTopLevelSiblingIndex;
    116115    bool topLevelSequentialOrdering;
  • trunk/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    636636    update the BSP tree if necessary.
    637637*/
    638 void QGraphicsSceneBspTreeIndex::itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value)
     638void QGraphicsSceneBspTreeIndex::itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value)
    639639{
    640640    Q_D(QGraphicsSceneBspTreeIndex);
     
    642642    case QGraphicsItem::ItemFlagsChange: {
    643643        // Handle ItemIgnoresTransformations
     644        QGraphicsItem::GraphicsItemFlags newFlags = *static_cast<const QGraphicsItem::GraphicsItemFlags *>(value);
    644645        bool ignoredTransform = item->d_ptr->flags & QGraphicsItem::ItemIgnoresTransformations;
    645         bool willIgnoreTransform = value.toUInt() & QGraphicsItem::ItemIgnoresTransformations;
     646        bool willIgnoreTransform = newFlags & QGraphicsItem::ItemIgnoresTransformations;
    646647        bool clipsChildren = item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape;
    647         bool willClipChildren = value.toUInt() & QGraphicsItem::ItemClipsChildrenToShape;
     648        bool willClipChildren = newFlags & QGraphicsItem::ItemClipsChildrenToShape;
    648649        if ((ignoredTransform != willIgnoreTransform) || (clipsChildren != willClipChildren)) {
    649650            QGraphicsItem *thatItem = const_cast<QGraphicsItem *>(item);
     
    662663        d->invalidateSortCache();
    663664        // Handle ItemIgnoresTransformations
    664         QGraphicsItem *newParent = qVariantValue<QGraphicsItem *>(value);
     665        const QGraphicsItem *newParent = static_cast<const QGraphicsItem *>(value);
    665666        bool ignoredTransform = item->d_ptr->itemIsUntransformable();
    666667        bool willIgnoreTransform = (item->d_ptr->flags & QGraphicsItem::ItemIgnoresTransformations)
     
    683684        break;
    684685    }
    685     return QGraphicsSceneIndex::itemChange(item, change, value);
    686686}
    687687/*!
  • trunk/src/gui/graphicsview/qgraphicsscenebsptreeindex_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    9898    void prepareBoundingRectChange(const QGraphicsItem *item);
    9999
    100     void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value);
     100    void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value);
    101101
    102102private :
  • trunk/src/gui/graphicsview/qgraphicssceneevent.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicssceneevent.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicssceneindex.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    280280
    281281    const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity);
    282     const bool itemIsFullyTransparent = (opacity < 0.0001);
     282    const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity);
    283283    const bool itemHasChildren = !item->d_ptr->children.isEmpty();
    284284    if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity()))
     
    555555/*!
    556556    \fn QList<QGraphicsItem *> QGraphicsSceneIndex::items(Qt::SortOrder order = Qt::DescendingOrder) const
    557    
     557
    558558    This pure virtual function all items in the index and sort them using
    559559    \a order.
     
    625625    \sa QGraphicsItem::GraphicsItemChange
    626626*/
    627 void QGraphicsSceneIndex::itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value)
     627void QGraphicsSceneIndex::itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value)
    628628{
    629629    Q_UNUSED(item);
  • trunk/src/gui/graphicsview/qgraphicssceneindex_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    111111    virtual void deleteItem(QGraphicsItem *item);
    112112
    113     virtual void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange, const QVariant &value);
     113    virtual void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange, const void *const value);
    114114    virtual void prepareBoundingRectChange(const QGraphicsItem *item);
    115115
  • trunk/src/gui/graphicsview/qgraphicsscenelinearindex.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsscenelinearindex_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicstransform.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicstransform.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicstransform_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsview.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    27492749                }
    27502750            }
    2751             d->scene->d_func()->updateAll = false;
    27522751        }
    27532752        break;
  • trunk/src/gui/graphicsview/qgraphicsview.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicsview_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicswidget.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicswidget.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicswidget_p.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgraphicswidget_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qgridlayoutengine.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    183183
    184184        for (int j = 0; j < NSizes; ++j) {
    185             qreal extra = compare(totalBox, box, j);
     185            qreal extra = compare(box, totalBox, j);
    186186            if (extra > 0.0) {
    187                 calculateGeometries(start, end, totalBox.q_sizes(j), dummy.data(), newSizes.data(),
     187                calculateGeometries(start, end, box.q_sizes(j), dummy.data(), newSizes.data(),
    188188                                    0, totalBox);
    189189
  • trunk/src/gui/graphicsview/qgridlayoutengine_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qsimplex_p.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
  • trunk/src/gui/graphicsview/qsimplex_p.h

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
Note: See TracChangeset for help on using the changeset viewer.