Initial commit
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
// Capture.swift
|
||||
// GreenshotMac
|
||||
//
|
||||
// Equivalent of Greenshot's ICapture / ICaptureDetails.
|
||||
|
||||
import AppKit
|
||||
|
||||
enum CaptureMode: String {
|
||||
case region
|
||||
case fullscreen
|
||||
case window
|
||||
case lastRegion
|
||||
case importedFile
|
||||
}
|
||||
|
||||
/// Metadata that travels with a capture; used by the filename pattern engine.
|
||||
struct CaptureDetails {
|
||||
var captureMode: CaptureMode = .region
|
||||
var dateTime: Date = Date()
|
||||
/// Title of the captured window, or the screen name for a full screen capture.
|
||||
var title: String = ""
|
||||
/// Bundle identifier of the captured application, when known.
|
||||
var applicationBundleID: String?
|
||||
/// Application name of the captured window, when known.
|
||||
var applicationName: String?
|
||||
/// Screen rectangle the capture was taken from, in global (top-left origin) coordinates.
|
||||
var screenBounds: CGRect = .zero
|
||||
/// Scale factor of the display the capture came from.
|
||||
var scaleFactor: CGFloat = 2.0
|
||||
/// Set once the capture has been written to disk.
|
||||
var filePath: String?
|
||||
}
|
||||
|
||||
/// A screenshot plus its metadata.
|
||||
final class Capture {
|
||||
var image: CGImage
|
||||
var details: CaptureDetails
|
||||
|
||||
init(image: CGImage, details: CaptureDetails) {
|
||||
self.image = image
|
||||
self.details = details
|
||||
}
|
||||
|
||||
var pixelSize: CGSize {
|
||||
CGSize(width: image.width, height: image.height)
|
||||
}
|
||||
|
||||
/// Size in points, i.e. pixels divided by the capture's backing scale factor.
|
||||
var pointSize: CGSize {
|
||||
CGSize(width: CGFloat(image.width) / details.scaleFactor,
|
||||
height: CGFloat(image.height) / details.scaleFactor)
|
||||
}
|
||||
|
||||
var nsImage: NSImage {
|
||||
NSImage(cgImage: image, size: pointSize)
|
||||
}
|
||||
}
|
||||
|
||||
enum CaptureError: LocalizedError {
|
||||
case permissionDenied
|
||||
case noContent
|
||||
case cancelled
|
||||
case captureFailed(String)
|
||||
|
||||
var errorDescription: String? {
|
||||
switch self {
|
||||
case .permissionDenied:
|
||||
return "GreenshotMac needs Screen Recording permission. Open System Settings › Privacy & Security › Screen Recording and enable GreenshotMac."
|
||||
case .noContent:
|
||||
return "Nothing was available to capture."
|
||||
case .cancelled:
|
||||
return "Capture cancelled."
|
||||
case .captureFailed(let message):
|
||||
return message
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user