Fully working lock screen widget

This commit is contained in:
Hariharan Mudaliar 2026-01-16 00:48:02 +05:30
commit 1d6946134c
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E
4 changed files with 235 additions and 20 deletions

View file

@ -244,7 +244,7 @@ private final class ExtensionLockScreenWidgetWindowPool {
private func frame(for descriptor: AtollLockScreenWidgetDescriptor, on screen: NSScreen) -> NSRect {
let size = descriptor.size
let safeInsets = NSEdgeInsets(top: 140, left: 48, bottom: 100, right: 48)
let safeInsets = safeInsets(for: descriptor.position.clampMode)
let screenFrame = screen.frame
let minX = screenFrame.minX + safeInsets.left
@ -271,6 +271,17 @@ private final class ExtensionLockScreenWidgetWindowPool {
return NSRect(x: originX, y: originY, width: size.width, height: size.height)
}
private func safeInsets(for clampMode: AtollWidgetPosition.ClampMode) -> NSEdgeInsets {
switch clampMode {
case .safeRegion:
return NSEdgeInsets(top: 140, left: 48, bottom: 100, right: 48)
case .relaxed:
return NSEdgeInsets(top: 96, left: 24, bottom: 72, right: 24)
case .unconstrained:
return NSEdgeInsets(top: 16, left: 0, bottom: 32, right: 0)
}
}
private func clamp(_ value: CGFloat, lower: CGFloat, upper: CGFloat) -> CGFloat {
guard lower <= upper else { return value }
return min(max(value, lower), upper)