Support dark mode on Windows (feature 7985)
@ -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 |