Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/Folium-macOS/ContentView.swift
2 views
//
//  ContentView.swift
//  Folium-macOS
//
//  Created by Jarrod Norwell on 11/12/2025.
//

import Mango

import SwiftUI
import UniformTypeIdentifiers

struct File: Codable, Hashable {
    var url: URL
}

struct SNESView: View {
    @Binding var file: File
    
    var mango: Mango = Mango()
    
    @State var nsImage: NSImage = NSImage()
    
    var body: some View {
        Image(nsImage: nsImage)
        .onAppear {
            Task {
                guard await mango.insert(file.url) else {
                    return
                }
                
                await mango.framebuffer { buffer in
                    guard let cgImage = CGImage.snes(buffer, 512, 480) else {
                        return
                    }
                    
                    nsImage = NSImage(cgImage: cgImage, size: CGSize(width: 512, height: 480))
                }
                
                await mango.start()
            }
        }
    }
}

struct ContentView: View {
    @Environment(\.openWindow) var openWindow
    
    var body: some View {
        GeometryReader { proxy in
            ZStack {
                Color.clear
                    .dropDestination(for: URL.self) { items, session in
                        guard let item: URL = items.first else {
                            return false
                        }
                        
                        openWindow(id: "snes-window", value: File(url: item))
                        
                        return true
                    }
            }
            .frame(width: proxy.size.width, height: proxy.size.height)
        }
    }
}

#Preview {
    ContentView()
}