File textwidget.cpp#
File List > src > tools > text > textwidget.cpp
Go to the documentation of this file.
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors
#include "textwidget.h"
TextWidget::TextWidget(QWidget* parent)
: QTextEdit(parent)
{
setStyleSheet(QStringLiteral("TextWidget { background: transparent; }"));
connect(this, &TextWidget::textChanged, this, &TextWidget::adjustSize);
connect(this, &TextWidget::textChanged, this, &TextWidget::emitTextUpdated);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setContextMenuPolicy(Qt::NoContextMenu);
}
void TextWidget::showEvent(QShowEvent* e)
{
QFont font;
QFontMetrics fm(font);
setFixedWidth(fm.lineSpacing() * 6);
setFixedHeight(fm.lineSpacing() * 2.5);
m_baseSize = size();
m_minSize = m_baseSize;
QTextEdit::showEvent(e);
adjustSize();
}
void TextWidget::resizeEvent(QResizeEvent* e)
{
m_minSize.setHeight(qMin(m_baseSize.height(), height()));
m_minSize.setWidth(qMin(m_baseSize.width(), width()));
QTextEdit::resizeEvent(e);
}
void TextWidget::setFont(const QFont& f)
{
QTextEdit::setFont(f);
adjustSize();
}
void TextWidget::setAlignment(Qt::AlignmentFlag alignment)
{
QTextEdit::setAlignment(alignment);
adjustSize();
}
void TextWidget::setTextColor(const QColor& c)
{
QString s(
QStringLiteral("TextWidget { background: transparent; color: %1; }"));
setStyleSheet(s.arg(c.name()));
}
void TextWidget::adjustSize()
{
QString&& text = this->toPlainText();
QFontMetrics fm(font());
QRect bounds = fm.boundingRect(QRect(), 0, text);
int pixelsWide = bounds.width() + fm.lineSpacing();
int pixelsHigh = bounds.height() * 1.15 + fm.lineSpacing();
if (pixelsWide < m_minSize.width()) {
pixelsWide = m_minSize.width();
}
if (pixelsHigh < m_minSize.height()) {
pixelsHigh = m_minSize.height();
}
this->setFixedSize(pixelsWide, pixelsHigh);
}
void TextWidget::emitTextUpdated()
{
emit textUpdated(this->toPlainText());
}