Newer Older
70 lines | 2.462kb
Bogdan Timofte authored a week ago
1
//
2
//  MeterChartTabView.swift
3
//  USB Meter
4
//
5

            
6
import SwiftUI
7

            
8
struct MeterChartTabView: View {
9
    @EnvironmentObject private var meter: Meter
10

            
11
    let size: CGSize
12
    let isLandscape: Bool
13

            
14
    private let pageHorizontalPadding: CGFloat = 12
15
    private let pageVerticalPadding: CGFloat = 12
16
    private let contentCardPadding: CGFloat = 16
17

            
Bogdan Timofte authored a week ago
18
    private var prefersCompactPortraitLayout: Bool {
19
        size.height < 760 || size.width < 380
20
    }
21

            
22
    private var prefersCompactLandscapeLayout: Bool {
23
        size.height < 430
24
    }
25

            
Bogdan Timofte authored a week ago
26
    var body: some View {
27
        Group {
28
            if isLandscape {
29
                landscapeFace {
Bogdan Timofte authored a week ago
30
                    MeasurementChartView(
31
                        compactLayout: prefersCompactLandscapeLayout,
32
                        availableSize: size
33
                    )
Bogdan Timofte authored a week ago
34
                        .environmentObject(meter.measurements)
Bogdan Timofte authored a week ago
35
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
36
                        .padding(10)
37
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
Bogdan Timofte authored a week ago
38
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
39
                }
40
            } else {
41
                portraitFace {
Bogdan Timofte authored a week ago
42
                    MeasurementChartView(
43
                        compactLayout: prefersCompactPortraitLayout,
44
                        availableSize: size
45
                    )
Bogdan Timofte authored a week ago
46
                        .environmentObject(meter.measurements)
47
                        .padding(contentCardPadding)
48
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
49
                }
50
            }
51
        }
52
    }
53

            
54
    private func portraitFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
55
        ScrollView {
56
            content()
57
                .frame(maxWidth: .infinity, alignment: .topLeading)
58
                .padding(.horizontal, pageHorizontalPadding)
59
                .padding(.vertical, pageVerticalPadding)
60
        }
61
    }
62

            
63
    private func landscapeFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
Bogdan Timofte authored a week ago
64
        content()
65
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
66
            .padding(.horizontal, pageHorizontalPadding)
67
            .padding(.vertical, pageVerticalPadding)
Bogdan Timofte authored a week ago
68
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
Bogdan Timofte authored a week ago
69
    }
Bogdan Timofte authored a week ago
70
}