ImageContainerView.swift (2222B)
1 // 2 // CarouselImageContainerView.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-03-23. 6 // 7 8 import SwiftUI 9 import Kingfisher 10 11 12 struct ImageContainerView: View { 13 let video_controller: VideoController 14 let url: MediaUrl 15 let settings: UserSettingsStore 16 17 @State private var image: UIImage? 18 @State private var showShareSheet = false 19 20 private struct ImageHandler: ImageModifier { 21 @Binding var handler: UIImage? 22 23 func modify(_ image: UIImage) -> UIImage { 24 handler = image 25 return image 26 } 27 } 28 29 func Img(url: URL) -> some View { 30 KFAnimatedImage(url) 31 .imageContext(.note, disable_animation: settings.disable_animation) 32 .configure { view in 33 view.framePreloadCount = 3 34 } 35 .imageModifier(ImageHandler(handler: $image)) 36 .clipped() 37 .modifier(ImageContextMenuModifier(url: url, image: image, settings: settings, showShareSheet: $showShareSheet)) 38 .sheet(isPresented: $showShareSheet) { 39 ShareSheet(activityItems: [url]) 40 } 41 } 42 43 var body: some View { 44 Group { 45 switch url { 46 case .image(let url): 47 Img(url: url) 48 case .video(let url): 49 DamusVideoPlayer(url: url, video_size: .constant(nil), controller: video_controller, style: .full, visibility_tracking_method: .generic) 50 } 51 } 52 } 53 } 54 55 let test_image_url = URL(string: "https://jb55.com/red-me.jpg")! 56 fileprivate let test_video_url = URL(string: "http://cdn.jb55.com/s/zaps-build.mp4")! 57 58 struct ImageContainerView_Previews: PreviewProvider { 59 static var previews: some View { 60 Group { 61 ImageContainerView(video_controller: test_damus_state.video, url: .image(test_image_url), settings: test_damus_state.settings) 62 .previewDisplayName("Image") 63 ImageContainerView(video_controller: test_damus_state.video, url: .video(test_video_url), settings: test_damus_state.settings) 64 .previewDisplayName("Video") 65 } 66 .environmentObject(OrientationTracker()) 67 } 68 }