Skip to main content

add a big image, implement basic back/forth navigation

ID
416432b
date
2023-06-09 22:39:27+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
8039a1d
message
add a big image, implement basic back/forth navigation
changed files
2 files, 66 additions, 1 deletion

Changed files

BlinkReviewer/BlinkReviewer/Views/BigImage/BigImage.swift (0) → BlinkReviewer/BlinkReviewer/Views/BigImage/BigImage.swift (646)

diff --git a/BlinkReviewer/BlinkReviewer/Views/BigImage/BigImage.swift b/BlinkReviewer/BlinkReviewer/Views/BigImage/BigImage.swift
new file mode 100644
index 0000000..0d3b20e
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/BigImage/BigImage.swift
@@ -0,0 +1,30 @@
+//
+//  BigImage.swift
+//  BlinkReviewer
+//
+//  Created by Alex Chan on 09/06/2023.
+//
+
+import SwiftUI
+import Photos
+
+struct BigImage: View {
+    @State var asset: PHAsset
+    @ObservedObject var assetImage: PHAssetImage
+    
+    init(_ asset: PHAsset) {
+        print("creating an instance of BigImage!")
+        self.asset = asset
+        self.assetImage = PHAssetImage(
+            asset,
+            size: PHImageManagerMaximumSize,
+            deliveryMode: .highQualityFormat
+        )
+    }
+    
+    var body: some View {
+        Image(nsImage: assetImage.image)
+            .resizable()
+            .aspectRatio(contentMode: .fit)
+    }
+}

BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (7686) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (8844)

diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index d3cb34a..9472eb4 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -5,6 +5,7 @@
 //  Created by Alex Chan on 08/06/2023.
 //
 
+import OSLog
 import SwiftUI
 import Photos
 
@@ -37,7 +38,19 @@ struct PhotoReviewer: View {
                         NewThumbnailImage(asset, isFocused: index == focusedAssetIndex)
                             .environmentObject(photosLibrary)
                     }
+                    .frame(height: 90)
+                    
+                    BigImage(focusedAsset)
+                    
+                    Spacer()
                 }
+            }
+            .onAppear {
+                NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
+                    handleKeyEventNew(event)
+                    return event
+                }
+            }
 //                
 //                VStack {
 //                    let binding = Binding {
@@ -89,11 +102,33 @@ struct PhotoReviewer: View {
 //                    }
 //                    .padding()
 //                }.padding()
-            }
+//            }
         } else {
             Text("Waiting for Photos Library authorization…")
         }
     }
+
+    private func handleKeyEventNew(_ event: NSEvent) {
+        let logger = Logger()
+        
+        switch event {
+            case let e where e.specialKey == NSEvent.SpecialKey.leftArrow:
+                print("to the left!")
+                if focusedAssetIndex < photosLibrary.assets2.count - 1 {
+                    focusedAssetIndex += 1
+                }
+            
+            case let e where e.specialKey == NSEvent.SpecialKey.rightArrow:
+                print("to the right!")
+                if focusedAssetIndex > 0 {
+                    focusedAssetIndex -= 1
+                }
+            
+            default:
+                logger.info("Received unhandled keyboard event: \(event, privacy: .public)")
+                break
+        }
+    }
     
     private func handleKeyEvent(_ event: NSEvent) {
         let asset = photosLibrary.assets2.object(at: photosLibrary.assets2.count - 1 - selectedAssetIndex)