void tst_QGraphicsAnchorLayout::linearVsAnchorSetGeometry() { QFETCH(int, whichLayout); QGraphicsLayout *l = createLayouts(whichLayout); QRectF sizeHint; qreal maxWidth; qreal increment; // warm up instruction cache l->invalidate(); sizeHint.setSize(l->effectiveSizeHint(Qt::MinimumSize)); maxWidth = l->effectiveSizeHint(Qt::MaximumSize).width(); increment = (maxWidth - sizeHint.width()) / 100; l->setGeometry(sizeHint); // ...then measure... QBENCHMARK { l->invalidate(); for (qreal width = sizeHint.width(); width <= maxWidth; width += increment) { sizeHint.setWidth(width); l->setGeometry(sizeHint); } } }
void tst_QGraphicsAnchorLayout::linearVsAnchorSizeHints() { QFETCH(int, whichSizeHint); QFETCH(int, whichLayout); QGraphicsLayout *l = createLayouts(whichLayout); QSizeF sizeHint; // warm up instruction cache l->invalidate(); sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); // ...then measure... QBENCHMARK { l->invalidate(); sizeHint = l->effectiveSizeHint((Qt::SizeHint)whichSizeHint); } }
void QGraphicsLayoutPrivate::activateRecursive(QGraphicsLayoutItem *item) { if (item->isLayout()) { QGraphicsLayout *layout = static_cast<QGraphicsLayout *>(item); if (layout->d_func()->activated) layout->invalidate(); for (int i = layout->count() - 1; i >= 0; --i) { QGraphicsLayoutItem *childItem = layout->itemAt(i); if (childItem) activateRecursive(childItem); } layout->d_func()->activated = true; } }
void KWidget::invalidateLayout() { QGraphicsLayout *layout = this->layout(); if(layout == NULL) return; layout->invalidate(); QList<QGraphicsItem *> childs = childItems(); for(int i = 0; i < childs.count(); i++) { QGraphicsItem *item = childs[i]; KWidget *widget = qobject_cast<KWidget*>(item->toGraphicsObject()); if(widget == NULL) continue; widget->invalidateLayout(); } }
void QGraphicsLayoutPrivate::activateRecursive(QGraphicsLayoutItem *item) { if (item->isLayout()) { QGraphicsLayout *layout = static_cast<QGraphicsLayout *>(item); if (layout->d_func()->activated) { if (QGraphicsLayout::instantInvalidatePropagation()) { return; } else { layout->invalidate(); // ### LOOKS SUSPICIOUSLY WRONG!!??? } } for (int i = layout->count() - 1; i >= 0; --i) { QGraphicsLayoutItem *childItem = layout->itemAt(i); if (childItem) activateRecursive(childItem); } layout->d_func()->activated = true; } }
/*! \reimp Invalidates parent layout when ItemTransformHasChanged is received. */ QVariant HbAbstractViewItem::itemChange(GraphicsItemChange change, const QVariant &value) { switch (change) { case ItemTransformHasChanged: { QGraphicsLayoutItem *parentLayoutItem = this->parentLayoutItem(); if (parentLayoutItem && parentLayoutItem->isLayout()) { QGraphicsLayout *parentLayout = static_cast<QGraphicsLayout *>(parentLayoutItem); parentLayout->invalidate(); } break; } case ItemEnabledHasChanged: { updateChildItems(); break; } default: break; } return HbWidget::itemChange(change, value); }
void tst_QGraphicsAnchorLayout::linearVsAnchorNested() { QFETCH(int, whichLayout); QSizeF min(10, 10); QSizeF pref(80, 80); QSizeF max(150, 150); QGraphicsWidget *a = createItem(min, pref, max, "a"); QGraphicsWidget *b = createItem(min, pref, max, "b"); QGraphicsWidget *c = createItem(min, pref, max, "c"); QGraphicsWidget *d = createItem(min, pref, max, "d"); QGraphicsLayout *layout; if (whichLayout == 0) { QGraphicsLinearLayout *linear1 = new QGraphicsLinearLayout; QGraphicsLinearLayout *linear2 = new QGraphicsLinearLayout(Qt::Vertical); QGraphicsLinearLayout *linear3 = new QGraphicsLinearLayout; linear1->addItem(a); linear1->addItem(linear2); linear2->addItem(b); linear2->addItem(linear3); linear3->addItem(c); linear3->addItem(d); layout = linear1; } else if (whichLayout == 1) { QGraphicsAnchorLayout *anchor = new QGraphicsAnchorLayout; // A anchor->addCornerAnchors(a, Qt::TopLeftCorner, anchor, Qt::TopLeftCorner); anchor->addCornerAnchors(a, Qt::TopRightCorner, b, Qt::TopLeftCorner); anchor->addCornerAnchors(a, Qt::BottomLeftCorner, anchor, Qt::BottomLeftCorner); anchor->addCornerAnchors(a, Qt::BottomRightCorner, c, Qt::BottomLeftCorner); // B anchor->addCornerAnchors(b, Qt::TopRightCorner, anchor, Qt::TopRightCorner); anchor->addCornerAnchors(b, Qt::BottomLeftCorner, c, Qt::TopLeftCorner); anchor->addCornerAnchors(b, Qt::BottomRightCorner, d, Qt::TopRightCorner); // C anchor->addCornerAnchors(c, Qt::TopRightCorner, d, Qt::TopLeftCorner); anchor->addCornerAnchors(c, Qt::BottomRightCorner, d, Qt::BottomLeftCorner); // D anchor->addCornerAnchors(d, Qt::BottomRightCorner, anchor, Qt::BottomRightCorner); layout = anchor; } else { QGraphicsAnchorLayout *anchor = new QGraphicsAnchorLayout; // A anchor->addAnchor(a, Qt::AnchorLeft, anchor, Qt::AnchorLeft); anchor->addAnchors(a, anchor, Qt::Vertical); anchor->addAnchor(a, Qt::AnchorRight, b, Qt::AnchorLeft); anchor->addAnchor(a, Qt::AnchorRight, c, Qt::AnchorLeft); // B anchor->addAnchor(b, Qt::AnchorTop, anchor, Qt::AnchorTop); anchor->addAnchor(b, Qt::AnchorRight, anchor, Qt::AnchorRight); anchor->addAnchor(b, Qt::AnchorBottom, c, Qt::AnchorTop); anchor->addAnchor(b, Qt::AnchorBottom, d, Qt::AnchorTop); // C anchor->addAnchor(c, Qt::AnchorRight, d, Qt::AnchorLeft); anchor->addAnchor(c, Qt::AnchorBottom, anchor, Qt::AnchorBottom); // D anchor->addAnchor(d, Qt::AnchorRight, anchor, Qt::AnchorRight); anchor->addAnchor(d, Qt::AnchorBottom, anchor, Qt::AnchorBottom); layout = anchor; } QSizeF sizeHint; // warm up instruction cache layout->invalidate(); sizeHint = layout->effectiveSizeHint(Qt::PreferredSize); // ...then measure... QBENCHMARK { // To ensure that all sizeHints caches are invalidated in // the LinearLayout setup, we must call updateGeometry on the // children. If we didn't, only the top level layout would be // re-calculated. static_cast<QGraphicsLayoutItem *>(a)->updateGeometry(); static_cast<QGraphicsLayoutItem *>(b)->updateGeometry(); static_cast<QGraphicsLayoutItem *>(c)->updateGeometry(); static_cast<QGraphicsLayoutItem *>(d)->updateGeometry(); layout->invalidate(); sizeHint = layout->effectiveSizeHint(Qt::PreferredSize); } }