From 2a5eaae0ee442dcae4076c161e788adf9e9d88c8 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 14 Jun 2008 12:36:52 +0200 Subject: [PATCH] Properly re-layout on resizing --- src/qtui/chatitem.cpp | 10 +++++++++- src/qtui/chatitem.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index c12d5c5b..6efe8c2a 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -47,10 +47,12 @@ QVariant ChatItem::data(int role) const { } 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(haveLayout()) updateLayout(); return h; } @@ -76,7 +78,7 @@ int ChatItem::heightForWidth(int width) { } void ChatItem::layout() { - if(_layout) return; + if(haveLayout()) return; _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); + updateLayout(); +} + +void ChatItem::updateLayout() { + if(!haveLayout()) layout(); // 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(), boundingRect()); + painter->drawRect(boundingRect()); } /* diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 2731a0cc..d32b3cc0 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -45,6 +45,7 @@ class ChatItem : public QGraphicsItem { 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; -- 2.20.1