BreezeStyleSheets/template/stylesheet.qss.in

2491 lines
56 KiB
Plaintext

/*
* BreezeDark stylesheet.
*
* :author: Colin Duquesnoy
* :editor: Alex Huszagh
* :license: MIT, see LICENSE.md
*
* This is originally a fork of QDarkStyleSheet, and is based on Breeze/
* BreezeDark color scheme, but is in no way affiliated with KDE.
*
* ---------------------------------------------------------------------
* The MIT License (MIT)
*
* Copyright (c) <2013-2014> <Colin Duquesnoy>
* Copyright (c) <2015-2021> <Alex Huszagh>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* ---------------------------------------------------------------------
*/
/**
* MAIN STYLESHEET
* ---------------
*/
QToolTip
{
/* 0.2ex is the smallest value that's not ignored on Windows. */
border: 0.04em solid ^foreground^;
background-image: none;
background-color: ^background^;
alternate-background-color: ^background:alternate^;
color: ^foreground^;
padding: 0.1em;
opacity: 200;
}
QWidget
{
color: ^foreground^;
background-color: ^background^;
selection-background-color: ^highlight^;
selection-color: ^foreground^;
background-clip: border;
border-image: none;
/* QDialogButtonBox icons */
dialog-cancel-icon: url(^style^dialog_cancel.svg);
dialog-close-icon: url(^style^dialog_close.svg);
dialog-ok-icon: url(^style^dialog_ok.svg);
dialog-open-icon: url(^style^dialog_open.svg);
dialog-reset-icon: url(^style^dialog_reset.svg);
dialog-save-icon: url(^style^dialog_save.svg);
dialog-yes-icon: url(^style^dialog_ok.svg);
dialog-help-icon: url(^style^dialog_help.svg);
dialog-no-icon: url(^style^dialog_no.svg);
dialog-apply-icon: url(^style^dialog_ok.svg);
dialog-discard-icon: url(^style^dialog_discard.svg);
/* File icons */
filedialog-backward-icon: url(^style^left_arrow.svg);
filedialog-contentsview-icon: url(^style^file_dialog_contents.svg);
filedialog-detailedview-icon: url(^style^file_dialog_detailed.svg);
filedialog-end-icon: url(^style^file_dialog_end.svg);
filedialog-infoview-icon: url(^style^file_dialog_info.svg);
filedialog-listview-icon: url(^style^file_dialog_list.svg);
filedialog-new-directory-icon: url(^style^folder.svg);
filedialog-parent-directory-icon: url(^style^up_arrow.svg);
filedialog-start-icon: url(^style^file_dialog_start.svg);
directory-closed-icon: url(^style^folder.svg);
directory-icon: url(^style^folder.svg);
directory-link-icon: url(^style^folder_link.svg);
directory-open-icon: url(^style^folder_open.svg);
file-icon: url(^style^file.svg);
file-link-icon: url(^style^file_link.svg);
home-icon: url(^style^home_directory.svg);
/* QMessageBox icons */
messagebox-critical-icon: url(^style^message_critical.svg);
messagebox-information-icon: url(^style^message_information.svg);
messagebox-question-icon: url(^style^message_question.svg);
messagebox-warning-icon: url(^style^message_warning.svg);
/* Computer icons */
computer-icon: url(^style^computer.svg);
desktop-icon: url(^style^desktop.svg);
cd-icon: url(^style^disc_drive.svg);
dvd-icon: url(^style^disc_drive.svg);
floppy-icon: url(^style^floppy_drive.svg);
harddisk-icon: url(^style^hard_drive.svg);
network-icon: url(^style^network_drive.svg);
trash-icon: url(^style^trash.svg);
/* Arrow icons */
uparrow-icon: url(^style^up_arrow.svg);
downarrow-icon: url(^style^down_arrow.svg);
leftarrow-icon: url(^style^left_arrow.svg);
rightarrow-icon: url(^style^right_arrow.svg);
backward-icon: url(^style^left_arrow.svg);
forward-icon: url(^style^right_arrow.svg);
/* Titlebar icons */
titlebar-close-icon: url(^style^window_close.svg);
titlebar-contexthelp-icon: url(^style^help.svg);
titlebar-maximize-icon: url(^style^maximize.svg);
titlebar-menu-icon: url(^style^menu.svg);
titlebar-minimize-icon: url(^style^minimize.svg);
titlebar-normal-icon: url(^style^restore.svg);
titlebar-shade-icon: url(^style^shade.svg);
titlebar-unshade-icon: url(^style^unshade.svg);
/* Other icons */
dockwidget-close-icon: url(^style^close.svg);
/**
* Only available in Qt6, and causes other issues. See #62.
* lineedit-clear-button-icon: url(^style^clear_text.svg);
*/
}
QWidget:disabled
{
color: ^button:disabled^;
background-color: ^background^;
}
QCheckBox
{
spacing: 0.23em;
outline: none;
color: ^foreground^;
margin-bottom: 0.09em;
opacity: 200;
}
QCheckBox:disabled
{
color: ^midtone:light^;
}
QGroupBox
{
/* Need to make sure the groupbox doesn't compress below the title. */
min-height: 1.2em;
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
/**
* This gives us enough space at the top to ensure we can move the
* title to be inside the guidelines, and the padding at the top
* ensures we have space below the title.
*/
margin-top: 0.5em;
padding-top: 1em;
}
QGroupBox:focus
{
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
}
QGroupBox::title
{
/* We need to move 0.6em up to be inside the lines, +1em for padding. */
top: -1.6em;
subcontrol-origin: content;
subcontrol-position: top center;
background: ^background^;
padding-left: 0.2em;
padding-right: 0.2em;
}
QCheckBox::indicator,
QTreeView::indicator,
QGroupBox::indicator
{
width: 1em;
height: 1em;
}
QGroupBox::indicator:unchecked,
QGroupBox::indicator:unchecked:focus,
QCheckBox::indicator:unchecked,
QCheckBox::indicator:unchecked:focus,
QTreeView::indicator:unchecked,
QTreeView::indicator:unchecked:focus
{
border-image: url(^style^checkbox_unchecked_disabled.svg);
}
QGroupBox::indicator:unchecked,
QCheckBox::indicator:unchecked:hover,
QCheckBox::indicator:unchecked:pressed,
QTreeView::indicator:unchecked:hover,
QTreeView::indicator:unchecked:pressed,
QGroupBox::indicator:unchecked:hover,
QGroupBox::indicator:unchecked:pressed
{
border: none;
border-image: url(^style^checkbox_unchecked.svg);
}
QCheckBox::indicator:checked,
QTreeView::indicator:checked,
QGroupBox::indicator:checked
{
border-image: url(^style^checkbox_checked.svg);
}
QCheckBox::indicator:checked:hover,
QCheckBox::indicator:checked:focus,
QCheckBox::indicator:checked:pressed,
QTreeView::indicator:checked:hover,
QTreeView::indicator:checked:focus,
QTreeView::indicator:checked:pressed,
QGroupBox::indicator:checked:hover,
QGroupBox::indicator:checked:focus,
QGroupBox::indicator:checked:pressed
{
border: none;
border-image: url(^style^checkbox_checked.svg);
}
QCheckBox::indicator:indeterminate,
QTreeView::indicator:indeterminate
{
border-image: url(^style^checkbox_indeterminate.svg);
}
QCheckBox::indicator:indeterminate:focus,
QCheckBox::indicator:indeterminate:hover,
QCheckBox::indicator:indeterminate:pressed,
QTreeView::indicator:indeterminate:focus,
QTreeView::indicator:indeterminate:hover,
QTreeView::indicator:indeterminate:pressed
{
border-image: url(^style^checkbox_indeterminate.svg);
}
QCheckBox::indicator:indeterminate:disabled,
QTreeView::indicator:indeterminate:disabled
{
border-image: url(^style^checkbox_indeterminate_disabled.svg);
}
QCheckBox::indicator:checked:disabled,
QTreeView::indicator:checked:disabled,
QGroupBox::indicator:checked:disabled
{
border-image: url(^style^checkbox_checked_disabled.svg);
}
QCheckBox::indicator:unchecked:disabled,
QTreeView::indicator:unchecked:disabled,
QGroupBox::indicator:unchecked:disabled
{
border-image: url(^style^checkbox_unchecked_disabled.svg);
}
QRadioButton
{
spacing: 0.23em;
outline: none;
color: ^foreground^;
margin-bottom: 0.09em;
}
QRadioButton:disabled
{
color: ^midtone^;
}
QRadioButton::indicator
{
width: 1em;
height: 1em;
}
QRadioButton::indicator:unchecked,
QRadioButton::indicator:unchecked:focus
{
border-image: url(^style^radio_unchecked_disabled.svg);
}
QRadioButton::indicator:unchecked:hover,
QRadioButton::indicator:unchecked:pressed
{
border: none;
outline: none;
border-image: url(^style^radio_unchecked.svg);
}
QRadioButton::indicator:checked
{
border: none;
outline: none;
border-image: url(^style^radio_checked.svg);
}
QRadioButton::indicator:checked:hover,
QRadioButton::indicator:checked:focus,
QRadioButton::indicator:checked:pressed
{
border: none;
outline: none;
border-image: url(^style^radio_checked.svg);
}
QRadioButton::indicator:checked:disabled
{
outline: none;
border-image: url(^style^radio_checked_disabled.svg);
}
QRadioButton::indicator:unchecked:disabled
{
border-image: url(^style^radio_unchecked_disabled.svg);
}
QMenuBar
{
background-color: ^background^;
color: ^foreground^;
}
QMenuBar::item
{
background: transparent;
}
QMenuBar::item:selected
{
background: transparent;
}
QMenuBar::item:disabled
{
color: ^menu:disabled^;
}
QMenuBar::item:pressed
{
background-color: ^highlight^;
color: ^foreground^;
margin-bottom: -0.09em;
padding-bottom: 0.09em;
}
QMenu
{
color: ^foreground^;
margin: 0.09em;
}
QMenu::icon
{
margin: 0.23em;
}
QMenu::item
{
/* Add extra padding on the right for the QMenu arrow */
padding: 0.23em 1.5em 0.23em 1.3em;
border: 0.09em solid transparent;
background: transparent;
}
QMenu::item:selected
{
color: ^foreground^;
background-color: ^highlight^;
}
QMenu::item:selected:disabled
{
background-color: ^background^;
}
QMenu::item:disabled
{
color: ^menu:disabled^;
}
QMenu::indicator
{
width: 0.8em;
height: 0.8em;
/* To align with QMenu::icon, which has a 0.23em margin. */
margin-left: 0.3em;
subcontrol-position: center left;
}
QMenu::indicator:non-exclusive:unchecked
{
border-image: url(^style^checkbox_unchecked_disabled.svg);
}
QMenu::indicator:non-exclusive:unchecked:selected
{
border-image: url(^style^checkbox_unchecked_disabled.svg);
}
QMenu::indicator:non-exclusive:checked
{
border-image: url(^style^checkbox_checked.svg);
}
QMenu::indicator:non-exclusive:checked:selected
{
border-image: url(^style^checkbox_checked.svg);
}
QMenu::indicator:exclusive:unchecked
{
border-image: url(^style^radio_unchecked_disabled.svg);
}
QMenu::indicator:exclusive:unchecked:selected
{
border-image: url(^style^radio_unchecked_disabled.svg);
}
QMenu::indicator:exclusive:checked
{
border-image: url(^style^radio_checked.svg);
}
QMenu::indicator:exclusive:checked:selected
{
border-image: url(^style^radio_checked.svg);
}
QMenu::right-arrow
{
margin: 0.23em;
border-image: url(^style^right_arrow.svg);
width: 0.5em;
height: 0.8em;
}
QMenu::right-arrow:disabled
{
border-image: url(^style^right_arrow_disabled.svg);
}
QAbstractItemView
{
alternate-background-color: ^background^;
color: ^foreground^;
border: 0.09em solid ^view:border^;
border-radius: 0.09em;
}
QMenuBar::item:focus:!disabled
{
border: 0.04em solid ^highlight^;
}
QTabWidget:focus,
QCheckBox:focus,
QRadioButton:focus,
QSlider:focus
{
border: none;
}
QLineEdit
{
background-color: ^text:background^;
padding: 0.23em;
border-style: solid;
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
color: ^foreground^;
}
QAbstractScrollArea
{
border-radius: 0.09em;
border: 0.09em solid ^midtone^;
background-color: transparent;
}
/**
* This is the background for the box in the bottom-right corner
* whene both scrollbars are active.
*/
QAbstractScrollArea::corner
{
background: ^background^;
}
/**
* Can't do the KDE style of where the scrollbar handle
* becomes light on the hover, and only when the handle
* is hovered does it become stylized. This is because
* both the handle and the background events are treated
* together.
*/
QScrollBar:horizontal
{
background-color: ^scrollbar:background^;
height: 0.65em;
margin: 0.13em 0.65em 0.13em 0.65em;
border: 0.04em transparent ^scrollbar:background^;
border-radius: 0.17em;
}
QScrollBar:horizontal:hover
{
background-color: ^scrollbar:background:hover^;
}
QScrollBar::handle:horizontal
{
background-color: ^scrollbar:hover^;
border: 0.04em solid ^scrollbar:hover^;
min-width: 0.5em;
border-radius: 0.17em;
}
QScrollBar::handle:horizontal:hover
{
background-color: ^scrollbar:hover^;
border: 0.04em solid ^scrollbar:hover^;
}
QScrollBar::add-line:horizontal
{
margin: 0em 0.13em 0em 0.13em;
border-image: url(^style^transparent.svg);
width: 0.41em;
height: 0.41em;
subcontrol-position: right;
subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal
{
margin: 0em 0.13em 0em 0.13em;
border-image: url(^style^transparent.svg);
width: 0.41em;
height: 0.41em;
subcontrol-position: left;
subcontrol-origin: margin;
}
QScrollBar::add-line:horizontal:hover,
QScrollBar::add-line:horizontal:on
{
border-image: url(^style^transparent.svg);
width: 0.41em;
height: 0.41em;
subcontrol-position: right;
subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal:hover,
QScrollBar::sub-line:horizontal:on
{
border-image: url(^style^transparent.svg);
width: 0.41em;
height: 0.41em;
subcontrol-position: left;
subcontrol-origin: margin;
}
QScrollBar::up-arrow:horizontal,
QScrollBar::down-arrow:horizontal
{
background: none;
}
QScrollBar::add-page:horizontal,
QScrollBar::sub-page:horizontal
{
background: none;
}
QScrollBar:vertical
{
background-color: ^scrollbar:background^;
width: 0.65em;
margin: 0.65em 0.13em 0.65em 0.13em;
border: 0.04em transparent ^scrollbar:background^;
border-radius: 0.17em;
}
QScrollBar:vertical:hover
{
background-color: ^scrollbar:background:hover^;
}
QScrollBar::handle:vertical
{
background-color: ^scrollbar:hover^;
border: 0.04em solid ^scrollbar:hover^;
min-height: 0.5em;
border-radius: 0.17em;
}
QScrollBar::handle:vertical:hover
{
background-color: ^scrollbar:hover^;
border: 0.04em solid ^scrollbar:hover^;
}
QScrollBar::sub-line:vertical
{
margin: 0.13em 0em 0.13em 0em;
border-image: url(^style^transparent.svg);
height: 0.41em;
width: 0.41em;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-line:vertical
{
margin: 0.13em 0em 0.13em 0em;
border-image: url(^style^transparent.svg);
height: 0.41em;
width: 0.41em;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical:hover,
QScrollBar::sub-line:vertical:on
{
border-image: url(^style^transparent.svg);
height: 0.41em;
width: 0.41em;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-line:vertical:hover,
QScrollBar::add-line:vertical:on
{
border-image: url(^style^transparent.svg);
height: 0.41em;
width: 0.41em;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical
{
background: none;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical
{
background: none;
}
QTextEdit
{
background-color: ^text:background^;
color: ^foreground^;
border: 0.04em solid ^midtone^;
}
QPlainTextEdit
{
background-color: ^text:background^;
color: ^foreground^;
border-radius: 0.09em;
border: 0.04em solid ^midtone^;
}
QSizeGrip
{
border-image: url(^style^sizegrip.svg);
width: 0.5em;
height: 0.5em;
}
/**
* Set the separator to be transparent, since the dock has a border.
* On PyQt6, neither the border nor the background seem to be respected.
*/
QMainWindow::separator
{
border: 0.09em transparent ^midtone^;
background: transparent;
}
QMenu::separator
{
height: 0.09em;
background-color: ^midtone^;
padding-left: 0.2em;
margin-top: 0.2em;
margin-bottom: 0.2em;
margin-left: 0.41em;
margin-right: 0.41em;
}
QFrame[frameShape="2"], /* QFrame::Panel == 0x0003 */
QFrame[frameShape="3"], /* QFrame::WinPanel == 0x0003 */
QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */
QFrame[frameShape="5"], /* QFrame::VLine == 0x0005 */
QFrame[frameShape="6"] /* QFrame::StyledPanel == 0x0006 */
{
border-width: 0.04em;
padding: 0.09em;
border-style: solid;
border-color: ^background^;
background-color: ^midtone^;
border-radius: 0.23em;
}
/* Provide highlighting for frame objects. */
QFrame[frameShape="2"]:hover,
QFrame[frameShape="3"]:hover,
QFrame[frameShape="4"]:hover,
QFrame[frameShape="5"]:hover,
QFrame[frameShape="6"]:hover
{
border: 0.04em solid ^highlight^;
}
/* Don't provide an outline if we have a widget that takes up the space. */
QFrame[frameShape] QAbstractItemView:hover
{
border: 0em solid black;
}
/**
* Note: I can't really change the background of the toolbars
* independently, since KDE Breeze has different colors for the
* window bar and the rest of the UI. The top toolbar uses
* the window style, and the rest use the application style,
* which we can't do.
*/
QToolBar
{
font-weight: bold;
}
QToolBar:horizontal
{
background: 0.09em solid ^toolbar:horizontal:background^;
}
QToolBar:vertical
{
background: 0.09em solid ^toolbar:vertical:background^;
}
QToolBar::handle:horizontal
{
border-image: url(^style^hmovetoolbar.svg);
}
QToolBar::handle:vertical
{
border-image: url(^style^vmovetoolbar.svg);
}
QToolBar::separator:horizontal
{
border-image: url(^style^hseptoolbar.svg);
}
QToolBar::separator:vertical
{
border-image: url(^style^vseptoolbar.svg);
}
QToolBar QToolButton
{
font-weight: bold;
border: 0.04em transparent black;
padding-left: 0.2em;
padding-right: 0.3em;
}
QToolBar QToolButton:hover
{
border: 0.04em solid ^highlight^;
}
QToolBar QToolButton:pressed
{
border: 0.04em solid ^highlight^;
/* The padding doesn't inherit from `QToolBar QToolButton`, so leave it in. */
padding-left: 0.2em;
padding-right: 0.3em;
}
/**
* Special rules for a QFileDialog.
*
* Due to the widgets, we get rid of the min sizes to allow them
* to pack closer together, and ensure we have enough padding for
* the drop-down menu in the popup.
*/
QDialog QToolBar QToolButton[popupMode="0"],
QDialog QToolBar QToolButton[popupMode="1"]
{
padding-left: 0.1em;
padding-right: 0.1em;
}
QDialog QToolBar QToolButton[popupMode="2"]
{
padding-left: 0.1em;
padding-right: 0.7em;
}
QPushButton
{
color: ^foreground^;
background-color: ^button:background^;
border: 0.04em solid ^midtone^;
padding: 0.23em;
border-radius: 0.09em;
outline: none;
min-height: 1.1em;
}
QComboBox:open,
QPushButton:open
{
border-width: 0.04em;
border-color: ^button:border^;
}
QComboBox:closed,
QPushButton:closed
{
border-width: 0.04em;
border-color: ^button:border^;
}
QPushButton:disabled
{
background-color: ^background^;
border-width: 0.04em;
border-color: ^button:border^;
border-style: solid;
padding-top: 0.23em;
padding-bottom: 0.23em;
padding-left: 1ex;
padding-right: 1ex;
border-radius: 0.04em;
color: ^button:disabled^;
}
QPushButton:focus
{
color: ^foreground^;
}
QPushButton:pressed
{
background-color: ^button:background:pressed^;
padding-top: -0.65em;
padding-bottom: -0.74em;
color: ^foreground^;
}
QComboBox
{
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
padding: 0.23em;
min-width: 2.5em;
}
QComboBox:editable
{
background-color: ^text:background^;
}
QPushButton:checked
{
background-color: ^button:checked^;
border: 0.04em solid ^button:border^;
color: ^foreground^;
}
QPushButton:hover
{
background-color: ^button:background^;
border: 0.04em solid ^highlight^;
color: ^foreground^;
}
QPushButton:checked:hover
{
background-color: ^button:checked^;
border: 0.04em solid ^highlight^;
color: ^foreground^;
}
QComboBox:hover,
QComboBox:focus,
QAbstractSpinBox:hover,
QAbstractSpinBox:focus,
QLineEdit:hover,
QLineEdit:focus,
QTextEdit:hover,
QTextEdit:focus,
QPlainTextEdit:hover,
QPlainTextEdit:focus,
QAbstractView:hover,
QTreeView:hover,
QTreeView:focus
{
border: 0.04em solid ^highlight^;
color: ^foreground^;
}
QComboBox:hover:pressed:!editable,
QPushButton:hover:pressed,
QAbstractSpinBox:hover:pressed,
QLineEdit:hover:pressed,
QTextEdit:hover:pressed,
QPlainTextEdit:hover:pressed,
QAbstractView:hover:pressed,
QTreeView:hover:pressed
{
background-color: ^background^;
}
QColumnView
{
border: 0.04em transparent ^background^;
}
QColumnViewGrip
{
border-image: url(^style^sizegrip.svg);
}
/* Each column in the view is a QAbstractItemView. */
QColumnView QAbstractItemView
{
border: 0.04em transparent ^highlight^;
}
/**
* In order to set consistency between Qt5 and Qt6, we need
* to ensure that we do the following steps:
* 1. Set a consistent `max-height` in the item. Anything
* below `0.8em` will cause clipping, so set that value
* to ensure the icon isn't larger.
* 2. Set padding to ensure the item is properly padded.
* 3. Set `0.2em` margins on the top and bottom of the arrows,
* and `0.1em` on the left and right to ensure the arrows
* are properly padded and have the same size.
*
* The size consistency only works if both the `::item` subcontrol
* `max-height` and the `::*-arrow` subcontrol `margin` is set.
*/
QColumnView QAbstractItemView::item
{
padding: 0.23em;
max-width: 0.5em;
max-height: 0.8em;
}
QColumnView QAbstractItemView::right-arrow
{
image: url(^style^right_arrow.svg);
margin: 0.2em 0.1em 0.2em 0.1em;
}
QColumnView QAbstractItemView::right-arrow:selected,
QColumnView QAbstractItemView::right-arrow:hover
{
image: url(^style^right_arrow_hover.svg);
}
QColumnView QAbstractItemView::left-arrow
{
image: url(^style^left_arrow.svg);
margin: 0.2em 0.1em 0.2em 0.1em;
}
QColumnView QAbstractItemView::left-arrow:selected,
QColumnView QAbstractItemView::left-arrow:hover
{
image: url(^style^left_arrow_hover.svg);
}
QComboBox:hover:pressed:editable
{
background-color: ^text:background^;
}
QComboBox QAbstractItemView
{
/* This happens for the drop-down menu always, whether editable or not.*/
background-color: ^text:background^;
selection-background-color: ^highlight:dark^;
outline-color: 0em;
border-radius: 0.09em;
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 0.65em;
border-left-width: 0em;
border-left-style: solid;
border-top-right-radius: 0.13em;
border-bottom-right-radius: 0.13em;
}
QComboBox::down-arrow
{
border-image: url(^style^down_arrow_disabled.svg);
width: 0.8em;
height: 0.5em;
margin-right: 0.41em;
}
QComboBox::down-arrow:on,
QComboBox::down-arrow:hover,
QComboBox::down-arrow:focus
{
border-image: url(^style^down_arrow.svg);
width: 0.8em;
height: 0.5em;
margin-right: 0.41em;
}
QAbstractSpinBox
{
padding: 0.23em;
border: 0.09em solid ^midtone^;
background-color: ^text:background^;
color: ^foreground^;
border-radius: 0.09em;
min-width: 3em;
min-height: 1em;
}
QAbstractSpinBox:hover
{
border: 0.09em solid ^highlight^;
}
QAbstractSpinBox:up-button,
QAbstractSpinBox:up-button:hover
{
background-color: transparent;
subcontrol-origin: padding;
subcontrol-position: center right;
padding-right: 0.1em;
width: 0.8em;
height: 0.5em;
}
QAbstractSpinBox:down-button,
QAbstractSpinBox:down-button:hover
{
background-color: transparent;
subcontrol-origin: padding;
subcontrol-position: center left;
padding-left: 0.1em;
width: 0.8em;
height: 0.5em;
}
/**
* Bug fixes for elongated items in QSpinBoxes.
* By default, the items are bounded by `down-button`
* and `up-button`, so this doesn't actually affect the styling.
*
* This does however affect some custom styling using
* QStyle.CC_ComboBox, which affects QDateEdit. This cannot
* be selected using QDateEdit, since it uses a global style.
* This sounds nonsensical, because CC_ComboBox isn't a spin box,
* but through trial and error, this is in fact the case.
*
* Affects #40.
*/
QAbstractSpinBox::up-arrow,
QAbstractSpinBox::up-arrow:disabled,
QAbstractSpinBox::up-arrow:off,
QAbstractSpinBox::up-arrow:!off:!disabled:hover,
QAbstractSpinBox::down-arrow,
QAbstractSpinBox::down-arrow:disabled,
QAbstractSpinBox::down-arrow:off,
QAbstractSpinBox::down-arrow:!off:!disabled:hover
{
border-image: none;
width: 0.8em;
height: 0.5em;
}
QAbstractSpinBox::up-arrow
{
image: url(^style^up_arrow.svg);
}
QAbstractSpinBox::up-arrow:disabled,
QAbstractSpinBox::up-arrow:off
{
image: url(^style^up_arrow_disabled.svg);
}
QAbstractSpinBox::up-arrow:hover
{
image: url(^style^up_arrow_hover.svg);
}
QAbstractSpinBox::down-arrow
{
image: url(^style^down_arrow.svg);
}
QAbstractSpinBox::down-arrow:disabled,
QAbstractSpinBox::down-arrow:off
{
image: url(^style^down_arrow_disabled.svg);
}
QAbstractSpinBox::down-arrow:!off:!disabled:hover
{
image: url(^style^down_arrow_hover.svg);
}
QDoubleSpinBox
{
min-width: 4em;
}
/**
* `QCalendarWidget QAbstractItemView:enabled` sets the color, background
* color, and selection color for active dates in the view.
* `QCalendarWidget QAbstractItemView:enabled` sets the disabled dates.
*/
QCalendarWidget QAbstractItemView:enabled
{
color: ^foreground^;
selection-color: ^foreground^;
selection-background-color: ^highlight^;
}
/* Won't take hover events. */
QPrevNextCalButton
{
min-width: 0.8em;
min-height: 1.2em;
qproperty-iconSize: 0px 0px;
}
QPrevNextCalButton#qt_calendar_nextmonth
{
image: url(^style^calendar_next.svg);
}
QPrevNextCalButton#qt_calendar_prevmonth
{
image: url(^style^calendar_previous.svg);
}
/**
* Setting for the month and year displays and drop-down menu for the
* month select. We style this separately because we want a drop-down
* indicator in the bottom right, unlike the normal QToolButton.
*/
QCalendarWidget QToolButton
{
background-color: transparent;
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
margin: 0.23em;
padding: 0.23em;
padding-top: 0.1em;
padding-right: 1.2em;
min-height: 1.1em;
}
QCalendarWidget QToolButton:hover
{
border: 0.04em solid ^highlight^;
}
QCalendarWidget QToolButton:checked,
QCalendarWidget QToolButton:pressed
{
background-color: ^highlight^;
padding: 0.23em;
padding-right: 1.2em;
min-height: 1.3em;
outline: none;
}
/**
* The QCalendarWidget for QDateTimeEdit seems to improperly
* style the year QToolButton, which has an object name
* `qt_datetimedit_calendar`, so ensure we style it as well.
*/
QCalendarWidget QToolButton::menu-indicator,
#qt_datetimedit_calendar QCalendarWidget QToolButton::menu-indicator
{
border-image: none;
image: url(^style^down_arrow.svg);
width: 0.8em;
height: 0.5em;
top: -0.7ex;
left: -0.09em;
padding-right: -1.11em;
subcontrol-origin: content;
subcontrol-position: bottom right;
}
QCalendarWidget QToolButton::menu-arrow,
#qt_datetimedit_calendar QCalendarWidget QToolButton::menu-arrow
{
border-image: none;
image: url(^style^down_arrow.svg);
width: 0.8em;
height: 0.5em;
padding-right: 0.09em;
subcontrol-origin: content;
subcontrol-position: bottom right;
}
/**
* Setting for the year button. Both the month select and the year
* select are QToolButtons, and both are auto-raised. The year
* button however has the popup mode set to `DelayedPopup`.
*/
QCalendarWidget QToolButton[autoRaise="true"][popupMode="0"]
{
padding: 0.23em;
}
QCalendarWidget QSpinBox
{
max-height: 1.5em;
min-width: 3.5em;
margin: 0em;
margin-top: 0.2em;
padding: 0em;
outline: 0em;
padding-left: 0.5em;
}
QLabel
{
border: 0em solid black;
}
/* BORDERS */
QTabWidget::pane
{
padding: 0.23em;
margin: 0.04em;
}
QTabWidget::pane:top
{
border: 0.04em solid ^midtone^;
top: -0.04em;
}
QTabWidget::pane:bottom
{
border: 0.04em solid ^midtone^;
bottom: -0.04em;
}
QTabWidget::pane:left
{
border: 0.04em solid ^midtone^;
left: -0.04em;
}
QTabWidget::pane:right
{
border: 0.04em solid ^midtone^;
right: -0.04em;
}
QTabBar
{
qproperty-drawBase: 0;
left: 0.23em;
border-radius: 0.13em;
/**
* Note: this is the underline for each tab title. It's not
* documented, and this took forever to track down. At least
* 10 hours have been wasted trying to turn off this line,
* do not deleted this comment.
*/
selection-color: transparent;
}
QTabBar:focus
{
border: 0em transparent black;
}
QTabBar::close-button
{
/* Doesn't seem possible to resize these buttons */
border-image: url(^style^transparent.svg);
image: url(^style^close.svg);
background: transparent;
}
QTabBar::close-button:hover
{
image: url(^style^close_hover.svg);
}
QTabBar::close-button:pressed
{
image: url(^style^close_pressed.svg);
}
/* TOP TABS */
QTabBar::tab:top,
QTabBar::tab:top:last,
QTabBar::tab:top:only-one
{
color: ^foreground^;
border: 0.04em transparent black;
border-left: 0.04em solid ^midtone^;
border-right: 0.04em solid ^midtone^;
border-top: 0.09em solid ^highlight^;
background-color: ^tab:background:selected^;
padding: 0.23em;
min-width: 50px;
border-radius: 0.09em;
border-bottom-left-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:top:!selected
{
color: ^foreground^;
background-color: ^tab:background^;
border: 0.04em transparent black;
border-right: 0.04em solid ^midtone^;
border-bottom: 0.04em solid ^midtone^;
border-radius: 0.09em;
border-bottom-left-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:top:next-selected
{
border-right: 0.04em transparent ^tab:background^;
border-bottom-left-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:top:!selected:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-bottom-left-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:top:!selected:first:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-bottom-left-radius: 0em;
border-bottom-right-radius: 0em;
}
/* BOTTOM TABS */
QTabBar::tab:bottom,
QTabBar::tab:bottom:last,
QTabBar::tab:bottom:only-one
{
color: ^foreground^;
border: 0.04em transparent black;
border-left: 0.04em solid ^midtone^;
border-right: 0.04em solid ^midtone^;
border-bottom: 0.09em solid ^highlight^;
background-color: ^tab:background:selected^;
padding: 0.23em;
min-width: 50px;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-top-right-radius: 0em;
}
QTabBar::tab:bottom:!selected
{
color: ^foreground^;
background-color: ^tab:background^;
border: 0.04em transparent black;
border-top: 0.04em solid ^midtone^;
border-right: 0.04em solid ^midtone^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-top-right-radius: 0em;
}
QTabBar::tab:bottom:next-selected
{
border-right: 0.04em transparent ^tab:background^;
border-top-left-radius: 0em;
border-top-right-radius: 0em;
}
QTabBar::tab:bottom:!selected:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-top-right-radius: 0em;
}
QTabBar::tab:bottom:!selected:first:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-top-right-radius: 0em;
}
/* LEFT TABS */
QTabBar::tab:left,
QTabBar::tab:left:last,
QTabBar::tab:left:only-one
{
color: ^foreground^;
border: 0.04em transparent black;
border-top: 0.09em solid ^highlight^;
border-bottom: 0.04em solid ^midtone^;
border-left: 0.04em solid ^midtone^;
background-color: ^tab:background:selected^;
padding: 0.23em;
min-height: 50px;
border-radius: 0.09em;
border-top-right-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:left:!selected
{
color: ^foreground^;
background-color: ^tab:background^;
border: 0.04em transparent black;
border-top: 0.04em solid ^midtone^;
border-right: 0.04em solid ^midtone^;
border-radius: 0.09em;
border-top-right-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:left:previous-selected
{
border-top: 0.04em transparent ^tab:background^;
border-top-right-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:left:!selected:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-right-radius: 0em;
border-bottom-right-radius: 0em;
}
QTabBar::tab:left:!selected:first:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-right-radius: 0em;
border-bottom-right-radius: 0em;
}
/* RIGHT TABS */
QTabBar::tab:right,
QTabBar::tab:right:last,
QTabBar::tab:right:only-one
{
color: ^foreground^;
border: 0.04em transparent black;
border-top: 0.09em solid ^highlight^;
border-bottom: 0.04em solid ^midtone^;
border-right: 0.04em solid ^midtone^;
background-color: ^tab:background:selected^;
padding: 0.23em;
min-height: 50px;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-bottom-left-radius: 0em;
}
QTabBar::tab:right:!selected
{
color: ^foreground^;
background-color: ^tab:background^;
border: 0.04em transparent black;
border-top: 0.04em solid ^midtone^;
border-left: 0.04em solid ^midtone^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-bottom-left-radius: 0em;
}
QTabBar::tab:right:previous-selected
{
border-top: 0.04em transparent ^tab:background^;
border-top-left-radius: 0em;
border-bottom-left-radius: 0em;
}
QTabBar::tab:right:!selected:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-bottom-left-radius: 0em;
}
QTabBar::tab:right:!selected:first:hover
{
background-color: ^view:hover^;
border-radius: 0.09em;
border-top-left-radius: 0em;
border-bottom-left-radius: 0em;
}
/**
* Special styles for triangular QTabWidgets.
* These ignore the border attributes, and the border and
* text color seems to be set via the `QTabBar::tab` color
* property. This seemingly cannot be changed.
*
* The rounded shapes are 0-3, and the triangular ones are 4-7.
*
* The QTabBar outline doesn't respect on QTabBar::tab:
* border-color
* outline-color
*/
QTabBar[shape="4"]::tab,
QTabBar[shape="5"]::tab,
QTabBar[shape="6"]::tab,
QTabBar[shape="7"]::tab,
QTabBar[shape="4"]::tab:last,
QTabBar[shape="5"]::tab:last,
QTabBar[shape="6"]::tab:last,
QTabBar[shape="7"]::tab:last,
QTabBar[shape="4"]::tab:only-one,
QTabBar[shape="5"]::tab:only-one,
QTabBar[shape="6"]::tab:only-one,
QTabBar[shape="7"]::tab:only-one
{
/* Need a dark color without alpha channel since it affects the text. */
color: ^slider:foreground^;
background-color: ^tab:background:selected^;
padding: 0.23em;
}
QTabBar[shape="4"]::tab,
QTabBar[shape="5"]::tab,
QTabBar[shape="4"]::tab:last,
QTabBar[shape="5"]::tab:last,
QTabBar[shape="4"]::tab:only-one,
QTabBar[shape="5"]::tab:only-one
{
min-width: 50px;
}
QTabBar[shape="6"]::tab,
QTabBar[shape="7"]::tab,
QTabBar[shape="6"]::tab:last,
QTabBar[shape="7"]::tab:last,
QTabBar[shape="6"]::tab:only-one,
QTabBar[shape="7"]::tab:only-one
{
min-height: 50px;
}
QTabBar[shape="4"]::tab:!selected,
QTabBar[shape="5"]::tab:!selected,
QTabBar[shape="6"]::tab:!selected,
QTabBar[shape="7"]::tab:!selected
{
color: ^foreground^;
background-color: ^tab:background^;
}
/**
* Increase padding on the opposite side of the icon to avoid text clipping.
*
* BUG: The padding works for North, West, and East in Qt5, South does not
* work. All tab positions work for triangular tabs in Qt6.
*/
QTabBar[shape="4"][tabsClosable="true"]::tab,
QTabBar[shape="5"][tabsClosable="true"]::tab
{
padding-left: 0.5em;
}
QTabBar[shape="6"][tabsClosable="true"]::tab
{
padding-bottom: 0.5em;
}
QTabBar[shape="7"][tabsClosable="true"]::tab
{
padding-top: 0.5em;
}
/**
* Undo the padding for the tab.
*
* Enumerated values are North, South, West, East in that order,
* from 4-7.
*
* NOTE: Any higher padding will clip the icon.
*/
QTabBar[shape="4"]::close-button,
QTabBar[shape="5"]::close-button
{
padding-left: -0.12em;
}
QTabBar[shape="6"]::close-button
{
padding-bottom: -0.18em;
}
QTabBar[shape="7"]::close-button
{
padding-top: -0.18em;
}
QDockWidget
{
background: ^dock:background^;
/**
* It doesn't seem possible to change the border of the
* QDockWidget without changing the content margins.
*/
/**
* This is a bug fix so we can handle hover, pressed, and other events.
* Reference: https://stackoverflow.com/questions/32145080/qdockwidget-float-close-button-hover-images
*/
titlebar-close-icon: url(^style^transparent.svg);
titlebar-normal-icon: url(^style^transparent.svg);
}
/**
* Don't style the title, since it gives a weird, missing border
* around the rest of the dock widget, which the remaining border
* cannot be removed.
*
* There is a bug in non-Breeze styles, where the icons are small. It
* doesn't change if we use `image` instead of `border-image`, nor if
* we use `qproperty-icon`, etc. The icon seem to be half the size
* of our desired values.
*/
QDockWidget::close-button,
QDockWidget::float-button
{
border: 0.04em solid transparent;
border-radius: 0.09em;
background: transparent;
/* Maximum icon size for buttons */
icon-size: 14px;
}
QDockWidget::float-button
{
border-image: url(^style^transparent.svg);
image: url(^style^undock.svg);
}
QDockWidget::float-button:hover
{
image: url(^style^undock_hover.svg);
}
/* The :pressed events don't register, seems to be a Qt bug. */
QDockWidget::float-button:pressed
{
image: url(^style^undock_hover.svg);
}
QDockWidget::close-button
{
border-image: url(^style^transparent.svg);
image: url(^style^close.svg);
}
QDockWidget::close-button:hover
{
image: url(^style^close_hover.svg);
}
/* The :pressed events don't register, seems to be a Qt bug. */
QDockWidget::close-button:pressed
{
image: url(^style^close_pressed.svg);
}
QTreeView,
QListView
{
background-color: ^view:background^;
border: 0em solid black;
}
QTreeView:selected,
QTreeView:!selected,
QListView:selected,
QListView:!selected
{
border: 0em solid black;
}
QTreeView::branch:has-siblings
{
border-image: url(^style^vline.svg);
image: none;
}
/* These branch indicators don't scale */
QTreeView::branch:!has-siblings
{
border-image: none;
image: none;
}
QTreeView::branch:has-siblings:adjoins-item
{
border-image: url(^style^branch_more.svg);
}
QTreeView::branch:!has-children:!has-siblings:adjoins-item
{
border-image: url(^style^branch_end.svg);
}
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings
{
image: url(^style^branch_closed.svg);
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover
{
image: url(^style^branch_closed_hover.svg);
}
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:open:has-children:!has-siblings
{
border-image: url(^style^branch_end_arrow.svg);
}
QTreeView::branch:closed:has-children:has-siblings,
QTreeView::branch:open:has-children:has-siblings
{
border-image: url(^style^branch_more_arrow.svg);
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings
{
image: url(^style^branch_open.svg);
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover
{
image: url(^style^branch_open_hover.svg);
}
QListView
{
/* Give space for elements aligned left or right. */
padding: 0.2em;
}
QTableView::item,
QListView::item,
QTreeView::item
{
padding: 0.13em;
color: ^foreground^;
}
QTreeView::item
{
/**
* Need to set the background color in Qt6, or else
* the QTreeView indicators use the style defaults,
* along with the box model, which conflicts with our
* theme (except with hover/focus/selected pseudostates).
*
* Affects issue #51.
*/
background-color: ^view:background^;
outline: 0;
}
QTableView::item:!selected:hover,
QListView::item:!selected:hover,
QTreeView::item:!selected:hover
{
background-color: ^view:hover^;
outline: 0;
color: ^foreground^;
padding: 0.13em;
}
QSlider::handle:horizontal,
QSlider::handle:vertical
{
background: ^slider:handle:background^;
border: 0.04em solid ^midtone:dark^;
width: 0.7em;
height: 0.7em;
border-radius: 0.35em;
}
QSlider:horizontal
{
height: 2em;
}
QSlider:vertical
{
width: 2em;
}
QSlider::handle:horizontal
{
margin: -0.23em 0;
}
QSlider::handle:vertical
{
margin: 0 -0.23em;
}
QSlider::groove:horizontal,
QSlider::groove:vertical
{
background: ^tab:background^;
border: 0em solid ^background^;
border-radius: 0.19em;
}
QSlider::groove:horizontal
{
height: 0.4em;
}
QSlider::groove:vertical
{
width: 0.4em;
}
QSlider::handle:horizontal:hover,
QSlider::handle:horizontal:focus,
QSlider::handle:vertical:hover,
QSlider::handle:vertical:focus
{
border: 0.04em solid ^slider:foreground^;
}
QSlider::handle:horizontal:!focus:!hover,
QSlider::handle:vertical:!focus:!hover
{
border: 0.04em solid ^midtone:dark^;
}
QSlider::sub-page:horizontal,
QSlider::add-page:vertical
{
background: ^slider:foreground^;
border-radius: 0.19em;
}
QSlider::add-page:horizontal,
QSlider::sub-page:vertical
{
background: ^midtone:dark^;
border-radius: 0.19em;
}
/* QToolButton */
/**
* QToolButton's that have a push button need to be styled differently,
* depending on whether there are actions (a menu) associated with it.
* This is signaled by a drop-down arrow on the right of the push button.
* Unfortunately, there's no good property to determine this. The property
* we need is `QWidget::actions`, however, it's a method and not a
* property.Note that the drop-down menu is not signaled by any of the
* following:
* popupMode: any pop-up mode does not affect the right arrow style.
* arrowType: only replaces the icon.
* toolButtonStyle: this is almost always set to icon only, even with text.
* text: can have a drop-down menu with or without text.
*
* Notably, we need to ensure we don't pad the widgets in the following
* cases:
* 1. If the QToolButton is auto-raised.
* This adds undesired padding in`QFileDialog`. These widgets
* have text, even though no text is visible. This is not the
* default, so it won't affect most situations.
* 2. If the QToolButton does not have text.
* Normally, text-less buttons do not have a menu, and this
* is required for #47, since the padding affects the scroll
* bar icons in QTabBar. This causes major issues in the
* UI, so disable the padding by default.
*
* The padding can affect the placement of icons and other things
* inside the toolbutton: near the menu-button in QFileDialog,
* the clear text icon is misplaced vertically, making it nearly
* illegible.
*
* We provide special styles for a custom, dynamic property to
* override the padding decisions with or without a menu.
* To force styling as if there is a menu, set the `hasMenu` property
* to true. Setting `hasMenu` to false will style as if there is no menu.
* You can use `QWidget::setProperty` to set this property dynamically.
*
* The affected issues are #22, #28, #47.
* https://github.com/Alexhuszagh/BreezeStyleSheets/issues/22
* https://github.com/Alexhuszagh/BreezeStyleSheets/issues/28
* https://github.com/Alexhuszagh/BreezeStyleSheets/issues/47
*/
/**
* Use an overly specific selector here to ensure no margins,
* or for the default QToolButton. We must have `autoRaise="false"`
* and `text` to have padding, so just add a `hasMenu="false"` to
* undo the padding in that case. Also add selectors for QDialog
* if a menu is explicitly forbidden.
*/
QToolButton,
QToolButton[hasMenu="false"][autoRaise="false"][text],
QDialog QToolBar QToolButton[hasMenu="false"][popupMode="0"],
QDialog QToolBar QToolButton[hasMenu="false"][popupMode="1"],
QDialog QToolBar QToolButton[hasMenu="false"][popupMode="2"]
{
margin: 0em;
padding: 0em;
}
QToolButton[autoRaise="false"]
{
background-color: ^background^;
border: 0.04em solid ^midtone^;
border-radius: 0.09em;
}
QToolButton[autoRaise="true"]
{
background-color: ^background^;
border: 0.04em solid transparent;
}
/* Add selectors for the QDialog if a menu is explicitly requested. */
QToolButton[hasMenu="true"],
QToolButton[autoRaise="false"][text],
QDialog QToolBar QToolButton[hasMenu="true"][popupMode="0"],
QDialog QToolBar QToolButton[hasMenu="true"][popupMode="1"],
QDialog QToolBar QToolButton[hasMenu="true"][popupMode="2"]
{
margin: 0.23em;
padding: 0.23em;
padding-top: 0.1em;
padding-right: 1.2em;
}
QToolButton:hover
{
border: 0.04em solid ^highlight^;
}
QToolButton:checked,
QToolButton:pressed
{
border: 0.04em solid ^highlight^;
background-color: ^highlight^;
}
QToolButton::right-arrow,
QToolButton::left-arrow,
QToolButton::up-arrow,
QToolButton::down-arrow
{
/**
* Do not set the arrow width/height here. It causes
* small icons in Qt6, and doesn't affect the styling
* in Qt5. Both look ideal without manually specified sizes.
*/
subcontrol-origin: content;
subcontrol-position: center;
margin: 0em;
padding: 0em;
}
QToolButton::right-arrow:enabled
{
image: url(^style^right_arrow.svg);
}
QToolButton::left-arrow:enabled
{
image: url(^style^left_arrow.svg);
}
QToolButton::up-arrow:enabled
{
image: url(^style^up_arrow.svg);
}
QToolButton::down-arrow:enabled
{
image: url(^style^down_arrow.svg);
}
QToolButton::right-arrow:disabled
{
image: url(^style^right_arrow_disabled.svg);
}
QToolButton::left-arrow:disabled
{
image: url(^style^left_arrow_disabled.svg);
}
QToolButton::up-arrow:disabled
{
image: url(^style^up_arrow_disabled.svg);
}
QToolButton::down-arrow:disabled
{
image: url(^style^down_arrow_disabled.svg);
}
QToolButton::menu-indicator
{
border-image: none;
image: url(^style^down_arrow.svg);
width: 0.8em;
height: 0.5em;
left: -0.09em;
/* -1.2em + 0.09em */
padding-right: -1.11em;
/**
* Qt5 and Qt6 differ if the subcontrol-origin is set to
* the default, AKA, padding. Setting it to the content,
* which we adjust the padding to, makes it uniform between
* both.
*/
subcontrol-origin: content;
subcontrol-position: right;
}
/**
* Special rule for the drop-down indicator in a QFileDialog.
* We want these to be more compact, hence the smaller padding.
*/
QDialog QToolBar QToolButton[popupMode="2"]::menu-indicator
{
padding-right: -0.7em;
}
QToolButton::menu-arrow
{
border-image: none;
image: url(^style^down_arrow.svg);
width: 0.8em;
height: 0.5em;
padding-right: 0.09em;
subcontrol-position: right;
}
QToolButton::menu-button
{
border-top-right-radius: 0.5em;
border-bottom-right-radius: 0.5em;
/* 1ex width + 0.4ex for border + no text = 2ex allocated above */
width: 1.3em;
padding: 0.23em;
outline: none;
}
QToolButton::menu-button::menu-arrow
{
left: -0.09em;
subcontrol-position: right;
}
QToolButton::menu-button:hover
{
background-color: transparent;
}
QToolButton::menu-button:pressed
{
background-color: transparent;
padding: 0.23em;
outline: none;
}
QTableView
{
border: 0em solid black;
gridline-color: ^view:border^;
background-color: ^view:background^;
}
QTableView:!selected,
QTableView:selected
{
border: 0em solid black;
}
QTableView
{
border-radius: 0em;
}
QAbstractItemView::item
{
color: ^foreground^;
}
QAbstractItemView::item:pressed
{
background: ^highlight:dark^;
color: ^foreground^;
}
QAbstractItemView::item:selected:!active
{
background: ^view:hover^;
}
/* Use background with qlineargradient to avoid ugly border on widget. */
QAbstractItemView::item:selected:active
{
background: qlineargradient(
x1: 0.5, y1: 0.5
x2: 0.5, y2: 1,
stop: 0 ^highlight:dark^,
stop: 1 ^highlight:dark^
);
color: ^foreground^;
}
QAbstractItemView::item:selected:hover
{
background: qlineargradient(
x1: 0.5, y1: 0.5
x2: 0.5, y2: 1,
stop: 0 ^highlight:alternate^,
stop: 1 ^highlight:alternate^
);
color: ^foreground^;
}
QHeaderView
{
background-color: ^view:header^;
border: 0.04em transparent;
border-radius: 0em;
margin: 0em;
padding: 0em;
}
QHeaderView::section
{
background-color: ^view:header^;
border: 0.04em solid ^midtone^;
color: ^foreground^;
border-radius: 0em;
padding: 0em 0.23em 0em 0.23em;
text-align: center;
}
QHeaderView::section::vertical::first,
QHeaderView::section::vertical::only-one
{
border-top: 0.04em solid ^midtone^;
}
QHeaderView::section::vertical
{
border-top: transparent;
}
QHeaderView::section::horizontal::first,
QHeaderView::section::horizontal::only-one
{
border-left: 0.04em solid ^midtone^;
}
QHeaderView::section::horizontal
{
border-left: transparent;
}
QHeaderView[showSortIndicator="true"]::section::horizontal
{
/* Same as the width of the arrow subcontrols below. */
padding-right: 0.8em;
}
QHeaderView::section:checked
{
color: ^foreground:light^;
background-color: ^view:checked^;
}
/* Note that this doesn't work for QTreeView unless the header is clickable */
QHeaderView::section:hover,
QHeaderView::section::horizontal::first:hover,
QHeaderView::section::horizontal::only-one:hover,
QHeaderView::section::vertical::first:hover,
QHeaderView::section::vertical::only-one:hover
{
border: 0.04em solid ^highlight^;
}
QHeaderView[showSortIndicator="true"]::down-arrow
{
image: url(^style^down_arrow.svg);
/**
* Qt5 and Qt6 differ if the subcontrol-origin is set to
* the default, AKA, padding. Setting it to the content,
* which we adjust the padding to, makes it uniform between
* both.
*/
subcontrol-origin: content;
subcontrol-position: center right;
width: 0.8em;
height: 0.5em;
/**
* Qt5 and Qt6 have different ideas of the padding of the
* arrow subcontrols: using `padding-left` to ensure that
* the width is undone fixes the padding of the content by
* an extra `0.8em` in Qt6, but doesn't affect Qt5.
*/
padding-right: 0.09em;
padding-left: -0.8em;
}
QHeaderView[showSortIndicator="true"]::up-arrow
{
image: url(^style^up_arrow.svg);
subcontrol-origin: content;
subcontrol-position: center right;
width: 0.8em;
height: 0.5em;
padding-right: 0.09em;
padding-left: -0.8em;
}
QTableView QTableCornerButton::section
{
background-color: ^view:corner^;
border: 0.04em transparent ^view:header:border^;
border-top: 0.04em solid ^view:header:border^;
border-left: 0.04em solid ^view:header:border^;
border-radius: 0em;
}
/* No hover event */
QTableView QTableCornerButton:hover
{
border: 0.04em transparent ^view:header:border^;
}
QTableView QTableCornerButton::section:pressed
{
border: 0.04em solid ^highlight^;
border-radius: 0em;
}
QToolBox
{
padding: 0.23em;
border: 0.09em transparent black;
}
QToolBox::tab
{
border-bottom: 0.09em solid ^midtone^;
margin-left: 1.5em;
}
QToolBox::tab:selected,
QToolBox::tab:hover
{
border-bottom: 0.09em solid ^highlight^;
}
QSplitter::handle
{
border: 0.09em solid ^tab:background^;
background: -0.5em solid ^tab:background^;
max-width: 0em;
max-height: 0em;
}
/**
* It's not possible to get satisfactory rounded borders here.
* If you set the border to be negative, while adjusting the
* widths, you get an asymmetrical curve which produces an
* unappealing border.
*/
QProgressBar:horizontal,
QProgressBar:vertical
{
background-color: ^midtone:dark^;
border: 0.9em solid ^background^;
border-radius: 0.13em;
padding: 0em;
}
QProgressBar:horizontal
{
height: 0.2em;
min-width: 6em;
text-align: right;
padding-left: -0.03em;
padding-right: -0.03em;
margin-top: 0.2em;
margin-bottom: 0.2em;
margin-right: 1.3em;
}
QProgressBar:vertical
{
width: 0.2em;
min-height: 6em;
text-align: bottom;
padding-top: -0.03em;
padding-bottom: -0.03em;
margin-left: 0.2em;
margin-right: 0.2em;
margin-bottom: 0.41em;
}
QProgressBar::chunk:horizontal,
QProgressBar::chunk:vertical
{
background-color: ^slider:foreground^;
border: 0.9em transparent;
border-radius: 0.08em;
}
QScrollArea,
QScrollArea:focus,
QScrollArea:hover
{
border: 0em solid black;
}
/* ICONS */
/**
* Qt's built-in icons can look pretty bad if the system theme
* is a different color than the current one. For example, when
* using a dark theme, with a light UI, the `Ok` button is greyed
* out for an about dialog.
*
* QDialogButtonBox will apply for all standard buttons in all standard
* widgets, such as QMessageBox, etc. However, we do need to override
* standard icons elsewhere.
*
* The rest of the icons make little sense to implement:
* Qt uses native window decorations.
* Qt normally uses native file dialogs, which look nicer.
* Media controls are used in custom widgets, which aren't standard.
*/
QDialogButtonBox
{
dialogbuttonbox-buttons-have-icons: true;
dialog-cancel-icon: url(^style^dialog_cancel.svg);
dialog-close-icon: url(^style^dialog_close.svg);
dialog-ok-icon: url(^style^dialog_ok.svg);
dialog-open-icon: url(^style^dialog_open.svg);
dialog-reset-icon: url(^style^dialog_reset.svg);
dialog-save-icon: url(^style^dialog_save.svg);
/**
* No support yet for overriding saveall.
* dialog-saveall-icon: url(^style^dialog_saveall.svg);
*/
dialog-yes-icon: url(^style^dialog_ok.svg);
dialog-help-icon: url(^style^dialog_help.svg);
dialog-no-icon: url(^style^dialog_no.svg);
dialog-apply-icon: url(^style^dialog_ok.svg);
dialog-discard-icon: url(^style^dialog_discard.svg);
}
/* Set some styles for these custom dialog buttons */
QDialogButtonBox QPushButton,
QMessageBox QPushButton
{
min-height: 1.1em;
min-width: 5em;
}
/**
* Special rules for creating a custom titlebar. This can only work
* when setting the Qt property `isTitlebar` to `true`.
*/
QWidget[isTitlebar="true"],
QWidget[isTitlebar="true"] *
{
background-color: ^tab:background^;
}
/**
* Special rules for creating a border around a top-level frame of a window.
* This can only work when setting the Qt property `isWindow` to `true`.
* We've manually enumerated border widths from 1-5 below.
*/
QFrame[isWindow="true"],
QFrame[frameShape][isWindow="true"]
{
border: 0px transparent ^tab:background^;
}
QFrame[isWindow="true"][windowFrame="1"],
QFrame[frameShape][isWindow="true"][windowFrame="1"]
{
border: 1px solid ^tab:background^;
border-radius: 3px;
}
QFrame[isWindow="true"][windowFrame="2"],
QFrame[frameShape][isWindow="true"][windowFrame="2"]
{
border: 2px solid ^tab:background^;
border-radius: 3px;
}
QFrame[isWindow="true"][windowFrame="3"],
QFrame[frameShape][isWindow="true"][windowFrame="3"]
{
border: 3px solid ^tab:background^;
border-radius: 3px;
}
QFrame[isWindow="true"][windowFrame="4"],
QFrame[frameShape][isWindow="true"][windowFrame="4"]
{
border: 4px solid ^tab:background^;
border-radius: 3px;
}
QFrame[isWindow="true"][windowFrame="5"],
QFrame[frameShape][isWindow="true"][windowFrame="5"]
{
border: 5px solid ^tab:background^;
border-radius: 3px;
}