Skip to content

Commit 65c9bba

Browse files
authored
Merge pull request #23 from Synopsis/development
Beta 2
2 parents 4b47a95 + 6f2694e commit 65c9bba

File tree

12 files changed

+237
-77
lines changed

12 files changed

+237
-77
lines changed

OpenTimelineIO-Sample/OpenTimelineIO-Reader.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@
178178
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
179179
CODE_SIGN_ENTITLEMENTS = "OpenTimelineIO-Reader/OpenTimelineIO_Reader.entitlements";
180180
CODE_SIGN_STYLE = Automatic;
181-
CURRENT_PROJECT_VERSION = 1;
181+
CURRENT_PROJECT_VERSION = 2;
182182
DEVELOPMENT_ASSET_PATHS = "\"OpenTimelineIO-Reader/Preview Content\"";
183183
DEVELOPMENT_TEAM = SHG3AW6YV7;
184184
ENABLE_HARDENED_RUNTIME = YES;
@@ -200,8 +200,8 @@
200200
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
201201
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
202202
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
203-
MACOSX_DEPLOYMENT_TARGET = 14.5;
204-
MARKETING_VERSION = "1.0 Beta 1";
203+
MACOSX_DEPLOYMENT_TARGET = 13.5;
204+
MARKETING_VERSION = "1.0 Beta 2";
205205
PRODUCT_BUNDLE_IDENTIFIER = "ai.ozu.OpenTimelineIO-Reader";
206206
PRODUCT_NAME = "$(TARGET_NAME)";
207207
SDKROOT = auto;
@@ -220,7 +220,7 @@
220220
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
221221
CODE_SIGN_ENTITLEMENTS = "OpenTimelineIO-Reader/OpenTimelineIO_Reader.entitlements";
222222
CODE_SIGN_STYLE = Automatic;
223-
CURRENT_PROJECT_VERSION = 1;
223+
CURRENT_PROJECT_VERSION = 2;
224224
DEVELOPMENT_ASSET_PATHS = "\"OpenTimelineIO-Reader/Preview Content\"";
225225
DEVELOPMENT_TEAM = SHG3AW6YV7;
226226
ENABLE_HARDENED_RUNTIME = YES;
@@ -242,8 +242,8 @@
242242
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
243243
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
244244
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
245-
MACOSX_DEPLOYMENT_TARGET = 14.5;
246-
MARKETING_VERSION = "1.0 Beta 1";
245+
MACOSX_DEPLOYMENT_TARGET = 13.5;
246+
MARKETING_VERSION = "1.0 Beta 2";
247247
PRODUCT_BUNDLE_IDENTIFIER = "ai.ozu.OpenTimelineIO-Reader";
248248
PRODUCT_NAME = "$(TARGET_NAME)";
249249
SDKROOT = auto;
9.43 MB
Binary file not shown.

OpenTimelineIO-Sample/OpenTimelineIO-Reader/OpenTimelineIO_ReaderApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct OpenTimelineIO_ReaderApp: App {
2424
var body: some Scene
2525
{
2626
DocumentGroup(newDocument: OpenTimelineIO_ReaderDocument()) { file in
27-
ContentView(document: file.$document, fileURL: file.fileURL)
27+
ContentView(document: file.document, fileURL: file.fileURL)
2828
.frame(minWidth: 600, minHeight: 600)
2929
}
3030
}

OpenTimelineIO-Sample/OpenTimelineIO-Reader/OpenTimelineIO_ReaderDocument.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ extension UTType
1919
}
2020
}
2121

22-
class OpenTimelineIO_ReaderDocument: FileDocument
22+
class OpenTimelineIO_ReaderDocument: FileDocument, ObservableObject
2323
{
2424
static var readableContentTypes: [UTType] { [.openTimelineIO] }
2525
static var writableContentTypes: [UTType] { [.openTimelineIO] }
@@ -28,6 +28,10 @@ class OpenTimelineIO_ReaderDocument: FileDocument
2828
var timeline:Timeline
2929
var fileURL:URL? = nil
3030

31+
@Published var currentTime:RationalTime = RationalTime()
32+
33+
private var timeObserver:Any? = nil
34+
3135
init()
3236
{
3337
self.timeline = Timeline(name: "Untitled OpenTimelineIO Timeline")
@@ -79,6 +83,15 @@ class OpenTimelineIO_ReaderDocument: FileDocument
7983
playerItem.videoComposition = videoComposition
8084
playerItem.audioMix = audioMix
8185
self.player.replaceCurrentItem(with: playerItem)
86+
87+
self.timeObserver = self.player.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: 30),
88+
queue: .main,
89+
using: { [weak self] time in
90+
91+
print("update current time \(time)")
92+
self?.currentTime = time.toOTIORationalTime()
93+
94+
})
8295
}
8396
}
8497
}

OpenTimelineIO-Sample/OpenTimelineIO-Reader/ContentView.swift renamed to OpenTimelineIO-Sample/OpenTimelineIO-Reader/Views/ContentView.swift

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,60 +6,83 @@
66
//
77

88
import OpenTimelineIO
9+
import OpenTimelineIO_AVFoundation
910
import SwiftUI
1011
import AVKit
1112

1213
struct ContentView: View
1314
{
14-
@Binding var document: OpenTimelineIO_ReaderDocument
15+
@ObservedObject var document: OpenTimelineIO_ReaderDocument
1516

1617
// This is beyond lame that I need this in the view!?
1718
var fileURL:URL?
1819

1920
@State private var isExportingOTIO: Bool = false
2021
@State private var isExportingMPEG4: Bool = false
2122
@State var secondsToPixels = 10.0;
22-
@State var inspectorOpen: Bool = true
2323

24+
25+
//@State var inspectorOpen: Bool = true
26+
@State var columnVisibility: NavigationSplitViewVisibility = .doubleColumn
27+
2428
@State var selectedItem: OpenTimelineIO.Item? = nil
2529

26-
init(document: Binding<OpenTimelineIO_ReaderDocument> , fileURL: URL? = nil) {
27-
self._document = document
30+
31+
init(document: OpenTimelineIO_ReaderDocument , fileURL: URL? = nil) {
32+
self.document = document
2833
self.fileURL = fileURL
29-
// self._selectedItem = .constant(nil)
3034

3135
guard let fileURL = fileURL else { return }
36+
37+
3238

33-
self.$document.wrappedValue.setupPlayerWithBaseDocumentURL(fileURL)
39+
self.document.setupPlayerWithBaseDocumentURL(fileURL)
3440
}
3541

3642
var body: some View {
37-
38-
VSplitView
43+
44+
NavigationSplitView(columnVisibility: $columnVisibility)
3945
{
40-
VideoPlayer(player: document.player)
41-
42-
VStack(alignment: .leading)
46+
EmptyView()
47+
}
48+
content:
49+
{
50+
VSplitView
4351
{
44-
Text(document.timeline.name.isEmpty ? "Untitled Timeline" : document.timeline.name)
45-
.padding(.horizontal)
46-
.padding(.top, 5)
47-
48-
TimelineView(timeline: document.timeline, secondsToPixels: self.$secondsToPixels, selectedItem: self.$selectedItem)
52+
VideoPlayer(player: document.player)
4953

50-
self.controlsViewStack()
54+
VStack(alignment: .leading)
55+
{
56+
Text(document.timeline.name.isEmpty ? "Untitled Timeline" : document.timeline.name)
57+
.padding(.horizontal)
58+
.padding(.top, 5)
59+
60+
TimelineView(timeline: document.timeline,
61+
currentTime: self.$document.currentTime ,
62+
secondsToPixels: self.$secondsToPixels,
63+
selectedItem: self.$selectedItem)
64+
65+
self.controlsViewStack()
66+
}
5167
}
5268
}
53-
.inspector(isPresented: self.$inspectorOpen)
54-
{
69+
detail: {
5570
ItemInspectorView(selectedItem: self.$selectedItem)
56-
.inspectorColumnWidth(min: 250, ideal: 300, max: 500)
71+
// .inspectorColumnWidth(min: 250, ideal: 300, max: 500)
72+
.navigationSplitViewColumnWidth(min:250, ideal: 200, max: 300)
73+
5774
.toolbar
5875
{
5976
Spacer()
6077

6178
Button {
62-
self.inspectorOpen.toggle()
79+
if self.columnVisibility == .detailOnly {
80+
self.columnVisibility = .doubleColumn
81+
}
82+
else
83+
{
84+
self.columnVisibility = .detailOnly
85+
}
6386
} label: {
6487
Image(systemName: "info.circle")
6588
}
@@ -117,7 +140,7 @@ struct ContentView: View
117140
.lineLimit(1)
118141
.font(.system(size: 10))
119142

120-
Slider(value: $secondsToPixels, in: 10...300)
143+
Slider(value: $secondsToPixels, in: 10...1000)
121144
.controlSize(.mini)
122145
.frame(width: 200)
123146
}
@@ -128,5 +151,5 @@ struct ContentView: View
128151
}
129152

130153
#Preview {
131-
ContentView(document: .constant(OpenTimelineIO_ReaderDocument()))
154+
ContentView(document: OpenTimelineIO_ReaderDocument() )
132155
}

OpenTimelineIO-Sample/OpenTimelineIO-Reader/Views/ItemInspectorView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ struct ItemInspectorView: View
9494
}
9595
.listSectionSeparator(.hidden)
9696

97-
Section("\(Image(systemName: "gearshape.fill")) JSON", isExpanded: self.$jsonExpanded)
97+
Section("\(Image(systemName: "gearshape.fill")) JSON")
9898
{
9999
Text(self.safeToJSON(item: selectedItem))
100100
.lineLimit(nil)

OpenTimelineIO-Sample/OpenTimelineIO-Reader/Views/ItemView.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,21 @@ struct ItemView : View {
2626
if let _ = item as? Gap
2727
{
2828
RoundedRectangle(cornerRadius: 3)
29-
.fill( Color("GapTrackBaseColor") )
30-
.strokeBorder( self.selected ? .white : .clear, lineWidth: 1)
31-
.frame(width: self.getSafeWidth() - 2)
29+
.fill(Color("GapTrackBaseColor")) // Fill the RoundedRectangle with color
30+
.overlay(
31+
RoundedRectangle(cornerRadius: 3)
32+
.stroke(self.selected ? .white : .clear, lineWidth: 1) // Add stroke/outline
33+
)
34+
.frame(width: self.getSafeWidth() - 2)
3235
}
3336
else
3437
{
3538
RoundedRectangle(cornerRadius: 3)
36-
.fill( self.backgroundColor.gradient )
37-
.strokeBorder( self.selected ? .white : .clear, lineWidth: 1)
39+
.fill(self.backgroundColor.gradient) // Fill the RoundedRectangle with color
40+
.overlay(
41+
RoundedRectangle(cornerRadius: 3)
42+
.stroke(self.selected ? .white : .clear, lineWidth: 1) // Add stroke/outline
43+
)
3844
.frame(width: self.getSafeWidth() - 2)
3945

4046
Text(item.name)

0 commit comments

Comments
 (0)