Skip to content

Instantly share code, notes, and snippets.

@zats
Last active March 28, 2025 13:09
Show Gist options
  • Select an option

  • Save zats/233d63b8e7845f62c7c200a359b3c076 to your computer and use it in GitHub Desktop.

Select an option

Save zats/233d63b8e7845f62c7c200a359b3c076 to your computer and use it in GitHub Desktop.

Revisions

  1. zats revised this gist Mar 28, 2025. 1 changed file with 25 additions and 10 deletions.
    35 changes: 25 additions & 10 deletions DockPosition.swift
    Original file line number Diff line number Diff line change
    @@ -1,29 +1,44 @@
    import AppKit

    struct DockInfo {
    let position: DockPosition
    let frame: CGRect
    }

    enum DockPosition {
    case bottom(NSScreen)
    case left(NSScreen)
    case right(NSScreen)
    case bottom
    case left
    case right
    case hiddenOrUnknown
    }

    func detectDockPosition() -> DockPosition {
    func detectDockInfo() -> DockInfo? {
    for screen in NSScreen.screens {
    let visible = screen.visibleFrame
    let full = screen.frame
    let visible = screen.visibleFrame

    let deltaLeft = visible.minX - full.minX
    let deltaBottom = visible.minY - full.minY
    let deltaRight = full.maxX - visible.maxX
    let deltaTop = full.maxY - visible.maxY // menu bar

    // Top delta is menu bar, ignore
    // Assume menu bar is always at top, subtract that first
    let menuBarHeight = deltaTop

    if deltaBottom > 0 {
    return .bottom(screen)
    let height = deltaBottom
    let frame = CGRect(x: full.minX, y: full.minY, width: full.width, height: height)
    return DockInfo(position: .bottom, frame: frame)
    } else if deltaLeft > 0 {
    return .left(screen)
    let width = deltaLeft
    let frame = CGRect(x: full.minX, y: full.minY, width: width, height: full.height - menuBarHeight)
    return DockInfo(position: .left, frame: frame)
    } else if deltaRight > 0 {
    return .right(screen)
    let width = deltaRight
    let frame = CGRect(x: full.maxX - width, y: full.minY, width: width, height: full.height - menuBarHeight)
    return DockInfo(position: .right, frame: frame)
    }
    }

    return .hiddenOrUnknown
    return nil
    }
  2. zats renamed this gist Mar 28, 2025. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. zats created this gist Mar 28, 2025.
    29 changes: 29 additions & 0 deletions San
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    enum DockPosition {
    case bottom(NSScreen)
    case left(NSScreen)
    case right(NSScreen)
    case hiddenOrUnknown
    }

    func detectDockPosition() -> DockPosition {
    for screen in NSScreen.screens {
    let visible = screen.visibleFrame
    let full = screen.frame

    let deltaLeft = visible.minX - full.minX
    let deltaBottom = visible.minY - full.minY
    let deltaRight = full.maxX - visible.maxX

    // Top delta is menu bar, ignore

    if deltaBottom > 0 {
    return .bottom(screen)
    } else if deltaLeft > 0 {
    return .left(screen)
    } else if deltaRight > 0 {
    return .right(screen)
    }
    }

    return .hiddenOrUnknown
    }