From: Manuel Nickschas Date: Thu, 22 May 2008 19:08:09 +0000 (+0000) Subject: Some optimizations... QGraphicsScene has some weird issues here X-Git-Tag: 0.3.0~407 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8bf92d33ac84cfede11b2361832607bea98f64c8 Some optimizations... QGraphicsScene has some weird issues here --- diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index c518c5fe..63d92e68 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -28,7 +28,7 @@ #include "chatitem.h" ChatItem::ChatItem(const QPersistentModelIndex &index_, QGraphicsItem *parent) : QGraphicsItem(parent), _index(index_) { - _width = _height = 0; + } ChatItem::~ChatItem() { @@ -43,9 +43,11 @@ QVariant ChatItem::data(int role) const { return _index.data(role); } +/* QRectF ChatItem::boundingRect() const { return QRectF(0, 0, _width, _height); } +*/ void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); @@ -58,9 +60,9 @@ void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, int ChatItem::setWidth(int w) { - _width = w; - _height = 20; // FIXME - return _height; + _boundingRect.setWidth(w); + _boundingRect.setHeight(20); // FIXME + return 20; } /* diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index e41b7b7e..97a6fc06 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -39,7 +39,7 @@ class ChatItem : public QGraphicsItem { inline const MessageModel *model() const { return _index.isValid() ? qobject_cast(_index.model()) : 0; } inline int row() const { return _index.isValid() ? _index.row() : 0; } - virtual QRectF boundingRect() const; + inline virtual QRectF boundingRect() const { return _boundingRect; } virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); virtual QVariant data(int role) const; @@ -57,8 +57,7 @@ class ChatItem : public QGraphicsItem { //void mouseMoveEvent ( QGraphicsSceneMouseEvent * event ); private: - int _width; - int _height; + QRectF _boundingRect; //QTextLayout _layout; //QTextOption _textOption; QPersistentModelIndex _index; diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index d4255556..b7b8cf1e 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -66,7 +66,7 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { for(int i = end+1; i < _lines.count(); i++) { _lines.value(i)->moveBy(0, h); } - setSceneRect(QRectF(0, 0, _width, _height)); + //setSceneRect(0, 0, _width, _height); } } @@ -77,7 +77,8 @@ void ChatScene::setWidth(int w) { line->setPos(0, _height); _height += line->setColumnWidths(_timestampWidth, _senderWidth, w - _timestampWidth - _senderWidth); } - setSceneRect(QRectF(0, 0, _width, _height)); + qDebug() << "setting width"; + setSceneRect(0, 0, _width, _height * 2); } void ChatScene::mousePressEvent ( QGraphicsSceneMouseEvent * mouseEvent ) { diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 8551a83a..22d3b0e3 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -29,6 +29,9 @@ ChatView::ChatView(Buffer *buf, QWidget *parent) : QGraphicsView(parent), AbstractChatView() { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setOptimizationFlags(QGraphicsView::DontClipPainter + |QGraphicsView::DontSavePainterState + |QGraphicsView::DontAdjustForAntialiasing); _scene = new ChatScene(Client::messageModel(), this); _scene->setWidth(width()); setScene(_scene); @@ -48,7 +51,7 @@ ChatScene *ChatView::scene() const { void ChatView::resizeEvent(QResizeEvent *event) { scene()->setWidth(event->size().width()); - + qDebug() << "resize"; } void ChatView::clear()