Some optimizations... QGraphicsScene has some weird issues here
authorManuel Nickschas <sputnick@quassel-irc.org>
Thu, 22 May 2008 19:08:09 +0000 (19:08 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 22 May 2008 19:08:09 +0000 (19:08 +0000)
src/qtui/chatitem.cpp
src/qtui/chatitem.h
src/qtui/chatscene.cpp
src/qtui/chatview.cpp

index c518c5f..63d92e6 100644 (file)
@@ -28,7 +28,7 @@
 #include "chatitem.h"
 
 ChatItem::ChatItem(const QPersistentModelIndex &index_, QGraphicsItem *parent) : QGraphicsItem(parent), _index(index_) {
 #include "chatitem.h"
 
 ChatItem::ChatItem(const QPersistentModelIndex &index_, QGraphicsItem *parent) : QGraphicsItem(parent), _index(index_) {
-  _width = _height = 0;
+
 }
 
 ChatItem::~ChatItem() {
 }
 
 ChatItem::~ChatItem() {
@@ -43,9 +43,11 @@ QVariant ChatItem::data(int role) const {
   return _index.data(role);
 }
 
   return _index.data(role);
 }
 
+/*
 QRectF ChatItem::boundingRect() const {
   return QRectF(0, 0, _width, _height);
 }
 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);
 
 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) {
 
 
 int ChatItem::setWidth(int w) {
-  _width = w;
-  _height = 20; // FIXME
-  return _height;
+  _boundingRect.setWidth(w);
+  _boundingRect.setHeight(20); // FIXME
+  return 20;
 }
 
 /*
 }
 
 /*
index e41b7b7..97a6fc0 100644 (file)
@@ -39,7 +39,7 @@ class ChatItem : public QGraphicsItem {
     inline const MessageModel *model() const { return _index.isValid() ? qobject_cast<const MessageModel *>(_index.model()) : 0; }
     inline int row() const { return _index.isValid() ? _index.row() : 0; }
 
     inline const MessageModel *model() const { return _index.isValid() ? qobject_cast<const MessageModel *>(_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;
     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:
     //void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
 
   private:
-    int _width;
-    int _height;
+    QRectF _boundingRect;
     //QTextLayout _layout;
     //QTextOption _textOption;
     QPersistentModelIndex _index;
     //QTextLayout _layout;
     //QTextOption _textOption;
     QPersistentModelIndex _index;
index d425555..b7b8cf1 100644 (file)
@@ -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);
     }
     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);
   }
     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 ) {
 }
 
 void ChatScene::mousePressEvent ( QGraphicsSceneMouseEvent * mouseEvent ) {
index 8551a83..22d3b0e 100644 (file)
@@ -29,6 +29,9 @@
 
 ChatView::ChatView(Buffer *buf, QWidget *parent) : QGraphicsView(parent), AbstractChatView() {
   setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
 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);
   _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());
 
 void ChatView::resizeEvent(QResizeEvent *event) {
   scene()->setWidth(event->size().width());
-
+  qDebug() << "resize";
 }
 
 void ChatView::clear()
 }
 
 void ChatView::clear()