Files
letro-ios/ElementX/Sources/Other/SwiftUI/Layout/CustomLayoutLabelStyle.swift
manuroe c29f4cc9b4 Dual licensing: AGPL + Element Commercial (#3657)
* New LICENSE-COMMERCIAL file

* Apply dual licenses: AGPL + Element Commercial to file headers

* Update README with dual licensing
2025-01-06 11:27:37 +01:00

47 lines
1.4 KiB
Swift

//
// Copyright 2023, 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import SwiftUI
extension LabelStyle where Self == CustomLayoutLabelStyle {
/// A label style that uses an `HStack` with parameters to customise the label's layout.
static func custom(spacing: CGFloat, alignment: VerticalAlignment = .center, iconLayout: Self.IconLayout = .leading) -> Self {
CustomLayoutLabelStyle(spacing: spacing, alignment: alignment, iconLayout: iconLayout)
}
}
struct CustomLayoutLabelStyle: LabelStyle {
let spacing: CGFloat
var alignment: VerticalAlignment
enum IconLayout {
case leading
case trailing
}
var iconLayout: IconLayout
fileprivate init(spacing: CGFloat, alignment: VerticalAlignment, iconLayout: IconLayout) {
self.spacing = spacing
self.alignment = alignment
self.iconLayout = iconLayout
}
func makeBody(configuration: Configuration) -> some View {
HStack(alignment: alignment, spacing: spacing) {
switch iconLayout {
case .leading:
configuration.icon
configuration.title
case .trailing:
configuration.title
configuration.icon
}
}
}
}