mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-05 01:23:24 -08:00
[Game] Follow the palette in judge message tags
Judge tags hardcoded a black prefix and a `theme:icons/scales` image inside rich text, where `currentColor` cannot resolve and a palette change leaves the tag unreadable. Render the scales glyph through the themed icon engine, register it as a document image resource, and repaint the log when the palette or theme changes.
This commit is contained in:
parent
f56e7d7bd6
commit
7498dd29f0
2 changed files with 32 additions and 2 deletions
|
|
@ -4,6 +4,8 @@
|
||||||
#include "../../client/settings/card_counter_settings.h"
|
#include "../../client/settings/card_counter_settings.h"
|
||||||
#include "../../client/sound_engine.h"
|
#include "../../client/sound_engine.h"
|
||||||
#include "../../interface/card_localization.h"
|
#include "../../interface/card_localization.h"
|
||||||
|
#include "../../interface/theme_icon.h"
|
||||||
|
#include "../../interface/theme_manager.h"
|
||||||
#include "../../interface/widgets/server/chat_view/chat_view.h"
|
#include "../../interface/widgets/server/chat_view/chat_view.h"
|
||||||
#include "../board/card_item.h"
|
#include "../board/card_item.h"
|
||||||
#include "../board/translate_counter_name.h"
|
#include "../board/translate_counter_name.h"
|
||||||
|
|
@ -12,8 +14,12 @@
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QPalette>
|
||||||
|
#include <QPixmap>
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QTextDocument>
|
||||||
|
#include <QUrl>
|
||||||
#include <libcockatrice/game/abstract_game.h>
|
#include <libcockatrice/game/abstract_game.h>
|
||||||
#include <libcockatrice/game/board/card_list.h>
|
#include <libcockatrice/game/board/card_list.h>
|
||||||
#include <libcockatrice/game/game_state.h>
|
#include <libcockatrice/game/game_state.h>
|
||||||
|
|
@ -120,6 +126,7 @@ MessageLogWidget::getFromStr(CardZoneLogic *zone, QString cardName, int position
|
||||||
void MessageLogWidget::containerProcessingDone()
|
void MessageLogWidget::containerProcessingDone()
|
||||||
{
|
{
|
||||||
currentContext = MessageContext_None;
|
currentContext = MessageContext_None;
|
||||||
|
contextJudgeName.clear();
|
||||||
messageSuffix = messagePrefix = QString();
|
messageSuffix = messagePrefix = QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -855,8 +862,27 @@ void MessageLogWidget::logUndoDrawFailed(PlayerLogic *player)
|
||||||
|
|
||||||
void MessageLogWidget::setContextJudgeName(QString name)
|
void MessageLogWidget::setContextJudgeName(QString name)
|
||||||
{
|
{
|
||||||
messagePrefix = QString("<span style=\"color:black\">");
|
contextJudgeName = std::move(name);
|
||||||
messageSuffix = QString("</span> [<img height=12 src=\"theme:icons/scales\"> %1]").arg(sanitizeHtml(name));
|
refreshJudgeSuffix();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageLogWidget::refreshJudgeSuffix()
|
||||||
|
{
|
||||||
|
const QPixmap pixmap = loadThemedIcon(QStringLiteral("icons/scales")).pixmap(QSize(24, 24));
|
||||||
|
if (!pixmap.isNull()) {
|
||||||
|
// Rich text cannot resolve `currentColor`; register a palette-rendered
|
||||||
|
// image so already-appended judge tags repaint on a theme switch.
|
||||||
|
document()->addResource(QTextDocument::ImageResource, QUrl(QStringLiteral("cockatrice:scales")), pixmap);
|
||||||
|
document()->markContentsDirty(0, document()->characterCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contextJudgeName.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
messagePrefix = QStringLiteral("<span style=\"color:%1\">").arg(palette().color(QPalette::WindowText).name());
|
||||||
|
messageSuffix =
|
||||||
|
QStringLiteral("</span> [<img height=12 src=\"cockatrice:scales\"> %1]").arg(sanitizeHtml(contextJudgeName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageLogWidget::appendHtmlServerMessage(const QString &html, bool optionalIsBold, QString optionalFontColor)
|
void MessageLogWidget::appendHtmlServerMessage(const QString &html, bool optionalIsBold, QString optionalFontColor)
|
||||||
|
|
@ -905,4 +931,6 @@ void MessageLogWidget::connectToPlayerEventHandler(PlayerEventHandler *playerEve
|
||||||
MessageLogWidget::MessageLogWidget(TabSupervisor *_tabSupervisor, AbstractGame *_game, QWidget *parent)
|
MessageLogWidget::MessageLogWidget(TabSupervisor *_tabSupervisor, AbstractGame *_game, QWidget *parent)
|
||||||
: ChatView(_tabSupervisor, _game, true, parent), currentContext(MessageContext_None)
|
: ChatView(_tabSupervisor, _game, true, parent), currentContext(MessageContext_None)
|
||||||
{
|
{
|
||||||
|
connect(themeManager, &ThemeManager::paletteChanged, this, &MessageLogWidget::refreshJudgeSuffix);
|
||||||
|
connect(themeManager, &ThemeManager::themeChanged, this, &MessageLogWidget::refreshJudgeSuffix);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,10 @@ private:
|
||||||
|
|
||||||
MessageContext currentContext;
|
MessageContext currentContext;
|
||||||
QString messagePrefix, messageSuffix;
|
QString messagePrefix, messageSuffix;
|
||||||
|
QString contextJudgeName;
|
||||||
|
|
||||||
static QPair<QString, QString> getFromStr(CardZoneLogic *zone, QString cardName, int position, bool ownerChange);
|
static QPair<QString, QString> getFromStr(CardZoneLogic *zone, QString cardName, int position, bool ownerChange);
|
||||||
|
void refreshJudgeSuffix();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void connectToPlayerEventHandler(PlayerEventHandler *player);
|
void connectToPlayerEventHandler(PlayerEventHandler *player);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue