X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fstyledlabel.cpp;h=f54bea81e2f0d7df3cc70895615f2fad19bf4abf;hp=d3d7982fb3d414488494d1596b2ec0ec009946ac;hb=3dd76d9373fb46b7be3f7f963b3d3a38ded63ae5;hpb=68878dc8366f2f4a0afe132847aad9a51a80cdbf diff --git a/src/uisupport/styledlabel.cpp b/src/uisupport/styledlabel.cpp index d3d7982f..f54bea81 100644 --- a/src/uisupport/styledlabel.cpp +++ b/src/uisupport/styledlabel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,20 +18,18 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include "styledlabel.h" + #include #include #include #include "graphicalui.h" -#include "styledlabel.h" #include "uistyle.h" -StyledLabel::StyledLabel(QWidget *parent) - : QFrame(parent), - _wrapMode(QTextOption::NoWrap), - _alignment(Qt::AlignVCenter|Qt::AlignLeft), - _toolTipEnabled(true), - _resizeMode(NoResize) +StyledLabel::StyledLabel(QWidget* parent) + : QFrame(parent) + , _alignment(Qt::AlignVCenter | Qt::AlignLeft) { setMouseTracking(true); @@ -41,15 +39,13 @@ StyledLabel::StyledLabel(QWidget *parent) _layout.setTextOption(opt); } - -void StyledLabel::setCustomFont(const QFont &font) +void StyledLabel::setCustomFont(const QFont& font) { setFont(font); _layout.setFont(font); setText(_layout.text()); } - void StyledLabel::setWrapMode(QTextOption::WrapMode mode) { if (_wrapMode == mode) @@ -63,7 +59,6 @@ void StyledLabel::setWrapMode(QTextOption::WrapMode mode) layout(); } - void StyledLabel::setAlignment(Qt::Alignment alignment) { if (_alignment == alignment) @@ -77,7 +72,6 @@ void StyledLabel::setAlignment(Qt::Alignment alignment) layout(); } - void StyledLabel::setResizeMode(ResizeMode mode) { if (_resizeMode == mode) @@ -90,21 +84,18 @@ void StyledLabel::setResizeMode(ResizeMode mode) setWrapMode(QTextOption::NoWrap); } - -void StyledLabel::resizeEvent(QResizeEvent *event) +void StyledLabel::resizeEvent(QResizeEvent* event) { QFrame::resizeEvent(event); layout(); } - QSize StyledLabel::sizeHint() const { return _sizeHint; } - void StyledLabel::updateSizeHint() { QSize sh; @@ -117,13 +108,10 @@ void StyledLabel::updateSizeHint() } } - -void StyledLabel::setText(const QString &text) +void StyledLabel::setText(const QString& text) { - UiStyle *style = GraphicalUi::uiStyle(); - - UiStyle::StyledString sstr = style->styleString(style->mircToInternal(text), UiStyle::FormatType::PlainMsg); - QList layoutList = style->toTextLayoutList(sstr.formatList, sstr.plainText.length(), UiStyle::MessageLabel::None); + UiStyle::StyledString sstr = UiStyle::styleString(UiStyle::mircToInternal(text), UiStyle::FormatType::PlainMsg); + UiStyle::FormatContainer layoutList = GraphicalUi::uiStyle()->toTextLayoutList(sstr.formatList, sstr.plainText.length(), UiStyle::MessageLabel::None); // Use default font rather than the style's QTextLayout::FormatRange fmtRange; @@ -134,7 +122,7 @@ void StyledLabel::setText(const QString &text) // Mark URLs _clickables = ClickableList::fromString(sstr.plainText); - foreach(Clickable click, _clickables) { + foreach (Clickable click, _clickables) { if (click.type() == Clickable::Url) { QTextLayout::FormatRange range; range.start = click.start(); @@ -145,34 +133,29 @@ void StyledLabel::setText(const QString &text) } _layout.setText(sstr.plainText); - _layout.setAdditionalFormats(layoutList); + UiStyle::setTextLayoutFormats(_layout, layoutList); layout(); endHoverMode(); } - void StyledLabel::updateToolTip() { - if (frameRect().width() - 2*frameWidth() < _layout.minimumWidth()) -#if QT_VERSION < 0x050000 - setToolTip(QString("%1").arg(Qt::escape(_layout.text()))); // only rich text gets wordwrapped! -#else + if (frameRect().width() - 2 * frameWidth() < _layout.minimumWidth()) setToolTip(QString("%1").arg(_layout.text().toHtmlEscaped())); // only rich text gets wordwrapped! -#endif else setToolTip(QString()); } - void StyledLabel::layout() { qreal h = 0; qreal w = contentsRect().width(); _layout.beginLayout(); - forever { + forever + { QTextLine line = _layout.createLine(); if (!line.isValid()) break; @@ -187,8 +170,7 @@ void StyledLabel::layout() update(); } - -void StyledLabel::paintEvent(QPaintEvent *e) +void StyledLabel::paintEvent(QPaintEvent* e) { QFrame::paintEvent(e); QPainter painter(this); @@ -197,8 +179,7 @@ void StyledLabel::paintEvent(QPaintEvent *e) _layout.draw(&painter, QPointF(contentsRect().x(), y), _extraLayoutList); } - -int StyledLabel::posToCursor(const QPointF &pos) +int StyledLabel::posToCursor(const QPointF& pos) { if (pos.y() < 0 || pos.y() > height()) return -1; @@ -212,15 +193,10 @@ int StyledLabel::posToCursor(const QPointF &pos) return -1; } - -void StyledLabel::mouseMoveEvent(QMouseEvent *event) +void StyledLabel::mouseMoveEvent(QMouseEvent* event) { if (event->buttons() == Qt::NoButton) { -#if QT_VERSION < 0x050000 - Clickable click = _clickables.atCursorPos(posToCursor(event->posF())); -#else Clickable click = _clickables.atCursorPos(posToCursor(event->localPos())); -#endif if (click.isValid()) setHoverMode(click.start(), click.length()); else @@ -228,36 +204,28 @@ void StyledLabel::mouseMoveEvent(QMouseEvent *event) } } - -void StyledLabel::enterEvent(QEvent *) +void StyledLabel::enterEvent(QEvent*) { if (resizeMode() == ResizeOnHover) setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); } - -void StyledLabel::leaveEvent(QEvent *) +void StyledLabel::leaveEvent(QEvent*) { endHoverMode(); if (resizeMode() == ResizeOnHover) setWrapMode(QTextOption::NoWrap); } - -void StyledLabel::mousePressEvent(QMouseEvent *event) +void StyledLabel::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { -#if QT_VERSION < 0x050000 - Clickable click = _clickables.atCursorPos(posToCursor(event->posF())); -#else Clickable click = _clickables.atCursorPos(posToCursor(event->localPos())); -#endif if (click.isValid()) emit clickableActivated(click); } } - void StyledLabel::setHoverMode(int start, int length) { if (_extraLayoutList.count() >= 1 && _extraLayoutList.first().start == start && _extraLayoutList.first().length == length) @@ -274,7 +242,6 @@ void StyledLabel::setHoverMode(int start, int length) update(); } - void StyledLabel::endHoverMode() { _extraLayoutList.clear();