#include "label.hpp" #include "application.hpp" #include "singletons/fontmanager.hpp" #include namespace chatterino { namespace widgets { Label::Label(BaseWidget *parent) : BaseWidget(parent) { auto app = getApp(); app->fonts->fontChanged.connect([=]() { this->scaleChangedEvent(this->getScale()); // }); } const QString &Label::getText() const { return this->text; } void Label::setText(const QString &value) { this->text = value; this->scaleChangedEvent(this->getScale()); } FontStyle Label::getFontStyle() const { return this->fontStyle; } void Label::setFontStyle(FontStyle style) { this->fontStyle = style; this->scaleChangedEvent(this->getScale()); } void Label::scaleChangedEvent(float scale) { auto app = getApp(); QFontMetrics metrics = app->fonts->getFontMetrics(this->fontStyle, scale); this->preferedSize = QSize(metrics.width(this->text), metrics.height()); this->updateGeometry(); } QSize Label::sizeHint() const { return this->preferedSize; } QSize Label::minimumSizeHint() const { return this->preferedSize; } void Label::paintEvent(QPaintEvent *) { auto app = getApp(); QPainter painter(this); painter.setFont(app->fonts->getFont(this->fontStyle, this->getScale() / painter.device()->devicePixelRatioF())); int width = app->fonts->getFontMetrics(this->fontStyle, this->getScale()).width(this->text); int flags = Qt::TextSingleLine; if (this->width() < width) { flags |= Qt::AlignLeft | Qt::AlignVCenter; } else { flags |= Qt::AlignCenter; } painter.drawText(this->rect(), flags, this->text); } } // namespace widgets } // namespace chatterino