Newer Older
57 lines | 1.965kb
Bogdan Timofte authored a week ago
1
//
2
//  MeterLiveTabView.swift
3
//  USB Meter
4
//
5

            
6
import SwiftUI
7

            
8
struct MeterLiveTabView: View {
9
    let size: CGSize
10
    let isLandscape: Bool
11

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

            
16
    var body: some View {
17
        Group {
18
            if isLandscape {
19
                landscapeFace {
20
                    LiveView(compactLayout: true, availableSize: size)
21
                        .padding(contentCardPadding)
22
                        .frame(maxWidth: .infinity, alignment: .topLeading)
23
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
24
                }
25
            } else {
26
                portraitFace {
27
                    LiveView(compactLayout: prefersCompactPortraitConnection, availableSize: size)
28
                        .padding(contentCardPadding)
29
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
30
                }
31
            }
32
        }
33
    }
34

            
35
    @EnvironmentObject private var meter: Meter
36

            
37
    private var prefersCompactPortraitConnection: Bool {
38
        size.height < 760 || size.width < 380
39
    }
40

            
41
    private func portraitFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
42
        ScrollView {
43
            content()
44
                .frame(maxWidth: .infinity, alignment: .topLeading)
45
                .padding(.horizontal, pageHorizontalPadding)
46
                .padding(.vertical, pageVerticalPadding)
47
        }
48
    }
49

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