summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-12 10:21:53 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-12 10:21:53 +0200
commit5b09c8e652756f8b631fc3e5b6d72a3df3e4faa3 (patch)
treee4237234458b172d65898e87f8311da8d1bbd0d0
parentDismiss modal by clicking on the overlay (diff)
downloadnheko-5b09c8e652756f8b631fc3e5b6d72a3df3e4faa3.tar.xz
Handle surrogate pairs in avatars
-rw-r--r--include/Utils.h5
-rw-r--r--include/ui/Avatar.h4
-rw-r--r--src/RoomInfoListItem.cc4
-rw-r--r--src/TopRoomBar.cc12
-rw-r--r--src/Utils.cc9
-rw-r--r--src/ui/Avatar.cc4
6 files changed, 25 insertions, 13 deletions
diff --git a/include/Utils.h b/include/Utils.h

index 183ebbbe..bbe46dd8 100644 --- a/include/Utils.h +++ b/include/Utils.h
@@ -17,4 +17,9 @@ descriptiveTime(const QDateTime &then); //! in the RoomList. DescInfo getMessageDescription(const TimelineEvent &event, const QString &localUser); + +//! Get the first character of a string, taking into account that +//! surrogate pairs might be in use. +QString +firstChar(const QString &input); } diff --git a/include/ui/Avatar.h b/include/ui/Avatar.h
index dc089139..d856b9d8 100644 --- a/include/ui/Avatar.h +++ b/include/ui/Avatar.h
@@ -21,7 +21,7 @@ public: void setBackgroundColor(const QColor &color); void setIcon(const QIcon &icon); void setImage(const QImage &image); - void setLetter(const QChar &letter); + void setLetter(const QString &letter); void setSize(int size); void setTextColor(const QColor &color); @@ -38,7 +38,7 @@ private: void init(); ui::AvatarType type_; - QChar letter_; + QString letter_; QColor background_color_; QColor text_color_; QIcon icon_; diff --git a/src/RoomInfoListItem.cc b/src/RoomInfoListItem.cc
index f8989948..3e84051e 100644 --- a/src/RoomInfoListItem.cc +++ b/src/RoomInfoListItem.cc
@@ -28,6 +28,7 @@ #include "RoomInfoListItem.h" #include "RoomSettings.h" #include "Theme.h" +#include "Utils.h" constexpr int Padding = 7; constexpr int IconSize = 48; @@ -244,7 +245,8 @@ RoomInfoListItem::paintEvent(QPaintEvent *event) p.setFont(font); p.setPen(QColor("#333")); p.setBrush(Qt::NoBrush); - p.drawText(avatarRegion.translated(0, -1), Qt::AlignCenter, QChar(roomName()[0])); + p.drawText( + avatarRegion.translated(0, -1), Qt::AlignCenter, utils::firstChar(roomName())); } else { p.save(); diff --git a/src/TopRoomBar.cc b/src/TopRoomBar.cc
index 381702e0..dc597bc9 100644 --- a/src/TopRoomBar.cc +++ b/src/TopRoomBar.cc
@@ -27,6 +27,7 @@ #include "OverlayModal.h" #include "RoomSettings.h" #include "TopRoomBar.h" +#include "Utils.h" TopRoomBar::TopRoomBar(QWidget *parent) : QWidget(parent) @@ -40,7 +41,7 @@ TopRoomBar::TopRoomBar(QWidget *parent) topLayout_->setMargin(10); avatar_ = new Avatar(this); - avatar_->setLetter(QChar('?')); + avatar_->setLetter(""); avatar_->setSize(35); textLayout_ = new QVBoxLayout(); @@ -169,12 +170,7 @@ TopRoomBar::closeLeaveRoomDialog(bool leaving) void TopRoomBar::updateRoomAvatarFromName(const QString &name) { - QChar letter = '?'; - - if (name.size() > 0) - letter = name[0]; - - avatar_->setLetter(letter); + avatar_->setLetter(utils::firstChar(name)); update(); } @@ -183,7 +179,7 @@ TopRoomBar::reset() { nameLabel_->setText(""); topicLabel_->setText(""); - avatar_->setLetter(QChar('?')); + avatar_->setLetter(""); roomName_.clear(); roomTopic_.clear(); diff --git a/src/Utils.cc b/src/Utils.cc
index 663f7196..9d575c09 100644 --- a/src/Utils.cc +++ b/src/Utils.cc
@@ -119,3 +119,12 @@ utils::getMessageDescription(const TimelineEvent &event, const QString &localUse return DescInfo{}; } + +QString +utils::firstChar(const QString &input) +{ + if (!input.isEmpty()) + return QString::fromUcs4(&input.toUcs4().at(0), 1); + + return input; +} diff --git a/src/ui/Avatar.cc b/src/ui/Avatar.cc
index e3987e7a..17ee198e 100644 --- a/src/ui/Avatar.cc +++ b/src/ui/Avatar.cc
@@ -7,7 +7,7 @@ Avatar::Avatar(QWidget *parent) { size_ = ui::AvatarSize; type_ = ui::AvatarType::Letter; - letter_ = QChar('A'); + letter_ = "A"; QFont _font(font()); _font.setPointSizeF(ui::FontSize); @@ -79,7 +79,7 @@ Avatar::setSize(int size) } void -Avatar::setLetter(const QChar &letter) +Avatar::setLetter(const QString &letter) { letter_ = letter; type_ = ui::AvatarType::Letter;