Properly re-layout on resizing
authorManuel Nickschas <sputnick@quassel-irc.org>
Sat, 14 Jun 2008 10:36:52 +0000 (12:36 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sat, 2 Aug 2008 13:17:09 +0000 (15:17 +0200)
src/qtui/chatitem.cpp
src/qtui/chatitem.h

index c12d5c5..6efe8c2 100644 (file)
@@ -47,10 +47,12 @@ QVariant ChatItem::data(int role) const {
 }
 
 int ChatItem::setWidth(int w) {
 }
 
 int ChatItem::setWidth(int w) {
+  w -= 10;
   if(w == _boundingRect.width()) return _boundingRect.height();
   int h = heightForWidth(w);
   _boundingRect.setWidth(w);
   _boundingRect.setHeight(h);
   if(w == _boundingRect.width()) return _boundingRect.height();
   int h = heightForWidth(w);
   _boundingRect.setWidth(w);
   _boundingRect.setHeight(h);
+  if(haveLayout()) updateLayout();
   return h;
 }
 
   return h;
 }
 
@@ -76,7 +78,7 @@ int ChatItem::heightForWidth(int width) {
 }
 
 void ChatItem::layout() {
 }
 
 void ChatItem::layout() {
-  if(_layout) return;
+  if(haveLayout()) return;
   _layout = new QTextLayout(data(MessageModel::DisplayRole).toString());
 
   // Convert format information into a FormatRange
   _layout = new QTextLayout(data(MessageModel::DisplayRole).toString());
 
   // Convert format information into a FormatRange
@@ -92,6 +94,11 @@ void ChatItem::layout() {
   }
   if(i > 0) formatRanges.last().length = _layout->text().length() - formatRanges.last().start;
   _layout->setAdditionalFormats(formatRanges);
   }
   if(i > 0) formatRanges.last().length = _layout->text().length() - formatRanges.last().start;
   _layout->setAdditionalFormats(formatRanges);
+  updateLayout();
+}
+
+void ChatItem::updateLayout() {
+  if(!haveLayout()) layout();
 
   // Now layout
   qreal h = 0;
 
   // Now layout
   qreal h = 0;
@@ -118,6 +125,7 @@ void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
   Q_UNUSED(option); Q_UNUSED(widget);
   layout();
   _layout->draw(painter, QPointF(0,0), QVector<QTextLayout::FormatRange>(), boundingRect());
   Q_UNUSED(option); Q_UNUSED(widget);
   layout();
   _layout->draw(painter, QPointF(0,0), QVector<QTextLayout::FormatRange>(), boundingRect());
+  painter->drawRect(boundingRect());
 }
 
 /*
 }
 
 /*
index 2731a0c..d32b3cc 100644 (file)
@@ -45,6 +45,7 @@ class ChatItem : public QGraphicsItem {
 
     inline bool haveLayout() const { return _layout != 0; }
     void clearLayout();
 
     inline bool haveLayout() const { return _layout != 0; }
     void clearLayout();
+    void updateLayout();
     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;