X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.h;h=10c53993fac5ae8f4c0e0da175141afee3e76884;hb=00f633d013c9c9b87ae811c62daca40c1f73d1b8;hp=cf71ad9b159ee6fb7ad4ce1f380677d742d01536;hpb=7697a688fc1fb1e8e56b80099707e4b2a944759e;p=quassel.git diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index cf71ad9b..10c53993 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -186,13 +186,15 @@ protected: virtual QVector 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; @@ -241,6 +243,23 @@ struct ContentsChatItemPrivate { ContentsChatItemPrivate(const QList &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {} }; +class ContentsChatItem::WrapColumnFinder { +public: + WrapColumnFinder(const ChatItem *parent); + ~WrapColumnFinder(); + + qint16 nextWrapColumn(); + +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)