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 }