X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.cpp;h=c3a07b15884440ff1cbf826bc03ea753d54c91b9;hb=ba934ceb1bfe30d01d5fb5c072c3197f8080be04;hp=f9f7b17cdb2a6312923940f6fa26be227b12c874;hpb=62192fb6cd9cc211b5b9fe844c9b4c2f98f923cc;p=quassel.git diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index f9f7b17c..c3a07b15 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -32,6 +32,7 @@ #include "columnhandleitem.h" #include "messagefilter.h" #include "qtui.h" +#include "qtuistyle.h" #include "chatviewsettings.h" const qreal minContentsWidth = 200; @@ -41,6 +42,7 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w _idString(idString), _model(model), _singleBufferScene(false), + _sceneRect(0, 0, width, 0), _selectingItem(0), _selectionStart(-1), _isSelecting(false), @@ -88,8 +90,8 @@ ChatScene::~ChatScene() { void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { Q_UNUSED(index); qreal h = 0; - qreal y = sceneRect().y(); - qreal width = sceneRect().width(); + qreal y = _sceneRect.y(); + qreal width = _sceneRect.width(); bool atTop = true; bool atBottom = false; bool moveTop = false; @@ -151,12 +153,12 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { line->setPos(0, line->pos().y() + offset); } } - + // update sceneRect if(atTop || moveTop) { - setSceneRect(sceneRect().adjusted(0, h, 0, 0)); + updateSceneRect(_sceneRect.adjusted(0, h, 0, 0)); } else { - setSceneRect(sceneRect().adjusted(0, 0, 0, h)); + updateSceneRect(_sceneRect.adjusted(0, 0, 0, h)); emit sceneHeightChanged(h); } @@ -222,20 +224,19 @@ void ChatScene::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int e // update sceneRect if(atTop || moveTop) { - setSceneRect(sceneRect().adjusted(0, h, 0, 0)); + updateSceneRect(_sceneRect.adjusted(0, h, 0, 0)); } else { - setSceneRect(sceneRect().adjusted(0, 0, 0, -h)); + updateSceneRect(_sceneRect.adjusted(0, 0, 0, -h)); } - } void ChatScene::setWidth(qreal width, bool forceReposition) { - if(width == sceneRect().width() && !forceReposition) + if(width == _sceneRect.width() && !forceReposition) return; // clock_t startT = clock(); - qreal oldHeight = sceneRect().height(); - qreal y = sceneRect().y(); + qreal oldHeight = _sceneRect.height(); + qreal y = _sceneRect.y(); qreal linePos = y; foreach(ChatLine *line, _lines) { @@ -245,7 +246,7 @@ void ChatScene::setWidth(qreal width, bool forceReposition) { qreal height = linePos - y; - setSceneRect(QRectF(0, y, width, height)); + updateSceneRect(QRectF(0, y, width, height)); setHandleXLimits(); qreal dh = height - oldHeight; @@ -434,3 +435,8 @@ int ChatScene::sectionByScenePos(int x) { return ChatLineModel::ContentsColumn; } + +void ChatScene::updateSceneRect(const QRectF &rect) { + _sceneRect = rect; + setSceneRect(rect); +}