55 lines
1.3 KiB
Swift
55 lines
1.3 KiB
Swift
import AppKit
|
|
import Foundation
|
|
|
|
enum ScreenshotCaptureError: Error, Equatable, Sendable {
|
|
case screenRecordingPermissionRequired
|
|
case cancelled
|
|
case regionTooSmall
|
|
case noScreen
|
|
case screenshotFailed
|
|
}
|
|
|
|
struct ScreenshotCaptureResult: Equatable {
|
|
var image: NSImage?
|
|
var selectedRect: CGRect?
|
|
var screenFrame: CGRect?
|
|
var error: ScreenshotCaptureError?
|
|
|
|
static func success(
|
|
image: NSImage,
|
|
selectedRect: CGRect,
|
|
screenFrame: CGRect
|
|
) -> ScreenshotCaptureResult {
|
|
ScreenshotCaptureResult(
|
|
image: image,
|
|
selectedRect: selectedRect,
|
|
screenFrame: screenFrame,
|
|
error: nil
|
|
)
|
|
}
|
|
|
|
static func failure(_ error: ScreenshotCaptureError) -> ScreenshotCaptureResult {
|
|
ScreenshotCaptureResult(
|
|
image: nil,
|
|
selectedRect: nil,
|
|
screenFrame: nil,
|
|
error: error
|
|
)
|
|
}
|
|
}
|
|
|
|
struct OCRRecognizedLine: Equatable, Sendable {
|
|
var text: String
|
|
var boundingBox: CGRect
|
|
var confidence: Float
|
|
}
|
|
|
|
struct OCRTextRecognitionResult: Equatable, Sendable {
|
|
var text: String
|
|
var lines: [OCRRecognizedLine]
|
|
|
|
var isEmpty: Bool {
|
|
text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|
|
}
|
|
}
|