mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 18:27:23 +02:00
Manually convert the QPalette object to a QML Palette manually. The conversion is not straight forward anymore, and not performing it leads to an incomplete alternate (light) palette. QML Palette in Qt 5.15 does not support yet disabled elements, the support will only be enabled with Qt 6.
78 lines
4.7 KiB
Python
78 lines
4.7 KiB
Python
from PySide2.QtCore import QObject, Qt, Slot, Property, Signal
|
|
from PySide2.QtGui import QPalette, QColor
|
|
from PySide2.QtWidgets import QApplication
|
|
|
|
|
|
class PaletteManager(QObject):
|
|
"""
|
|
Manages QApplication's palette and provides a toggle between a dark and a light theme.
|
|
"""
|
|
def __init__(self, qmlEngine, parent=None):
|
|
super(PaletteManager, self).__init__(parent)
|
|
self.qmlEngine = qmlEngine
|
|
darkPalette = QPalette()
|
|
window = QColor(50, 52, 55)
|
|
text = QColor(200, 200, 200)
|
|
disabledText = text.darker(170)
|
|
base = window.darker(150)
|
|
button = window.lighter(115)
|
|
highlight = QColor(42, 130, 218)
|
|
dark = window.darker(170)
|
|
|
|
darkPalette.setColor(QPalette.Window, window)
|
|
darkPalette.setColor(QPalette.WindowText, text)
|
|
darkPalette.setColor(QPalette.Disabled, QPalette.WindowText, disabledText)
|
|
darkPalette.setColor(QPalette.Base, base)
|
|
darkPalette.setColor(QPalette.AlternateBase, QColor(46, 47, 48))
|
|
darkPalette.setColor(QPalette.ToolTipBase, base)
|
|
darkPalette.setColor(QPalette.ToolTipText, text)
|
|
darkPalette.setColor(QPalette.Text, text)
|
|
darkPalette.setColor(QPalette.Disabled, QPalette.Text, disabledText)
|
|
darkPalette.setColor(QPalette.Button, button)
|
|
darkPalette.setColor(QPalette.ButtonText, text)
|
|
darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText, disabledText)
|
|
|
|
darkPalette.setColor(QPalette.Mid, button.lighter(120))
|
|
darkPalette.setColor(QPalette.Highlight, highlight)
|
|
darkPalette.setColor(QPalette.Disabled, QPalette.Highlight, QColor(80, 80, 80))
|
|
darkPalette.setColor(QPalette.HighlightedText, Qt.white)
|
|
darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText, QColor(127, 127, 127))
|
|
darkPalette.setColor(QPalette.Shadow, Qt.black)
|
|
darkPalette.setColor(QPalette.Link, highlight.lighter(130))
|
|
|
|
self.darkPalette = darkPalette
|
|
self.defaultPalette = QApplication.instance().palette()
|
|
self.togglePalette()
|
|
|
|
@Slot()
|
|
def togglePalette(self):
|
|
app = QApplication.instance()
|
|
if app.palette() == self.darkPalette:
|
|
app.setPalette(self.defaultPalette)
|
|
else:
|
|
app.setPalette(self.darkPalette)
|
|
if self.qmlEngine.rootObjects():
|
|
self.qmlEngine.reload()
|
|
self.paletteChanged.emit()
|
|
|
|
paletteChanged = Signal()
|
|
palette = Property(QPalette, lambda self: QApplication.instance().palette(), notify=paletteChanged)
|
|
alternateBase = Property(QColor, lambda self: self.palette.color(QPalette.AlternateBase), notify=paletteChanged)
|
|
base = Property(QColor, lambda self: self.palette.color(QPalette.Base), notify=paletteChanged)
|
|
button = Property(QColor, lambda self: self.palette.color(QPalette.Button), notify=paletteChanged)
|
|
buttonText = Property(QColor, lambda self: self.palette.color(QPalette.ButtonText), notify=paletteChanged)
|
|
disabledButtonText = Property(QColor, lambda self: self.palette.color(QPalette.Disabled, QPalette.ButtonText), notify=paletteChanged)
|
|
highlight = Property(QColor, lambda self: self.palette.color(QPalette.Highlight), notify=paletteChanged)
|
|
disabledHighlight = Property(QColor, lambda self: self.palette.color(QPalette.Disabled, QPalette.Highlight), notify=paletteChanged)
|
|
highlightedText = Property(QColor, lambda self: self.palette.color(QPalette.HighlightedText), notify=paletteChanged)
|
|
disabledHighlightedText = Property(QColor, lambda self: self.palette.color(QPalette.Disabled, QPalette.HighlightedText), notify=paletteChanged)
|
|
link = Property(QColor, lambda self: self.palette.color(QPalette.Link), notify=paletteChanged)
|
|
mid = Property(QColor, lambda self: self.palette.color(QPalette.Mid), notify=paletteChanged)
|
|
shadow = Property(QColor, lambda self: self.palette.color(QPalette.Shadow), notify=paletteChanged)
|
|
text = Property(QColor, lambda self: self.palette.color(QPalette.Text), notify=paletteChanged)
|
|
disabledText = Property(QColor, lambda self: self.palette.color(QPalette.Disabled, QPalette.Text), notify=paletteChanged)
|
|
toolTipBase = Property(QColor, lambda self: self.palette.color(QPalette.ToolTipBase), notify=paletteChanged)
|
|
toolTipText = Property(QColor, lambda self: self.palette.color(QPalette.ToolTipText), notify=paletteChanged)
|
|
window = Property(QColor, lambda self: self.palette.color(QPalette.Window), notify=paletteChanged)
|
|
windowText = Property(QColor, lambda self: self.palette.color(QPalette.WindowText), notify=paletteChanged)
|
|
disabledWindowText = Property(QColor, lambda self: self.palette.color(QPalette.Disabled, QPalette.WindowText), notify=paletteChanged)
|