Newer Older
e43766c 2 months ago History
72 lines | 2.655kb
Bogdan Timofte authored 2 months 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
Bogdan Timofte authored 2 months ago
16
    private let portraitContentCardHorizontalPadding: CGFloat = 8
17
    private let portraitContentCardVerticalPadding: CGFloat = 12
Bogdan Timofte authored 2 months ago
18

            
Bogdan Timofte authored 2 months ago
19
    private var prefersCompactPortraitLayout: Bool {
20
        size.height < 760 || size.width < 380
21
    }
22

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

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

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

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