diff --git a/chatterino.pro b/chatterino.pro index 9167e5d7b..63cd4c90f 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -385,6 +385,7 @@ HEADERS += \ src/widgets/splits/ClosedSplits.hpp \ src/providers/ffz/FfzModBadge.hpp \ src/widgets/settingspages/GeneralPage.hpp \ + src/messages/HistoricMessageAppearance.hpp RESOURCES += \ resources/resources.qrc \ diff --git a/src/messages/HistoricMessageAppearance.hpp b/src/messages/HistoricMessageAppearance.hpp new file mode 100644 index 000000000..54cdb0686 --- /dev/null +++ b/src/messages/HistoricMessageAppearance.hpp @@ -0,0 +1,10 @@ +#pragma once + +namespace chatterino { + +enum HistoricMessageAppearance { + Crossed = (1 << 0), + Greyed = (1 << 1), +}; + +} // namespace chatterino diff --git a/src/messages/Message.hpp b/src/messages/Message.hpp index 572615a04..f4f4efa77 100644 --- a/src/messages/Message.hpp +++ b/src/messages/Message.hpp @@ -29,6 +29,7 @@ enum class MessageFlag : uint16_t { Subscription = (1 << 12), Notification = (1 << 13), AutoMod = (1 << 14), + RecentMessage = (1 << 15), }; using MessageFlags = FlagsEnum; diff --git a/src/messages/layouts/MessageLayout.cpp b/src/messages/layouts/MessageLayout.cpp index 79523ddcf..e80a1b2c6 100644 --- a/src/messages/layouts/MessageLayout.cpp +++ b/src/messages/layouts/MessageLayout.cpp @@ -209,6 +209,22 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex, } } + if (this->message_->flags.has(MessageFlag::RecentMessage)) + { + const auto &historicMessageAppearance = + getSettings()->historicMessagesAppearance.getValue(); + if (historicMessageAppearance & HistoricMessageAppearance::Crossed) + { + painter.fillRect(0, y, pixmap->width(), pixmap->height(), + QBrush(QColor(255, 0, 0, 63), Qt::BDiagPattern)); + } + if (historicMessageAppearance & HistoricMessageAppearance::Greyed) + { + painter.fillRect(0, y, pixmap->width(), pixmap->height(), + app->themes->messages.disabled); + } + } + // draw selection if (!selection.isEmpty()) { diff --git a/src/providers/twitch/TwitchChannel.cpp b/src/providers/twitch/TwitchChannel.cpp index 10685c9ee..4992e3b61 100644 --- a/src/providers/twitch/TwitchChannel.cpp +++ b/src/providers/twitch/TwitchChannel.cpp @@ -48,8 +48,7 @@ namespace { MessageParseArgs args; TwitchMessageBuilder builder(channel.get(), privMsg, args); - if (getSettings()->greyOutHistoricMessages) - builder.message().flags.set(MessageFlag::Disabled); + builder.message().flags.set(MessageFlag::RecentMessage); if (!builder.isIgnored()) messages.push_back(builder.build()); diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index 7318b8375..953374193 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -4,6 +4,7 @@ #include "controllers/highlights/HighlightPhrase.hpp" #include "controllers/moderationactions/ModerationAction.hpp" +#include "messages/HistoricMessageAppearance.hpp" #include #include @@ -31,8 +32,9 @@ public: Qt::VerPattern}; QStringSetting lastMessageColor = {"/appearance/messages/lastMessageColor", ""}; - BoolSetting greyOutHistoricMessages = { - "/appearance/messages/greyOutHistoricMessages", true}; + IntSetting historicMessagesAppearance = { + "/appearance/messages/historicMessagesAppearance", + HistoricMessageAppearance::Crossed | HistoricMessageAppearance::Greyed}; BoolSetting showEmptyInput = {"/appearance/showEmptyInputBox", true}; BoolSetting showMessageLength = {"/appearance/messages/showMessageLength", false}; diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index d1451cb5b..2d188a60a 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -263,7 +263,49 @@ void GeneralPage::initLayout(SettingsLayout &layout) layout.addTitle2("Misc"); layout.addCheckbox("Show twitch whispers inline", s.inlineWhispers); - layout.addCheckbox("Grey out historic messages", s.greyOutHistoricMessages); + layout.addDropdown( + "Historic messages appearance", + {"Crossed and Greyed", "Crossed", "Greyed", "No change"}, + s.historicMessagesAppearance, + [](auto val) { + if (val & HistoricMessageAppearance::Crossed && + val & HistoricMessageAppearance::Greyed) + { + return QString("Crossed and Greyed"); + } + else if (val & HistoricMessageAppearance::Crossed) + { + return QString("Crossed"); + } + else if (val & HistoricMessageAppearance::Greyed) + { + return QString("Greyed"); + } + else + { + return QString("No Change"); + } + }, + [](auto args) -> int { + switch (args.index) + { + default: + case 0: + return HistoricMessageAppearance::Crossed | + HistoricMessageAppearance::Greyed; + break; + case 1: + return HistoricMessageAppearance::Crossed; + break; + case 2: + return HistoricMessageAppearance::Greyed; + break; + case 3: + return 0; + break; + } + }, + false); layout.addCheckbox("Emphasize deleted messages", s.redDisabledMessages); /* @@ -298,7 +340,7 @@ void GeneralPage::initLayout(SettingsLayout &layout) "Medium", "Low", "Audio only"}); layout.addDropdown("Command line arguments", {"..."}); */ -} +} // namespace chatterino void GeneralPage::initExtra() { diff --git a/src/widgets/settingspages/LookPage.cpp b/src/widgets/settingspages/LookPage.cpp index 7fcf68e8f..3c1c2ed66 100644 --- a/src/widgets/settingspages/LookPage.cpp +++ b/src/widgets/settingspages/LookPage.cpp @@ -182,9 +182,11 @@ void LookPage::addMessageTab(LayoutCreator layout) layout.append( this->createCheckBox("Compact emotes", getSettings()->compactEmotes)); - - layout.append(this->createCheckBox("Grey out historic messages", - getSettings()->greyOutHistoricMessages)); + /// greyOutHistoricMessages setting changed by hemirt from checkbox to + /// historicMessagesBehaviour dropdown QString option + // layout.append(this->createCheckBox("Grey out historic messages", + // getSettings()->greyOutHistoricMessages)); + /// // -- layout.emplace(false);