mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00

- Implemented theme colors. - Implemented the content length options. - Implemented the font size options. - Implemented the compact / comfortable options. - Improved the logic for the rounded corners on cards.
60 lines
1.4 KiB
Swift
60 lines
1.4 KiB
Swift
//
|
|
// SwiftUIUtilities.swift
|
|
// NewsBlur
|
|
//
|
|
// Created by David Sinclair on 2023-02-01.
|
|
// Copyright © 2023 NewsBlur. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// Some useful SwiftUI extensions.
|
|
|
|
extension View {
|
|
@ViewBuilder
|
|
func `if`<Content: View>(_ condition: Bool, transform: (Self) -> Content) -> some View {
|
|
if condition {
|
|
transform(self)
|
|
} else {
|
|
self
|
|
}
|
|
}
|
|
}
|
|
|
|
extension View {
|
|
@ViewBuilder
|
|
func modify<Content: View>(@ViewBuilder _ transform: (Self) -> Content?) -> some View {
|
|
if let view = transform(self), !(view is EmptyView) {
|
|
view
|
|
} else {
|
|
self
|
|
}
|
|
}
|
|
}
|
|
|
|
extension View {
|
|
func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View {
|
|
clipShape(RoundedCorner(radius: radius, corners: corners))
|
|
}
|
|
}
|
|
|
|
struct RoundedCorner: Shape {
|
|
var radius: CGFloat = .infinity
|
|
var corners: UIRectCorner = .allCorners
|
|
|
|
func path(in rect: CGRect) -> Path {
|
|
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
|
|
return Path(path.cgPath)
|
|
}
|
|
}
|
|
|
|
extension Color {
|
|
static var random: Color {
|
|
return Color(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1)
|
|
)
|
|
}
|
|
|
|
static func themed(_ hex: [NSNumber]) -> Color {
|
|
return Color(ThemeManager.color(fromRGB: hex))
|
|
}
|
|
}
|