From 318eef91e715ff568fcfa935840dc0772b66884d Mon Sep 17 00:00:00 2001 From: Oleg Shparber Date: Thu, 2 Mar 2017 22:43:36 -0500 Subject: [PATCH] core,ui: Add dark mode Also makes highlighting on navigate configurable. Fixes #466. --- src/app/resources/browser/darkmode.css | 11 +++++++++++ src/app/resources/browser/highlight.css | 1 + src/app/resources/zeal.qrc | 1 + src/libs/core/settings.cpp | 9 +++++---- src/libs/core/settings.h | 3 +++ src/libs/ui/mainwindow.cpp | 21 +++++++++++++++++++++ src/libs/ui/settingsdialog.cpp | 10 ++++++++-- src/libs/ui/settingsdialog.ui | 23 +++++++++++++++++++++++ 8 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 src/app/resources/browser/darkmode.css diff --git a/src/app/resources/browser/darkmode.css b/src/app/resources/browser/darkmode.css new file mode 100644 index 00000000..97a64f07 --- /dev/null +++ b/src/app/resources/browser/darkmode.css @@ -0,0 +1,11 @@ +/* Dark mode (see #466). */ +/* TODO: Check if we need -webkit-filter for old Qt WebKit. */ +html { + -webkit-filter: invert() hue-rotate(180deg) contrast(70%); + filter: invert() hue-rotate(180deg) contrast(70%); +} + +html img { + -webkit-filter: invert() hue-rotate(180deg) contrast(120%); + filter: invert() hue-rotate(180deg) contrast(120%); +} diff --git a/src/app/resources/browser/highlight.css b/src/app/resources/browser/highlight.css index 883c96c7..33be4468 100644 --- a/src/app/resources/browser/highlight.css +++ b/src/app/resources/browser/highlight.css @@ -1,3 +1,4 @@ +/* Highlight on navigation to an anchor. */ @-webkit-keyframes targetNavigatedAnimation { from { background: #ffffff; } 50% { background: #ffffdd; } diff --git a/src/app/resources/zeal.qrc b/src/app/resources/zeal.qrc index 95417207..29cf8a92 100644 --- a/src/app/resources/zeal.qrc +++ b/src/app/resources/zeal.qrc @@ -1,6 +1,7 @@ zeal.ico + browser/darkmode.css browser/highlight.css browser/main.css browser/start.html diff --git a/src/libs/core/settings.cpp b/src/libs/core/settings.cpp index e572c8a1..d8e2df04 100644 --- a/src/libs/core/settings.cpp +++ b/src/libs/core/settings.cpp @@ -46,10 +46,6 @@ using namespace Zeal::Core; Settings::Settings(QObject *parent) : QObject(parent) { - // TODO: Move to user style sheet (related to #268) - QWebSettings::globalSettings() - ->setUserStyleSheetUrl(QUrl(QStringLiteral("qrc:///browser/highlight.css"))); - load(); } @@ -83,6 +79,9 @@ void Settings::load() minimumFontSize = settings->value(QStringLiteral("minimum_font_size"), QWebSettings::globalSettings()->fontSize(QWebSettings::MinimumFontSize)).toInt(); QWebSettings::globalSettings()->setFontSize(QWebSettings::MinimumFontSize, minimumFontSize); + + darkModeEnabled = settings->value(QStringLiteral("dark_mode"), false).toBool(); + highlightOnNavigateEnabled = settings->value(QStringLiteral("highlight_on_navigate"), true).toBool(); settings->endGroup(); settings->beginGroup(GroupProxy); @@ -144,6 +143,8 @@ void Settings::save() settings->beginGroup(GroupContent); settings->setValue(QStringLiteral("minimum_font_size"), minimumFontSize); + settings->setValue(QStringLiteral("dark_mode"), darkModeEnabled); + settings->setValue(QStringLiteral("highlight_on_navigate"), highlightOnNavigateEnabled); settings->endGroup(); settings->beginGroup(GroupProxy); diff --git a/src/libs/core/settings.h b/src/libs/core/settings.h index 03812a17..56454c3a 100644 --- a/src/libs/core/settings.h +++ b/src/libs/core/settings.h @@ -58,6 +58,9 @@ public: // Content int minimumFontSize; + bool darkModeEnabled; + bool highlightOnNavigateEnabled; + // TODO: bool askOnExternalLink; // TODO: QString customCss; diff --git a/src/libs/ui/mainwindow.cpp b/src/libs/ui/mainwindow.cpp index c17971bd..a1e5c549 100644 --- a/src/libs/ui/mainwindow.cpp +++ b/src/libs/ui/mainwindow.cpp @@ -55,6 +55,8 @@ using namespace Zeal; namespace { const char startPageUrl[] = "qrc:///browser/start.html"; +const char DarkModeCssUrl[] = ":/browser/darkmode.css"; +const char HighlightOnNavigateCssUrl[] = ":/browser/highlight.css";; } struct TabState @@ -782,6 +784,25 @@ void MainWindow::applySettings() createTrayIcon(); else removeTrayIcon(); + + // Content + QByteArray ba; + if (m_settings->darkModeEnabled) { + QScopedPointer file(new QFile(DarkModeCssUrl)); + if (file->open(QIODevice::ReadOnly)) { + ba += file->readAll(); + } + } + + if (m_settings->highlightOnNavigateEnabled) { + QScopedPointer file(new QFile(HighlightOnNavigateCssUrl)); + if (file->open(QIODevice::ReadOnly)) { + ba += file->readAll(); + } + } + + const QString cssUrl = QLatin1String("data:text/css;charset=utf-8;base64,") + ba.toBase64(); + QWebSettings::globalSettings()->setUserStyleSheetUrl(QUrl(cssUrl)); } void MainWindow::toggleWindow() diff --git a/src/libs/ui/settingsdialog.cpp b/src/libs/ui/settingsdialog.cpp index 44ad9bd3..22bf705e 100644 --- a/src/libs/ui/settingsdialog.cpp +++ b/src/libs/ui/settingsdialog.cpp @@ -85,11 +85,15 @@ void SettingsDialog::loadSettings() ui->toolButton->setKeySequence(settings->showShortcut); + ui->storageEdit->setText(QDir::toNativeSeparators(settings->docsetPath)); + + // Tabs Tab ui->openNewTabAfterActive->setChecked(settings->openNewTabAfterActive); - // + // Content Tab ui->minimumFontSizeSpinBox->setValue(settings->minimumFontSize); - ui->storageEdit->setText(QDir::toNativeSeparators(settings->docsetPath)); + ui->darkModeCheckBox->setChecked(settings->darkModeEnabled); + ui->highlightOnNavigateCheckBox->setChecked(settings->highlightOnNavigateEnabled); // Network Tab switch (settings->proxyType) { @@ -128,6 +132,8 @@ void SettingsDialog::saveSettings() // Content Tab settings->minimumFontSize = ui->minimumFontSizeSpinBox->text().toInt(); + settings->darkModeEnabled = ui->darkModeCheckBox->isChecked(); + settings->highlightOnNavigateEnabled = ui->highlightOnNavigateCheckBox->isChecked(); if (QDir::fromNativeSeparators(ui->storageEdit->text()) != settings->docsetPath) { settings->docsetPath = QDir::fromNativeSeparators(ui->storageEdit->text()); diff --git a/src/libs/ui/settingsdialog.ui b/src/libs/ui/settingsdialog.ui index b450280c..71bcc98c 100644 --- a/src/libs/ui/settingsdialog.ui +++ b/src/libs/ui/settingsdialog.ui @@ -206,6 +206,29 @@ + + + + Style + + + + + + &Dark Mode + + + + + + + &Highlight on Navigate + + + + + +