mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-26 13:08:48 +03:00
Resize text input vertically to fit the contents
This commit is contained in:
parent
1fad9398fc
commit
936e215aed
2 changed files with 20 additions and 9 deletions
|
@ -50,6 +50,7 @@ public:
|
||||||
void submit();
|
void submit();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void heightChanged(int height);
|
||||||
void startedTyping();
|
void startedTyping();
|
||||||
void stoppedTyping();
|
void stoppedTyping();
|
||||||
void message(QString);
|
void message(QString);
|
||||||
|
@ -73,7 +74,7 @@ private:
|
||||||
void afterCompletion(int);
|
void afterCompletion(int);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextInputWidget : public QFrame
|
class TextInputWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
|
@ -32,19 +32,22 @@
|
||||||
#include "TextInputWidget.h"
|
#include "TextInputWidget.h"
|
||||||
|
|
||||||
static constexpr size_t INPUT_HISTORY_SIZE = 127;
|
static constexpr size_t INPUT_HISTORY_SIZE = 127;
|
||||||
|
static constexpr int MAX_TEXTINPUT_HEIGHT = 120;
|
||||||
|
|
||||||
FilteredTextEdit::FilteredTextEdit(QWidget *parent)
|
FilteredTextEdit::FilteredTextEdit(QWidget *parent)
|
||||||
: QTextEdit{parent}
|
: QTextEdit{parent}
|
||||||
, history_index_{0}
|
, history_index_{0}
|
||||||
, previewDialog_{parent}
|
, previewDialog_{parent}
|
||||||
{
|
{
|
||||||
|
setFrameStyle(QFrame::NoFrame);
|
||||||
connect(document()->documentLayout(),
|
connect(document()->documentLayout(),
|
||||||
&QAbstractTextDocumentLayout::documentSizeChanged,
|
&QAbstractTextDocumentLayout::documentSizeChanged,
|
||||||
this,
|
this,
|
||||||
&FilteredTextEdit::updateGeometry);
|
&FilteredTextEdit::updateGeometry);
|
||||||
QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
connect(document()->documentLayout(),
|
||||||
policy.setHeightForWidth(true);
|
&QAbstractTextDocumentLayout::documentSizeChanged,
|
||||||
setSizePolicy(policy);
|
this,
|
||||||
|
[=]() { emit heightChanged(document()->size().toSize().height()); });
|
||||||
working_history_.push_back("");
|
working_history_.push_back("");
|
||||||
connect(this, &QTextEdit::textChanged, this, &FilteredTextEdit::textChanged);
|
connect(this, &QTextEdit::textChanged, this, &FilteredTextEdit::textChanged);
|
||||||
setAcceptRichText(false);
|
setAcceptRichText(false);
|
||||||
|
@ -238,17 +241,16 @@ FilteredTextEdit::receiveImage(const QByteArray img, const QString &img_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
TextInputWidget::TextInputWidget(QWidget *parent)
|
TextInputWidget::TextInputWidget(QWidget *parent)
|
||||||
: QFrame(parent)
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
setFont(QFont("Emoji One"));
|
setFont(QFont("Emoji One"));
|
||||||
|
|
||||||
setFixedHeight(conf::textInput::height);
|
setFixedHeight(conf::textInput::height);
|
||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
|
||||||
setCursor(Qt::ArrowCursor);
|
setCursor(Qt::ArrowCursor);
|
||||||
|
|
||||||
topLayout_ = new QHBoxLayout();
|
topLayout_ = new QHBoxLayout();
|
||||||
topLayout_->setSpacing(0);
|
topLayout_->setSpacing(0);
|
||||||
topLayout_->setContentsMargins(15, 0, 15, 5);
|
topLayout_->setContentsMargins(15, 0, 15, 0);
|
||||||
|
|
||||||
QIcon send_file_icon;
|
QIcon send_file_icon;
|
||||||
send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png");
|
send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png");
|
||||||
|
@ -269,9 +271,17 @@ TextInputWidget::TextInputWidget(QWidget *parent)
|
||||||
input_ = new FilteredTextEdit(this);
|
input_ = new FilteredTextEdit(this);
|
||||||
input_->setFixedHeight(32);
|
input_->setFixedHeight(32);
|
||||||
input_->setFont(font);
|
input_->setFont(font);
|
||||||
input_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
input_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
input_->setPlaceholderText(tr("Write a message..."));
|
input_->setPlaceholderText(tr("Write a message..."));
|
||||||
input_->setStyleSheet("border: none; padding-top: 5px;");
|
|
||||||
|
connect(input_, &FilteredTextEdit::heightChanged, this, [=](int height) {
|
||||||
|
int textInputHeight = std::min(MAX_TEXTINPUT_HEIGHT, std::max(height, 32));
|
||||||
|
int widgetHeight =
|
||||||
|
std::min(MAX_TEXTINPUT_HEIGHT, std::max(height, conf::textInput::height));
|
||||||
|
|
||||||
|
setFixedHeight(widgetHeight);
|
||||||
|
input_->setFixedHeight(textInputHeight);
|
||||||
|
});
|
||||||
|
|
||||||
sendMessageBtn_ = new FlatButton(this);
|
sendMessageBtn_ = new FlatButton(this);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue