- setWidth(width(), true); // readjust all chatlines
- // we get ugly redraw errors if we don't update this explicitly... :(
- // width() should be the same for both handles, so just use firstColHandle regardless
- //update(qMin(oldx, xpos), 0, qMax(oldx, xpos) + firstColHandle->width(), height());
+ // disabling the index while doing this complex updates is about
+ // 2 to 10 times faster!
+ setItemIndexMethod(QGraphicsScene::NoIndex);
+
+ QList<ChatLine *>::iterator lineIter = _lines.end();
+ QList<ChatLine *>::iterator lineIterBegin = _lines.begin();
+ qreal linePos = _sceneRect.y() + _sceneRect.height();
+ qreal senderWidth = secondColumnHandle()->sceneLeft() - firstColumnHandle()->sceneRight();
+ qreal contentsWidth = _sceneRect.width() - secondColumnHandle()->sceneRight();
+ QPointF contentsPos(secondColumnHandle()->sceneRight(), 0);
+ while(lineIter != lineIterBegin) {
+ lineIter--;
+ (*lineIter)->setSecondColumn(senderWidth, contentsWidth, contentsPos, linePos);
+ }
+ setItemIndexMethod(QGraphicsScene::BspTreeIndex);
+
+ setHandleXLimits();
+
+// clock_t endT = clock();
+// qDebug() << "resized" << _lines.count() << "in" << (float)(endT - startT) / CLOCKS_PER_SEC << "sec";