1 contributor
57 lines | 1.965kb
//
//  MeterLiveTabView.swift
//  USB Meter
//

import SwiftUI

struct MeterLiveTabView: View {
    let size: CGSize
    let isLandscape: Bool

    private let pageHorizontalPadding: CGFloat = 12
    private let pageVerticalPadding: CGFloat = 12
    private let contentCardPadding: CGFloat = 16

    var body: some View {
        Group {
            if isLandscape {
                landscapeFace {
                    LiveView(compactLayout: true, availableSize: size)
                        .padding(contentCardPadding)
                        .frame(maxWidth: .infinity, alignment: .topLeading)
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
                }
            } else {
                portraitFace {
                    LiveView(compactLayout: prefersCompactPortraitConnection, availableSize: size)
                        .padding(contentCardPadding)
                        .meterCard(tint: meter.color, fillOpacity: 0.12, strokeOpacity: 0.20)
                }
            }
        }
    }

    @EnvironmentObject private var meter: Meter

    private var prefersCompactPortraitConnection: Bool {
        size.height < 760 || size.width < 380
    }

    private func portraitFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
        ScrollView {
            content()
                .frame(maxWidth: .infinity, alignment: .topLeading)
                .padding(.horizontal, pageHorizontalPadding)
                .padding(.vertical, pageVerticalPadding)
        }
    }

    private func landscapeFace<Content: View>(@ViewBuilder content: () -> Content) -> some View {
        content()
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
            .padding(.horizontal, pageHorizontalPadding)
            .padding(.vertical, pageVerticalPadding)
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
    }
}