From: Manuel Nickschas Date: Mon, 31 May 2010 20:16:25 +0000 (+0200) Subject: Fix chatline caching on resize X-Git-Tag: 0.7-beta1~60 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=159fe3f19ba35c482f0a170da50a13b57ea3a5bd Fix chatline caching on resize This fixes drawing errors when resizing columns. Also this commit removes some compiler warnings due to overlapping method names. --- diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index bec1eb78..ec45d873 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -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(); if(!wrapList.count()) return; // empty chatitem diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 436f3d09..4e51e939 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -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 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;