Skip to content

Commit 01f806e

Browse files
fhasse95marcprux
andauthored
Added Angular Gradient Support (#129)
* Added Angular Gradient Support * Update skip-ui package dependency to version 1.59.0 --------- Co-authored-by: Marc Prud'hommeaux <marc@skip.tools>
1 parent 1f39a26 commit 01f806e

2 files changed

Lines changed: 27 additions & 34 deletions

File tree

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let package = Package(
1717
.package(url: "https://source.skip.tools/skip-bridge.git", "0.16.7"..<"2.0.0"),
1818
.package(url: "https://source.skip.tools/skip-android-bridge.git", "0.6.1"..<"2.0.0"),
1919
.package(url: "https://source.skip.tools/swift-jni.git", "0.3.1"..<"2.0.0"),
20-
.package(url: "https://source.skip.tools/skip-ui.git", from: "1.50.0"),
20+
.package(url: "https://source.skip.tools/skip-ui.git", from: "1.59.0"),
2121
],
2222
targets: [
2323
.target(name: "SkipFuseUI", dependencies: ["SkipSwiftUI"]),

Sources/SkipSwiftUI/Graphics/Gradient.swift

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -227,34 +227,36 @@ extension ShapeStyle where Self == EllipticalGradient {
227227
}
228228

229229
@frozen public struct AngularGradient : ShapeStyle, Sendable {
230-
@available(*, unavailable)
231-
public init(gradient: Gradient, center: UnitPoint, startAngle: Angle = .zero, endAngle: Angle = .zero) {
232-
fatalError()
230+
let gradient: Gradient
231+
let center: UnitPoint
232+
let startAngle: Angle
233+
let endAngle: Angle
234+
235+
public init(gradient: Gradient, center: UnitPoint, startAngle: Angle = .zero, endAngle: Angle = .degrees(360)) {
236+
self.gradient = gradient
237+
self.center = center
238+
self.startAngle = startAngle
239+
self.endAngle = endAngle
233240
}
234241

235-
@available(*, unavailable)
236242
public init(colors: [Color], center: UnitPoint, startAngle: Angle, endAngle: Angle) {
237-
fatalError()
243+
self.init(gradient: Gradient(colors: colors), center: center, startAngle: startAngle, endAngle: endAngle)
238244
}
239245

240-
@available(*, unavailable)
241246
public init(stops: [Gradient.Stop], center: UnitPoint, startAngle: Angle, endAngle: Angle) {
242-
fatalError()
247+
self.init(gradient: Gradient(stops: stops), center: center, startAngle: startAngle, endAngle: endAngle)
243248
}
244249

245-
@available(*, unavailable)
246250
public init(gradient: Gradient, center: UnitPoint, angle: Angle = .zero) {
247-
fatalError()
251+
self.init(gradient: gradient, center: center, startAngle: angle, endAngle: Angle(radians: angle.radians + 2.0 * Double.pi))
248252
}
249253

250-
@available(*, unavailable)
251254
public init(colors: [Color], center: UnitPoint, angle: Angle = .zero) {
252-
fatalError()
255+
self.init(gradient: Gradient(colors: colors), center: center, angle: angle)
253256
}
254257

255-
@available(*, unavailable)
256258
public init(stops: [Gradient.Stop], center: UnitPoint, angle: Angle = .zero) {
257-
fatalError()
259+
self.init(gradient: Gradient(stops: stops), center: center, angle: angle)
258260
}
259261

260262
// public typealias Resolved = Never
@@ -266,55 +268,46 @@ extension AngularGradient : View {
266268

267269
extension AngularGradient : SkipUIBridging {
268270
public var Java_view: any SkipUI.View {
269-
fatalError()
271+
let colors = gradient.stops.map { Color.Java_color(for: $0.color.spec) }
272+
let locations = gradient.stops.map(\.location)
273+
return SkipUI.AngularGradient(colors: colors, locations: locations, centerX: center.x, centerY: center.y, startAngle: startAngle.radians, endAngle: endAngle.radians)
270274
}
271275
}
272276

273-
@available(*, unavailable)
274277
extension ShapeStyle where Self == AngularGradient {
275-
@available(*, unavailable)
276278
public static func angularGradient(_ gradient: Gradient, center: UnitPoint, startAngle: Angle, endAngle: Angle) -> AngularGradient {
277-
fatalError()
279+
return AngularGradient(gradient: gradient, center: center, startAngle: startAngle, endAngle: endAngle)
278280
}
279281

280-
@available(*, unavailable)
281282
public static func angularGradient(colors: [Color], center: UnitPoint, startAngle: Angle, endAngle: Angle) -> AngularGradient {
282-
fatalError()
283+
return AngularGradient(colors: colors, center: center, startAngle: startAngle, endAngle: endAngle)
283284
}
284285

285-
@available(*, unavailable)
286286
public static func angularGradient(stops: [Gradient.Stop], center: UnitPoint, startAngle: Angle, endAngle: Angle) -> AngularGradient {
287-
fatalError()
287+
return AngularGradient(stops: stops, center: center, startAngle: startAngle, endAngle: endAngle)
288288
}
289289
}
290290

291-
@available(*, unavailable)
292291
extension ShapeStyle where Self == AngularGradient {
293-
@available(*, unavailable)
294292
public static func conicGradient(_ gradient: Gradient, center: UnitPoint, angle: Angle = .zero) -> AngularGradient {
295-
fatalError()
293+
return AngularGradient(gradient: gradient, center: center, angle: angle)
296294
}
297295

298-
@available(*, unavailable)
299296
public static func conicGradient(colors: [Color], center: UnitPoint, angle: Angle = .zero) -> AngularGradient {
300-
fatalError()
297+
return AngularGradient(colors: colors, center: center, angle: angle)
301298
}
302299

303-
@available(*, unavailable)
304300
public static func conicGradient(stops: [Gradient.Stop], center: UnitPoint, angle: Angle = .zero) -> AngularGradient {
305-
fatalError()
301+
return AngularGradient(stops: stops, center: center, angle: angle)
306302
}
307303
}
308304

309-
@available(*, unavailable)
310305
extension ShapeStyle where Self == AngularGradient {
311-
@available(*, unavailable)
312306
public static func angularGradient(_ gradient: AnyGradient, center: UnitPoint = .center, startAngle: Angle, endAngle: Angle) -> some ShapeStyle {
313-
stubShapeStyle()
307+
return AngularGradient(gradient: gradient.gradient, center: center, startAngle: startAngle, endAngle: endAngle)
314308
}
315309

316-
@available(*, unavailable)
317310
public static func conicGradient(_ gradient: AnyGradient, center: UnitPoint = .center, angle: Angle = .zero) -> some ShapeStyle {
318-
stubShapeStyle()
311+
return AngularGradient(gradient: gradient.gradient, center: center, angle: angle)
319312
}
320313
}

0 commit comments

Comments
 (0)