From 43568556beae23526c6c27ad27a99fe49f049ce4 Mon Sep 17 00:00:00 2001 From: fourtf Date: Fri, 5 Jan 2018 01:31:01 +0100 Subject: [PATCH] Fixes #195 --- src/messages/message.cpp | 10 ++++++++++ src/messages/message.hpp | 3 +++ src/messages/messageref.cpp | 20 ++++++++++++-------- src/widgets/emotepopup.cpp | 2 ++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/messages/message.cpp b/src/messages/message.cpp index ab53455c8..3003c5840 100644 --- a/src/messages/message.cpp +++ b/src/messages/message.cpp @@ -76,6 +76,16 @@ void Message::setCollapsedDefault(bool value) this->collapsedDefault = value; } +bool Message::getDisableCompactEmotes() const +{ + return this->disableCompactEmotes; +} + +void Message::setDisableCompactEmotes(bool value) +{ + this->disableCompactEmotes = value; +} + namespace { void AddCurrentTimestamp(Message *message) diff --git a/src/messages/message.hpp b/src/messages/message.hpp index 2774fd54e..db767cf4f 100644 --- a/src/messages/message.hpp +++ b/src/messages/message.hpp @@ -30,6 +30,8 @@ public: const QString &getId() const; bool getCollapsedDefault() const; void setCollapsedDefault(bool value); + bool getDisableCompactEmotes() const; + void setDisableCompactEmotes(bool value); QString loginName; QString displayName; @@ -62,6 +64,7 @@ private: bool disabled = false; bool collapsedDefault = false; + bool disableCompactEmotes = false; std::chrono::time_point parseTime; diff --git a/src/messages/messageref.cpp b/src/messages/messageref.cpp index 82774b1c2..bb59c2e20 100644 --- a/src/messages/messageref.cpp +++ b/src/messages/messageref.cpp @@ -98,7 +98,7 @@ void MessageRef::actuallyLayout(int width) const int spaceWidth = 4; const int right = width - MARGIN_RIGHT; - bool overlapEmotes = true; + bool compactEmotes = !this->getMessage()->getDisableCompactEmotes(); // clear word parts this->wordParts.clear(); @@ -176,7 +176,7 @@ void MessageRef::actuallyLayout(int width) lineNumber, mid, mid, true, currentPartStart)); x = currentLineWidth + MARGIN_LEFT + spaceWidth; - lineHeight = this->_updateLineHeight(0, word, overlapEmotes); + lineHeight = this->_updateLineHeight(0, word, compactEmotes); lineStart = this->wordParts.size() - 1; } // fits in the current line @@ -187,7 +187,7 @@ void MessageRef::actuallyLayout(int width) x += word.getWidth(this->scale) + xOffset; x += spaceWidth; - lineHeight = this->_updateLineHeight(lineHeight, word, overlapEmotes); + lineHeight = this->_updateLineHeight(lineHeight, word, compactEmotes); } // doesn't fit in the line else { @@ -203,7 +203,7 @@ void MessageRef::actuallyLayout(int width) lineStart = this->wordParts.size() - 1; - lineHeight = this->_updateLineHeight(0, word, overlapEmotes); + lineHeight = this->_updateLineHeight(0, word, compactEmotes); x = word.getWidth(this->scale) + MARGIN_LEFT; x += spaceWidth; @@ -278,9 +278,13 @@ void MessageRef::_alignWordParts(int lineStart, int lineHeight, int width, int & for (size_t i = lineStart; i < this->wordParts.size(); i++) { WordPart &wordPart = this->wordParts.at(i); - int yExtra = compactEmotes && wordPart.getWord().isImage() - ? (COMPACT_EMOTES_OFFSET / 2) * this->scale - : 0; + const bool isCompactEmote = compactEmotes && wordPart.getWord().isImage() && + wordPart.getWord().getFlags() & Word::EmoteImages; + + int yExtra = 0; + if (isCompactEmote) { + yExtra = (COMPACT_EMOTES_OFFSET / 2) * this->scale; + } wordPart.setPosition(wordPart.getX() + xOffset, wordPart.getY() + lineHeight + yExtra); } @@ -291,7 +295,7 @@ int MessageRef::_updateLineHeight(int currentLineHeight, Word &word, bool compac int newLineHeight = word.getHeight(this->scale); // fourtf: doesn't care about the height of a normal line - if (compactEmotes && word.isImage()) { + if (compactEmotes && word.isImage() && word.getFlags() & Word::EmoteImages) { newLineHeight -= COMPACT_EMOTES_OFFSET * this->scale; } diff --git a/src/widgets/emotepopup.cpp b/src/widgets/emotepopup.cpp index 667cbdc3c..bd3165fed 100644 --- a/src/widgets/emotepopup.cpp +++ b/src/widgets/emotepopup.cpp @@ -57,6 +57,7 @@ void EmotePopup::loadChannel(std::shared_ptr _channel) // EMOTES messages::MessageBuilder builder2; builder2.getMessage()->centered = true; + builder2.getMessage()->setDisableCompactEmotes(true); map.each([&](const QString &key, const util::EmoteData &value) { builder2.appendWord(Word(value.image, Word::Flags::AlwaysShow, key, emoteDesc, @@ -97,6 +98,7 @@ void EmotePopup::loadEmojis() // emojis messages::MessageBuilder builder; builder.getMessage()->centered = true; + builder.getMessage()->setDisableCompactEmotes(true); emojis.each([this, &builder](const QString &key, const util::EmoteData &value) { builder.appendWord(Word(value.image, Word::Flags::AlwaysShow, key, "emoji", Link(Link::Type::InsertText, key)));