Compare commits
5 Commits
dbb1bf55c9
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f4da4d479e | |||
| 1c97d6166d | |||
| a596dce33e | |||
| 6a270c0450 | |||
| 367f00e1f1 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
wallpaper
|
||||
@@ -13,6 +13,7 @@ PanelWindow {
|
||||
left: true
|
||||
bottom: true
|
||||
}
|
||||
WlrLayershell.namespace: "mcsr"
|
||||
implicitHeight: 540
|
||||
implicitWidth: 540
|
||||
color: "transparent"
|
||||
@@ -42,6 +43,8 @@ PanelWindow {
|
||||
radius: 12
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
layer.enabled: true
|
||||
layer.smooth: false
|
||||
ScreencopyView {
|
||||
width: Quickshell.screens[0].width
|
||||
height: Quickshell.screens[0].height
|
||||
|
||||
44
Corners.qml
Normal file
44
Corners.qml
Normal file
@@ -0,0 +1,44 @@
|
||||
import QtQuick
|
||||
import Quickshell.Hyprland
|
||||
import './Widgets' as Widgets
|
||||
|
||||
Item {
|
||||
id: corners
|
||||
readonly property real radius: 12
|
||||
Widgets.Corner {
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
}
|
||||
radius: corners.radius
|
||||
angle: 0
|
||||
fillColor: "black"
|
||||
}
|
||||
Widgets.Corner {
|
||||
anchors {
|
||||
bottom: true
|
||||
left: true
|
||||
}
|
||||
radius: corners.radius
|
||||
angle: 90
|
||||
fillColor: "black"
|
||||
}
|
||||
Widgets.Corner {
|
||||
anchors {
|
||||
bottom: true
|
||||
right: true
|
||||
}
|
||||
radius: corners.radius
|
||||
angle: 180
|
||||
fillColor: "black"
|
||||
}
|
||||
Widgets.Corner {
|
||||
anchors {
|
||||
top: true
|
||||
right: true
|
||||
}
|
||||
radius: corners.radius
|
||||
angle: 270
|
||||
fillColor: "black"
|
||||
}
|
||||
}
|
||||
32
Lock.qml
32
Lock.qml
@@ -14,6 +14,7 @@ WlSessionLock {
|
||||
function instalock() {lock.animate = false; lock.locked = true}
|
||||
function open() {lock.animate = true; lock.locked = true}
|
||||
function close() {lock.locked = false}
|
||||
property var clock: SystemClock {}
|
||||
WlSessionLockSurface {
|
||||
id: surface
|
||||
color: "transparent"
|
||||
@@ -35,19 +36,34 @@ WlSessionLock {
|
||||
color: "#222222"
|
||||
TextInput {
|
||||
id: input
|
||||
x: (parent.width - this.width)/2
|
||||
Behavior on x { NumberAnimation {
|
||||
duration: 300
|
||||
easing.type: Easing.OutQuint
|
||||
}}
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
color: "white"
|
||||
font.pixelSize: 20
|
||||
echoMode: TextInput.Password
|
||||
echoMode: TextInput.NoEcho
|
||||
cursorDelegate: Item {}
|
||||
Keys.onReturnPressed: pam.start()
|
||||
}
|
||||
Row {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
x: (parent.width - this.width)/2
|
||||
spacing: 4
|
||||
Repeater {
|
||||
model: input.text.length
|
||||
Rectangle {
|
||||
width: 8
|
||||
height: width
|
||||
radius: width/2
|
||||
color: "white"
|
||||
}
|
||||
}
|
||||
Behavior on x {
|
||||
NumberAnimation {
|
||||
duration: 300
|
||||
easing.type: Easing.OutQuint
|
||||
}
|
||||
}
|
||||
}
|
||||
Text {
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
@@ -63,7 +79,7 @@ WlSessionLock {
|
||||
ClippingRectangle {
|
||||
anchors.fill: parent
|
||||
color: "white"
|
||||
opacity: !lock.animate || capture.ready
|
||||
opacity: capture.ready
|
||||
radius: 0
|
||||
RectangularShadow {
|
||||
anchors.fill: parent
|
||||
|
||||
137
Thin.qml
Normal file
137
Thin.qml
Normal file
@@ -0,0 +1,137 @@
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Widgets
|
||||
import Quickshell.Io
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
|
||||
Item {
|
||||
id: thin
|
||||
property bool open: false
|
||||
property real pos: 0
|
||||
PropertyAnimation on pos {
|
||||
id: entry
|
||||
running: false
|
||||
to: 1
|
||||
duration: 400
|
||||
easing.type: Easing.OutQuint
|
||||
}
|
||||
PropertyAnimation on pos {
|
||||
id: exit
|
||||
running: false
|
||||
to: 0
|
||||
duration: 350
|
||||
easing.type: Easing.OutQuint
|
||||
onFinished: thin.open = false
|
||||
}
|
||||
IpcHandler {
|
||||
target: "thin"
|
||||
function open() {
|
||||
thin.open = true
|
||||
exit.stop()
|
||||
entry.start()
|
||||
}
|
||||
function close() {
|
||||
entry.stop()
|
||||
exit.start()
|
||||
}
|
||||
}
|
||||
PanelWindow {
|
||||
visible: thin.open
|
||||
anchors {
|
||||
right: true
|
||||
bottom: true
|
||||
}
|
||||
implicitHeight: 430
|
||||
implicitWidth: 1080
|
||||
color: "transparent"
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
|
||||
RectangularShadow {
|
||||
anchors.fill: pie_wrapper
|
||||
radius: pie_wrapper.radius
|
||||
blur: 10
|
||||
spread: 2
|
||||
}
|
||||
ClippingRectangle {
|
||||
id: pie_wrapper
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
margins: 12
|
||||
leftMargin: 1080 * (1 - thin.pos) + 12
|
||||
}
|
||||
width: 210
|
||||
height: 210
|
||||
color: "white"
|
||||
radius: 12
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
layer.enabled: true
|
||||
layer.smooth: false
|
||||
ScreencopyView {
|
||||
width: Quickshell.screens[0].width
|
||||
height: Quickshell.screens[0].height
|
||||
live: true
|
||||
captureSource: Quickshell.screens[0]
|
||||
x: -1386
|
||||
y: -1208
|
||||
}
|
||||
transform: Scale {
|
||||
origin: {x: 0; y: 0}
|
||||
xScale: 6
|
||||
yScale: xScale
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
PanelWindow {
|
||||
visible: thin.open
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
}
|
||||
implicitWidth: 1080
|
||||
implicitHeight: 120
|
||||
color: "transparent"
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
RectangularShadow {
|
||||
anchors.fill: e_wrapper
|
||||
radius: e_wrapper.radius
|
||||
blur: 10
|
||||
spread: 2
|
||||
}
|
||||
ClippingRectangle {
|
||||
id: e_wrapper
|
||||
anchors {
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
margins: 12
|
||||
rightMargin: 1080 * (1 - thin.pos) + 12
|
||||
}
|
||||
width: 240
|
||||
height: 48
|
||||
color: "white"
|
||||
radius: 12
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
ScreencopyView {
|
||||
layer.enabled: true
|
||||
layer.smooth: false
|
||||
width: Quickshell.screens[0].width
|
||||
height: Quickshell.screens[0].height
|
||||
live: true
|
||||
captureSource: Quickshell.screens[0]
|
||||
x: -1080
|
||||
y: -47
|
||||
}
|
||||
transform: Scale {
|
||||
origin: {x: 0; y: 0}
|
||||
xScale: 5
|
||||
yScale: xScale
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Wall.qml
33
Wall.qml
@@ -20,7 +20,7 @@ Variants {
|
||||
aboveWindows: false
|
||||
property var modelData
|
||||
screen: modelData
|
||||
color: "#111"
|
||||
color: "#000"
|
||||
ClippingRectangle {
|
||||
anchors.fill: parent
|
||||
Image {
|
||||
@@ -30,10 +30,35 @@ Variants {
|
||||
}
|
||||
radius: 40
|
||||
PropertyAnimation on radius {
|
||||
to: 14
|
||||
duration: 300
|
||||
id: radiusAnimation
|
||||
running: false
|
||||
to: 16
|
||||
duration: 1000
|
||||
}
|
||||
property real intro_progress: 0
|
||||
transform: [
|
||||
Translate {
|
||||
y: 160
|
||||
PropertyAnimation on y {
|
||||
duration: 500
|
||||
to: 0
|
||||
easing.type: Easing.OutCubic
|
||||
onFinished: scaleAnimation.start()
|
||||
}
|
||||
},
|
||||
Scale {
|
||||
origin { x: width/2; y: height/2 }
|
||||
xScale: 0.8
|
||||
yScale: xScale
|
||||
PropertyAnimation on xScale {
|
||||
id: scaleAnimation
|
||||
running: false
|
||||
duration: 1000
|
||||
to: 1
|
||||
easing.type: Easing.InOutCubic
|
||||
onStarted: radiusAnimation.start()
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
52
Widgets/Corner.qml
Normal file
52
Widgets/Corner.qml
Normal file
@@ -0,0 +1,52 @@
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Wayland
|
||||
|
||||
PanelWindow {
|
||||
id: corner
|
||||
required property real radius
|
||||
required property int angle
|
||||
required property color fillColor
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
|
||||
color: "transparent"
|
||||
implicitWidth: corner.radius
|
||||
implicitHeight: corner.radius
|
||||
|
||||
|
||||
function anglePointX(angle) {
|
||||
return (corner.radius * Math.sqrt(2) * 1/2 * Math.sin(angle)) + corner.radius/2
|
||||
}
|
||||
function anglePointY(angle) {
|
||||
return (corner.radius * Math.sqrt(2) * 1/2 * Math.cos(angle)) + corner.radius/2
|
||||
}
|
||||
Shape {
|
||||
anchors.fill: parent
|
||||
preferredRendererType: Shape.CurveRenderer
|
||||
|
||||
ShapePath {
|
||||
fillColor: corner.fillColor
|
||||
strokeColor: "transparent"
|
||||
startX: anglePointX(Math.PI * 5/4 + corner.angle * Math.PI/180)
|
||||
startY: anglePointY(Math.PI * 5/4 + corner.angle * Math.PI/180)
|
||||
PathLine {
|
||||
x: anglePointX(Math.PI * 3/4 + corner.angle * Math.PI/180)
|
||||
y: anglePointY(Math.PI * 3/4 + corner.angle * Math.PI/180)
|
||||
}
|
||||
PathAngleArc {
|
||||
radiusX: corner.radius
|
||||
radiusY: corner.radius
|
||||
startAngle: 270 - corner.angle
|
||||
sweepAngle: -90
|
||||
centerX: anglePointX(Math.PI * 1/4 + corner.angle * Math.PI/180)
|
||||
centerY: anglePointY(Math.PI * 1/4 + corner.angle * Math.PI/180)
|
||||
}
|
||||
PathLine {
|
||||
x: anglePointX(Math.PI * 5/4 + corner.angle * Math.PI/180)
|
||||
y: anglePointY(Math.PI * 5/4 + corner.angle * Math.PI/180)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ ShellRoot {
|
||||
Shell.Wall {}
|
||||
Shell.TopBar {id: bar}
|
||||
Shell.Boateye {}
|
||||
Shell.Thin {}
|
||||
Shell.Lock {id: lock}
|
||||
IpcHandler {
|
||||
target: "lock"
|
||||
@@ -29,4 +30,5 @@ ShellRoot {
|
||||
implicitWidth: 800
|
||||
HoverHandler {onHoveredChanged: {if (hovered) bar.open() }}
|
||||
}
|
||||
Shell.Corners { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user