roomlist: Put the message timestamp on the top

This commit is contained in:
Konstantinos Sideris 2018-03-18 15:54:53 +02:00
parent 4192a99927
commit 7253dc2c54
4 changed files with 63 additions and 49 deletions

View file

@ -57,6 +57,7 @@ static constexpr int cornerRadius = 3;
namespace roomlist {
namespace fonts {
static constexpr int heading = 14;
static constexpr int timestamp = heading - 1;
static constexpr int badge = 10;
static constexpr int bubble = 20;
} // namespace fonts
@ -84,7 +85,7 @@ static constexpr int headerLeftMargin = 15;
namespace fonts {
static constexpr int timestamp = 13;
static constexpr int dateSeparator = conf::fontSize - 2;
static constexpr int dateSeparator = conf::fontSize;
} // namespace fonts
} // namespace timeline

View file

@ -75,10 +75,10 @@ public:
update();
}
QString roomId();
bool isPressed() const { return isPressed_; };
QString roomId() { return roomId_; }
bool isPressed() const { return isPressed_; }
QSharedPointer<RoomState> state() const { return state_; }
int unreadMessageCount() const { return unreadMsgCount_; };
int unreadMessageCount() const { return unreadMsgCount_; }
void setAvatar(const QImage &avatar_image);
void setDescriptionMessage(const DescInfo &info);
@ -184,10 +184,12 @@ private:
QRectF acceptBtnRegion_;
QRectF declineBtnRegion_;
};
inline QString
RoomInfoListItem::roomId()
{
return roomId_;
}
// Fonts
QFont bubbleFont_;
QFont font_;
QFont headingFont_;
QFont timestampFont_;
QFont usernameFont_;
QFont unreadCountFont_;
};

View file

@ -52,6 +52,25 @@ RoomInfoListItem::init(QWidget *parent)
ripple_overlay_ = new RippleOverlay(this);
ripple_overlay_->setClipPath(path);
ripple_overlay_->setClipping(true);
font_.setPixelSize(conf::fontSize);
usernameFont_ = font_;
usernameFont_.setWeight(60);
bubbleFont_ = font_;
bubbleFont_.setPixelSize(conf::roomlist::fonts::bubble);
unreadCountFont_.setPixelSize(conf::roomlist::fonts::badge);
unreadCountFont_.setBold(true);
timestampFont_ = font_;
timestampFont_.setPixelSize(conf::roomlist::fonts::timestamp);
timestampFont_.setBold(false);
headingFont_ = font_;
headingFont_.setPixelSize(conf::roomlist::fonts::heading);
headingFont_.setWeight(60);
}
RoomInfoListItem::RoomInfoListItem(QString room_id,
@ -125,9 +144,7 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
p.setRenderHint(QPainter::SmoothPixmapTransform);
p.setRenderHint(QPainter::Antialiasing);
QFont font;
font.setPixelSize(conf::fontSize);
QFontMetrics metrics(font);
QFontMetrics metrics(font_);
QPen titlePen(titleColor_);
QPen subtitlePen(subtitleColor_);
@ -148,26 +165,26 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
int bottom_y = MaxHeight - Padding - Padding / 3 - metrics.ascent() / 2;
if (width() > ui::sidebar::SmallSize) {
font.setPixelSize(conf::roomlist::fonts::heading);
font.setWeight(60);
p.setFont(font);
p.setFont(headingFont_);
p.setPen(titlePen);
const auto msgStampWidth =
QFontMetrics(timestampFont_).width(lastMsgInfo_.timestamp) + 4;
// Name line.
QFontMetrics fontNameMetrics(font);
QFontMetrics fontNameMetrics(headingFont_);
int top_y = 2 * Padding + fontNameMetrics.ascent() / 2;
auto name = metrics.elidedText(
roomName(), Qt::ElideRight, (width() - IconSize - 2 * Padding) * 0.8);
const auto name =
metrics.elidedText(roomName(),
Qt::ElideRight,
(width() - IconSize - 2 * Padding - msgStampWidth) * 0.8);
p.drawText(QPoint(2 * Padding + IconSize, top_y), name);
if (roomType_ == RoomType::Joined) {
font.setPixelSize(conf::fontSize);
p.setFont(font);
p.setFont(font_);
p.setPen(subtitlePen);
auto msgStampWidth = QFontMetrics(font).width(lastMsgInfo_.timestamp) + 5;
// The limit is the space between the end of the avatar and the start of the
// timestamp.
int usernameLimit =
@ -175,14 +192,12 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
auto userName =
metrics.elidedText(lastMsgInfo_.username, Qt::ElideRight, usernameLimit);
font.setWeight(60);
p.setFont(font);
p.setFont(usernameFont_);
p.drawText(QPoint(2 * Padding + IconSize, bottom_y), userName);
int nameWidth = QFontMetrics(font).width(userName);
int nameWidth = QFontMetrics(usernameFont_).width(userName);
font.setBold(false);
p.setFont(font);
p.setFont(font_);
// The limit is the space between the end of the username and the start of
// the timestamp.
@ -193,12 +208,10 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
p.drawText(QPoint(2 * Padding + IconSize + nameWidth, bottom_y),
description);
// We either show the bubble or the last message timestamp.
if (unreadMsgCount_ == 0) {
font.setBold(true);
p.drawText(QPoint(width() - Padding - msgStampWidth, bottom_y),
// We show the last message timestamp.
p.setFont(timestampFont_);
p.drawText(QPoint(width() - Padding - msgStampWidth, top_y),
lastMsgInfo_.timestamp);
}
} else {
int btnWidth = (width() - IconSize - 6 * Padding) / 2;
@ -221,13 +234,12 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
p.drawPath(declinePath);
p.setPen(QPen(btnTextColor_));
p.setFont(font);
p.setFont(font_);
p.drawText(acceptBtnRegion_, Qt::AlignCenter, tr("Accept"));
p.drawText(declineBtnRegion_, Qt::AlignCenter, tr("Decline"));
}
}
font.setBold(false);
p.setPen(Qt::NoPen);
// We using the first letter of room's name.
@ -241,8 +253,7 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
p.drawEllipse(avatarRegion.center(), IconSize / 2, IconSize / 2);
font.setPixelSize(conf::roomlist::fonts::bubble);
p.setFont(font);
p.setFont(bubbleFont_);
p.setPen(QColor("#333"));
p.setBrush(Qt::NoBrush);
p.drawText(
@ -269,13 +280,9 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
if (isPressed_)
brush.setColor(textColor);
QFont unreadCountFont;
unreadCountFont.setPixelSize(conf::roomlist::fonts::badge);
unreadCountFont.setBold(true);
p.setBrush(brush);
p.setPen(Qt::NoPen);
p.setFont(unreadCountFont);
p.setFont(unreadCountFont_);
int diameter = 20;

View file

@ -679,13 +679,17 @@ TimelineView::createDateSeparator(QDateTime datetime)
fmt = QString("ddd d MMMM");
if (days == 0)
separator = new QLabel(tr("Today"));
separator = new QLabel(tr("Today"), this);
else if (std::abs(days) == 1)
separator = new QLabel(tr("Yesterday"));
separator = new QLabel(tr("Yesterday"), this);
else
separator = new QLabel(datetime.toString(fmt));
separator = new QLabel(datetime.toString(fmt), this);
if (separator) {
QFont font;
font.setWeight(60);
separator->setFont(font);
separator->setStyleSheet(
QString("font-size: %1px").arg(conf::timeline::fonts::dateSeparator));
separator->setAlignment(Qt::AlignCenter);