@@ -123,6 +123,7 @@ public final class DrawingLibrary: NativeLibrary {
123
123
self . define ( Procedure ( " enable-transformation " , enableTransformation) )
124
124
self . define ( Procedure ( " disable-transformation " , disableTransformation) )
125
125
self . define ( Procedure ( " draw " , draw) )
126
+ self . define ( Procedure ( " draw-dashed " , drawDashed) )
126
127
self . define ( Procedure ( " fill " , fill) )
127
128
self . define ( Procedure ( " draw-text " , drawText) )
128
129
self . define ( Procedure ( " draw-image " , drawImage) )
@@ -326,9 +327,9 @@ public final class DrawingLibrary: NativeLibrary {
326
327
throw RuntimeError . eval ( . invalidSize, size)
327
328
}
328
329
try self . drawing ( from: drawing) . append ( . setShadow( try self . color ( from: color) ,
329
- dx: w,
330
- dy: h,
331
- blurRadius: try r. asDouble ( coerce: true ) ) )
330
+ dx: w,
331
+ dy: h,
332
+ blurRadius: try r. asDouble ( coerce: true ) ) )
332
333
return . void
333
334
}
334
335
@@ -353,6 +354,28 @@ public final class DrawingLibrary: NativeLibrary {
353
354
return . void
354
355
}
355
356
357
+ private func drawDashed( shape: Expr ,
358
+ lengths: Expr ,
359
+ phase: Expr ,
360
+ width: Expr ? ,
361
+ drawing: Expr ? ) throws -> Expr {
362
+ let shape = try self . shape ( from: shape)
363
+ var dashLengths : [ Double ] = [ ]
364
+ var list = lengths
365
+ while case . pair( let len, let rest) = list {
366
+ dashLengths. append ( try len. asDouble ( coerce: true ) )
367
+ list = rest
368
+ }
369
+ guard list. isNull else {
370
+ throw RuntimeError . type ( lengths, expected: [ . properListType] )
371
+ }
372
+ let phase = try phase. asDouble ( coerce: true )
373
+ let width = try width? . asDouble ( coerce: true ) ?? 1.0
374
+ try self . drawing ( from: drawing) . append (
375
+ . strokeDashed( shape, width: width, lengths: dashLengths, phase: phase) )
376
+ return . void
377
+ }
378
+
356
379
private func fill( shape: Expr , drawing: Expr ? ) throws -> Expr {
357
380
try self . drawing ( from: drawing) . append ( . fill( try self . shape ( from: shape) ) )
358
381
return . void
0 commit comments