From 052b97439331f21b170d858acfe00a87cf77d472 Mon Sep 17 00:00:00 2001
From: V3n3RiX <venerix@redcorelinux.org>
Date: Tue, 9 Feb 2021 11:37:29 +0000
Subject: x11-themes/redcore-theme-sddm : revision bump

---
 .../files/redcore/Background.qml                   |  69 +++
 .../files/redcore/BreezeMenuStyle.qml              |  25 +
 .../files/redcore/KeyboardButton.qml               |  38 ++
 .../redcore-theme-sddm/files/redcore/LICENSE       | 337 -----------
 .../redcore-theme-sddm/files/redcore/Login.qml     | 156 +++++
 .../redcore-theme-sddm/files/redcore/Main.qml      | 648 ++++++++++++++-------
 x11-themes/redcore-theme-sddm/files/redcore/README |   1 -
 .../files/redcore/SessionButton.qml                |  59 ++
 .../files/redcore/angle-down.png                   | Bin 196 -> 0 bytes
 .../files/redcore/assets/login.svgz                | Bin 0 -> 1357 bytes
 .../files/redcore/assets/logout_primary.svgz       | Bin 0 -> 3033 bytes
 .../files/redcore/assets/restart_primary.svgz      | Bin 0 -> 2337 bytes
 .../files/redcore/assets/shutdown_primary.svgz     | Bin 0 -> 1394 bytes
 .../files/redcore/assets/suspend_primary.svgz      | Bin 0 -> 1433 bytes
 .../files/redcore/assets/switch_primary.svgz       | Bin 0 -> 3098 bytes
 .../files/redcore/background.jpg                   | Bin 0 -> 9464010 bytes
 .../files/redcore/components/ActionButton.qml      | 128 ++++
 .../files/redcore/components/Battery.qml           |  53 ++
 .../files/redcore/components/Clock.qml             |  50 ++
 .../redcore/components/KeyboardLayoutButton.qml    |  52 ++
 .../redcore/components/SessionManagementScreen.qml | 121 ++++
 .../files/redcore/components/UserDelegate.qml      | 190 ++++++
 .../files/redcore/components/UserList.qml          |  93 +++
 .../files/redcore/components/VirtualKeyboard.qml   |  28 +
 .../files/redcore/components/WallpaperFader.qml    | 182 ++++++
 .../files/redcore/metadata.desktop                 |  17 +-
 .../redcore-theme-sddm/files/redcore/rectangle.png | Bin 16231 -> 0 bytes
 .../redcore-theme-sddm/files/redcore/redcore.png   | Bin 2267049 -> 0 bytes
 .../redcore-theme-sddm/files/redcore/theme.conf    |   5 +-
 .../files/redcore/theme.conf.user                  |   2 +
 .../redcore-theme-sddm-314-r1.ebuild               |  22 -
 .../redcore-theme-sddm-314-r2.ebuild               |  22 +
 32 files changed, 1708 insertions(+), 590 deletions(-)
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/Background.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml
 delete mode 100644 x11-themes/redcore-theme-sddm/files/redcore/LICENSE
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/Login.qml
 delete mode 100644 x11-themes/redcore-theme-sddm/files/redcore/README
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml
 delete mode 100644 x11-themes/redcore-theme-sddm/files/redcore/angle-down.png
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/background.jpg
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml
 delete mode 100644 x11-themes/redcore-theme-sddm/files/redcore/rectangle.png
 delete mode 100644 x11-themes/redcore-theme-sddm/files/redcore/redcore.png
 create mode 100644 x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user
 delete mode 100644 x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r1.ebuild
 create mode 100644 x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r2.ebuild

diff --git a/x11-themes/redcore-theme-sddm/files/redcore/Background.qml b/x11-themes/redcore-theme-sddm/files/redcore/Background.qml
new file mode 100644
index 00000000..5a384151
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/BreezeMenuStyle.qml b/x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml
new file mode 100644
index 00000000..7d56c149
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/KeyboardButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml
new file mode 100644
index 00000000..9989d93e
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/LICENSE b/x11-themes/redcore-theme-sddm/files/redcore/LICENSE
deleted file mode 100644
index 6b679353..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/LICENSE
+++ /dev/null
@@ -1,337 +0,0 @@
-Creative Commons Legal Code
-
-Attribution-ShareAlike 3.0 Unported
-
-    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
-    SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
-    RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
-    BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
-    PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
-
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
-COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
-COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
-AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
-BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE
-CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
-IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-
-1. Definitions
-
- a. "Adaptation" means a work based upon the Work, or upon the Work and other
-    pre-existing works, such as a translation, adaptation, derivative work,
-    arrangement of music or other alterations of a literary or artistic work,
-    or phonogram or performance and includes cinematographic adaptations or any
-    other form in which the Work may be recast, transformed, or adapted
-    including in any form recognizably derived from the original, except that a
-    work that constitutes a Collection will not be considered an Adaptation for
-    the purpose of this License. For the avoidance of doubt, where the Work is
-    a musical work, performance or phonogram, the synchronization of the Work
-    in timed-relation with a moving image ("synching") will be considered an
-    Adaptation for the purpose of this License.
- b. "Collection" means a collection of literary or artistic works, such as
-    encyclopedias and anthologies, or performances, phonograms or broadcasts,
-    or other works or subject matter other than works listed in Section 1(f)
-    below, which, by reason of the selection and arrangement of their contents,
-    constitute intellectual creations, in which the Work is included in its
-    entirety in unmodified form along with one or more other contributions,
-    each constituting separate and independent works in themselves, which
-    together are assembled into a collective whole. A work that constitutes a
-    Collection will not be considered an Adaptation (as defined below) for the
-    purposes of this License.
- c. "Creative Commons Compatible License" means a license that is listed at
-    http://creativecommons.org/compatiblelicenses that has been approved by
-    Creative Commons as being essentially equivalent to this License,
-    including, at a minimum, because that license: (i) contains terms that have
-    the same purpose, meaning and effect as the License Elements of this
-    License; and, (ii) explicitly permits the relicensing of adaptations of
-    works made available under that license under this License or a Creative
-    Commons jurisdiction license with the same License Elements as this
-    License.
- d. "Distribute" means to make available to the public the original and copies
-    of the Work or Adaptation, as appropriate, through sale or other transfer
-    of ownership.
- e. "License Elements" means the following high-level license attributes as
-    selected by Licensor and indicated in the title of this License:
-    Attribution, ShareAlike.
- f. "Licensor" means the individual, individuals, entity or entities that offer
-    (s) the Work under the terms of this License.
- g. "Original Author" means, in the case of a literary or artistic work, the
-    individual, individuals, entity or entities who created the Work or if no
-    individual or entity can be identified, the publisher; and in addition (i)
-    in the case of a performance the actors, singers, musicians, dancers, and
-    other persons who act, sing, deliver, declaim, play in, interpret or
-    otherwise perform literary or artistic works or expressions of folklore;
-    (ii) in the case of a phonogram the producer being the person or legal
-    entity who first fixes the sounds of a performance or other sounds; and,
-    (iii) in the case of broadcasts, the organization that transmits the
-    broadcast.
- h. "Work" means the literary and/or artistic work offered under the terms of
-    this License including without limitation any production in the literary,
-    scientific and artistic domain, whatever may be the mode or form of its
-    expression including digital form, such as a book, pamphlet and other
-    writing; a lecture, address, sermon or other work of the same nature; a
-    dramatic or dramatico-musical work; a choreographic work or entertainment
-    in dumb show; a musical composition with or without words; a
-    cinematographic work to which are assimilated works expressed by a process
-    analogous to cinematography; a work of drawing, painting, architecture,
-    sculpture, engraving or lithography; a photographic work to which are
-    assimilated works expressed by a process analogous to photography; a work
-    of applied art; an illustration, map, plan, sketch or three-dimensional
-    work relative to geography, topography, architecture or science; a
-    performance; a broadcast; a phonogram; a compilation of data to the extent
-    it is protected as a copyrightable work; or a work performed by a variety
-    or circus performer to the extent it is not otherwise considered a literary
-    or artistic work.
- i. "You" means an individual or entity exercising rights under this License
-    who has not previously violated the terms of this License with respect to
-    the Work, or who has received express permission from the Licensor to
-    exercise rights under this License despite a previous violation.
- j. "Publicly Perform" means to perform public recitations of the Work and to
-    communicate to the public those public recitations, by any means or
-    process, including by wire or wireless means or public digital
-    performances; to make available to the public Works in such a way that
-    members of the public may access these Works from a place and at a place
-    individually chosen by them; to perform the Work to the public by any means
-    or process and the communication to the public of the performances of the
-    Work, including by public digital performance; to broadcast and rebroadcast
-    the Work by any means including signs, sounds or images.
- k. "Reproduce" means to make copies of the Work by any means including without
-    limitation by sound or visual recordings and the right of fixation and
-    reproducing fixations of the Work, including storage of a protected
-    performance or phonogram in digital form or other electronic medium.
-
-2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
-or restrict any uses free from copyright or rights arising from limitations or
-exceptions that are provided for in connection with the copyright protection
-under copyright law or other applicable laws.
-
-3. License Grant. Subject to the terms and conditions of this License, Licensor
-hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the
-duration of the applicable copyright) license to exercise the rights in the
-Work as stated below:
-
- a. to Reproduce the Work, to incorporate the Work into one or more
-    Collections, and to Reproduce the Work as incorporated in the Collections;
- b. to create and Reproduce Adaptations provided that any such Adaptation,
-    including any translation in any medium, takes reasonable steps to clearly
-    label, demarcate or otherwise identify that changes were made to the
-    original Work. For example, a translation could be marked "The original
-    work was translated from English to Spanish," or a modification could
-    indicate "The original work has been modified.";
- c. to Distribute and Publicly Perform the Work including as incorporated in
-    Collections; and,
- d. to Distribute and Publicly Perform Adaptations.
- e. For the avoidance of doubt:
-
-     i. Non-waivable Compulsory License Schemes. In those jurisdictions in
-        which the right to collect royalties through any statutory or
-        compulsory licensing scheme cannot be waived, the Licensor reserves the
-        exclusive right to collect such royalties for any exercise by You of
-        the rights granted under this License;
-    ii. Waivable Compulsory License Schemes. In those jurisdictions in which
-        the right to collect royalties through any statutory or compulsory
-        licensing scheme can be waived, the Licensor waives the exclusive right
-        to collect such royalties for any exercise by You of the rights granted
-        under this License; and,
-    iii. Voluntary License Schemes. The Licensor waives the right to collect
-        royalties, whether individually or, in the event that the Licensor is a
-        member of a collecting society that administers voluntary licensing
-        schemes, via that society, from any exercise by You of the rights
-        granted under this License.
-
-The above rights may be exercised in all media and formats whether now known or
-hereafter devised. The above rights include the right to make such
-modifications as are technically necessary to exercise the rights in other
-media and formats. Subject to Section 8(f), all rights not expressly granted by
-Licensor are hereby reserved.
-
-4. Restrictions. The license granted in Section 3 above is expressly made
-subject to and limited by the following restrictions:
-
- a. You may Distribute or Publicly Perform the Work only under the terms of
-    this License. You must include a copy of, or the Uniform Resource
-    Identifier (URI) for, this License with every copy of the Work You
-    Distribute or Publicly Perform. You may not offer or impose any terms on
-    the Work that restrict the terms of this License or the ability of the
-    recipient of the Work to exercise the rights granted to that recipient
-    under the terms of the License. You may not sublicense the Work. You must
-    keep intact all notices that refer to this License and to the disclaimer of
-    warranties with every copy of the Work You Distribute or Publicly Perform.
-    When You Distribute or Publicly Perform the Work, You may not impose any
-    effective technological measures on the Work that restrict the ability of a
-    recipient of the Work from You to exercise the rights granted to that
-    recipient under the terms of the License. This Section 4(a) applies to the
-    Work as incorporated in a Collection, but this does not require the
-    Collection apart from the Work itself to be made subject to the terms of
-    this License. If You create a Collection, upon notice from any Licensor You
-    must, to the extent practicable, remove from the Collection any credit as
-    required by Section 4(c), as requested. If You create an Adaptation, upon
-    notice from any Licensor You must, to the extent practicable, remove from
-    the Adaptation any credit as required by Section 4(c), as requested.
- b. You may Distribute or Publicly Perform an Adaptation only under the terms
-    of: (i) this License; (ii) a later version of this License with the same
-    License Elements as this License; (iii) a Creative Commons jurisdiction
-    license (either this or a later license version) that contains the same
-    License Elements as this License (e.g., Attribution-ShareAlike 3.0 US));
-    (iv) a Creative Commons Compatible License. If you license the Adaptation
-    under one of the licenses mentioned in (iv), you must comply with the terms
-    of that license. If you license the Adaptation under the terms of any of
-    the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"),
-    you must comply with the terms of the Applicable License generally and the
-    following provisions: (I) You must include a copy of, or the URI for, the
-    Applicable License with every copy of each Adaptation You Distribute or
-    Publicly Perform; (II) You may not offer or impose any terms on the
-    Adaptation that restrict the terms of the Applicable License or the ability
-    of the recipient of the Adaptation to exercise the rights granted to that
-    recipient under the terms of the Applicable License; (III) You must keep
-    intact all notices that refer to the Applicable License and to the
-    disclaimer of warranties with every copy of the Work as included in the
-    Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or
-    Publicly Perform the Adaptation, You may not impose any effective
-    technological measures on the Adaptation that restrict the ability of a
-    recipient of the Adaptation from You to exercise the rights granted to that
-    recipient under the terms of the Applicable License. This Section 4(b)
-    applies to the Adaptation as incorporated in a Collection, but this does
-    not require the Collection apart from the Adaptation itself to be made
-    subject to the terms of the Applicable License.
- c. If You Distribute, or Publicly Perform the Work or any Adaptations or
-    Collections, You must, unless a request has been made pursuant to Section 4
-    (a), keep intact all copyright notices for the Work and provide, reasonable
-    to the medium or means You are utilizing: (i) the name of the Original
-    Author (or pseudonym, if applicable) if supplied, and/or if the Original
-    Author and/or Licensor designate another party or parties (e.g., a sponsor
-    institute, publishing entity, journal) for attribution ("Attribution
-    Parties") in Licensor's copyright notice, terms of service or by other
-    reasonable means, the name of such party or parties; (ii) the title of the
-    Work if supplied; (iii) to the extent reasonably practicable, the URI, if
-    any, that Licensor specifies to be associated with the Work, unless such
-    URI does not refer to the copyright notice or licensing information for the
-    Work; and (iv) , consistent with Ssection 3(b), in the case of an
-    Adaptation, a credit identifying the use of the Work in the Adaptation
-    (e.g., "French translation of the Work by Original Author," or "Screenplay
-    based on original Work by Original Author"). The credit required by this
-    Section 4(c) may be implemented in any reasonable manner; provided,
-    however, that in the case of a Adaptation or Collection, at a minimum such
-    credit will appear, if a credit for all contributing authors of the
-    Adaptation or Collection appears, then as part of these credits and in a
-    manner at least as prominent as the credits for the other contributing
-    authors. For the avoidance of doubt, You may only use the credit required
-    by this Section for the purpose of attribution in the manner set out above
-    and, by exercising Your rights under this License, You may not implicitly
-    or explicitly assert or imply any connection with, sponsorship or
-    endorsement by the Original Author, Licensor and/or Attribution Parties, as
-    appropriate, of You or Your use of the Work, without the separate, express
-    prior written permission of the Original Author, Licensor and/or
-    Attribution Parties.
- d. Except as otherwise agreed in writing by the Licensor or as may be
-    otherwise permitted by applicable law, if You Reproduce, Distribute or
-    Publicly Perform the Work either by itself or as part of any Adaptations or
-    Collections, You must not distort, mutilate, modify or take other
-    derogatory action in relation to the Work which would be prejudicial to the
-    Original Author's honor or reputation. Licensor agrees that in those
-    jurisdictions (e.g. Japan), in which any exercise of the right granted in
-    Section 3(b) of this License (the right to make Adaptations) would be
-    deemed to be a distortion, mutilation, modification or other derogatory
-    action prejudicial to the Original Author's honor and reputation, the
-    Licensor will waive or not assert, as appropriate, this Section, to the
-    fullest extent permitted by the applicable national law, to enable You to
-    reasonably exercise Your right under Section 3(b) of this License (right to
-    make Adaptations) but not otherwise.
-
-5. Representations, Warranties and Disclaimer
-
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
-THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
-CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
-WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A
-PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
-ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
-SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH
-EXCLUSION MAY NOT APPLY TO YOU.
-
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN
-NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
-INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
-LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. Termination
-
- a. This License and the rights granted hereunder will terminate automatically
-    upon any breach by You of the terms of this License. Individuals or
-    entities who have received Adaptations or Collections from You under this
-    License, however, will not have their licenses terminated provided such
-    individuals or entities remain in full compliance with those licenses.
-    Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
- b. Subject to the above terms and conditions, the license granted here is
-    perpetual (for the duration of the applicable copyright in the Work).
-    Notwithstanding the above, Licensor reserves the right to release the Work
-    under different license terms or to stop distributing the Work at any time;
-    provided, however that any such election will not serve to withdraw this
-    License (or any other license that has been, or is required to be, granted
-    under the terms of this License), and this License will continue in full
-    force and effect unless terminated as stated above.
-
-8. Miscellaneous
-
- a. Each time You Distribute or Publicly Perform the Work or a Collection, the
-    Licensor offers to the recipient a license to the Work on the same terms
-    and conditions as the license granted to You under this License.
- b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers
-    to the recipient a license to the original Work on the same terms and
-    conditions as the license granted to You under this License.
- c. If any provision of this License is invalid or unenforceable under
-    applicable law, it shall not affect the validity or enforceability of the
-    remainder of the terms of this License, and without further action by the
-    parties to this agreement, such provision shall be reformed to the minimum
-    extent necessary to make such provision valid and enforceable.
- d. No term or provision of this License shall be deemed waived and no breach
-    consented to unless such waiver or consent shall be in writing and signed
-    by the party to be charged with such waiver or consent.
- e. This License constitutes the entire agreement between the parties with
-    respect to the Work licensed here. There are no understandings, agreements
-    or representations with respect to the Work not specified here. Licensor
-    shall not be bound by any additional provisions that may appear in any
-    communication from You. This License may not be modified without the mutual
-    written agreement of the Licensor and You.
- f. The rights granted under, and the subject matter referenced, in this
-    License were drafted utilizing the terminology of the Berne Convention for
-    the Protection of Literary and Artistic Works (as amended on September 28,
-    1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the
-    WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright
-    Convention (as revised on July 24, 1971). These rights and subject matter
-    take effect in the relevant jurisdiction in which the License terms are
-    sought to be enforced according to the corresponding provisions of the
-    implementation of those treaty provisions in the applicable national law.
-    If the standard suite of rights granted under applicable copyright law
-    includes additional rights not granted under this License, such additional
-    rights are deemed to be included in the License; this License is not
-    intended to restrict the license of any rights under applicable law.
-
-    Creative Commons Notice
-
-    Creative Commons is not a party to this License, and makes no warranty
-    whatsoever in connection with the Work. Creative Commons will not be liable
-    to You or any party on any legal theory for any damages whatsoever,
-    including without limitation any general, special, incidental or
-    consequential damages arising in connection to this license.
-    Notwithstanding the foregoing two (2) sentences, if Creative Commons has
-    expressly identified itself as the Licensor hereunder, it shall have all
-    rights and obligations of Licensor.
-
-    Except for the limited purpose of indicating to the public that the Work is
-    licensed under the CCPL, Creative Commons does not authorize the use by
-    either party of the trademark "Creative Commons" or any related trademark
-    or logo of Creative Commons without the prior written consent of Creative
-    Commons. Any permitted use will be in compliance with Creative Commons'
-    then-current trademark usage guidelines, as may be published on its website
-    or otherwise made available upon request from time to time. For the
-    avoidance of doubt, this trademark restriction does not form part of the
-    License.
-
-    Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/Login.qml b/x11-themes/redcore-theme-sddm/files/redcore/Login.qml
new file mode 100644
index 00000000..7234917f
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/Main.qml b/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
index 4757e0cd..986bc3d7 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
+++ b/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
@@ -1,275 +1,481 @@
-/***************************************************************************
-* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
-*
-* 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.
-*
-***************************************************************************/
-
-import QtQuick 2.0
-import SddmComponents 2.0
-
-Rectangle {
-    id: container
-    width: 640
-    height: 480
-
-    LayoutMirroring.enabled: Qt.locale().textDirection == Qt.RightToLeft
+/*
+ *   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
 
-    TextConstants { id: textConstants }
-
-    Connections {
-        target: sddm
-
-        onLoginSucceeded: {
-            errorMessage.color = "steelblue"
-            errorMessage.text = textConstants.loginSucceeded
-        }
-
-        onLoginFailed: {
-            password.text = ""
-            errorMessage.color = "red"
-            errorMessage.text = textConstants.loginFailed
-        }
+    PlasmaCore.DataSource {
+        id: keystateSource
+        engine: "keystate"
+        connectedSources: "Caps Lock"
     }
 
-    Background {
+    Item {
+        id: wallpaper
         anchors.fill: parent
-        source: config.background
-        fillMode: Image.PreserveAspectCrop
-        onStatusChanged: {
-            if (status == Image.Error && source != config.defaultBackground) {
-                source = config.defaultBackground
+        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
             }
         }
     }
 
-    Rectangle {
+    MouseArea {
+        id: loginScreenRoot
         anchors.fill: parent
-        color: "transparent"
-        //visible: primaryScreen
 
-        Clock {
-            id: clock
-            anchors.margins: 5
-            anchors.top: parent.top; anchors.right: parent.right
+        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();
+            }
+        }
 
-            color: "white"
-            timeFont.family: "Oxygen"
+        Keys.onPressed: {
+            uiVisible = true;
+            event.accepted = false;
         }
 
-        Image {
-            id: rectangle
-            anchors.centerIn: parent
-            width: Math.max(320, mainColumn.implicitWidth + 50)
-            height: Math.max(320, mainColumn.implicitHeight + 50)
-
-            source: "rectangle.png"
-
-            Column {
-                id: mainColumn
-                anchors.centerIn: parent
-                spacing: 12
-                Text {
-                    anchors.horizontalCenter: parent.horizontalCenter
-                    color: "black"
-                    verticalAlignment: Text.AlignVCenter
-                    height: text.implicitHeight
-                    width: parent.width
-                    text: textConstants.welcomeText.arg(sddm.hostName)
-                    wrapMode: Text.WordWrap
-                    font.pixelSize: 24
-                    elide: Text.ElideRight
-                    horizontalAlignment: Text.AlignHCenter
+        //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
+        }
 
-                Column {
-                    width: parent.width
-                    spacing: 4
-                    Text {
-                        id: lblName
-                        width: parent.width
-                        text: textConstants.userName
-                        font.bold: true
-                        font.pixelSize: 12
-                    }
+        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
+        }
 
-                    TextBox {
-                        id: name
-                        width: parent.width; height: 30
-                        text: userModel.lastUser
-                        font.pixelSize: 14
 
-                        KeyNavigation.backtab: rebootButton; KeyNavigation.tab: password
+        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()
+            }
 
-                        Keys.onPressed: {
-                            if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
-                                sddm.login(name.text, password.text, session.index)
-                                event.accepted = true
-                            }
-                        }
-                    }
-                }
+            initialItem: Login {
+            id: userListComponent
+            userListModel: userModel
+            userListCurrentIndex: userModel.lastIndex >= 0 ? userModel.lastIndex : 0
+            lastUserName: userModel.lastUser
+            
+            usernameFontSize: root.generalFontSize
+            usernameFontColor: root.generalFontColor
 
-                Column {
-                    width: parent.width
-                    spacing : 4
-                    Text {
-                        id: lblPassword
-                        width: parent.width
-                        text: textConstants.password
-                        font.bold: true
-                        font.pixelSize: 12
-                    }
+            showUserList: {
+                if ( !userListModel.hasOwnProperty("count")
+                || !userListModel.hasOwnProperty("disableAvatarsThreshold"))
+                    return (userList.y + mainStack.y) > 0
 
-                    PasswordBox {
-                        id: password
-                        width: parent.width; height: 30
-                        font.pixelSize: 14
+                if ( userListModel.count == 0 ) return false
 
-                        KeyNavigation.backtab: name; KeyNavigation.tab: session
+                return userListModel.count <= userListModel.disableAvatarsThreshold && (userList.y + mainStack.y) > 0
+            }
 
-                        Keys.onPressed: {
-                            if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
-                                sddm.login(name.text, password.text, session.index)
-                                event.accepted = true
-                            }
-                        }
+            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
+            }
 
-                Row {
-                    spacing: 4
-                    width: parent.width / 2
-                    z: 100
-
-                    Column {
-                        z: 100
-                        width: parent.width * 1.3
-                        spacing : 4
-                        anchors.bottom: parent.bottom
-
-                        Text {
-                            id: lblSession
-                            width: parent.width
-                            text: textConstants.session
-                            wrapMode: TextEdit.WordWrap
-                            font.bold: true
-                            font.pixelSize: 12
-                        }
+                actionItems: [
+                    ActionButton {
+                        iconSource: "/usr/share/sddm/themes/Orchis/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/Orchis/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/Orchis/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/Orchis/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)
+                }
+            }
 
-                        ComboBox {
-                            id: session
-                            width: parent.width; height: 30
-                            font.pixelSize: 14
+            Behavior on opacity {
+                OpacityAnimator {
+                    duration: units.longDuration
+                }
+            }
+        }
 
-                            arrowIcon: "angle-down.png"
+        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
+            }
 
-                            model: sessionModel
-                            index: sessionModel.lastIndex
+            function showHide() {
+                state = state == "hidden" ? "visible" : "hidden";
+            }
 
-                            KeyNavigation.backtab: password; KeyNavigation.tab: layoutBox
+            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
+                            }
                         }
                     }
-
-                    Column {
-                        z: 101
-                        width: parent.width * 0.7
-                        spacing : 4
-                        anchors.bottom: parent.bottom
-
-                        Text {
-                            id: lblLayout
-                            width: parent.width
-                            text: textConstants.layout
-                            wrapMode: TextEdit.WordWrap
-                            font.bold: true
-                            font.pixelSize: 12
+                },
+                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
+                            }
                         }
-
-                        LayoutBox {
-                            id: layoutBox
-                            width: parent.width; height: 30
-                            font.pixelSize: 14
-
-                            arrowIcon: "angle-down.png"
-
-                            KeyNavigation.backtab: session; KeyNavigation.tab: loginButton
+                        ScriptAction {
+                            script: {
+                                Qt.inputMethod.hide();
+                            }
                         }
                     }
                 }
+            ]
+        }
+
 
-                Column {
-                    width: parent.width
-                    Text {
-                        id: errorMessage
-                        anchors.horizontalCenter: parent.horizontalCenter
-                        text: textConstants.prompt
-                        font.pixelSize: 10
+        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"));
                     }
                 }
 
-                Row {
-                    spacing: 4
-                    anchors.horizontalCenter: parent.horizontalCenter
-                    property int btnWidth: Math.max(loginButton.implicitWidth,
-                                                    shutdownButton.implicitWidth,
-                                                    rebootButton.implicitWidth, 80) + 8
-                    Button {
-                        id: loginButton
-                        text: textConstants.login
-                        width: parent.btnWidth
-
-                        onClicked: sddm.login(name.text, password.text, session.index)
+                onLoginRequest: {
+                    root.notificationMessage = ""
+                    sddm.login(username, password, sessionButton.currentIndex)
+                }
 
-                        KeyNavigation.backtab: layoutBox; KeyNavigation.tab: shutdownButton
+                actionItems: [
+                    ActionButton {
+                        iconSource: "/usr/share/sddm/themes/Orchis/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/Orchis/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/Orchis/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/Orchis/assets/switch_primary.svgz"
+                        text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","List Users")
+                        onClicked: mainStack.pop()
+                        visible: !inputPanel.keyboardActive
                     }
+                ]
+            }
+        }
 
-                    Button {
-                        id: shutdownButton
-                        text: textConstants.shutdown
-                        width: parent.btnWidth
+        //Footer
+        RowLayout {
+            id: footer
+            anchors {
+                bottom: parent.bottom
+                left: parent.left
+                right: parent.right
+                margins: units.smallSpacing
+            }
 
-                        onClicked: sddm.powerOff()
+            Behavior on opacity {
+                OpacityAnimator {
+                    duration: units.longDuration
+                }
+            }
 
-                        KeyNavigation.backtab: loginButton; KeyNavigation.tab: rebootButton
-                    }
+            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
+            }
 
-                    Button {
-                        id: rebootButton
-                        text: textConstants.reboot
-                        width: parent.btnWidth
+            KeyboardButton {
+            }
 
-                        onClicked: sddm.reboot()
+            SessionButton {
+                id: sessionButton
+            }
 
-                        KeyNavigation.backtab: shutdownButton; KeyNavigation.tab: name
-                    }
-                }
+            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();
         }
     }
 
-    Component.onCompleted: {
-        if (name.text == "")
-            name.focus = true
-        else
-            password.focus = true
+    Timer {
+        id: notificationResetTimer
+        interval: 3000
+        onTriggered: notificationMessage = ""
     }
 }
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/README b/x11-themes/redcore-theme-sddm/files/redcore/README
deleted file mode 100644
index 56dfea3c..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/README
+++ /dev/null
@@ -1 +0,0 @@
-This theme is based on SDDM Maldives theme, which is included by default in SDDM package.
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml
new file mode 100644
index 00000000..58590c83
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/angle-down.png b/x11-themes/redcore-theme-sddm/files/redcore/angle-down.png
deleted file mode 100644
index 4e9aeb02..00000000
Binary files a/x11-themes/redcore-theme-sddm/files/redcore/angle-down.png and /dev/null differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz
new file mode 100644
index 00000000..a1b005b6
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz
new file mode 100644
index 00000000..fd83ef02
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz
new file mode 100644
index 00000000..e749f9b3
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz
new file mode 100644
index 00000000..03592da9
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz
new file mode 100644
index 00000000..6bbf63c9
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz
new file mode 100644
index 00000000..5f344258
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/background.jpg b/x11-themes/redcore-theme-sddm/files/redcore/background.jpg
new file mode 100644
index 00000000..a550bf7c
Binary files /dev/null and b/x11-themes/redcore-theme-sddm/files/redcore/background.jpg differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml
new file mode 100644
index 00000000..9fbd2a8a
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/Battery.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml
new file mode 100644
index 00000000..2351c4de
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/Clock.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml
new file mode 100644
index 00000000..6e26055c
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml
new file mode 100644
index 00000000..32edb528
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/SessionManagementScreen.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml
new file mode 100644
index 00000000..5f882604
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/UserDelegate.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml
new file mode 100644
index 00000000..960315df
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/UserList.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml
new file mode 100644
index 00000000..a2d85088
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/VirtualKeyboard.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml
new file mode 100644
index 00000000..7848b753
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/components/WallpaperFader.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml
new file mode 100644
index 00000000..31dfe007
--- /dev/null
+++ b/x11-themes/redcore-theme-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-theme-sddm/files/redcore/metadata.desktop b/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
index de2d7e1e..26e37838 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
+++ b/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
@@ -1,15 +1,16 @@
 [SddmGreeterTheme]
 Name=Redcore
-Description=Redcore Theme
-Author=Ghiunhan Mamut
-Copyright=(c) 2017, Ghiunhan Mamut
+Description=ChromeOS Theme
+Author=Vince Liuice
+Copyright=(c) 2020, Vince Liuice
 License=CC-BY-SA
 Type=sddm-theme
-Version=0.1
-Website=https://redcorelinux.org
+Version=0.1.0
+Website=https://github.com/vinceliuice/Orchis-kde
+Screenshot=preview.png
 MainScript=Main.qml
 ConfigFile=theme.conf
 TranslationsDirectory=translations
-Email=venerix@redcorelinux.org
-Theme-Id=redcore
-Theme-API=${COMPONENTS_VERSION}
+Email=vinceliuice@hotmail.com
+Theme-Id=Orchis
+Theme-API=2.0
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png b/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png
deleted file mode 100644
index 791b26c9..00000000
Binary files a/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png and /dev/null differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/redcore.png b/x11-themes/redcore-theme-sddm/files/redcore/redcore.png
deleted file mode 100644
index 9eb8b888..00000000
Binary files a/x11-themes/redcore-theme-sddm/files/redcore/redcore.png and /dev/null differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
index 4e884605..53dfe0ad 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
+++ b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
@@ -1,2 +1,5 @@
 [General]
-background=redcore.png
+type=image
+color=#520A0A
+fontSize=10
+background=background.jpg
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user
new file mode 100644
index 00000000..68c66429
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user
@@ -0,0 +1,2 @@
+[General]
+type=image
diff --git a/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r1.ebuild b/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r1.ebuild
deleted file mode 100644
index e79d5853..00000000
--- a/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r1.ebuild
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: $
-
-EAPI=5
-
-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}/*
-}
diff --git a/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r2.ebuild b/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r2.ebuild
new file mode 100644
index 00000000..e79d5853
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/redcore-theme-sddm-314-r2.ebuild
@@ -0,0 +1,22 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=5
+
+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}/*
+}
-- 
cgit v1.2.3