From a15079c68f444b883a6ccb64385a2bc0c7ec107c Mon Sep 17 00:00:00 2001 From: Chris Tarazi Date: Sun, 4 Feb 2018 17:22:55 -0800 Subject: [PATCH 1/3] Fix #217: create space for checkmark beforehand --- include/timeline/TimelineItem.h | 1 + src/timeline/TimelineItem.cc | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/timeline/TimelineItem.h b/include/timeline/TimelineItem.h index 525cd6e1..6a8f277e 100644 --- a/include/timeline/TimelineItem.h +++ b/include/timeline/TimelineItem.h @@ -137,6 +137,7 @@ private: QFont font_; QLabel *timestamp_; + QLabel *checkmark_; QLabel *userName_; QLabel *body_; }; diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc index 93987d52..db5f19e6 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc @@ -61,6 +61,10 @@ TimelineItem::init() mainLayout_->setContentsMargins(conf::timeline::headerLeftMargin, 0, 0, 0); mainLayout_->setSpacing(0); + + checkmark_ = new QLabel(" ", this); + checkmark_->setStyleSheet( + QString("font-size: %1px;").arg(conf::timeline::fonts::timestamp)); } /* @@ -108,6 +112,7 @@ TimelineItem::TimelineItem(mtx::events::MessageType ty, messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -239,6 +244,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEventaddWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -285,6 +291,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -336,6 +343,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -343,11 +351,8 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent void TimelineItem::markReceived() { - auto checkmark = new QLabel("✓", this); - checkmark->setStyleSheet(QString("font-size: %1px;").arg(conf::timeline::fonts::timestamp)); - checkmark->setAlignment(Qt::AlignTop); - - messageLayout_->insertWidget(1, checkmark); + checkmark_->setText("✓"); + checkmark_->setAlignment(Qt::AlignTop); } // Only the body is displayed. From 2dcc01633ee2eaa84e0643bff42121c8ac50ee80 Mon Sep 17 00:00:00 2001 From: Chris Tarazi Date: Mon, 5 Feb 2018 20:42:55 -0800 Subject: [PATCH 2/3] Apply fixed width for checkmark for all messages --- include/timeline/TimelineItem.h | 2 ++ src/timeline/TimelineItem.cc | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/timeline/TimelineItem.h b/include/timeline/TimelineItem.h index 6a8f277e..c499957b 100644 --- a/include/timeline/TimelineItem.h +++ b/include/timeline/TimelineItem.h @@ -182,6 +182,7 @@ TimelineItem::setupLocalWidgetLayout(Widget *widget, messageLayout_->addLayout(widgetLayout, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -232,6 +233,7 @@ TimelineItem::setupWidgetLayout(Widget *widget, messageLayout_->addLayout(widgetLayout, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc index db5f19e6..063f1a41 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc @@ -30,6 +30,8 @@ #include "timeline/widgets/ImageItem.h" #include "timeline/widgets/VideoItem.h" +constexpr const static char *CHECKMARK = "✓"; + void TimelineItem::init() { @@ -62,7 +64,11 @@ TimelineItem::init() mainLayout_->setContentsMargins(conf::timeline::headerLeftMargin, 0, 0, 0); mainLayout_->setSpacing(0); + // Setting fixed width for checkmark because systems may have a differing width for a + // space and the Unicode checkmark. checkmark_ = new QLabel(" ", this); + checkmark_->setFixedWidth(fm.width(CHECKMARK)); + checkmark_->setFont(font_); checkmark_->setStyleSheet( QString("font-size: %1px;").arg(conf::timeline::fonts::timestamp)); } @@ -351,7 +357,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent void TimelineItem::markReceived() { - checkmark_->setText("✓"); + checkmark_->setText(CHECKMARK); checkmark_->setAlignment(Qt::AlignTop); } From 31eb0a9c88268322c51f2567d23cedd85673fb35 Mon Sep 17 00:00:00 2001 From: Chris Tarazi Date: Tue, 6 Feb 2018 20:52:21 -0800 Subject: [PATCH 3/3] Create new font for checkmark --- src/timeline/TimelineItem.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc index 063f1a41..62e195a4 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc @@ -64,13 +64,14 @@ TimelineItem::init() mainLayout_->setContentsMargins(conf::timeline::headerLeftMargin, 0, 0, 0); mainLayout_->setSpacing(0); + QFont checkmarkFont; + checkmarkFont.setPixelSize(conf::timeline::fonts::timestamp); + // Setting fixed width for checkmark because systems may have a differing width for a // space and the Unicode checkmark. checkmark_ = new QLabel(" ", this); - checkmark_->setFixedWidth(fm.width(CHECKMARK)); - checkmark_->setFont(font_); - checkmark_->setStyleSheet( - QString("font-size: %1px;").arg(conf::timeline::fonts::timestamp)); + checkmark_->setFont(checkmarkFont); + checkmark_->setFixedWidth(QFontMetrics{checkmarkFont}.width(CHECKMARK)); } /*