Add Text tool

closes #11
Add an initial version of the text tool.
This commit adds:
- Basic text tool.
- On demand thickness and color update.
- Generalized logic for future widget based tools.
This commit is contained in:
lupoDharkael
2018-05-06 13:56:45 +02:00
parent 40605ab6b5
commit 5432614651
34 changed files with 666 additions and 57 deletions

View File

@@ -0,0 +1,87 @@
// Copyright(c) 2017-2018 Alejandro Sirgo Rica & Contributors
//
// This file is part of Flameshot.
//
// Flameshot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Flameshot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Flameshot. If not, see <http://www.gnu.org/licenses/>.
#include "textwidget.h"
TextWidget::TextWidget(QWidget *parent) : QTextEdit(parent) {
setStyleSheet("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::updateFont(const QFont &f) {
setFont(f);
}
void TextWidget::setFontPointSize(qreal s) {
QFont f = font();
f.setPointSize(s);
setFont(f);
}
void TextWidget::setTextColor(const QColor &c) {
QString s("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());
}