mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
Add an option to remove spaces between emotes (#2684)
This feature is disabled by default and can be enabled in the settings. Co-authored-by: Mm2PL <jakis128@gmail.com>
This commit is contained in:
parent
3ad1f109ac
commit
d1f81ab50b
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
- Minor: Added image links to the badge context menu. (#2667)
|
- Minor: Added image links to the badge context menu. (#2667)
|
||||||
- Minor: Added a setting to hide Twitch Predictions badges. (#2668)
|
- Minor: Added a setting to hide Twitch Predictions badges. (#2668)
|
||||||
|
- Minor: Optionally remove spaces between emotes, originally made for Mm2PL/Dankerino. (#2651)
|
||||||
- Bugfix: Added missing Copy/Open link context menu entries to emotes in Emote Picker. (#2670)
|
- Bugfix: Added missing Copy/Open link context menu entries to emotes in Emote Picker. (#2670)
|
||||||
- Bugfix: Fixed visual glitch with smooth scrolling. (#2084)
|
- Bugfix: Fixed visual glitch with smooth scrolling. (#2084)
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,10 @@ int Application::run(QApplication &qtApp)
|
||||||
this->windows->forceLayoutChannelViews();
|
this->windows->forceLayoutChannelViews();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
getSettings()->removeSpacesBetweenEmotes.connect([this] {
|
||||||
|
this->windows->forceLayoutChannelViews();
|
||||||
|
});
|
||||||
|
|
||||||
return qtApp.exec();
|
return qtApp.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,37 @@ void MessageLayoutContainer::_addElement(MessageLayoutElement *element,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This lambda contains the logic for when to step one 'space width' back for compact x emotes
|
||||||
|
auto shouldRemoveSpaceBetweenEmotes = [this]() -> bool {
|
||||||
|
if (this->elements_.empty())
|
||||||
|
{
|
||||||
|
// No previous element found
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &lastElement = this->elements_.back();
|
||||||
|
|
||||||
|
if (!lastElement)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lastElement->hasTrailingSpace())
|
||||||
|
{
|
||||||
|
// Last element did not have a trailing space, so we don't need to do anything.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastElement->getLine() != this->line_)
|
||||||
|
{
|
||||||
|
// Last element was not on the same line as us
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true if the last element was an emote image
|
||||||
|
return lastElement->getFlags().has(MessageElementFlag::EmoteImages);
|
||||||
|
};
|
||||||
|
|
||||||
// top margin
|
// top margin
|
||||||
if (this->elements_.size() == 0)
|
if (this->elements_.size() == 0)
|
||||||
{
|
{
|
||||||
|
@ -133,11 +164,21 @@ void MessageLayoutContainer::_addElement(MessageLayoutElement *element,
|
||||||
yOffset -= (this->margin.top * this->scale_);
|
yOffset -= (this->margin.top * this->scale_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getSettings()->removeSpacesBetweenEmotes &&
|
||||||
|
element->getFlags().hasAny({MessageElementFlag::EmoteImages}) &&
|
||||||
|
shouldRemoveSpaceBetweenEmotes())
|
||||||
|
{
|
||||||
|
// Move cursor one 'space width' to the left to combine hug the previous emote
|
||||||
|
this->currentX_ -= this->spaceWidth_;
|
||||||
|
}
|
||||||
|
|
||||||
// set move element
|
// set move element
|
||||||
element->setPosition(
|
element->setPosition(
|
||||||
QPoint(this->currentX_ + xOffset,
|
QPoint(this->currentX_ + xOffset,
|
||||||
this->currentY_ - element->getRect().height() + yOffset));
|
this->currentY_ - element->getRect().height() + yOffset));
|
||||||
|
|
||||||
|
element->setLine(this->line_);
|
||||||
|
|
||||||
// add element
|
// add element
|
||||||
this->elements_.push_back(std::unique_ptr<MessageLayoutElement>(element));
|
this->elements_.push_back(std::unique_ptr<MessageLayoutElement>(element));
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,16 @@ bool MessageLayoutElement::hasTrailingSpace() const
|
||||||
return this->trailingSpace;
|
return this->trailingSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MessageLayoutElement::getLine() const
|
||||||
|
{
|
||||||
|
return this->line_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageLayoutElement::setLine(int line)
|
||||||
|
{
|
||||||
|
this->line_ = line;
|
||||||
|
}
|
||||||
|
|
||||||
MessageLayoutElement *MessageLayoutElement::setTrailingSpace(bool value)
|
MessageLayoutElement *MessageLayoutElement::setTrailingSpace(bool value)
|
||||||
{
|
{
|
||||||
this->trailingSpace = value;
|
this->trailingSpace = value;
|
||||||
|
|
|
@ -29,6 +29,8 @@ public:
|
||||||
MessageElement &getCreator() const;
|
MessageElement &getCreator() const;
|
||||||
void setPosition(QPoint point);
|
void setPosition(QPoint point);
|
||||||
bool hasTrailingSpace() const;
|
bool hasTrailingSpace() const;
|
||||||
|
int getLine() const;
|
||||||
|
void setLine(int line);
|
||||||
|
|
||||||
MessageLayoutElement *setTrailingSpace(bool value);
|
MessageLayoutElement *setTrailingSpace(bool value);
|
||||||
MessageLayoutElement *setLink(const Link &link_);
|
MessageLayoutElement *setLink(const Link &link_);
|
||||||
|
@ -54,6 +56,7 @@ private:
|
||||||
QRect rect_;
|
QRect rect_;
|
||||||
Link link_;
|
Link link_;
|
||||||
MessageElement &creator_;
|
MessageElement &creator_;
|
||||||
|
int line_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
// IMAGE
|
// IMAGE
|
||||||
|
|
|
@ -176,6 +176,8 @@ public:
|
||||||
QStringSetting emojiSet = {"/emotes/emojiSet", "Twitter"};
|
QStringSetting emojiSet = {"/emotes/emojiSet", "Twitter"};
|
||||||
|
|
||||||
BoolSetting stackBits = {"/emotes/stackBits", false};
|
BoolSetting stackBits = {"/emotes/stackBits", false};
|
||||||
|
BoolSetting removeSpacesBetweenEmotes = {
|
||||||
|
"/emotes/removeSpacesBetweenEmotes", false};
|
||||||
|
|
||||||
/// Links
|
/// Links
|
||||||
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
|
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
|
||||||
|
|
|
@ -307,6 +307,8 @@ void GeneralPage::initLayout(GeneralPageView &layout)
|
||||||
return fuzzyToFloat(args.value, 1.f);
|
return fuzzyToFloat(args.value, 1.f);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
layout.addCheckbox("Remove spaces between emotes",
|
||||||
|
s.removeSpacesBetweenEmotes);
|
||||||
layout.addDropdown<int>(
|
layout.addDropdown<int>(
|
||||||
"Show info on hover", {"Don't show", "Always show", "Hold shift"},
|
"Show info on hover", {"Don't show", "Always show", "Hold shift"},
|
||||||
s.emotesTooltipPreview,
|
s.emotesTooltipPreview,
|
||||||
|
|
Loading…
Reference in a new issue