@@ -182,7 +182,7 @@ public static SKPath AsSkiaPath(
182182 float fx ,
183183 float fy )
184184 {
185- var platformPath = new SKPath ( ) ;
185+ using var platformPathBuilder = new SKPathBuilder ( ) ;
186186
187187 var ppux = ppu * fx ;
188188 var ppuy = ppu * fy ;
@@ -196,26 +196,26 @@ public static SKPath AsSkiaPath(
196196 if ( type == PathOperation . Move )
197197 {
198198 var point = path [ pointIndex ++ ] ;
199- platformPath . MoveTo ( ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
199+ platformPathBuilder . MoveTo ( ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
200200 }
201201 else if ( type == PathOperation . Line )
202202 {
203203 var point = path [ pointIndex ++ ] ;
204- platformPath . LineTo ( ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
204+ platformPathBuilder . LineTo ( ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
205205 }
206206
207207 else if ( type == PathOperation . Quad )
208208 {
209209 var controlPoint = path [ pointIndex ++ ] ;
210210 var point = path [ pointIndex ++ ] ;
211- platformPath . QuadTo ( ( ox + controlPoint . X * ppux ) , ( oy + controlPoint . Y * ppuy ) , ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
211+ platformPathBuilder . QuadTo ( ( ox + controlPoint . X * ppux ) , ( oy + controlPoint . Y * ppuy ) , ( ox + point . X * ppux ) , ( oy + point . Y * ppuy ) ) ;
212212 }
213213 else if ( type == PathOperation . Cubic )
214214 {
215215 var controlPoint1 = path [ pointIndex ++ ] ;
216216 var controlPoint2 = path [ pointIndex ++ ] ;
217217 var point = path [ pointIndex ++ ] ;
218- platformPath . CubicTo ( ( ox + controlPoint1 . X * ppux ) , ( oy + controlPoint1 . Y * ppuy ) , ( ox + controlPoint2 . X * ppux ) , ( oy + controlPoint2 . Y * ppuy ) , ( ox + point . X * ppux ) ,
218+ platformPathBuilder . CubicTo ( ( ox + controlPoint1 . X * ppux ) , ( oy + controlPoint1 . Y * ppuy ) , ( ox + controlPoint2 . X * ppux ) , ( oy + controlPoint2 . Y * ppuy ) , ( ox + point . X * ppux ) ,
219219 ( oy + point . Y * ppuy ) ) ;
220220 }
221221 else if ( type == PathOperation . Arc )
@@ -243,15 +243,15 @@ public static SKPath AsSkiaPath(
243243 if ( ! clockwise )
244244 sweep *= - 1 ;
245245
246- platformPath . AddArc ( rect , startAngle , sweep ) ;
246+ platformPathBuilder . AddArc ( rect , startAngle , sweep ) ;
247247 }
248248 else if ( type == PathOperation . Close )
249249 {
250- platformPath . Close ( ) ;
250+ platformPathBuilder . Close ( ) ;
251251 }
252252 }
253253
254- return platformPath ;
254+ return platformPathBuilder . Detach ( ) ;
255255 }
256256
257257 /// <summary>
@@ -278,38 +278,38 @@ public static SKPath AsSkiaPathFromSegment(this PathF target, int segmentIndex,
278278 {
279279 ppu = zoom * ppu ;
280280
281- var path = new SKPath ( ) ;
281+ using var pathBuilder = new SKPathBuilder ( ) ;
282282
283283 var type = target . GetSegmentType ( segmentIndex ) ;
284284 if ( type == PathOperation . Line )
285285 {
286286 var pointIndex = target . GetSegmentPointIndex ( segmentIndex ) ;
287287 var startPoint = target [ pointIndex - 1 ] ;
288- path . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
288+ pathBuilder . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
289289
290290 var endPoint = target [ pointIndex ] ;
291- path . LineTo ( endPoint . X * ppu , endPoint . Y * ppu ) ;
291+ pathBuilder . LineTo ( endPoint . X * ppu , endPoint . Y * ppu ) ;
292292 }
293293 else if ( type == PathOperation . Quad )
294294 {
295295 var pointIndex = target . GetSegmentPointIndex ( segmentIndex ) ;
296296 var startPoint = target [ pointIndex - 1 ] ;
297- path . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
297+ pathBuilder . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
298298
299299 var controlPoint = target [ pointIndex ++ ] ;
300300 var endPoint = target [ pointIndex ] ;
301- path . QuadTo ( controlPoint . X * ppu , controlPoint . Y * ppu , endPoint . X * ppu , endPoint . Y * ppu ) ;
301+ pathBuilder . QuadTo ( controlPoint . X * ppu , controlPoint . Y * ppu , endPoint . X * ppu , endPoint . Y * ppu ) ;
302302 }
303303 else if ( type == PathOperation . Cubic )
304304 {
305305 var pointIndex = target . GetSegmentPointIndex ( segmentIndex ) ;
306306 var startPoint = target [ pointIndex - 1 ] ;
307- path . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
307+ pathBuilder . MoveTo ( startPoint . X * ppu , startPoint . Y * ppu ) ;
308308
309309 var controlPoint1 = target [ pointIndex ++ ] ;
310310 var controlPoint2 = target [ pointIndex ++ ] ;
311311 var endPoint = target [ pointIndex ] ;
312- path . CubicTo ( controlPoint1 . X * ppu , controlPoint1 . Y * ppu , controlPoint2 . X * ppu , controlPoint2 . Y * ppu , endPoint . X * ppu , endPoint . Y * ppu ) ;
312+ pathBuilder . CubicTo ( controlPoint1 . X * ppu , controlPoint1 . Y * ppu , controlPoint2 . X * ppu , controlPoint2 . Y * ppu , endPoint . X * ppu , endPoint . Y * ppu ) ;
313313 }
314314 else if ( type == PathOperation . Arc )
315315 {
@@ -338,10 +338,10 @@ public static SKPath AsSkiaPathFromSegment(this PathF target, int segmentIndex,
338338 if ( ! clockwise )
339339 sweep *= - 1 ;
340340
341- path . AddArc ( rect , startAngle , sweep ) ;
341+ pathBuilder . AddArc ( rect , startAngle , sweep ) ;
342342 }
343343
344- return path ;
344+ return pathBuilder . Detach ( ) ;
345345 }
346346
347347 /// <summary>
@@ -357,7 +357,7 @@ public static SKPath AsRotatedAndroidPath(this PathF target, PointF center, floa
357357 {
358358 ppu = zoom * ppu ;
359359
360- var path = new SKPath ( ) ;
360+ using var pathBuilder = new SKPathBuilder ( ) ;
361361
362362 var pointIndex = 0 ;
363363 var arcAngleIndex = 0 ;
@@ -368,18 +368,18 @@ public static SKPath AsRotatedAndroidPath(this PathF target, PointF center, floa
368368 if ( type == PathOperation . Move )
369369 {
370370 var point = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
371- path . MoveTo ( point . X * ppu , point . Y * ppu ) ;
371+ pathBuilder . MoveTo ( point . X * ppu , point . Y * ppu ) ;
372372 }
373373 else if ( type == PathOperation . Line )
374374 {
375375 var endPoint = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
376- path . LineTo ( endPoint . X * ppu , endPoint . Y * ppu ) ;
376+ pathBuilder . LineTo ( endPoint . X * ppu , endPoint . Y * ppu ) ;
377377 }
378378 else if ( type == PathOperation . Quad )
379379 {
380380 var controlPoint1 = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
381381 var endPoint = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
382- path . QuadTo (
382+ pathBuilder . QuadTo (
383383 controlPoint1 . X * ppu ,
384384 controlPoint1 . Y * ppu ,
385385 endPoint . X * ppu ,
@@ -390,7 +390,7 @@ public static SKPath AsRotatedAndroidPath(this PathF target, PointF center, floa
390390 var controlPoint1 = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
391391 var controlPoint2 = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
392392 var endPoint = target . GetRotatedPoint ( pointIndex ++ , center , angle ) ;
393- path . CubicTo (
393+ pathBuilder . CubicTo (
394394 controlPoint1 . X * ppu ,
395395 controlPoint1 . Y * ppu ,
396396 controlPoint2 . X * ppu ,
@@ -423,15 +423,15 @@ public static SKPath AsRotatedAndroidPath(this PathF target, PointF center, floa
423423 if ( ! clockwise )
424424 sweep *= - 1 ;
425425
426- path . AddArc ( rect , startAngle , sweep ) ;
426+ pathBuilder . AddArc ( rect , startAngle , sweep ) ;
427427 }
428428 else if ( type == PathOperation . Close )
429429 {
430- path . Close ( ) ;
430+ pathBuilder . Close ( ) ;
431431 }
432432 }
433433
434- return path ;
434+ return pathBuilder . Detach ( ) ;
435435 }
436436
437437 /// <summary>
0 commit comments