mirror of https://github.com/Nheko-Reborn/nheko
Receive typing notifications (#88)
parent
88349eae90
commit
d60c2b76e3
@ -0,0 +1,21 @@ |
||||
#pragma once |
||||
|
||||
#include <QPaintEvent> |
||||
#include <QWidget> |
||||
|
||||
class TypingDisplay : public QWidget |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
TypingDisplay(QWidget *parent = nullptr); |
||||
|
||||
void setUsers(const QStringList &user_ids); |
||||
|
||||
protected: |
||||
void paintEvent(QPaintEvent *event) override; |
||||
|
||||
private: |
||||
QString text_; |
||||
int leftPadding_; |
||||
}; |
@ -0,0 +1,56 @@ |
||||
#include <QDebug> |
||||
#include <QPainter> |
||||
#include <QPoint> |
||||
|
||||
#include "Config.h" |
||||
#include "TypingDisplay.h" |
||||
|
||||
TypingDisplay::TypingDisplay(QWidget *parent) |
||||
: QWidget(parent) |
||||
, leftPadding_{ 57 } |
||||
{ |
||||
QFont font; |
||||
font.setPixelSize(conf::typingNotificationFontSize); |
||||
|
||||
setFixedHeight(QFontMetrics(font).height() + 2); |
||||
} |
||||
|
||||
void |
||||
TypingDisplay::setUsers(const QStringList &uid) |
||||
{ |
||||
if (uid.isEmpty()) |
||||
text_.clear(); |
||||
else |
||||
text_ = uid.join(", "); |
||||
|
||||
if (uid.size() == 1) |
||||
text_ += tr(" is typing ..."); |
||||
else if (uid.size() > 1) |
||||
text_ += tr(" are typing ..."); |
||||
|
||||
update(); |
||||
} |
||||
|
||||
void |
||||
TypingDisplay::paintEvent(QPaintEvent *) |
||||
{ |
||||
QPen pen(QColor("#333")); |
||||
|
||||
QFont font; |
||||
font.setPixelSize(conf::typingNotificationFontSize); |
||||
font.setWeight(40); |
||||
font.setItalic(true); |
||||
|
||||
QPainter p(this); |
||||
p.setRenderHint(QPainter::Antialiasing); |
||||
p.setFont(font); |
||||
p.setPen(pen); |
||||
|
||||
QRect region = rect(); |
||||
region.translate(leftPadding_, 0); |
||||
|
||||
QFontMetrics fm(font); |
||||
text_ = fm.elidedText(text_, Qt::ElideRight, width() - 3 * leftPadding_); |
||||
|
||||
p.drawText(region, Qt::AlignTop, text_); |
||||
} |
Loading…
Reference in new issue