Newer Older
66 lines | 2.523kb
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 a month ago
31
                    MeasurementChartView(sizing: .provided(size: size, compact: prefersCompactLandscapeLayout))
Bogdan Timofte authored 2 months ago
32
                        .environmentObject(meter.measurements)
Bogdan Timofte authored 2 months ago
33
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
34
                        .padding(10)
35
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
Bogdan Timofte authored 2 months ago
36
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
37
                }
38
            } else {
39
                portraitFace {
Bogdan Timofte authored a month ago
40
                    MeasurementChartView(sizing: .provided(size: size, compact: prefersCompactPortraitLayout))
Bogdan Timofte authored 2 months ago
41
                        .environmentObject(meter.measurements)
Bogdan Timofte authored 2 months ago
42
                        .padding(.horizontal, portraitContentCardHorizontalPadding)
43
                        .padding(.vertical, portraitContentCardVerticalPadding)
Bogdan Timofte authored 2 months ago
44
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
45
                }
46
            }
47
        }
48
    }
49

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

            
59
    private func landscapeFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
Bogdan Timofte authored 2 months ago
60
        content()
61
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
62
            .padding(.horizontal, pageHorizontalPadding)
63
            .padding(.vertical, pageVerticalPadding)
Bogdan Timofte authored 2 months ago
64
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
Bogdan Timofte authored 2 months ago
65
    }
Bogdan Timofte authored 2 months ago
66
}