X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.h;h=9abd761b2cb85001cb809ecdcf082da8926c762a;hp=cc37dac71864433be8008a9ab5c5c851049ed0b2;hb=6245a8d29e893eaff25a12b0be2f47b64f0f7bcd;hpb=5199330f0b249b20c27cd372d995909f97433786 diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index cc37dac7..9abd761b 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -48,10 +48,11 @@ public: void initLayoutHelper(QTextLayout *layout, QTextOption::WrapMode, Qt::Alignment = Qt::AlignLeft) const; virtual inline void initLayout(QTextLayout *layout) const { - initLayoutHelper(layout, QTextOption::WrapAnywhere); + initLayoutHelper(layout, QTextOption::NoWrap); doLayout(layout); } virtual void doLayout(QTextLayout *) const; + virtual UiStyle::FormatList formatList() const; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); enum { Type = ChatScene::ChatItemType }; @@ -85,7 +86,8 @@ protected: void paintBackground(QPainter *); QVector selectionFormats() const; - virtual inline QVector additionalFormats() const { return QVector(); } + virtual QVector additionalFormats() const; + void overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const; inline qint16 selectionStart() const { return _selectionStart; } inline void setSelectionStart(qint16 start) { _selectionStart = start; } @@ -186,13 +188,16 @@ 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; + virtual UiStyle::FormatList formatList() const; private: struct Clickable; class ActionProxy; + class WrapColumnFinder; ContentsChatItemPrivate *_data; ContentsChatItemPrivate *privateData() const; @@ -241,6 +246,23 @@ struct ContentsChatItemPrivate { ContentsChatItemPrivate(const QList &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)