diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,8 @@ find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Gui Widgets) +find_package(KF5 ${KF5_DEP_VERSION} REQUIRED COMPONENTS Kirigami2) + find_package(PkgConfig) set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5QQC2DeskopStyle") diff --git a/org.kde.desktop/Button.qml b/org.kde.desktop/Button.qml --- a/org.kde.desktop/Button.qml +++ b/org.kde.desktop/Button.qml @@ -22,9 +22,12 @@ import QtQuick 2.6 import QtQuick.Templates 2.0 as T import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate +import org.kde.kirigami 2.2 as Kirigami T.Button { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.Button + Kirigami.Theme.inherit: false implicitWidth: background.implicitWidth implicitHeight: background.implicitHeight diff --git a/org.kde.desktop/CheckBox.qml b/org.kde.desktop/CheckBox.qml --- a/org.kde.desktop/CheckBox.qml +++ b/org.kde.desktop/CheckBox.qml @@ -56,7 +56,6 @@ opacity: controlRoot.enabled ? 1 : 0.6 text: controlRoot.text font: controlRoot.font - color: StylePrivate.SystemPaletteSingleton.text(controlRoot.enabled) elide: Text.ElideRight visible: controlRoot.text horizontalAlignment: Text.AlignLeft diff --git a/org.kde.desktop/ComboBox.qml b/org.kde.desktop/ComboBox.qml --- a/org.kde.desktop/ComboBox.qml +++ b/org.kde.desktop/ComboBox.qml @@ -26,9 +26,12 @@ import QtQuick.Controls 2.0 as Controls import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate import QtGraphicalEffects 1.0 +import org.kde.kirigami 2.2 as Kirigami T.ComboBox { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.Button + Kirigami.Theme.inherit: false implicitWidth: background.implicitWidth + leftPadding + rightPadding implicitHeight: background.implicitHeight @@ -44,6 +47,8 @@ text: controlRoot.textRole ? (Array.isArray(controlRoot.model) ? modelData[controlRoot.textRole] : model[controlRoot.textRole]) : modelData highlighted: controlRoot.highlightedIndex == index property bool separatorVisible: false + Kirigami.Theme.colorSet: controlRoot.Kirigami.Theme.inherit ? controlRoot.Kirigami.Theme.colorSet : Kirigami.Theme.View + Kirigami.Theme.inherit: controlRoot.Kirigami.Theme.inherit } indicator: Item {} @@ -76,6 +81,8 @@ implicitHeight: contentItem.implicitHeight topMargin: 6 bottomMargin: 6 + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: controlRoot.Kirigami.Theme.inherit contentItem: ListView { id: listview @@ -93,8 +100,8 @@ margins: -1 } radius: 2 - color: StylePrivate.SystemPaletteSingleton.base(controlRoot.enabled) - property color borderColor: StylePrivate.SystemPaletteSingleton.text(controlRoot.enabled) + color: Kirigami.Theme.backgroundColor + property color borderColor: Kirigami.Theme.textColor border.color: Qt.rgba(borderColor.r, borderColor.g, borderColor.b, 0.3) layer.enabled: true diff --git a/org.kde.desktop/ItemDelegate.qml b/org.kde.desktop/ItemDelegate.qml --- a/org.kde.desktop/ItemDelegate.qml +++ b/org.kde.desktop/ItemDelegate.qml @@ -21,8 +21,8 @@ import QtQuick 2.5 -import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate import QtQuick.Templates 2.0 as T +import org.kde.kirigami 2.2 as Kirigami import "private" T.ItemDelegate { @@ -43,7 +43,7 @@ text: controlRoot.text font: controlRoot.font - color: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked && !controlRoot.sectionDelegate) ? StylePrivate.SystemPaletteSingleton.highlightedText(controlRoot.enabled) : StylePrivate.SystemPaletteSingleton.text(controlRoot.enabled) + color: controlRoot.highlighted || controlRoot.checked || (controlRoot.pressed && !controlRoot.checked && !controlRoot.sectionDelegate) ? Kirigami.Theme.highlightedTextColor : (controlRoot.enabled ? Kirigami.Theme.textColor : Kirigami.Theme.disabledTextColor) elide: Text.ElideRight visible: controlRoot.text horizontalAlignment: Text.AlignLeft diff --git a/org.kde.desktop/Label.qml b/org.kde.desktop/Label.qml --- a/org.kde.desktop/Label.qml +++ b/org.kde.desktop/Label.qml @@ -24,22 +24,30 @@ import QtQuick.Window 2.2 import QtQuick.Templates 2.0 as T import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate +import org.kde.kirigami 2.2 as Kirigami T.Label { id: control - height: Math.round(Math.max(paintedHeight, StylePrivate.TextSingleton.height * 1.6)) + height: Math.round(Math.max(paintedHeight, Kirigami.Units * 1.6)) verticalAlignment: lineCount > 1 ? Text.AlignTop : Text.AlignVCenter activeFocusOnTab: false //Text.NativeRendering is broken on non integer pixel ratios renderType: Window.devicePixelRatio % 1 !== 0 ? Text.QtRendering : Text.NativeRendering - //font data is the system one by default - color: StylePrivate.SystemPaletteSingleton.text(control.enabled) - //StylePrivate.SystemPaletteSingleton doesn't have a link color - linkColor: "#2196F3" + font.capitalization: Kirigami.Theme.defaultFont.capitalization + font.family: Kirigami.Theme.defaultFont.family + font.italic: Kirigami.Theme.defaultFont.italic + font.letterSpacing: Kirigami.Theme.defaultFont.letterSpacing + font.pointSize: Kirigami.Theme.defaultFont.pointSize + font.strikeout: Kirigami.Theme.defaultFont.strikeout + font.underline: Kirigami.Theme.defaultFont.underline + font.weight: Kirigami.Theme.defaultFont.weight + font.wordSpacing: Kirigami.Theme.defaultFont.wordSpacing + color: Kirigami.Theme.textColor + linkColor: Kirigami.Theme.linkColor opacity: enabled? 1 : 0.6 diff --git a/org.kde.desktop/Slider.qml b/org.kde.desktop/Slider.qml --- a/org.kde.desktop/Slider.qml +++ b/org.kde.desktop/Slider.qml @@ -23,9 +23,11 @@ import QtQuick 2.6 import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate import QtQuick.Templates 2.0 as T +import org.kde.kirigami 2.2 as Kirigami T.Slider { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.Button implicitWidth: background.implicitWidth implicitHeight: background.implicitHeight diff --git a/org.kde.desktop/SpinBox.qml b/org.kde.desktop/SpinBox.qml --- a/org.kde.desktop/SpinBox.qml +++ b/org.kde.desktop/SpinBox.qml @@ -26,6 +26,8 @@ T.SpinBox { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false implicitWidth: Math.max(48, contentItem.implicitWidth + 2 * padding + up.indicator.implicitWidth) implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding diff --git a/org.kde.desktop/TextArea.qml b/org.kde.desktop/TextArea.qml --- a/org.kde.desktop/TextArea.qml +++ b/org.kde.desktop/TextArea.qml @@ -27,6 +27,8 @@ T.TextArea { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, background ? background.implicitWidth : 0, diff --git a/org.kde.desktop/TextField.qml b/org.kde.desktop/TextField.qml --- a/org.kde.desktop/TextField.qml +++ b/org.kde.desktop/TextField.qml @@ -28,6 +28,8 @@ T.TextField { id: controlRoot + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false implicitWidth: Math.max(200, placeholderText ? placeholder.implicitWidth + leftPadding + rightPadding : 0) diff --git a/org.kde.desktop/ToolButton.qml b/org.kde.desktop/ToolButton.qml --- a/org.kde.desktop/ToolButton.qml +++ b/org.kde.desktop/ToolButton.qml @@ -22,10 +22,13 @@ import QtQuick 2.6 import QtQuick.Templates 2.0 as T +import org.kde.kirigami 2.2 as Kirigami import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate T.ToolButton { id: controlRoot + Kirigami.Theme.colorSet: flat ? Kirigami.Theme.Window : Kirigami.Theme.Button + Kirigami.Theme.inherit: flat implicitWidth: background.implicitWidth implicitHeight: background.implicitHeight diff --git a/org.kde.desktop/private/DefaultListItemBackground.qml b/org.kde.desktop/private/DefaultListItemBackground.qml --- a/org.kde.desktop/private/DefaultListItemBackground.qml +++ b/org.kde.desktop/private/DefaultListItemBackground.qml @@ -21,16 +21,16 @@ import QtQuick 2.1 -import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate +import org.kde.kirigami 2.2 as Kirigami Rectangle { id: background - color: highlighted || (controlRoot.pressed && !controlRoot.checked && !controlRoot.sectionDelegate) ? StylePrivate.SystemPaletteSingleton.highlight(controlRoot.enabled) : StylePrivate.SystemPaletteSingleton.base(controlRoot.enabled) + color: highlighted || (controlRoot.pressed && !controlRoot.checked && !controlRoot.sectionDelegate) ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor visible: controlRoot.ListView.view ? controlRoot.ListView.view.highlight === null : true Rectangle { anchors.fill: parent - color: StylePrivate.SystemPaletteSingleton.highlight(controlRoot.enabled) + color: Kirigami.Theme.highlightColor opacity: controlRoot.hovered && !controlRoot.pressed ? 0.2 : 0 Behavior on opacity { NumberAnimation { duration: 150 } } } diff --git a/plugin/CMakeLists.txt b/plugin/CMakeLists.txt --- a/plugin/CMakeLists.txt +++ b/plugin/CMakeLists.txt @@ -15,7 +15,7 @@ endif() add_library(qqc2desktopstyleplugin SHARED ${qqc2desktopstyle_SRCS}) -target_link_libraries(qqc2desktopstyleplugin Qt5::Core Qt5::Qml Qt5::Quick Qt5::Gui Qt5::Widgets) +target_link_libraries(qqc2desktopstyleplugin Qt5::Core Qt5::Qml Qt5::Quick Qt5::Gui Qt5::Widgets KF5::Kirigami2) install(TARGETS qqc2desktopstyleplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/qqc2desktopstyle/private) install(FILES SystemPaletteSingleton.qml DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/qqc2desktopstyle/private) diff --git a/plugin/kquickstyleitem.cpp b/plugin/kquickstyleitem.cpp --- a/plugin/kquickstyleitem.cpp +++ b/plugin/kquickstyleitem.cpp @@ -54,6 +54,7 @@ #include "qsgdefaultninepatchnode_p.h" #endif +#include KQuickStyleItem::KQuickStyleItem(QQuickItem *parent) : QQuickItem(parent), @@ -160,6 +161,17 @@ void KQuickStyleItem::initStyleOption() { + if (!m_theme) { + m_theme = static_cast(qmlAttachedPropertiesObject(this, true)); + Q_ASSERT(m_theme); + m_theme->setInherit(true); + + connect(m_theme, &Kirigami::PlatformTheme::colorsChanged, this, [this]() { + updateItem(); + }); + } + Q_ASSERT(m_theme); + if (m_styleoption) m_styleoption->state = 0; @@ -694,7 +706,11 @@ if (QCoreApplication::testAttribute(Qt::AA_SetPalette)) return; - m_styleoption->palette = QApplication::palette(classNameForItem()); + //m_styleoption->palette = QApplication::palette(classNameForItem()); + //m_theme->setColorSet(Kirigami::PlatformTheme::Complementary); + m_styleoption->palette = m_theme->palette(); + qWarning()<<"BOMBOLO"<palette(); + // m_styleoption->palette.setColor(QPalette::WindowText, m_theme->textColor()); } /* diff --git a/plugin/kquickstyleitem_p.h b/plugin/kquickstyleitem_p.h --- a/plugin/kquickstyleitem_p.h +++ b/plugin/kquickstyleitem_p.h @@ -51,6 +51,10 @@ class QWidget; class QStyleOption; +namespace Kirigami { + class PlatformTheme; +} + class QQuickTableRowImageProvider1 : public QQuickImageProvider { public: @@ -270,6 +274,7 @@ qreal baselineOffset(); protected: + Kirigami::PlatformTheme *m_theme = nullptr; QStyleOption *m_styleoption; QPointer m_control; Type m_itemType;