File indexing completed on 2025-03-09 04:54:40

0001 /*
0002     csshelper.cpp
0003 
0004     This file is part of KMail, the KDE mail client.
0005     SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "csshelper.h"
0011 #include "settings/messageviewersettings.h"
0012 
0013 #include <MessageCore/ColorUtil>
0014 #include <MessageCore/MessageCoreSettings>
0015 
0016 #include <KColorScheme>
0017 #include <KConfig>
0018 #include <KConfigGroup>
0019 #include <QApplication>
0020 
0021 #include <QFont>
0022 #include <QPalette>
0023 
0024 using namespace MessageViewer;
0025 
0026 static const struct {
0027     CSSHelperBase::InlineMessageType type;
0028     KColorScheme::ForegroundRole role;
0029 } inlineMessageColors[] = {{CSSHelperBase::Positive, KColorScheme::PositiveText},
0030                            {CSSHelperBase::Information, KColorScheme::ActiveText},
0031                            {CSSHelperBase::Warning, KColorScheme::NeutralText},
0032                            {CSSHelperBase::Error, KColorScheme::NegativeText}};
0033 
0034 CSSHelper::CSSHelper(const QPaintDevice *pd)
0035     : CSSHelperBase(pd)
0036 {
0037     // initialize with defaults - should match the corresponding application defaults
0038     updateColor();
0039     mLinkColor = MessageCore::ColorUtil::self()->linkColor();
0040     for (const auto &msgColor : inlineMessageColors) {
0041         cInlineMessage[msgColor.type] = KColorScheme(QPalette::Active).foreground(msgColor.role).color();
0042     }
0043 
0044     cPgpEncrH = MessageCore::ColorUtil::self()->pgpEncryptedMessageColor();
0045     cPgpEncrHT = MessageCore::ColorUtil::self()->pgpEncryptedTextColor();
0046     cPgpOk1H = MessageCore::ColorUtil::self()->pgpSignedTrustedMessageColor();
0047     cPgpOk1HT = MessageCore::ColorUtil::self()->pgpSignedTrustedTextColor();
0048     cPgpOk0H = MessageCore::ColorUtil::self()->pgpSignedUntrustedMessageColor();
0049     cPgpOk0HT = MessageCore::ColorUtil::self()->pgpSignedUntrustedTextColor();
0050     cPgpWarnH = MessageCore::ColorUtil::self()->pgpSignedUntrustedMessageColor();
0051     cPgpWarnHT = MessageCore::ColorUtil::self()->pgpSignedUntrustedTextColor();
0052     cPgpErrH = MessageCore::ColorUtil::self()->pgpSignedBadMessageColor();
0053     cPgpErrHT = MessageCore::ColorUtil::self()->pgpSignedBadTextColor();
0054 
0055     mRecycleQuoteColors = false;
0056 
0057     QFont defaultFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
0058     QFont defaultFixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
0059     mBodyFont = MessageCore::MessageCoreSettings::self()->useDefaultFonts() ? defaultFont : MessageViewer ::MessageViewerSettings::self()->bodyFont();
0060     mPrintFont = MessageCore::MessageCoreSettings::self()->useDefaultFonts() ? defaultFont : MessageViewer ::MessageViewerSettings::self()->printFont();
0061     mFixedFont = mFixedPrintFont = defaultFixedFont;
0062     defaultFont.setItalic(true);
0063     mQuoteFont = defaultFont;
0064 
0065     KConfig *config = MessageViewer::MessageViewerSettings::self()->config();
0066 
0067     KConfigGroup reader(config, QStringLiteral("Reader"));
0068     KConfigGroup fonts(config, QStringLiteral("Fonts"));
0069 
0070     mRecycleQuoteColors = reader.readEntry("RecycleQuoteColors", false);
0071 
0072     mForegroundColor = KColorScheme(QPalette::Active).foreground().color();
0073     if (MessageCore::MessageCoreSettings::self()->useDefaultColors()) {
0074         mQuoteColor[0] = MessageCore::ColorUtil::self()->quoteLevel1DefaultTextColor();
0075         mQuoteColor[1] = MessageCore::ColorUtil::self()->quoteLevel2DefaultTextColor();
0076         mQuoteColor[2] = MessageCore::ColorUtil::self()->quoteLevel3DefaultTextColor();
0077     } else {
0078         mLinkColor = reader.readEntry("LinkColor", mLinkColor);
0079         cPgpEncrH = reader.readEntry("PGPMessageEncr", cPgpEncrH);
0080         cPgpOk1H = reader.readEntry("PGPMessageOkKeyOk", cPgpOk1H);
0081         cPgpOk0H = reader.readEntry("PGPMessageOkKeyBad", cPgpOk0H);
0082         cPgpWarnH = reader.readEntry("PGPMessageWarn", cPgpWarnH);
0083         cPgpErrH = reader.readEntry("PGPMessageErr", cPgpErrH);
0084         mQuoteColor[0] = MessageCore::MessageCoreSettings::self()->quotedText1();
0085         mQuoteColor[1] = MessageCore::MessageCoreSettings::self()->quotedText2();
0086         mQuoteColor[2] = MessageCore::MessageCoreSettings::self()->quotedText3();
0087     }
0088 
0089     if (!MessageCore::MessageCoreSettings::self()->useDefaultFonts()) {
0090         mBodyFont = fonts.readEntry("body-font", mBodyFont);
0091         mPrintFont = fonts.readEntry("print-font", mPrintFont);
0092         mFixedFont = fonts.readEntry("fixed-font", mFixedFont);
0093         mFixedPrintFont = mFixedFont;
0094     }
0095 
0096     mShrinkQuotes = MessageViewer::MessageViewerSettings::self()->shrinkQuotes();
0097 
0098     mUseBrowserColor = MessageCore::MessageCoreSettings::self()->useRealHtmlMailColor();
0099     recalculatePGPColors();
0100 }
0101 
0102 CSSHelper::~CSSHelper() = default;
0103 
0104 void CSSHelper::updateColor()
0105 {
0106     // KColorScheme(QPalette::Active).background().color();
0107 
0108     mForegroundColor = KColorScheme(QPalette::Active).foreground().color(); // QApplication::palette().color(QPalette::Text);
0109     mBackgroundColor = KColorScheme(QPalette::Active).background().color(); // QApplication::palette().color(QPalette::Base);
0110 }
0111 
0112 QString CSSHelper::htmlHead(const HtmlHeadSettings &htmlHeadSettings) const
0113 {
0114     return QLatin1StringView(
0115                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"
0116                "<html><head><title></title><style>\n")
0117         + cssDefinitions(htmlHeadSettings)
0118         + QLatin1StringView(
0119                "</style></head>\n"
0120                "<body>\n");
0121 }
0122 
0123 QString CSSHelper::endBodyHtml() const
0124 {
0125     return QStringLiteral("</body></html>");
0126 }