Skip to content

Commit

Permalink
Provide convient init for different gradient types
Browse files Browse the repository at this point in the history
  • Loading branch information
chenhaiteng committed Jan 25, 2024
1 parent bfd513c commit 591b15b
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 0 deletions.
26 changes: 26 additions & 0 deletions Sources/GradientBuilder/AngularGradientBuilder.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// AngularGradientBuilder.swift
//
//
// Created by Chen Hai Teng on 1/25/24.
//

import SwiftUI

public extension AngularGradient {
init(center: UnitPoint = .center, angle: Angle = .zero, @GradientBuilder _ builder: ()-> Gradient ) {
self.init(gradient: builder(), center: center, angle: angle)
}

init(center: UnitPoint = .center, startAngle: Angle = .zero, endAngle: Angle = .zero, @GradientBuilder _ builder: ()-> Gradient) {
self.init(gradient: builder(), center: center, startAngle: startAngle, endAngle: endAngle)
}
}

#Preview {
AngularGradient {
Color.red
Color.green
Color.blue
}
}
30 changes: 30 additions & 0 deletions Sources/GradientBuilder/EllipticalGradientBuilder.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// EllipticalGradientBuilder.swift
//
//
// Created by Chen Hai Teng on 1/25/24.
//

import SwiftUI

@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
public extension EllipticalGradient {
init(center: UnitPoint = .center, startRadiusFraction: CGFloat = 0.0, endRadiusFraction: CGFloat = 0.5, @GradientBuilder _ builder: () -> Gradient) {
self.init(gradient: builder(), center: center, startRadiusFraction: startRadiusFraction, endRadiusFraction: endRadiusFraction)
}
}

#Preview {
VStack {
if #available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) {
EllipticalGradient {
Color.red
Color.green
Color.blue
}
} else {
// Fallback on earlier versions
Text("EllipticalGradient unavailable")
}
}
}
6 changes: 6 additions & 0 deletions Sources/GradientBuilder/GradientBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,9 @@ extension GradientBuilder { // Availablity
return component
}
}

public extension Gradient {
init(@GradientBuilder _ builder: ()-> Gradient) {
self = builder()
}
}
22 changes: 22 additions & 0 deletions Sources/GradientBuilder/LinearGradientBuilder.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// LinearGradientBuilder.swift
//
//
// Created by Chen Hai Teng on 1/25/24.
//

import SwiftUI

public extension LinearGradient {
init(startPoint: UnitPoint = .leading, endPoint: UnitPoint = .trailing, @GradientBuilder _ builder: () -> Gradient) {
self.init(gradient: builder(), startPoint: startPoint, endPoint: endPoint)
}
}

#Preview {
LinearGradient {
Color.red
Color.green
Color.blue
}
}
22 changes: 22 additions & 0 deletions Sources/GradientBuilder/RadialGradientBuilder.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// RadialGradientBuilder.swift
//
//
// Created by Chen Hai Teng on 1/25/24.
//

import SwiftUI

public extension RadialGradient {
init(center: UnitPoint = .center, startRadius: CGFloat = 0.0, endRadius: CGFloat = 100.0, @GradientBuilder _ builder: () -> Gradient) {
self.init(gradient: builder(), center: center, startRadius: startRadius, endRadius: endRadius)
}
}

#Preview {
RadialGradient {
Color.red
Color.green
Color.blue
}
}

0 comments on commit 591b15b

Please sign in to comment.