Compare commits
7 Commits
c25286801a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f4da4d479e | |||
| 1c97d6166d | |||
| a596dce33e | |||
| 6a270c0450 | |||
| 367f00e1f1 | |||
| dbb1bf55c9 | |||
| 391bd7dc16 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
wallpaper
|
||||||
@@ -13,6 +13,7 @@ PanelWindow {
|
|||||||
left: true
|
left: true
|
||||||
bottom: true
|
bottom: true
|
||||||
}
|
}
|
||||||
|
WlrLayershell.namespace: "mcsr"
|
||||||
implicitHeight: 540
|
implicitHeight: 540
|
||||||
implicitWidth: 540
|
implicitWidth: 540
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
@@ -42,6 +43,8 @@ PanelWindow {
|
|||||||
radius: 12
|
radius: 12
|
||||||
Item {
|
Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
layer.enabled: true
|
||||||
|
layer.smooth: false
|
||||||
ScreencopyView {
|
ScreencopyView {
|
||||||
width: Quickshell.screens[0].width
|
width: Quickshell.screens[0].width
|
||||||
height: Quickshell.screens[0].height
|
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
35
Lock.qml
35
Lock.qml
@@ -11,6 +11,10 @@ WlSessionLock {
|
|||||||
id: lock
|
id: lock
|
||||||
locked: false
|
locked: false
|
||||||
required property bool animate
|
required property bool animate
|
||||||
|
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 {
|
WlSessionLockSurface {
|
||||||
id: surface
|
id: surface
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
@@ -32,19 +36,34 @@ WlSessionLock {
|
|||||||
color: "#222222"
|
color: "#222222"
|
||||||
TextInput {
|
TextInput {
|
||||||
id: input
|
id: input
|
||||||
x: (parent.width - this.width)/2
|
anchors.fill: parent
|
||||||
Behavior on x { NumberAnimation {
|
|
||||||
duration: 300
|
|
||||||
easing.type: Easing.OutQuint
|
|
||||||
}}
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
focus: true
|
focus: true
|
||||||
color: "white"
|
color: "white"
|
||||||
font.pixelSize: 20
|
font.pixelSize: 20
|
||||||
echoMode: TextInput.Password
|
echoMode: TextInput.NoEcho
|
||||||
cursorDelegate: Item {}
|
cursorDelegate: Item {}
|
||||||
Keys.onReturnPressed: pam.start()
|
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 {
|
Text {
|
||||||
anchors {
|
anchors {
|
||||||
horizontalCenter: parent.horizontalCenter
|
horizontalCenter: parent.horizontalCenter
|
||||||
@@ -60,7 +79,7 @@ WlSessionLock {
|
|||||||
ClippingRectangle {
|
ClippingRectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: "white"
|
color: "white"
|
||||||
opacity: lock.animate
|
opacity: capture.ready
|
||||||
radius: 0
|
radius: 0
|
||||||
RectangularShadow {
|
RectangularShadow {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ Item {
|
|||||||
if (input.text.length === 0 || input.text === ":") {
|
if (input.text.length === 0 || input.text === ":") {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
const searchEmojis = (input.text[0] === ':')
|
const searchEmojis = (input.text[0] === ':' || input.text[0] === ';')
|
||||||
const items = searchEmojis
|
const items = searchEmojis
|
||||||
? Emojis.emojis.emojis
|
? Emojis.emojis
|
||||||
: Array.from(DesktopEntries.applications.values)
|
: Array.from(DesktopEntries.applications.values)
|
||||||
for (let item of items) {
|
for (let item of items) {
|
||||||
item.searchPos = item.name.toLowerCase().search(input.text.slice(searchEmojis))
|
item.searchPos = item.name.toLowerCase().search(input.text.slice(searchEmojis))
|
||||||
|
|||||||
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
38
Wall.qml
38
Wall.qml
@@ -1,4 +1,5 @@
|
|||||||
import Quickshell
|
import Quickshell
|
||||||
|
import Quickshell.Wayland
|
||||||
import Quickshell.Widgets
|
import Quickshell.Widgets
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
import QtQuick
|
import QtQuick
|
||||||
@@ -14,15 +15,50 @@ Variants {
|
|||||||
bottom: true
|
bottom: true
|
||||||
left: true
|
left: true
|
||||||
}
|
}
|
||||||
|
WlrLayershell.namespace: "monowall"
|
||||||
exclusionMode: ExclusionMode.Ignore
|
exclusionMode: ExclusionMode.Ignore
|
||||||
aboveWindows: false
|
aboveWindows: false
|
||||||
property var modelData
|
property var modelData
|
||||||
screen: modelData
|
screen: modelData
|
||||||
color: "#111"
|
color: "#000"
|
||||||
|
ClippingRectangle {
|
||||||
|
anchors.fill: parent
|
||||||
Image {
|
Image {
|
||||||
source: Quickshell.shellPath("wallpaper")
|
source: Quickshell.shellPath("wallpaper")
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
fillMode: Image.PreserveAspectCrop
|
fillMode: Image.PreserveAspectCrop
|
||||||
}
|
}
|
||||||
|
radius: 40
|
||||||
|
PropertyAnimation on radius {
|
||||||
|
id: radiusAnimation
|
||||||
|
running: false
|
||||||
|
to: 16
|
||||||
|
duration: 1000
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
46749
emojis.mjs
46749
emojis.mjs
File diff suppressed because it is too large
Load Diff
19
shell.qml
19
shell.qml
@@ -9,12 +9,16 @@ ShellRoot {
|
|||||||
id: notifServer
|
id: notifServer
|
||||||
onNotification: (notif) => notif.tracked = true
|
onNotification: (notif) => notif.tracked = true
|
||||||
}
|
}
|
||||||
// Shell.Wall {}
|
Shell.Wall {}
|
||||||
Shell.TopBar {id: bar}
|
Shell.TopBar {id: bar}
|
||||||
Shell.Boateye {}
|
Shell.Boateye {}
|
||||||
Shell.Lock {
|
Shell.Thin {}
|
||||||
id: lock
|
Shell.Lock {id: lock}
|
||||||
animate: true
|
IpcHandler {
|
||||||
|
target: "lock"
|
||||||
|
function instalock() {lock.instalock()}
|
||||||
|
function open() {lock.open()}
|
||||||
|
function close() {lock.close()}
|
||||||
}
|
}
|
||||||
PanelWindow {
|
PanelWindow {
|
||||||
anchors {
|
anchors {
|
||||||
@@ -26,10 +30,5 @@ ShellRoot {
|
|||||||
implicitWidth: 800
|
implicitWidth: 800
|
||||||
HoverHandler {onHoveredChanged: {if (hovered) bar.open() }}
|
HoverHandler {onHoveredChanged: {if (hovered) bar.open() }}
|
||||||
}
|
}
|
||||||
IpcHandler {
|
Shell.Corners { }
|
||||||
target: "lock"
|
|
||||||
function instalock() {lock.animate = false; lock.locked = true}
|
|
||||||
function open() {lock.animate = true; lock.locked = true}
|
|
||||||
function close() {lock.locked = false}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user