forked from mirror/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