Fix chatline caching on resize
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 31 May 2010 20:16:25 +0000 (22:16 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 31 May 2010 20:16:25 +0000 (22:16 +0200)
This fixes drawing errors when resizing columns.

Also this commit removes some compiler warnings due to overlapping method names.

src/qtui/chatitem.cpp
src/qtui/chatitem.h

index bec1eb7..ec45d87 100644 (file)
@@ -115,11 +115,6 @@ void ChatItem::clearCache() {
   _cachedLayout = 0;
 }
 
-void ChatItem::initLayout(QTextLayout *layout, QTextOption::WrapMode mode, Qt::Alignment alignment) const {
-  initLayoutHelper(layout, mode, alignment);
-  doLayout(layout);
-}
-
 void ChatItem::initLayoutHelper(QTextLayout *layout, QTextOption::WrapMode wrapMode, Qt::Alignment alignment) const {
   Q_ASSERT(layout);
 
@@ -135,6 +130,11 @@ void ChatItem::initLayoutHelper(QTextLayout *layout, QTextOption::WrapMode wrapM
   layout->setAdditionalFormats(formatRanges);
 }
 
+void ChatItem::initLayout(QTextLayout *layout) const {
+  initLayoutHelper(layout, QTextOption::NoWrap);
+  doLayout(layout);
+}
+
 void ChatItem::doLayout(QTextLayout *layout) const {
   layout->beginLayout();
   QTextLine line = layout->createLine();
@@ -405,6 +405,11 @@ void ChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) {
 // SenderChatItem
 // ************************************************************
 
+void SenderChatItem::initLayout(QTextLayout *layout) const {
+  initLayoutHelper(layout, QTextOption::ManualWrap, Qt::AlignRight);
+  doLayout(layout);
+}
+
 void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
   Q_UNUSED(option); Q_UNUSED(widget);
   painter->save();
@@ -518,6 +523,11 @@ qreal ContentsChatItem::setGeometryByWidth(qreal w) {
   return h;
 }
 
+void ContentsChatItem::initLayout(QTextLayout *layout) const {
+  initLayoutHelper(layout, QTextOption::WrapAtWordBoundaryOrAnywhere);
+  doLayout(layout);
+}
+
 void ContentsChatItem::doLayout(QTextLayout *layout) const {
   ChatLineModel::WrapList wrapList = data(ChatLineModel::WrapListRole).value<ChatLineModel::WrapList>();
   if(!wrapList.count()) return; // empty chatitem
index 436f3d0..4e51e93 100644 (file)
@@ -100,13 +100,13 @@ protected:
   virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
   virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
   virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-  virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *) {};
-  virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *) {};
-  virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *) {};
+  virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *) {}
+  virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *) {}
+  virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *) {}
 
   QTextLayout *layout() const;
-  virtual inline void initLayout(QTextLayout *layout) const { initLayout(layout, QTextOption::NoWrap); }
-  virtual void initLayout(QTextLayout *layout, QTextOption::WrapMode, Qt::Alignment alignment = Qt::AlignLeft) const;
+
+  virtual void initLayout(QTextLayout *layout) const;
   virtual void doLayout(QTextLayout *) const;
   virtual UiStyle::FormatList formatList() const;
 
@@ -125,9 +125,9 @@ protected:
 
   qint16 posToCursor(const QPointF &pos) const;
 
-  inline void setGeometry(qreal width, qreal height) { _boundingRect.setSize(QSizeF(width, height)); }
-  inline void setHeight(const qreal &height) { _boundingRect.setHeight(height); }
-  inline void setWidth(const qreal &width) { _boundingRect.setWidth(width); }
+  inline void setGeometry(qreal width, qreal height) { clearCache(); _boundingRect.setSize(QSizeF(width, height)); }
+  inline void setHeight(const qreal &height) { clearCache(); _boundingRect.setHeight(height); }
+  inline void setWidth(const qreal &width) { clearCache(); _boundingRect.setWidth(width); }
   inline void setPos(const QPointF &pos) { _boundingRect.moveTopLeft(pos); }
 
 private:
@@ -170,7 +170,7 @@ public:
 protected:
   virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
   virtual inline int type() const { return ChatScene::SenderChatItemType; }
-  virtual inline void initLayout(QTextLayout *layout) const { ChatItem::initLayout(layout, QTextOption::ManualWrap, Qt::AlignRight); }
+  virtual void initLayout(QTextLayout *layout) const;
 };
 
 // ************************************************************
@@ -204,7 +204,7 @@ protected:
 
   virtual QVector<QTextLayout::FormatRange> additionalFormats() const;
 
-  virtual inline void initLayout(QTextLayout *layout) const { ChatItem::initLayout(layout, QTextOption::WrapAtWordBoundaryOrAnywhere); }
+  virtual void initLayout(QTextLayout *layout) const;
   virtual void doLayout(QTextLayout *layout) const;
   virtual UiStyle::FormatList formatList() const;