virtual QVector<QTextLayout::FormatRange> additionalFormats() const;
virtual inline void initLayout(QTextLayout *layout) const {
- initLayoutHelper(layout, QTextOption::WrapAtWordBoundaryOrAnywhere);
+ initLayoutHelper(layout, QTextOption::WrapAnywhere);
doLayout(layout);
}
+ virtual void doLayout(QTextLayout *layout) const;
private:
struct Clickable;
class ActionProxy;
+ class WrapColumnFinder;
ContentsChatItemPrivate *_data;
ContentsChatItemPrivate *privateData() const;
ContentsChatItemPrivate(const QList<ContentsChatItem::Clickable> &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {}
};
+class ContentsChatItem::WrapColumnFinder {
+public:
+ WrapColumnFinder(const ChatItem *parent);
+ ~WrapColumnFinder();
+
+ qint16 nextWrapColumn(qreal width);
+
+private:
+ const ChatItem *item;
+ QTextLayout layout;
+ QTextLine line;
+ ChatLineModel::WrapList wrapList;
+ qint16 wordidx;
+ qint16 lineCount;
+ qreal choppedTrailing;
+};
+
//! Acts as a proxy for Action signals targetted at a ContentsChatItem
/** Since a ChatItem is not a QObject, hence cannot receive signals, we use a static ActionProxy
* as a receiver instead. This avoids having to handle ChatItem actions (e.g. context menu entries)