Support dark mode on Windows (feature 7985)

esm4-texture
Andrei Kortunov 8 months ago
parent f34994e4c8
commit bf682d51a6

@ -238,6 +238,7 @@
Feature #7953: Allow to change SVG icons colors depending on color scheme
Feature #7964: Add Lua read access to MW Dialogue records
Feature #7971: Make save's Time Played value display hours instead of days
Feature #7985: Support dark mode on Windows
Task #5896: Do not use deprecated MyGUI properties
Task #6085: Replace boost::filesystem with std::filesystem
Task #6149: Dehardcode Lua API_REVISION

@ -47,13 +47,16 @@ source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER})
set(QT_USE_QTGUI 1)
set (LAUNCHER_RES ${CMAKE_SOURCE_DIR}/files/launcher/launcher.qrc)
# Set some platform specific settings
if(WIN32)
set(LAUNCHER_RES ${LAUNCHER_RES} ${CMAKE_SOURCE_DIR}/files/windows/QWindowsVistaDark/dark.qrc)
set(GUI_TYPE WIN32)
set(QT_USE_QTMAIN TRUE)
endif(WIN32)
QT_ADD_RESOURCES(RCC_SRCS ${CMAKE_SOURCE_DIR}/files/launcher/launcher.qrc)
QT_ADD_RESOURCES(RCC_SRCS ${LAUNCHER_RES})
QT_WRAP_UI(UI_HDRS ${LAUNCHER_UI})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

@ -9,6 +9,7 @@
#include <components/files/configurationmanager.hpp>
#include <components/files/qtconversion.hpp>
#include <components/l10n/qttranslations.hpp>
#include <components/platform/application.hpp>
#include <components/platform/platform.hpp>
#ifdef MAC_OS_X_VERSION_MIN_REQUIRED
@ -33,7 +34,7 @@ int runLauncher(int argc, char* argv[])
try
{
QApplication app(argc, argv);
Platform::Application app(argc, argv);
QString resourcesPath(".");
if (!variables["resources"].empty())

@ -144,6 +144,7 @@ set (OPENCS_UI
source_group (openmw-cs FILES main.cpp ${OPENCS_SRC} ${OPENCS_HDR})
if(WIN32)
set(OPENCS_RES ${OPENCS_RES} ${CMAKE_SOURCE_DIR}/files/windows/QWindowsVistaDark/dark.qrc)
set(QT_USE_QTMAIN TRUE)
set(OPENCS_RC_FILE ${CMAKE_SOURCE_DIR}/files/windows/opencs.rc)
else(WIN32)

@ -3,15 +3,13 @@
#include <exception>
#include <string>
#include <QApplication>
#include <QIcon>
#include <QSurfaceFormat>
#include <osg/DisplaySettings>
#include <components/debug/debugging.hpp>
#include <components/debug/debuglog.hpp>
#include <components/misc/scalableicon.hpp>
#include <components/platform/application.hpp>
#include <components/platform/platform.hpp>
#include "model/doc/messages.hpp"
@ -26,33 +24,6 @@ Q_DECLARE_METATYPE(std::string)
class QEvent;
class QObject;
class Application : public QApplication
{
private:
bool notify(QObject* receiver, QEvent* event) override
{
try
{
if (event->type() == QEvent::ThemeChange || event->type() == QEvent::PaletteChange)
Misc::ScalableIcon::updateAllIcons();
return QApplication::notify(receiver, event);
}
catch (const std::exception& exception)
{
Log(Debug::Error) << "An exception has been caught: " << exception.what();
}
return false;
}
public:
Application(int& argc, char* argv[])
: QApplication(argc, argv)
{
}
};
void setQSurfaceFormat()
{
osg::DisplaySettings* ds = osg::DisplaySettings::instance().get();
@ -76,6 +47,10 @@ int runApplication(int argc, char* argv[])
Q_INIT_RESOURCE(resources);
#ifdef WIN32
Q_INIT_RESOURCE(dark);
#endif
qRegisterMetaType<std::string>("std::string");
qRegisterMetaType<CSMWorld::UniversalId>("CSMWorld::UniversalId");
qRegisterMetaType<CSMDoc::Message>("CSMDoc::Message");
@ -83,7 +58,7 @@ int runApplication(int argc, char* argv[])
setQSurfaceFormat();
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
Application application(argc, argv);
Platform::Application application(argc, argv);
application.setWindowIcon(QIcon(":openmw-cs"));

@ -56,13 +56,16 @@ source_group(wizard FILES ${WIZARD} ${WIZARD_HEADER})
set(QT_USE_QTGUI 1)
set (WIZARD_RES ${CMAKE_SOURCE_DIR}/files/wizard/wizard.qrc)
# Set some platform specific settings
if(WIN32)
set(WIZARD_RES ${WIZARD_RES} ${CMAKE_SOURCE_DIR}/files/windows/QWindowsVistaDark/dark.qrc)
set(GUI_TYPE WIN32)
set(QT_USE_QTMAIN TRUE)
endif(WIN32)
QT_ADD_RESOURCES(RCC_SRCS ${CMAKE_SOURCE_DIR}/files/wizard/wizard.qrc)
QT_ADD_RESOURCES(RCC_SRCS ${WIZARD_RES})
QT_WRAP_UI(UI_HDRS ${WIZARD_UI})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

@ -1,4 +1,3 @@
#include <QApplication>
#include <QDir>
#include <boost/program_options/options_description.hpp>
@ -6,6 +5,7 @@
#include <components/files/qtconversion.hpp>
#include <components/l10n/qttranslations.hpp>
#include <components/platform/application.hpp>
#include "mainwizard.hpp"
@ -23,7 +23,7 @@ int main(int argc, char* argv[])
configurationManager.addCommonOptions(description);
configurationManager.readConfiguration(variables, description, true);
QApplication app(argc, argv);
Platform::Application app(argc, argv);
// Now we make sure the current dir is set to application path
QDir dir(QCoreApplication::applicationDirPath());

@ -546,6 +546,10 @@ if (USE_QT)
qtconfigpath
)
add_component_qt_dir (platform
application
)
QT_WRAP_UI(ESM_UI_HDR ${ESM_UI})
endif()

@ -0,0 +1,98 @@
#include "application.hpp"
#include <QFile>
#include <QStyle>
#include <QStyleHints>
#include <components/debug/debuglog.hpp>
#include <components/misc/scalableicon.hpp>
namespace Platform
{
Application::Application(int& argc, char* argv[])
: QApplication(argc, argv)
{
#if defined(WIN32) && QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
init();
}
void Application::init()
{
connect(this, &Application::darkModeChanged, this, &Application::updateStyle);
const auto* hints = QGuiApplication::styleHints();
const auto currentStyle = QApplication::style()->objectName();
mInitialStyle = currentStyle.toStdString();
mCurrentStyle = currentStyle.toStdString();
if (hints->colorScheme() == Qt::ColorScheme::Dark)
{
mDarkMode = true;
if (currentStyle == "windowsvista")
{
mCurrentStyle = "windows";
setStyle("windows");
QFile file(":/dark/dark.qss");
file.open(QIODevice::ReadOnly);
setStyleSheet(file.readAll());
}
}
}
void Application::updateStyle(bool isDark)
{
if (mInitialStyle != "windowsvista")
return;
if (isDark)
{
mCurrentStyle = "windows";
setStyle("windows");
QFile file(":/dark/dark.qss");
file.open(QIODevice::ReadOnly);
setStyleSheet(file.readAll());
}
else
{
mCurrentStyle = mInitialStyle;
setStyleSheet("");
setStyle(mInitialStyle.c_str());
}
#endif
}
bool Application::notify(QObject* receiver, QEvent* event)
{
try
{
if (event->type() == QEvent::ThemeChange || event->type() == QEvent::PaletteChange)
{
#if defined(WIN32) && QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
const auto* hints = QGuiApplication::styleHints();
const auto currentStyle = QApplication::style()->objectName();
bool isDark = hints->colorScheme() == Qt::ColorScheme::Dark;
if (isDark != mDarkMode)
{
mDarkMode = isDark;
bool result = QApplication::notify(receiver, event);
emit darkModeChanged(isDark);
return result;
}
#endif
Misc::ScalableIcon::updateAllIcons();
}
return QApplication::notify(receiver, event);
}
catch (const std::exception& exception)
{
Log(Debug::Error) << "An exception has been caught: " << exception.what();
}
return false;
}
}

@ -0,0 +1,30 @@
#include <QApplication>
#include <QEvent>
namespace Platform
{
class Application : public QApplication
{
Q_OBJECT
public:
Application(int& argc, char* argv[]);
#if defined(WIN32) && QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
void init();
private slots:
void updateStyle(bool isDark);
#endif
signals:
void darkModeChanged(bool);
private:
bool notify(QObject* receiver, QEvent* event) override;
std::string mCurrentStyle{};
std::string mInitialStyle{};
bool mDarkMode{ false };
};
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:#505050;" />
<polyline points="250,700 500,950 1100,350" stroke="#7e7e7e" stroke-width="150" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 336 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
<polyline points="250,700 500,950 1100,350" stroke="#7e7e7e" stroke-width="150" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 333 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:#505050;" />
</svg>

After

Width:  |  Height:  |  Size: 241 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
</svg>

After

Width:  |  Height:  |  Size: 238 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:#505050;" />
<rect x="350" y="350" width="600" height="600" style="stroke:#7e7e7e;stroke-width:100;fill:#7e7e7e;" />
</svg>

After

Width:  |  Height:  |  Size: 345 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="50" width="1200" height="1200" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
<rect x="350" y="350" width="600" height="600" style="stroke:#7e7e7e;stroke-width:100;fill:#7e7e7e;" />
</svg>

After

Width:  |  Height:  |  Size: 342 B

@ -0,0 +1,30 @@
<RCC>
<qresource prefix="/dark">
<file>dark.qss</file>
<file>checkbox-checked.svg</file>
<file>checkbox-checked-disabled.svg</file>
<file>checkbox-empty.svg</file>
<file>checkbox-empty-disabled.svg</file>
<file>checkbox-half.svg</file>
<file>checkbox-half-disabled.svg</file>
<file>dockwidget-close.svg</file>
<file>dockwidget-undock.svg</file>
<file>down-triangle.svg</file>
<file>down-triangle-spinbox.svg</file>
<file>dropdown-arrow.svg</file>
<file>left-triangle-tabbar.svg</file>
<file>radiobutton-checked.svg</file>
<file>radiobutton-checked-disabled.svg</file>
<file>radiobutton-empty.svg</file>
<file>radiobutton-empty-disabled.svg</file>
<file>right-triangle-tabbar.svg</file>
<file>scrollbar-arrow-down.svg</file>
<file>scrollbar-arrow-left.svg</file>
<file>scrollbar-arrow-right.svg</file>
<file>scrollbar-arrow-up.svg</file>
<file>table-header-sort-arrow-down.svg</file>
<file>table-header-sort-arrow-up.svg</file>
<file>up-triangle.svg</file>
<file>up-triangle-spinbox.svg</file>
</qresource>
</RCC>

@ -0,0 +1,613 @@
QMenu
{
border: 1px solid #4e4e4e;
}
QMenuBar
{
background-color: #232323;
color: #dcdcdc;
border: 0px;
}
QMenu, QMessageBox
{
background-color: #232323;
color: #dcdcdc;
border: 1px solid #4e4e4e;
}
QScrollArea
{
border: 1px solid #4e4e4e;
}
QMenuBar::item
{
background-color: #232323;
color: #dcdcdc;
}
QMenuBar
{
border-color: #404040;
}
QMenuBar::item:hover, QMenuBar::item:selected, QMenu::item:hover, QMenu::item:selected
{
background-color: #404040;
color: #dcdcdc;
}
QMenuBar::item:disabled, QMenu::item:disabled
{
color: #919191;
}
QMenu::separator
{
height: 1px;
background-color: #4e4e4e;
margin-left: 2px;
margin-right: 2px;
margin-top: 5px;
margin-bottom: 5px;
}
QToolTip, QColumnView, QListView, QTableView, QTableWidget, QTreeView
{
background-color: #232323;
alternate-background-color: #282828;
border: 1px solid #4e4e4e;
selection-background-color: #505050;
gridline-color: #606060;
}
QHeaderView::section
{
background-color: #232323;
border: 0px;
border-right: 1px solid #4e4e4e;
}
QHeaderView::section:hover, QHeaderView::section:checked
{
background-color: #202020;
}
QHeaderView::down-arrow
{
subcontrol-origin: content;
subcontrol-position: right;
image: url(:/dark/table-header-sort-arrow-down.svg);
width: 10px;
height: 7px;
background: transparent;
left: -5px;
}
QHeaderView::up-arrow
{
subcontrol-origin: content;
subcontrol-position: right;
image: url(:/dark/table-header-sort-arrow-up.svg);
width: 10px;
height: 7px;
background: transparent;
left: -5px;
}
QTabWidget::pane
{
border: 1px solid #4e4e4e;
top: -1px;
}
QTabBar
{
outline: 0px;
}
QTabBar::tab
{
background-color: #232323;
border-left: 1px solid #4e4e4e;
border-right: 1px solid #4e4e4e;
border-top: 1px solid #4e4e4e;
border-bottom: 1px solid #4e4e4e;
padding-top: 2px;
padding-bottom: 2px;
padding-left: 9px;
padding-right: 10px;
margin-right: -1px;
}
QTabBar::tab:only-one
{
margin-right: 0px;
}
QTabBar::tab:last
{
margin-right: 0px;
}
QTabBar::tab:hover
{
background-color: #404040;
}
QTabBar::tab:selected
{
border-bottom: 0px;
background-color: #1e1e1e;
padding-bottom: 4px;
}
QTabBar::tab:!selected
{
margin-top: 2px;
}
QProgressBar
{
background-color: #1e1e1e;
border: 1px solid #4e4e4e;
color: #dfe1e2;
text-align: center;
}
QProgressBar:disabled
{
background-color: #1e1e1e;
border: 1px solid #4e4e4e;
color: #788d9c;
text-align: center;
}
QProgressBar::chunk
{
background-color: #0e651e;
color: #19232D;
}
QProgressBar::chunk:disabled
{
background-color: #404040;
color: #788D9C;
}
QDockWidget
{
background-color: #232323;
titlebar-close-icon: url(:/dark/dockwidget-close.svg);
titlebar-normal-icon: url(:/dark/dockwidget-undock.svg);
}
QDockWidget::title
{
background-color: #212121;
}
QDockWidget::float-button
{
border: 0;
}
QDockWidget::close-button
{
border: 0;
}
QDockWidget::float-button:hover
{
background-color: #4e4e4e;
}
QDockWidget::float-button:pressed
{
background-color: #5e5e5e;
}
QDockWidget::close-button:hover
{
background-color: #4e4e4e;
}
QDockWidget::close-button:pressed
{
background-color: #5e5e5e;
}
QPushButton
{
background-color: #232323;
border: 1px solid #4e4e4e;
padding: 2px;
}
QToolButton[autoRaise="false"]
{
background-color: #232323;
border: 1px solid #4e4e4e;
padding: 2px;
}
QWizard QPushButton
{
min-width: 67px;
}
QDialogButtonBox QPushButton
{
min-width: 67px;
}
QPushButton:hover, QToolButton:hover
{
background-color: #404040;
}
QDialogButtonBox QPushButton:focus, QToolButton:focus
{
border: 2px solid #7e7e7e;
}
QPushButton:pressed, QToolButton:pressed
{
border: 1px solid #7e7e7e;
}
QPushButton:selected, QToolButton:selected
{
border: 1px solid #7e7e7e;
}
QPushButton:disabled, QToolButton:disabled
{
background-color: #313131;
}
/* the dropdownarrow on the right of the button in menu popup mode */
QToolButton[popupMode="1"]
{
padding-right: 19px;
}
QToolButton::menu-button
{
border: 0px;
border-left: 1px solid #4e4e4e;
width: 18px;
}
QToolButton::menu-arrow
{
image: url(:/dark/down-triangle.svg);
width: 14px;
}
QToolBar
{
border: 0px;
}
QToolBar QToolButton
{
border: 0px;
padding: 0px;
padding-left: 3px;
padding-right: 2px;
background-color: #1e1e1e;
}
QToolBar QToolButton:hover
{
background-color: #404040;
}
QToolBar QToolButton:checked
{
background-color: #505050;
}
QToolBar QToolButton:focus
{
background-color: #404040;
}
QToolBar QToolButton:disabled
{
background-color: #242424;
}
QToolBar::separator
{
min-width: 0px;
width: 1px;
margin-left: 3px;
margin-right: 2px;
background-color: #4e4e4e;
}
QGroupBox
{
border: 1px solid #4e4e4e;
margin-top: 9px;
padding-top: 7px;
padding-bottom: 0px;
padding-left: 1px;
padding-right: 1px;
}
QGroupBox::title
{
subcontrol-origin: margin;
subcontrol-position: top left;
left: 9px;
padding-top: 1px;
min-width: 0px;
}
QLineEdit, QTextEdit, QPlainTextEdit
{
border: 1px solid #4e4e4e;
}
QLineEdit:disabled, QTextEdit, QPlainTextEdit:disabled
{
background-color: #313131;
}
QComboBox
{
background-color: #232323;
border: 1px solid #4e4e4e;
margin: 0px;
padding-left: 3px;
padding-right: 3px;
padding-top: 1px;
padding-bottom: 1px;
}
QComboBox:disabled
{
background-color: #313131;
}
QComboBox:selected
{
background-color: #404040;
}
QComboBox:editable {
background-color: #232323;
}
QComboBox::drop-down
{
border: 0px;
}
QComboBox::down-arrow
{
image: url(:/dark/dropdown-arrow.svg);
height: 10px;
width: 15px;
}
QComboBox QAbstractItemView
{
background-color: #232323;
selection-background-color: #404040;
border: 1px solid #4e4e4e;
padding: 0px;
margin: 0px;
outline: 0px;
}
QComboBox QAbstractItemView::item:selected
{
color: #dcdcdc;
background-color: #404040;
}
QComboBox QAbstractItemView::item:last
{
border: 0px;
}
QScrollBar:vertical
{
border: 0px;
background: #2a2a2a;
width: 15px;
margin: 15px 0px;
}
QScrollBar::handle:vertical
{
border: 0px;
background: #606060;
min-height: 20px;
}
QScrollBar::add-line:vertical
{
border: 0px;
background: #232323;
height: 15px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical
{
border: 0px;
background: #232323;
height: 15px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
{
border: 0px;
background: none;
}
QScrollBar::up-arrow:vertical
{
image: url(:/dark/scrollbar-arrow-up.svg);
height: 15px;
}
QScrollBar::down-arrow:vertical
{
image: url(:/dark/scrollbar-arrow-down.svg);
height: 15px;
}
QScrollBar:horizontal
{
border: 0px;
background: #2a2a2a;
height: 15px;
margin: 0px 15px;
}
QScrollBar::handle:horizontal
{
border: 0px;
background: #606060;
min-width: 20px;
}
QScrollBar::add-line:horizontal
{
border: 0px;
background: #232323;
width: 15px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal
{
border: 0px;
background: #232323;
width: 15px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
{
border: 0px;
background: none;
}
QScrollBar::left-arrow:horizontal
{
image: url(:/dark/scrollbar-arrow-left.svg);
width: 15px;
}
QScrollBar::right-arrow:horizontal
{
image: url(:/dark/scrollbar-arrow-right.svg);
width: 15px;
}
QSpinBox, QDateEdit, QDateTimeEdit, QTimeEdit, QDoubleSpinBox
{
border: 1px solid #4e4e4e;
padding-right: 15px;
}
QSpinBox:disabled, QDateEdit:disabled, QDateTimeEdit:disabled, QTimeEdit:disabled, QDoubleSpinBox:disabled
{
background-color: #313131;
}
QSpinBox::up-button, QDateEdit::up-button, QDateTimeEdit::up-button, QTimeEdit::up-button, QDoubleSpinBox::up-button
{
border: 1px solid #4e4e4e;
subcontrol-origin: margin;
subcontrol-position: top right;
width: 12px;
height: 6px;
margin: 2px 2px;
}
QSpinBox::down-button, QDateEdit::down-button, QDateTimeEdit::down-button, QTimeEdit::down-button, QDoubleSpinBox::down-button
{
border: 1px solid #4e4e4e;
subcontrol-origin: margin;
subcontrol-position: bottom right;
width: 12px;
height: 6px;
margin: 2px 2px;
}
QSpinBox::up-button:hover, QDateEdit::up-button:hover, QDateTimeEdit::up-button:hover, QTimeEdit::up-button:hover, QDoubleSpinBox::up-button:hover
{
background-color: #404040;
}
QSpinBox::down-button:hover, QDateEdit::down-button:hover, QDateTimeEdit::down-button:hover, QTimeEdit::down-button:hover, QDoubleSpinBox::down-button:hover
{
background-color: #404040;
}
QSpinBox::up-arrow, QDateEdit::up-arrow, QDateTimeEdit::up-arrow, QTimeEdit::up-arrow, QDoubleSpinBox::up-arrow
{
image: url(:/dark/up-triangle-spinbox.svg);
width: 10px;
height: 5px;
}
QSpinBox::down-arrow, QDateEdit::down-arrow, QDateTimeEdit::down-arrow, QTimeEdit::down-arrow, QDoubleSpinBox::down-arrow
{
image: url(:/dark/down-triangle-spinbox.svg);
width: 10px;
height: 5px;
}
QSlider::handle
{
background-color: #dcdcdc;
}
QSlider::handle:disabled
{
background-color: #4e4e4e;
}
QCheckBox
{
padding: 2px 0px;
}
QCheckBox::indicator
{
padding: 0px;
margin: 0px;
border: 0px;
width: 13px;
height: 13px;
}
QCheckBox::indicator:unchecked, QObject::indicator:unchecked
{
image: url(:/dark/checkbox-empty.svg);
}
QCheckBox::indicator:unchecked:disabled, QObject::indicator:unchecked:disabled
{
image: url(:/dark/checkbox-empty-disabled.svg);
}
QCheckBox::indicator:checked, QObject::indicator:checked
{
image: url(:/dark/checkbox-checked.svg);
}
QCheckBox::indicator:checked:disabled, QObject::indicator:checked:disabled
{
image: url(:/dark/checkbox-checked-disabled.svg);
}
QCheckBox::indicator:indeterminate, QObject::indicator:indeterminate
{
image: url(:/dark/checkbox-half.svg);
}
QCheckBox::indicator:indeterminate:disabled, QObject::indicator:indeterminate:disabled
{
image: url(:/dark/checkbox-half-disabled.svg);
}
QRadioButton
{
padding: 2px 0px;
}
QRadioButton::indicator
{
padding: 0px;
margin: 0px;
border: 0px;
width: 13px;
height: 13px;
}
QRadioButton::indicator:unchecked
{
image: url(:/dark/radiobutton-empty.svg);
}
QRadioButton::indicator:unchecked:disabled
{
image: url(:/dark/radiobutton-empty-disabled.svg);
}
QRadioButton::indicator:checked
{
image: url(:/dark/radiobutton-checked.svg);
}
QRadioButton::indicator:checked:disabled
{
image: url(:/dark/radiobutton-checked-disabled.svg);
}
QListView::indicator:unchecked
{
image: url(:/dark/checkbox-empty.svg);
}
QListView::indicator:checked
{
image: url(:/dark/checkbox-checked.svg);
}
QListView::indicator:indeterminate
{
image: url(:/dark/checkbox-half.svg);
}
QTabBar QToolButton
{
background-color: #232323;
min-width: 0px;
}
QTabBar QToolButton::left-arrow
{
image: url(:/dark/left-triangle-tabbar.svg);
}
QTabBar QToolButton::right-arrow
{
image: url(:/dark/right-triangle-tabbar.svg);
}
QTableCornerButton::section
{
background-color: #232323;
border: 1px solid #4e4e4e;
border-top: 0px;
border-left: 0px;
border-bottom: 0px;
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="100" x2="1200" y2="1200" stroke="#7e7e7e" stroke-width="100" />
<line x1="100" y1="1200" x2="1200" y2="100" stroke="#7e7e7e" stroke-width="100" />
</svg>

After

Width:  |  Height:  |  Size: 303 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1300" height="1300" viewBox="0 0 1300 1300" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="350" width="900" height="900" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
<polyline points="350,350 350,50 1250,50 1250,950 950,950" stroke="#7e7e7e" stroke-width="100" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 347 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="40" viewBox="0 0 100 40" xmlns="http://www.w3.org/2000/svg">
<polyline points="20,5 50,35 80,5" fill="#cfcfcf" />
</svg>

After

Width:  |  Height:  |  Size: 184 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="20,40 50,70 80,40" fill="#cfcfcf" />
</svg>

After

Width:  |  Height:  |  Size: 188 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="20,50 50,80 80,50" stroke="#cfcfcf" stroke-width="15" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="40" height="100" viewBox="0 0 40 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="35,20 5,50 35,80" fill="#cfcfcf" />
</svg>

After

Width:  |  Height:  |  Size: 185 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1000" height="1000" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="450" style="stroke:#7e7e7e;stroke-width:100;fill:#505050;" />
<circle cx="500" cy="500" r="250" style="fill:#7e7e7e;" />
</svg>

After

Width:  |  Height:  |  Size: 287 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1000" height="1000" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="450" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
<circle cx="500" cy="500" r="250" style="fill:#7e7e7e;" />
</svg>

After

Width:  |  Height:  |  Size: 284 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1000" height="1000" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="450" style="stroke:#7e7e7e;stroke-width:100;fill:#505050;" />
</svg>

After

Width:  |  Height:  |  Size: 228 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1000" height="1000" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="500" r="450" style="stroke:#7e7e7e;stroke-width:100;fill:none;" />
</svg>

After

Width:  |  Height:  |  Size: 225 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="40" height="100" viewBox="0 0 40 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="5,20 35,50 5,80" fill="#cfcfcf" />
</svg>

After

Width:  |  Height:  |  Size: 184 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="25,35 50,60 75,35" stroke="#cfcfcf" stroke-width="15" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="65,25 40,50 65,75" stroke="#cfcfcf" stroke-width="15" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="35,25 60,50 35,75" stroke="#cfcfcf" stroke-width="15" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="25,65 50,40 75,65" stroke="#cfcfcf" stroke-width="15" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="60" height="50" viewBox="0 0 60 50" xmlns="http://www.w3.org/2000/svg">
<polyline points="5,10 30,35 55,10" stroke="#cfcfcf" stroke-width="10" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 215 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="60" height="50" viewBox="0 0 60 50" xmlns="http://www.w3.org/2000/svg">
<polyline points="5,35 30,10 55,35" stroke="#dcdcdc" stroke-width="10" fill="none" />
</svg>

After

Width:  |  Height:  |  Size: 215 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="40" viewBox="0 0 100 40" xmlns="http://www.w3.org/2000/svg">
<polyline points="20,35 50,5 80,35" fill="#dcdcdc" />
</svg>

After

Width:  |  Height:  |  Size: 185 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polyline points="20,60 50,30 80,60" fill="#dcdcdc" />
</svg>

After

Width:  |  Height:  |  Size: 188 B

Loading…
Cancel
Save