@@ -123,6 +123,7 @@ public final class DrawingLibrary: NativeLibrary {
123123 self . define ( Procedure ( " enable-transformation " , enableTransformation) )
124124 self . define ( Procedure ( " disable-transformation " , disableTransformation) )
125125 self . define ( Procedure ( " draw " , draw) )
126+ self . define ( Procedure ( " draw-dashed " , drawDashed) )
126127 self . define ( Procedure ( " fill " , fill) )
127128 self . define ( Procedure ( " draw-text " , drawText) )
128129 self . define ( Procedure ( " draw-image " , drawImage) )
@@ -326,9 +327,9 @@ public final class DrawingLibrary: NativeLibrary {
326327 throw RuntimeError . eval ( . invalidSize, size)
327328 }
328329 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 ) ) )
332333 return . void
333334 }
334335
@@ -353,6 +354,28 @@ public final class DrawingLibrary: NativeLibrary {
353354 return . void
354355 }
355356
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+
356379 private func fill( shape: Expr , drawing: Expr ? ) throws -> Expr {
357380 try self . drawing ( from: drawing) . append ( . fill( try self . shape ( from: shape) ) )
358381 return . void
0 commit comments