casvanluijtelaar

add macos support

... ... @@ -50,7 +50,6 @@ class MobileScannerController {
final List<BarcodeFormat>? formats;
/// can be used to limit the scan area to a portion of the screen
/// only for Android and IOS!
final Rect? scanWindow;
CameraFacing facing;
... ...
import AVFoundation
import FlutterMacOS
import Vision
import UIKit
public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler, FlutterTexture, AVCaptureVideoDataOutputSampleBufferDelegate {
... ... @@ -21,6 +22,9 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler,
// Image to be sent to the texture
var latestBuffer: CVImageBuffer!
// optional window to limit scan search
var scanWindow: CGRect?
// var analyzeMode: Int = 0
var analyzing: Bool = false
... ... @@ -110,6 +114,14 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler,
if error == nil {
if let results = request.results as? [VNBarcodeObservation] {
for barcode in results {
if scanWindow != nil {
let boundingBox = barcode.frame
if !scanWindow!.contains(boundingBox) {
continue
}
}
let barcodeType = String(barcode.symbology.rawValue).replacingOccurrences(of: "VNBarcodeSymbology", with: "")
let event: [String: Any?] = ["name": "barcodeMac", "data" : ["payload": barcode.payloadStringValue, "symbology": barcodeType]]
self.sink?(event)
... ... @@ -175,6 +187,19 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler,
let torch: Bool = argReader.bool(key: "torch") ?? false
let facing: Int = argReader.int(key: "facing") ?? 1
let scanWindowData: Array? = argReader.floatArray(key: "scanWindow")
if(scanWindowData != nil) {
let minX = scanWindowData![0]
let minY = scanWindowData![1]
let width = scanWindowData![2] - minX
let height = scanWindowData![3] - minY
scanWindow = CGRect(x: minX, y: minY, width: width, height: height)
}
// Set the camera to use
position = facing == 0 ? AVCaptureDevice.Position.front : .back
... ... @@ -322,4 +347,8 @@ class MapArgumentReader {
return args?[key] as? [String]
}
func floatArray(key: String) -> [CGFloat]? {
return args?[key] as? [CGFloat]
}
}
... ...