-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathItemView.swift
More file actions
93 lines (78 loc) · 2.61 KB
/
ItemView.swift
File metadata and controls
93 lines (78 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// ItemView.swift
// OpenTimelineIO-Sample
//
// Created by Anton Marini on 9/27/24.
//
import OpenTimelineIO_AVFoundation
import OpenTimelineIO
import TimecodeKit
import SwiftUI
struct ItemView : View {
let item:OpenTimelineIO.Item
let backgroundColor:Color
let selected:Bool
private var isGap: Bool {
item.isKind(of: Gap.self)
}
@Binding var secondsToPixels:Double
var body: some View
{
ZStack
{
let fill:AnyShapeStyle = ( isGap ) ? AnyShapeStyle( Color("GapTrackBaseColor") ) : AnyShapeStyle(self.backgroundColor.gradient)
let textGapOpacity:Double = ( isGap ) ? 0.0 : 1.0
RoundedRectangle(cornerRadius: 3)
.fill(fill, style: FillStyle())
.overlay(
RoundedRectangle(cornerRadius: 3)
.strokeBorder(self.selected ? .orange : .clear, lineWidth: 1) // Add stroke/outline
.frame(width: self.getSafeWidth() - 2)
)
.frame(width: self.getSafeWidth() - 2)
Text(item.name)
.lineLimit(1)
.font(.system(size: 10))
.frame(width: self.getSafeWidth())
.opacity(self.getSafeWidth() > 40 ? textGapOpacity : 0.0)
}
.frame(width: self.getSafeWidth(), alignment: .leading )
.overlay {
// TODO: Get item marker coordinate system working
// self.getMarkerView()
}
}
func getSafeRange() -> OpenTimelineIO.TimeRange
{
var range:OpenTimelineIO.TimeRange
do
{
range = try item.trimmedRangeInParent() ?? item.rangeInParent()
}
catch
{
range = TimeRange()
}
return range
}
func getSafeWidth() -> CGFloat
{
return max(self.getSafeRange().duration.toSeconds() * self.secondsToPixels, 3.0)
}
func getSafePositionX() -> CGFloat
{
return self.getSafeRange().startTime.toSeconds() * self.secondsToPixels// + self.getSafeWidth()/2.0
}
@ViewBuilder func getMarkerView() -> some View
{
HStack(alignment: .top)
{
let markerRange = self.item.markers.startIndex ..< self.item.markers.endIndex
ForEach(markerRange, id:\.self) { markerIndex in
MarkerView(marker: self.item.markers[markerIndex],
secondsToPixels: self.$secondsToPixels)
}
}
.frame(width: self.getSafeWidth(), alignment: .leading )
}
}