Line data Source code
1 : import 'dart:ui'; 2 : 3 : import '../../palette.dart'; 4 : import 'vector2.dart'; 5 : 6 : export 'dart:ui' show Canvas; 7 : 8 : extension CanvasExtension on Canvas { 9 0 : void scaleVector(Vector2 vector) { 10 0 : scale(vector.x, vector.y); 11 : } 12 : 13 0 : void translateVector(Vector2 vector) { 14 0 : translate(vector.x, vector.y); 15 : } 16 : 17 : /// Renders a point as a square of size [size] (default 1 logical pixel) using 18 : /// the provided [paint] (default solid magenta). 19 : /// 20 : /// This is mostly useful for debugging. 21 1 : void renderPoint( 22 : Vector2 point, { 23 : double size = 1.0, 24 : Paint? paint, 25 : }) { 26 5 : final rect = (point - Vector2.all(size / 2)) & Vector2.all(size); 27 2 : drawRect(rect, paint ?? BasicPalette.magenta.paint()); 28 : } 29 : 30 : /// Utility method to render stuff on a specific place in an isolated way. 31 : /// 32 : /// Some render methods don't allow to pass a vector. 33 : /// This method translate the canvas before rendering your fn. 34 : /// The changes are reset after the fn is run. 35 0 : void renderAt(Vector2 p, void Function(Canvas) fn) { 36 0 : save(); 37 0 : translateVector(p); 38 0 : fn(this); 39 0 : restore(); 40 : } 41 : 42 : /// Utility method to render stuff rotated at specific angle. 43 : /// 44 : /// It rotates the canvas around the center of rotation. 45 : /// The changes are reset after the fn is run. 46 0 : void renderRotated( 47 : double angle, 48 : Vector2 rotationCenter, 49 : void Function(Canvas) fn, 50 : ) { 51 0 : save(); 52 0 : translateVector(rotationCenter); 53 0 : rotate(angle); 54 0 : translateVector(-rotationCenter); 55 0 : fn(this); 56 0 : restore(); 57 : } 58 : }