summaryrefslogtreecommitdiff
path: root/x11-themes/redcore-artwork-sddm
diff options
context:
space:
mode:
Diffstat (limited to 'x11-themes/redcore-artwork-sddm')
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/Background.qml69
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/BreezeMenuStyle.qml25
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/KeyboardButton.qml38
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/Login.qml156
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/Main.qml481
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/SessionButton.qml59
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/login.svgzbin0 -> 1357 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/logout_primary.svgzbin0 -> 3033 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/restart_primary.svgzbin0 -> 2337 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/shutdown_primary.svgzbin0 -> 1394 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/suspend_primary.svgzbin0 -> 1433 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/assets/switch_primary.svgzbin0 -> 3098 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/background.jpgbin0 -> 5070818 bytes
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/ActionButton.qml128
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/Battery.qml53
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/Clock.qml50
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/KeyboardLayoutButton.qml52
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/SessionManagementScreen.qml121
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/UserDelegate.qml190
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/UserList.qml93
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/VirtualKeyboard.qml28
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/components/WallpaperFader.qml182
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/metadata.desktop16
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/theme.conf5
-rw-r--r--x11-themes/redcore-artwork-sddm/files/redcore/theme.conf.user2
-rw-r--r--x11-themes/redcore-artwork-sddm/redcore-artwork-sddm-314-r6.ebuild22
26 files changed, 1770 insertions, 0 deletions
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/Background.qml b/x11-themes/redcore-artwork-sddm/files/redcore/Background.qml
new file mode 100644
index 00000000..5a384151
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/Background.qml
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2016 Boudhayan Gupta <bgupta@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.2
+
+FocusScope {
+ id: sceneBackground
+
+ property var sceneBackgroundType
+ property alias sceneBackgroundColor: sceneColorBackground.color
+ property alias sceneBackgroundImage: sceneImageBackground.source
+
+ Rectangle {
+ id: sceneColorBackground
+ anchors.fill: parent
+ }
+
+ Image {
+ id: sceneImageBackground
+ anchors.fill: parent
+ sourceSize.width: parent.width
+ sourceSize.height: parent.height
+ fillMode: Image.PreserveAspectCrop
+ smooth: true;
+ }
+
+ states: [
+ State {
+ name: "imageBackground"
+ when: sceneBackgroundType === "image"
+ PropertyChanges {
+ target: sceneColorBackground
+ visible: false
+ }
+ PropertyChanges {
+ target: sceneImageBackground
+ visible: true
+ }
+ },
+ State {
+ name: "colorBackground"
+ when: sceneBackgroundType !== "image"
+ PropertyChanges {
+ target: sceneColorBackground
+ visible: true
+ }
+ PropertyChanges {
+ target: sceneImageBackground
+ visible: false
+ }
+ }
+ ]
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/BreezeMenuStyle.qml b/x11-themes/redcore-artwork-sddm/files/redcore/BreezeMenuStyle.qml
new file mode 100644
index 00000000..7d56c149
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/BreezeMenuStyle.qml
@@ -0,0 +1,25 @@
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+
+import QtQuick.Controls.Styles 1.4 as QQCS
+import QtQuick.Controls 1.3 as QQC
+
+QQCS.MenuStyle {
+ frame: Rectangle {
+ color: PlasmaCore.ColorScope.backgroundColor
+ border.color: Qt.tint(PlasmaCore.ColorScope.textColor, Qt.rgba(color.r, color.g, color.b, 0.7))
+ border.width: 1
+ }
+ itemDelegate.label: QQC.Label {
+ height: contentHeight * 1.2
+ verticalAlignment: Text.AlignVCenter
+ color: styleData.selected ? PlasmaCore.ColorScope.highlightedTextColor : PlasmaCore.ColorScope.textColor
+ font.pointSize: config.fontSize
+ text: styleData.text
+ }
+ itemDelegate.background: Rectangle {
+ visible: styleData.selected
+ color: PlasmaCore.ColorScope.highlightColor
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/KeyboardButton.qml b/x11-themes/redcore-artwork-sddm/files/redcore/KeyboardButton.qml
new file mode 100644
index 00000000..9989d93e
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/KeyboardButton.qml
@@ -0,0 +1,38 @@
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import QtQuick.Controls 1.3 as QQC
+
+PlasmaComponents.ToolButton {
+ id: keyboardButton
+
+ property int currentIndex: -1
+
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Keyboard Layout: %1", instantiator.objectAt(currentIndex).shortName)
+ implicitWidth: minimumWidth
+ font.pointSize: config.fontSize
+
+ visible: menu.items.length > 1
+
+ Component.onCompleted: currentIndex = Qt.binding(function() {return keyboard.currentLayout});
+
+ menu: QQC.Menu {
+ id: keyboardMenu
+ style: BreezeMenuStyle {}
+ Instantiator {
+ id: instantiator
+ model: keyboard.layouts
+ onObjectAdded: keyboardMenu.insertItem(index, object)
+ onObjectRemoved: keyboardMenu.removeItem( object )
+ delegate: QQC.MenuItem {
+ text: modelData.longName
+ property string shortName: modelData.shortName
+ onTriggered: {
+ keyboard.currentLayout = model.index
+ }
+ }
+ }
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/Login.qml b/x11-themes/redcore-artwork-sddm/files/redcore/Login.qml
new file mode 100644
index 00000000..7234917f
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/Login.qml
@@ -0,0 +1,156 @@
+import "components"
+
+import QtQuick 2.0
+import QtQuick.Layouts 1.2
+import QtQuick.Controls.Styles 1.4
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+SessionManagementScreen {
+
+ property bool showUsernamePrompt: !showUserList
+ property int usernameFontSize
+ property string usernameFontColor
+ property string lastUserName
+ property bool passwordFieldOutlined: config.PasswordFieldOutlined == "true"
+ property bool hidePasswordRevealIcon: config.HidePasswordRevealIcon == "false"
+ property int visibleBoundary: mapFromItem(loginButton, 0, 0).y
+ onHeightChanged: visibleBoundary = mapFromItem(loginButton, 0, 0).y + loginButton.height + units.smallSpacing
+
+ signal loginRequest(string username, string password)
+
+ onShowUsernamePromptChanged: {
+ if (!showUsernamePrompt) {
+ lastUserName = ""
+ }
+ }
+
+ /*
+ * Login has been requested with the following username and password
+ * If username field is visible, it will be taken from that, otherwise from the "name" property of the currentIndex
+ */
+ function startLogin() {
+ var username = showUsernamePrompt ? userNameInput.text : userList.selectedUser
+ var password = passwordBox.text
+
+ loginButton.forceActiveFocus();
+ loginRequest(username, password);
+ }
+
+ PlasmaComponents.TextField {
+ id: userNameInput
+ Layout.fillWidth: true
+ Layout.minimumHeight: 32
+ implicitHeight: usernameFontSize * 2.85
+ font.pointSize: usernameFontSize * 0.8
+ font.family: config.Font || "Noto Sans"
+ opacity: 1.0
+ text: lastUserName
+ visible: showUsernamePrompt
+ focus: showUsernamePrompt && !lastUserName //if there's a username prompt it gets focus first, otherwise password does
+ placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Username")
+
+ style: TextFieldStyle {
+ textColor: "white"
+ placeholderTextColor: "white"
+ background: Rectangle {
+ radius: 6
+ border.color: "#1A73E8"
+ border.width: 2
+ color: "#48316f"
+ }
+ }
+ }
+
+ PlasmaComponents.TextField {
+ id: passwordBox
+ Layout.fillWidth: true
+ Layout.minimumHeight: 32
+ implicitHeight: usernameFontSize * 2.85
+ font.pointSize: usernameFontSize * 0.8
+ opacity: passwordFieldOutlined ? 1.0 : 1.0
+ font.family: config.Font || "Noto Sans"
+ placeholderText: config.PasswordFieldPlaceholderText == "Password" ? i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Password") : config.PasswordFieldPlaceholderText
+ focus: !showUsernamePrompt || lastUserName
+ echoMode: TextInput.Password
+ revealPasswordButtonShown: hidePasswordRevealIcon
+ onAccepted: startLogin()
+
+ style: TextFieldStyle {
+ textColor: passwordFieldOutlined ? "white" : "white"
+ placeholderTextColor: passwordFieldOutlined ? "white" : "white"
+ passwordCharacter: config.PasswordFieldCharacter == "" ? "●" : config.PasswordFieldCharacter
+ background: Rectangle {
+ radius: 6
+ border.color: "#1A73E8"
+ border.width: 2
+ color: "#48316f"
+ }
+ }
+
+ Keys.onEscapePressed: {
+ mainStack.currentItem.forceActiveFocus();
+ }
+
+ Keys.onPressed: {
+ if (event.key == Qt.Key_Left && !text) {
+ userList.decrementCurrentIndex();
+ event.accepted = true
+ }
+ if (event.key == Qt.Key_Right && !text) {
+ userList.incrementCurrentIndex();
+ event.accepted = true
+ }
+ }
+
+ Keys.onReleased: {
+ if (loginButton.opacity == 0 && length > 0) {
+ showLoginButton.start()
+ }
+ if (loginButton.opacity > 0 && length == 0) {
+ hideLoginButton.start()
+ }
+ }
+
+ Connections {
+ target: sddm
+ onLoginFailed: {
+ passwordBox.selectAll()
+ passwordBox.forceActiveFocus()
+ }
+ }
+ }
+
+ Image {
+ id: loginButton
+ source: "assets/login.svgz"
+ smooth: true
+ sourceSize: Qt.size(passwordBox.height, passwordBox.height)
+ anchors {
+ left: passwordBox.right
+ verticalCenter: passwordBox.verticalCenter
+ }
+ anchors.leftMargin: 8
+ visible: opacity > 0
+ opacity: 0
+ MouseArea {
+ anchors.fill: parent
+ onClicked: startLogin();
+ }
+ PropertyAnimation {
+ id: showLoginButton
+ target: loginButton
+ properties: "opacity"
+ to: 0.75
+ duration: 100
+ }
+ PropertyAnimation {
+ id: hideLoginButton
+ target: loginButton
+ properties: "opacity"
+ to: 0
+ duration: 80
+ }
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/Main.qml b/x11-themes/redcore-artwork-sddm/files/redcore/Main.qml
new file mode 100644
index 00000000..ab5c5dd7
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/Main.qml
@@ -0,0 +1,481 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.8
+
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+import QtGraphicalEffects 1.0
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+import org.kde.plasma.extras 2.0 as PlasmaExtras
+
+import "components"
+
+PlasmaCore.ColorScope {
+ id: root
+
+ // If we're using software rendering, draw outlines instead of shadows
+ // See https://bugs.kde.org/show_bug.cgi?id=398317
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
+
+ width: 1600
+ height: 900
+
+ property string notificationMessage
+
+ LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
+ LayoutMirroring.childrenInherit: true
+
+ PlasmaCore.DataSource {
+ id: keystateSource
+ engine: "keystate"
+ connectedSources: "Caps Lock"
+ }
+
+ Item {
+ id: wallpaper
+ anchors.fill: parent
+ Repeater {
+ model: screenModel
+
+ Background {
+ x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
+ sceneBackgroundType: config.type
+ sceneBackgroundColor: config.color
+ sceneBackgroundImage: config.background
+ }
+ }
+ }
+
+ MouseArea {
+ id: loginScreenRoot
+ anchors.fill: parent
+
+ property bool uiVisible: true
+ property bool blockUI: mainStack.depth > 1 || userListComponent.mainPasswordBox.text.length > 0 || inputPanel.keyboardActive || config.type !== "image"
+
+ hoverEnabled: true
+ drag.filterChildren: true
+ onPressed: uiVisible = true;
+ onPositionChanged: uiVisible = true;
+ onUiVisibleChanged: {
+ if (blockUI) {
+ fadeoutTimer.running = false;
+ } else if (uiVisible) {
+ fadeoutTimer.restart();
+ }
+ }
+ onBlockUIChanged: {
+ if (blockUI) {
+ fadeoutTimer.running = false;
+ uiVisible = true;
+ } else {
+ fadeoutTimer.restart();
+ }
+ }
+
+ Keys.onPressed: {
+ uiVisible = true;
+ event.accepted = false;
+ }
+
+ //takes one full minute for the ui to disappear
+ Timer {
+ id: fadeoutTimer
+ running: true
+ interval: 60000
+ onTriggered: {
+ if (!loginScreenRoot.blockUI) {
+ loginScreenRoot.uiVisible = false;
+ }
+ }
+ }
+ WallpaperFader {
+ visible: config.type === "image"
+ anchors.fill: parent
+ state: loginScreenRoot.uiVisible ? "on" : "off"
+ source: wallpaper
+ mainStack: mainStack
+ footer: footer
+ clock: clock
+ }
+
+ DropShadow {
+ id: clockShadow
+ anchors.fill: clock
+ source: clock
+ visible: !softwareRendering
+ horizontalOffset: 1
+ verticalOffset: 1
+ radius: 6
+ samples: 14
+ spread: 0.3
+ color: "black" // matches Breeze window decoration and desktopcontainment
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ Clock {
+ id: clock
+ visible: y > 0
+ property Item shadow: clockShadow
+ y: (userListComponent.userList.y + mainStack.y)/2 - height/2
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+
+ StackView {
+ id: mainStack
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+ height: root.height + units.gridUnit * 3
+
+ focus: true //StackView is an implicit focus scope, so we need to give this focus so the item inside will have it
+
+ Timer {
+ //SDDM has a bug in 0.13 where even though we set the focus on the right item within the window, the window doesn't have focus
+ //it is fixed in 6d5b36b28907b16280ff78995fef764bb0c573db which will be 0.14
+ //we need to call "window->activate()" *After* it's been shown. We can't control that in QML so we use a shoddy timer
+ //it's been this way for all Plasma 5.x without a huge problem
+ running: true
+ repeat: false
+ interval: 200
+ onTriggered: mainStack.forceActiveFocus()
+ }
+
+ initialItem: Login {
+ id: userListComponent
+ userListModel: userModel
+ userListCurrentIndex: userModel.lastIndex >= 0 ? userModel.lastIndex : 0
+ lastUserName: userModel.lastUser
+
+ usernameFontSize: root.generalFontSize
+ usernameFontColor: root.generalFontColor
+
+ showUserList: {
+ if ( !userListModel.hasOwnProperty("count")
+ || !userListModel.hasOwnProperty("disableAvatarsThreshold"))
+ return (userList.y + mainStack.y) > 0
+
+ if ( userListModel.count == 0 ) return false
+
+ return userListModel.count <= userListModel.disableAvatarsThreshold && (userList.y + mainStack.y) > 0
+ }
+
+ notificationMessage: {
+ var text = ""
+ if (keystateSource.data["Caps Lock"]["Locked"]) {
+ text += i18nd("plasma_lookandfeel_org.kde.lookandfeel","Caps Lock is on")
+ if (root.notificationMessage) {
+ text += " • "
+ }
+ }
+ text += root.notificationMessage
+ return text
+ }
+
+ actionItems: [
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/suspend_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel","Suspend to RAM","Sleep")
+ onClicked: sddm.suspend()
+ enabled: sddm.canSuspend
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/restart_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Restart")
+ onClicked: sddm.reboot()
+ enabled: sddm.canReboot
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/shutdown_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Shut Down")
+ onClicked: sddm.powerOff()
+ enabled: sddm.canPowerOff
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/switch_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "For switching to a username and password prompt", "Other...")
+ onClicked: mainStack.push(userPromptComponent)
+ enabled: true
+ visible: !userListComponent.showUsernamePrompt && !inputPanel.keyboardActive
+ }]
+
+ onLoginRequest: {
+ root.notificationMessage = ""
+ sddm.login(username, password, sessionButton.currentIndex)
+ }
+ }
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
+ }
+
+ Loader {
+ id: inputPanel
+ state: "hidden"
+ property bool keyboardActive: item ? item.active : false
+ onKeyboardActiveChanged: {
+ if (keyboardActive) {
+ state = "visible"
+ } else {
+ state = "hidden";
+ }
+ }
+ source: "components/VirtualKeyboard.qml"
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+
+ function showHide() {
+ state = state == "hidden" ? "visible" : "hidden";
+ }
+
+ states: [
+ State {
+ name: "visible"
+ PropertyChanges {
+ target: mainStack
+ y: Math.min(0, root.height - inputPanel.height - userListComponent.visibleBoundary)
+ }
+ PropertyChanges {
+ target: inputPanel
+ y: root.height - inputPanel.height
+ opacity: 1
+ }
+ },
+ State {
+ name: "hidden"
+ PropertyChanges {
+ target: mainStack
+ y: 0
+ }
+ PropertyChanges {
+ target: inputPanel
+ y: root.height - root.height/4
+ opacity: 0
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "hidden"
+ to: "visible"
+ SequentialAnimation {
+ ScriptAction {
+ script: {
+ inputPanel.item.activated = true;
+ Qt.inputMethod.show();
+ }
+ }
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: inputPanel
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.OutQuad
+ }
+ OpacityAnimator {
+ target: inputPanel
+ duration: units.longDuration
+ easing.type: Easing.OutQuad
+ }
+ }
+ }
+ },
+ Transition {
+ from: "visible"
+ to: "hidden"
+ SequentialAnimation {
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: inputPanel
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InQuad
+ }
+ OpacityAnimator {
+ target: inputPanel
+ duration: units.longDuration
+ easing.type: Easing.InQuad
+ }
+ }
+ ScriptAction {
+ script: {
+ Qt.inputMethod.hide();
+ }
+ }
+ }
+ }
+ ]
+ }
+
+
+ Component {
+ id: userPromptComponent
+ Login {
+ showUsernamePrompt: true
+ notificationMessage: root.notificationMessage
+
+ // using a model rather than a QObject list to avoid QTBUG-75900
+ userListModel: ListModel {
+ ListElement {
+ name: ""
+ iconSource: ""
+ }
+ Component.onCompleted: {
+ // as we can't bind inside ListElement
+ setProperty(0, "name", i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Type in Username and Password"));
+ }
+ }
+
+ onLoginRequest: {
+ root.notificationMessage = ""
+ sddm.login(username, password, sessionButton.currentIndex)
+ }
+
+ actionItems: [
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/suspend_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel","Suspend to RAM","Sleep")
+ onClicked: sddm.suspend()
+ enabled: sddm.canSuspend
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/restart_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Restart")
+ onClicked: sddm.reboot()
+ enabled: sddm.canReboot
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/shutdown_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Shut Down")
+ onClicked: sddm.powerOff()
+ enabled: sddm.canPowerOff
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/redcore/assets/switch_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","List Users")
+ onClicked: mainStack.pop()
+ visible: !inputPanel.keyboardActive
+ }
+ ]
+ }
+ }
+
+ //Footer
+ RowLayout {
+ id: footer
+ anchors {
+ bottom: parent.bottom
+ left: parent.left
+ right: parent.right
+ margins: units.smallSpacing
+ }
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
+
+ PlasmaComponents.ToolButton {
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to show/hide virtual keyboard", "Virtual Keyboard")
+ font.pointSize: config.fontSize
+ iconName: inputPanel.keyboardActive ? "input-keyboard-virtual-on" : "input-keyboard-virtual-off"
+ onClicked: inputPanel.showHide()
+ visible: inputPanel.status == Loader.Ready
+ }
+
+ KeyboardButton {
+ }
+
+ SessionButton {
+ id: sessionButton
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ Battery { }
+ }
+ }
+
+ Connections {
+ target: sddm
+ onLoginFailed: {
+ notificationMessage = i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Login Failed")
+ footer.enabled = true
+ mainStack.enabled = true
+ userListComponent.userList.opacity = 1
+ }
+ onLoginSucceeded: {
+ //note SDDM will kill the greeter at some random point after this
+ //there is no certainty any transition will finish, it depends on the time it
+ //takes to complete the init
+ mainStack.opacity = 0
+ footer.opacity = 0
+ }
+ }
+
+ onNotificationMessageChanged: {
+ if (notificationMessage) {
+ notificationResetTimer.start();
+ }
+ }
+
+ Timer {
+ id: notificationResetTimer
+ interval: 3000
+ onTriggered: notificationMessage = ""
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/SessionButton.qml b/x11-themes/redcore-artwork-sddm/files/redcore/SessionButton.qml
new file mode 100644
index 00000000..58590c83
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/SessionButton.qml
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import QtQuick.Controls 1.3 as QQC
+
+PlasmaComponents.ToolButton {
+ id: root
+ property int currentIndex: -1
+
+ implicitWidth: minimumWidth
+
+ visible: menu.items.length > 1
+
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Desktop Session: %1", instantiator.objectAt(currentIndex).text || "")
+
+ font.pointSize: config.fontSize
+
+ Component.onCompleted: {
+ currentIndex = sessionModel.lastIndex
+ }
+
+ menu: QQC.Menu {
+ id: menu
+ style: BreezeMenuStyle {}
+ Instantiator {
+ id: instantiator
+ model: sessionModel
+ onObjectAdded: menu.insertItem(index, object)
+ onObjectRemoved: menu.removeItem( object )
+ delegate: QQC.MenuItem {
+ text: model.name
+ onTriggered: {
+ root.currentIndex = model.index
+ }
+ }
+ }
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/login.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/login.svgz
new file mode 100644
index 00000000..a1b005b6
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/login.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/logout_primary.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/logout_primary.svgz
new file mode 100644
index 00000000..fd83ef02
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/logout_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/restart_primary.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/restart_primary.svgz
new file mode 100644
index 00000000..e749f9b3
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/restart_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/shutdown_primary.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/shutdown_primary.svgz
new file mode 100644
index 00000000..03592da9
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/shutdown_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/suspend_primary.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/suspend_primary.svgz
new file mode 100644
index 00000000..6bbf63c9
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/suspend_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/assets/switch_primary.svgz b/x11-themes/redcore-artwork-sddm/files/redcore/assets/switch_primary.svgz
new file mode 100644
index 00000000..5f344258
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/assets/switch_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/background.jpg b/x11-themes/redcore-artwork-sddm/files/redcore/background.jpg
new file mode 100644
index 00000000..2b07c0d8
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/background.jpg
Binary files differ
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/ActionButton.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/ActionButton.qml
new file mode 100644
index 00000000..9fbd2a8a
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/ActionButton.qml
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.8
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: root
+ property alias text: label.text
+ property alias iconSource: icon.source
+ property alias containsMouse: mouseArea.containsMouse
+ property alias font: label.font
+ property alias labelRendering: label.renderType
+ property alias circleOpacity: iconCircle.opacity
+ property alias circleVisiblity: iconCircle.visible
+ property int fontSize: config.fontSize
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+ signal clicked
+
+ activeFocusOnTab: true
+
+ property int iconSize: units.gridUnit * 3
+
+ implicitWidth: Math.max(iconSize + units.largeSpacing * 2, label.contentWidth)
+ implicitHeight: iconSize + units.smallSpacing + label.implicitHeight
+
+ opacity: activeFocus || containsMouse ? 1 : 0.85
+ Behavior on opacity {
+ PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
+ duration: units.longDuration * 2
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ Rectangle {
+ id: iconCircle
+ anchors.centerIn: icon
+ width: iconSize + units.smallSpacing
+ height: width
+ radius: width / 2
+ color: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : PlasmaCore.ColorScope.textColor
+ opacity: activeFocus || containsMouse ? (softwareRendering ? 0.8 : 0.15) : (softwareRendering ? 0.6 : 0)
+ Behavior on opacity {
+ PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
+ duration: units.longDuration * 3
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.centerIn: iconCircle
+ width: iconCircle.width
+ height: width
+ radius: width / 2
+ scale: mouseArea.containsPress ? 1 : 0
+ color: PlasmaCore.ColorScope.textColor
+ opacity: 0.15
+ Behavior on scale {
+ PropertyAnimation {
+ duration: units.shortDuration
+ easing.type: Easing.InOutQuart
+ }
+ }
+ }
+
+ PlasmaCore.IconItem {
+ id: icon
+ anchors {
+ top: parent.top
+ horizontalCenter: parent.horizontalCenter
+ }
+ width: iconSize
+ height: iconSize
+
+ colorGroup: PlasmaCore.ColorScope.colorGroup
+ active: mouseArea.containsMouse || root.activeFocus
+ }
+
+ PlasmaComponents.Label {
+ id: label
+ font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
+ anchors {
+ top: icon.bottom
+ topMargin: (softwareRendering ? 1.5 : 1) * units.smallSpacing
+ left: parent.left
+ right: parent.right
+ }
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignTop
+ wrapMode: Text.WordWrap
+ font.underline: root.activeFocus
+ }
+
+ MouseArea {
+ id: mouseArea
+ hoverEnabled: true
+ onClicked: root.clicked()
+ anchors.fill: parent
+ }
+
+ Keys.onEnterPressed: clicked()
+ Keys.onReturnPressed: clicked()
+ Keys.onSpacePressed: clicked()
+
+ Accessible.onPressAction: clicked()
+ Accessible.role: Accessible.Button
+ Accessible.name: label.text
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/Battery.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/Battery.qml
new file mode 100644
index 00000000..2351c4de
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/Battery.qml
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016 Kai Uwe Broulik <kde@privat.broulik.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+import org.kde.plasma.workspace.components 2.0 as PW
+
+Row {
+ spacing: units.smallSpacing
+ visible: pmSource.data["Battery"]["Has Cumulative"]
+
+ PlasmaCore.DataSource {
+ id: pmSource
+ engine: "powermanagement"
+ connectedSources: ["Battery", "AC Adapter"]
+ }
+
+ PW.BatteryIcon {
+ id: battery
+ hasBattery: pmSource.data["Battery"]["Has Battery"] || false
+ percent: pmSource.data["Battery"]["Percent"] || 0
+ pluggedIn: pmSource.data["AC Adapter"] ? pmSource.data["AC Adapter"]["Plugged in"] : false
+
+ height: batteryLabel.height
+ width: height
+ }
+
+ PlasmaComponents.Label {
+ id: batteryLabel
+ font.pointSize: config.fontSize
+ height: undefined
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1%", battery.percent)
+ Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Battery at %1%", battery.percent)
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/Clock.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/Clock.qml
new file mode 100644
index 00000000..6e26055c
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/Clock.qml
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.8
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+import org.kde.plasma.core 2.0
+
+ColumnLayout {
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ Label {
+ text: Qt.formatTime(timeSource.data["Local"]["DateTime"])
+ color: ColorScope.textColor
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ font.pointSize: 48
+ Layout.alignment: Qt.AlignHCenter
+ }
+ Label {
+ text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate)
+ color: ColorScope.textColor
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ font.pointSize: 24
+ Layout.alignment: Qt.AlignHCenter
+ }
+ DataSource {
+ id: timeSource
+ engine: "time"
+ connectedSources: ["Local"]
+ interval: 1000
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/KeyboardLayoutButton.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/KeyboardLayoutButton.qml
new file mode 100644
index 00000000..32edb528
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/KeyboardLayoutButton.qml
@@ -0,0 +1,52 @@
+/***************************************************************************
+ * Copyright (C) 2014 by Daniel Vrátil <dvratil@redhat.com> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
+ ***************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.1 as QQC
+
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import org.kde.plasma.workspace.keyboardlayout 1.0
+
+PlasmaComponents.ToolButton {
+
+ property int fontSize: config.fontSize
+
+ id: kbLayoutButton
+
+ iconName: "input-keyboard"
+ implicitWidth: minimumWidth
+ text: layout.currentLayoutDisplayName
+ font.pointSize: Math.max(fontSize,theme.defaultFont.pointSize)
+
+ Accessible.name: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to change keyboard layout", "Switch layout")
+
+ visible: layout.layouts.length > 1
+
+ onClicked: layout.nextLayout()
+
+ KeyboardLayout {
+ id: layout
+ function nextLayout() {
+ var layouts = layout.layouts;
+ var index = (layouts.indexOf(layout.currentLayout)+1) % layouts.length;
+ layout.currentLayout = layouts[index];
+ }
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/SessionManagementScreen.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/SessionManagementScreen.qml
new file mode 100644
index 00000000..5f882604
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/SessionManagementScreen.qml
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.2
+
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: root
+
+ /*
+ * Any message to be displayed to the user, visible above the text fields
+ */
+ property alias notificationMessage: notificationsLabel.text
+
+ /*
+ * A list of Items (typically ActionButtons) to be shown in a Row beneath the prompts
+ */
+ property alias actionItems: actionItemsLayout.children
+
+ /*
+ * A model with a list of users to show in the view
+ * The following roles should exist:
+ * - name
+ * - iconSource
+ *
+ * The following are also handled:
+ * - vtNumber
+ * - displayNumber
+ * - session
+ * - isTty
+ */
+ property alias userListModel: userListView.model
+
+ /*
+ * Self explanatory
+ */
+ property alias userListCurrentIndex: userListView.currentIndex
+ property var userListCurrentModelData: userListView.currentItem === null ? [] : userListView.currentItem.m
+ property bool showUserList: true
+
+ property alias userList: userListView
+
+ property int fontSize: config.fontSize
+
+ default property alias _children: innerLayout.children
+
+ UserList {
+ id: userListView
+ visible: showUserList && y > 0
+ anchors {
+ bottom: parent.verticalCenter
+ left: parent.left
+ right: parent.right
+ }
+ }
+
+ //goal is to show the prompts, in ~16 grid units high, then the action buttons
+ //but collapse the space between the prompts and actions if there's no room
+ //ui is constrained to 16 grid units wide, or the screen
+ ColumnLayout {
+ id: prompts
+ anchors.top: parent.verticalCenter
+ anchors.topMargin: units.gridUnit * 0.5
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ PlasmaComponents.Label {
+ id: notificationsLabel
+ font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
+ Layout.maximumWidth: units.gridUnit * 16
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ font.italic: true
+ }
+ ColumnLayout {
+ Layout.minimumHeight: implicitHeight
+ Layout.maximumHeight: units.gridUnit * 10
+ Layout.maximumWidth: units.gridUnit * 16
+ Layout.alignment: Qt.AlignHCenter
+ ColumnLayout {
+ id: innerLayout
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ }
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+ Row { //deliberately not rowlayout as I'm not trying to resize child items
+ id: actionItemsLayout
+ spacing: units.largeSpacing / 2
+ Layout.alignment: Qt.AlignHCenter
+ }
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/UserDelegate.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/UserDelegate.qml
new file mode 100644
index 00000000..960315df
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/UserDelegate.qml
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2014 David Edmundson <davidedmundson@kde.org>
+ * Copyright 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.8
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: wrapper
+
+ // If we're using software rendering, draw outlines instead of shadows
+ // See https://bugs.kde.org/show_bug.cgi?id=398317
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ property bool isCurrent: true
+
+ readonly property var m: model
+ property string name
+ property string userName
+ property string avatarPath
+ property string iconSource
+ property bool constrainText: true
+ property alias nameFontSize: usernameDelegate.font.pointSize
+ property int fontSize: config.fontSize
+ signal clicked()
+
+ property real faceSize: Math.min(width, height - usernameDelegate.height - units.smallSpacing)
+
+ opacity: isCurrent ? 1.0 : 0.5
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
+
+ // Draw a translucent background circle under the user picture
+ Rectangle {
+ anchors.centerIn: imageSource
+ width: imageSource.width - 2 // Subtract to prevent fringing
+ height: width
+ radius: width / 2
+
+ color: PlasmaCore.ColorScope.backgroundColor
+ opacity: 0.6
+ }
+
+ Item {
+ id: imageSource
+ anchors {
+ bottom: usernameDelegate.top
+ bottomMargin: units.largeSpacing
+ horizontalCenter: parent.horizontalCenter
+ }
+ Behavior on width {
+ PropertyAnimation {
+ from: faceSize
+ duration: units.longDuration * 2;
+ }
+ }
+ width: isCurrent ? faceSize : faceSize - units.largeSpacing
+ height: width
+
+ //Image takes priority, taking a full path to a file, if that doesn't exist we show an icon
+ Image {
+ id: face
+ source: wrapper.avatarPath
+ sourceSize: Qt.size(faceSize, faceSize)
+ fillMode: Image.PreserveAspectCrop
+ anchors.fill: parent
+ }
+
+ PlasmaCore.IconItem {
+ id: faceIcon
+ source: iconSource
+ visible: (face.status == Image.Error || face.status == Image.Null)
+ anchors.fill: parent
+ anchors.margins: units.gridUnit * 0.5 // because mockup says so...
+ colorGroup: PlasmaCore.ColorScope.colorGroup
+ }
+ }
+
+ ShaderEffect {
+ anchors {
+ bottom: usernameDelegate.top
+ bottomMargin: units.largeSpacing
+ horizontalCenter: parent.horizontalCenter
+ }
+
+ width: imageSource.width
+ height: imageSource.height
+
+ supportsAtlasTextures: true
+
+ property var source: ShaderEffectSource {
+ sourceItem: imageSource
+ // software rendering is just a fallback so we can accept not having a rounded avatar here
+ hideSource: wrapper.GraphicsInfo.api !== GraphicsInfo.Software
+ live: true // otherwise the user in focus will show a blurred avatar
+ }
+
+ property var colorBorder: PlasmaCore.ColorScope.textColor
+
+ //draw a circle with an antialised border
+ //innerRadius = size of the inner circle with contents
+ //outerRadius = size of the border
+ //blend = area to blend between two colours
+ //all sizes are normalised so 0.5 == half the width of the texture
+
+ //if copying into another project don't forget to connect themeChanged to update()
+ //but in SDDM that's a bit pointless
+ fragmentShader: "
+ varying highp vec2 qt_TexCoord0;
+ uniform highp float qt_Opacity;
+ uniform lowp sampler2D source;
+
+ uniform lowp vec4 colorBorder;
+ highp float blend = 0.01;
+ highp float innerRadius = 0.47;
+ highp float outerRadius = 0.49;
+ lowp vec4 colorEmpty = vec4(0.0, 0.0, 0.0, 0.0);
+
+ void main() {
+ lowp vec4 colorSource = texture2D(source, qt_TexCoord0.st);
+
+ highp vec2 m = qt_TexCoord0 - vec2(0.5, 0.5);
+ highp float dist = sqrt(m.x * m.x + m.y * m.y);
+
+ if (dist < innerRadius)
+ gl_FragColor = colorSource;
+ else if (dist < innerRadius + blend)
+ gl_FragColor = mix(colorSource, colorBorder, ((dist - innerRadius) / blend));
+ else if (dist < outerRadius)
+ gl_FragColor = colorBorder;
+ else if (dist < outerRadius + blend)
+ gl_FragColor = mix(colorBorder, colorEmpty, ((dist - outerRadius) / blend));
+ else
+ gl_FragColor = colorEmpty ;
+
+ gl_FragColor = gl_FragColor * qt_Opacity;
+ }
+ "
+ }
+
+ PlasmaComponents.Label {
+ id: usernameDelegate
+ font.pointSize: Math.max(fontSize + 2,theme.defaultFont.pointSize + 2)
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ height: implicitHeight // work around stupid bug in Plasma Components that sets the height
+ width: constrainText ? parent.width : implicitWidth
+ text: wrapper.name
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignHCenter
+ //make an indication that this has active focus, this only happens when reached with keyboard navigation
+ font.underline: wrapper.activeFocus
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+
+ onClicked: wrapper.clicked();
+ }
+
+ Accessible.name: name
+ Accessible.role: Accessible.Button
+ function accessiblePressAction() { wrapper.clicked() }
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/UserList.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/UserList.qml
new file mode 100644
index 00000000..a2d85088
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/UserList.qml
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2014 David Edmundson <davidedmundson@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.2
+
+ListView {
+ id: view
+ readonly property string selectedUser: currentItem ? currentItem.userName : ""
+ readonly property int userItemWidth: units.gridUnit * 8
+ readonly property int userItemHeight: units.gridUnit * 8
+
+ implicitHeight: userItemHeight
+
+ activeFocusOnTab : true
+
+ /*
+ * Signals that a user was explicitly selected
+ */
+ signal userSelected;
+
+ orientation: ListView.Horizontal
+ highlightRangeMode: ListView.StrictlyEnforceRange
+
+ //centre align selected item (which implicitly centre aligns the rest
+ preferredHighlightBegin: width/2 - userItemWidth/2
+ preferredHighlightEnd: preferredHighlightBegin
+
+ delegate: UserDelegate {
+ avatarPath: model.icon || ""
+ iconSource: model.iconName || "user-identity"
+
+ name: {
+ var displayName = model.realName || model.name
+
+ if (model.vtNumber === undefined || model.vtNumber < 0) {
+ return displayName
+ }
+
+ if (!model.session) {
+ return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Nobody logged in on that session", "Unused")
+ }
+
+
+ var location = ""
+ if (model.isTty) {
+ location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console number", "TTY %1", model.vtNumber)
+ } else if (model.displayNumber) {
+ location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console (X display number)", "on TTY %1 (Display %2)", model.vtNumber, model.displayNumber)
+ }
+
+ if (location) {
+ return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Username (location)", "%1 (%2)", displayName, location)
+ }
+
+ return displayName
+ }
+
+ userName: model.name
+
+ width: userItemWidth
+ height: userItemHeight
+
+ //if we only have one delegate, we don't need to clip the text as it won't be overlapping with anything
+ constrainText: ListView.view.count > 1
+
+ isCurrent: ListView.isCurrentItem
+
+ onClicked: {
+ ListView.view.currentIndex = index;
+ ListView.view.userSelected();
+ }
+ }
+
+ Keys.onEscapePressed: view.userSelected()
+ Keys.onEnterPressed: view.userSelected()
+ Keys.onReturnPressed: view.userSelected()
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/VirtualKeyboard.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/VirtualKeyboard.qml
new file mode 100644
index 00000000..7848b753
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/VirtualKeyboard.qml
@@ -0,0 +1,28 @@
+/********************************************************************
+ This file is part of the KDE project.
+
+Copyright (C) 2017 Martin Gräßlin <mgraesslin@kde.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+import QtQuick 2.5
+import QtQuick.VirtualKeyboard 2.1
+
+InputPanel {
+ id: inputPanel
+ property bool activated: false
+ active: activated && Qt.inputMethod.visible
+ visible: active
+ width: parent.width
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/components/WallpaperFader.qml b/x11-themes/redcore-artwork-sddm/files/redcore/components/WallpaperFader.qml
new file mode 100644
index 00000000..31dfe007
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/components/WallpaperFader.qml
@@ -0,0 +1,182 @@
+/********************************************************************
+ This file is part of the KDE project.
+
+Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+
+import QtQuick 2.6
+import QtQuick.Controls 1.1
+import QtQuick.Layouts 1.1
+import QtGraphicalEffects 1.0
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import org.kde.plasma.private.sessions 2.0
+import "../components"
+
+Item {
+ id: wallpaperFader
+ property Item clock
+ property Item mainStack
+ property Item footer
+ property alias source: wallpaperBlur.source
+ state: lockScreenRoot.uiVisible ? "on" : "off"
+ property real factor: 0
+ readonly property bool lightBackground: Math.max(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b) > 0.5
+
+ Behavior on factor {
+ NumberAnimation {
+ target: wallpaperFader
+ property: "factor"
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ }
+ }
+ FastBlur {
+ id: wallpaperBlur
+ anchors.fill: parent
+ radius: 50 * wallpaperFader.factor
+ }
+ ShaderEffect {
+ id: wallpaperShader
+ anchors.fill: parent
+ supportsAtlasTextures: true
+ property var source: ShaderEffectSource {
+ sourceItem: wallpaperBlur
+ live: true
+ hideSource: true
+ textureMirroring: ShaderEffectSource.NoMirroring
+ }
+
+ readonly property real contrast: 0.65 * wallpaperFader.factor + (1 - wallpaperFader.factor)
+ readonly property real saturation: 1.6 * wallpaperFader.factor + (1 - wallpaperFader.factor)
+ readonly property real intensity: (wallpaperFader.lightBackground ? 1.7 : 0.6) * wallpaperFader.factor + (1 - wallpaperFader.factor)
+
+ readonly property real transl: (1.0 - contrast) / 2.0;
+ readonly property real rval: (1.0 - saturation) * 0.2126;
+ readonly property real gval: (1.0 - saturation) * 0.7152;
+ readonly property real bval: (1.0 - saturation) * 0.0722;
+
+ property var colorMatrix: Qt.matrix4x4(
+ contrast, 0, 0, 0.0,
+ 0, contrast, 0, 0.0,
+ 0, 0, contrast, 0.0,
+ transl, transl, transl, 1.0).times(Qt.matrix4x4(
+ rval + saturation, rval, rval, 0.0,
+ gval, gval + saturation, gval, 0.0,
+ bval, bval, bval + saturation, 0.0,
+ 0, 0, 0, 1.0)).times(Qt.matrix4x4(
+ intensity, 0, 0, 0,
+ 0, intensity, 0, 0,
+ 0, 0, intensity, 0,
+ 0, 0, 0, 1
+ ));
+
+
+ fragmentShader: "
+ uniform mediump mat4 colorMatrix;
+ uniform mediump sampler2D source;
+ varying mediump vec2 qt_TexCoord0;
+ uniform lowp float qt_Opacity;
+
+ void main(void)
+ {
+ mediump vec4 tex = texture2D(source, qt_TexCoord0);
+ gl_FragColor = tex * colorMatrix * qt_Opacity;
+ }"
+ }
+
+ states: [
+ State {
+ name: "on"
+ PropertyChanges {
+ target: mainStack
+ opacity: 1
+ }
+ PropertyChanges {
+ target: footer
+ opacity: 1
+ }
+ PropertyChanges {
+ target: wallpaperFader
+ factor: 1
+ }
+ PropertyChanges {
+ target: clock.shadow
+ opacity: 0
+ }
+ },
+ State {
+ name: "off"
+ PropertyChanges {
+ target: mainStack
+ opacity: 0
+ }
+ PropertyChanges {
+ target: footer
+ opacity: 0
+ }
+ PropertyChanges {
+ target: wallpaperFader
+ factor: 0
+ }
+ PropertyChanges {
+ target: clock.shadow
+ opacity: 1
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "off"
+ to: "on"
+ //Note: can't use animators as they don't play well with parallelanimations
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "opacity"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: footer
+ property: "opacity"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ }
+ },
+ Transition {
+ from: "on"
+ to: "off"
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: footer
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+ ]
+}
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/metadata.desktop b/x11-themes/redcore-artwork-sddm/files/redcore/metadata.desktop
new file mode 100644
index 00000000..26e37838
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/metadata.desktop
@@ -0,0 +1,16 @@
+[SddmGreeterTheme]
+Name=Redcore
+Description=ChromeOS Theme
+Author=Vince Liuice
+Copyright=(c) 2020, Vince Liuice
+License=CC-BY-SA
+Type=sddm-theme
+Version=0.1.0
+Website=https://github.com/vinceliuice/Orchis-kde
+Screenshot=preview.png
+MainScript=Main.qml
+ConfigFile=theme.conf
+TranslationsDirectory=translations
+Email=vinceliuice@hotmail.com
+Theme-Id=Orchis
+Theme-API=2.0
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf b/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf
new file mode 100644
index 00000000..53dfe0ad
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf
@@ -0,0 +1,5 @@
+[General]
+type=image
+color=#520A0A
+fontSize=10
+background=background.jpg
diff --git a/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf.user b/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf.user
new file mode 100644
index 00000000..68c66429
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/files/redcore/theme.conf.user
@@ -0,0 +1,2 @@
+[General]
+type=image
diff --git a/x11-themes/redcore-artwork-sddm/redcore-artwork-sddm-314-r6.ebuild b/x11-themes/redcore-artwork-sddm/redcore-artwork-sddm-314-r6.ebuild
new file mode 100644
index 00000000..9a657795
--- /dev/null
+++ b/x11-themes/redcore-artwork-sddm/redcore-artwork-sddm-314-r6.ebuild
@@ -0,0 +1,22 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=7
+
+DESCRIPTION="Redcore Linux SDDM Theme"
+HOMEPAGE=""
+SRC_URI=""
+
+LICENSE="CC-BY-SA"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+S="${FILESDIR}"
+
+src_install() {
+ dodir usr/share/sddm/themes
+ insinto usr/share/sddm/themes
+ doins -r ${S}/*
+}