1
Fork 0

Adapt export accessory view to video file types

This commit is contained in:
Joshua Goins 2022-02-28 12:19:08 -04:00
parent 7c36cc864f
commit 9590378b8a
3 changed files with 34 additions and 55 deletions

View file

@ -23,9 +23,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
return true return true
} }
func addAccessoryView(_ savePanel : NSSavePanel) { func addAccessoryView(_ savePanel : NSSavePanel, fileTypes : Array<String>) {
let accessoryView = (ExportAccessoryView.fromNib()! as ExportAccessoryView) let accessoryView = (ExportAccessoryView.fromNib()! as ExportAccessoryView)
accessoryView.setSavePanel(savePanel) accessoryView.setSavePanel(savePanel)
accessoryView.setPossibleOptions(fileTypes)
savePanel.accessoryView = accessoryView as NSView savePanel.accessoryView = accessoryView as NSView
} }
@ -139,33 +140,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
savePanel.allowedFileTypes = ["tiff"] savePanel.allowedFileTypes = ["tiff"]
savePanel.nameFieldStringValue = (document?.getIdealFilename())! savePanel.nameFieldStringValue = (document?.getIdealFilename())!
addAccessoryView(savePanel) addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg", "psd"])
savePanel.begin { (result) in savePanel.begin { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue { if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
if savePanel.allowedFileTypes![0] != "psd" { if savePanel.allowedFileTypes![0] != "psd" {
var fileType: NSBitmapImageRep.FileType = .tiff
switch(savePanel.allowedFileTypes![0]) {
case "tiff":
fileType = .tiff;
break;
case "bmp":
fileType = .bmp;
break;
case "jpeg":
fileType = .jpeg;
break;
case "png":
fileType = .png;
break;
default:
break;
}
let canvas = document?.makeComposite() let canvas = document?.makeComposite()
let canvasTiff = canvas?.tiffRepresentation let canvasTiff = canvas?.tiffRepresentation
let bitmapImage = NSBitmapImageRep(data: canvasTiff!) let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
let canvasPng = bitmapImage!.representation(using: fileType, properties: [:]) let canvasPng = bitmapImage!.representation(using: self.getBitmapType(savePanel.allowedFileTypes![0]), properties: [:])
try? canvasPng?.write(to: savePanel.url!) try? canvasPng?.write(to: savePanel.url!)
} else { } else {
@ -197,7 +180,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
writer?.addLayer(with: document!.makeBlendImage(layer), andName: layer.name + " (Mask)", andOpacity: 1.0, andOffset: .zero) writer?.addLayer(with: document!.makeBlendImage(layer), andName: layer.name + " (Mask)", andOpacity: 1.0, andOffset: .zero)
} }
writer?.addLayer(with: finalCgImage, andName: layer.name, andOpacity: Float(layer.data.opacity), andOffset: .zero, andBlendMode: Int(blendMode.rawValue), andIsNonBaseLayer: layer.clipped) writer?.addLayer(with: finalCgImage, andName: layer.name, andOpacity: Float(layer.data.opacity), andOffset: .zero, andBlendMode: Int(self.getPSDBlendMode(layer).rawValue), andIsNonBaseLayer: layer.clipped)
} }
let data = writer?.createPSDData() let data = writer?.createPSDData()
@ -212,17 +195,17 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
let savePanel = NSSavePanel() let savePanel = NSSavePanel()
savePanel.title = "Save Thumbnail" savePanel.title = "Save Thumbnail"
savePanel.allowedFileTypes = ["public.png"] savePanel.allowedFileTypes = ["png"]
savePanel.nameFieldStringValue = (document?.getIdealFilename())! savePanel.nameFieldStringValue = (document?.getIdealFilename())!
addAccessoryView(savePanel) addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg"])
savePanel.begin { (result) in savePanel.begin { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue { if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
let canvas = document?.makeThumbnail() let canvas = document?.makeThumbnail()
let canvasTiff = canvas?.tiffRepresentation let canvasTiff = canvas?.tiffRepresentation
let bitmapImage = NSBitmapImageRep(data: canvasTiff!) let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
let canvasPng = bitmapImage!.representation(using: .png, properties: [:]) let canvasPng = bitmapImage!.representation(using: self.getBitmapType(savePanel.allowedFileTypes![0]), properties: [:])
try? canvasPng?.write(to: savePanel.url!) try? canvasPng?.write(to: savePanel.url!)
} }
@ -241,6 +224,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
savePanel.allowedFileTypes = ["public.mpeg-4"] savePanel.allowedFileTypes = ["public.mpeg-4"]
savePanel.nameFieldStringValue = (document?.getIdealFilename())! savePanel.nameFieldStringValue = (document?.getIdealFilename())!
addAccessoryView(savePanel, fileTypes: ["mp4", "mov", "heic"])
savePanel.begin { (result) in savePanel.begin { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue { if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
guard let archive = Archive(data: (document?.data)!, accessMode: Archive.AccessMode.read) else { guard let archive = Archive(data: (document?.data)!, accessMode: Archive.AccessMode.read) else {
@ -292,9 +277,22 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
self.exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality) self.exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
self.exporter?.outputURL = savePanel.url! self.exporter?.outputURL = savePanel.url!
self.exporter?.outputFileType = AVFileType.mp4
self.exporter?.videoComposition = mainComposition self.exporter?.videoComposition = mainComposition
switch(savePanel.allowedFileTypes![0]) {
case "mp4":
self.exporter?.outputFileType = .mp4;
break;
case "mov":
self.exporter?.outputFileType = .mov;
break;
case "heic":
self.exporter?.outputFileType = .heic;
break;
default:
break;
}
let alert = NSAlert() let alert = NSAlert()
alert.messageText = "Exporting timelapse..." alert.messageText = "Exporting timelapse..."
alert.addButton(withTitle: "Cancel") alert.addButton(withTitle: "Cancel")

View file

@ -11,27 +11,16 @@ class ExportAccessoryView : NSView {
self.savePanel = savePanel self.savePanel = savePanel
} }
@IBAction func changeFileFormat(_ sender: Any) { func setPossibleOptions(_ options : Array<String>) {
switch(typeBox.indexOfSelectedItem) { for option in options {
case 0: typeBox.addItem(withTitle: option.uppercased())
savePanel?.allowedFileTypes = ["tiff"]
break
case 1:
savePanel?.allowedFileTypes = ["bmp"]
break
case 2:
savePanel?.allowedFileTypes = ["jpeg"]
break
case 3:
savePanel?.allowedFileTypes = ["png"]
break
case 4:
savePanel?.allowedFileTypes = ["psd"]
break
default:
break
} }
} }
@IBAction func changeFileFormat(_ sender: Any) {
savePanel?.allowedFileTypes?.removeAll()
savePanel?.allowedFileTypes?.append((typeBox.titleOfSelectedItem?.lowercased())!)
}
} }
extension NSView { extension NSView {

View file

@ -25,18 +25,10 @@
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ff-Tm-r97"> <popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ff-Tm-r97">
<rect key="frame" x="82" y="16" width="78" height="25"/> <rect key="frame" x="82" y="16" width="78" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" title="PNG" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="4" imageScaling="proportionallyDown" inset="2" selectedItem="Ygd-tc-66B" id="r8S-Bt-u1Y"> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="r8S-Bt-u1Y">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
<menu key="menu" id="laP-Yo-gBn"> <menu key="menu" id="laP-Yo-gBn"/>
<items>
<menuItem title="TIFF" id="Izp-Ei-zox"/>
<menuItem title="BMP" tag="1" id="BaW-Av-Mt9"/>
<menuItem title="JPEG" tag="3" id="3pA-ea-5fb"/>
<menuItem title="PNG" state="on" tag="4" id="Ygd-tc-66B"/>
<menuItem title="PSD" tag="4" id="aop-7X-jJg"/>
</items>
</menu>
</popUpButtonCell> </popUpButtonCell>
<connections> <connections>
<action selector="changeFileFormat:" target="c22-O7-iKe" id="zxo-zP-jSb"/> <action selector="changeFileFormat:" target="c22-O7-iKe" id="zxo-zP-jSb"/>