112 lines
3.1 KiB
QML
112 lines
3.1 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Caelestia.Config
|
|
import qs.components
|
|
import qs.components.controls
|
|
import qs.services
|
|
|
|
StyledRect {
|
|
id: root
|
|
|
|
required property int centerWidth
|
|
required property var lock
|
|
|
|
implicitWidth: centerWidth * 0.8
|
|
implicitHeight: input.implicitHeight + Tokens.padding.small
|
|
|
|
color: Colours.tPalette.m3surfaceContainer
|
|
radius: Tokens.rounding.full
|
|
|
|
focus: true
|
|
onActiveFocusChanged: {
|
|
if (!activeFocus)
|
|
forceActiveFocus();
|
|
}
|
|
|
|
Keys.onPressed: event => {
|
|
if (root.lock.unlocking)
|
|
return;
|
|
|
|
if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return)
|
|
inputField.placeholder.animate = false;
|
|
|
|
root.lock.pam.handleKey(event);
|
|
}
|
|
|
|
StateLayer {
|
|
hoverEnabled: false
|
|
cursorShape: Qt.IBeamCursor
|
|
onClicked: parent.forceActiveFocus()
|
|
}
|
|
|
|
RowLayout {
|
|
id: input
|
|
|
|
anchors.fill: parent
|
|
anchors.margins: Tokens.padding.extraSmall
|
|
spacing: Tokens.spacing.medium
|
|
|
|
Item {
|
|
implicitWidth: implicitHeight
|
|
implicitHeight: fprintIcon.implicitHeight + Tokens.padding.small
|
|
|
|
MaterialIcon {
|
|
id: fprintIcon
|
|
|
|
anchors.centerIn: parent
|
|
animate: true
|
|
text: {
|
|
if (root.lock.pam.fprint.tries >= GlobalConfig.lock.maxFprintTries)
|
|
return "fingerprint_off";
|
|
if (root.lock.pam.fprint.active)
|
|
return "fingerprint";
|
|
return "lock";
|
|
}
|
|
color: root.lock.pam.fprint.tries >= GlobalConfig.lock.maxFprintTries ? Colours.palette.m3error : Colours.palette.m3onSurface
|
|
opacity: root.lock.pam.passwd.active ? 0 : 1
|
|
|
|
Behavior on opacity {
|
|
Anim {
|
|
type: Anim.DefaultEffects
|
|
}
|
|
}
|
|
}
|
|
|
|
CircularIndicator {
|
|
anchors.fill: parent
|
|
running: root.lock.pam.passwd.active
|
|
}
|
|
}
|
|
|
|
InputField {
|
|
id: inputField
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
pam: root.lock.pam
|
|
}
|
|
|
|
StyledRect {
|
|
implicitWidth: implicitHeight
|
|
implicitHeight: enterIcon.implicitHeight + Tokens.padding.small
|
|
|
|
color: root.lock.pam.buffer ? Colours.palette.m3primary : Colours.layer(Colours.palette.m3surfaceContainerHigh, 2)
|
|
radius: Tokens.rounding.full
|
|
|
|
StateLayer {
|
|
color: root.lock.pam.buffer ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface
|
|
onClicked: root.lock.pam.passwd.start()
|
|
}
|
|
|
|
MaterialIcon {
|
|
id: enterIcon
|
|
|
|
anchors.centerIn: parent
|
|
text: "arrow_forward"
|
|
color: root.lock.pam.buffer ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface
|
|
fontStyle: Tokens.font.icon.size(Tokens.font.icon.large.pointSize).weight(Font.Medium).build()
|
|
}
|
|
}
|
|
}
|
|
}
|