CanvasMatrix.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. namespace QuestPDF.Infrastructure;
  3. internal readonly struct CanvasMatrix
  4. {
  5. public readonly float ScaleX;
  6. public readonly float ScaleY;
  7. public readonly float TranslateX;
  8. public readonly float TranslateY;
  9. public readonly float SkewX;
  10. public readonly float SkewY;
  11. public CanvasMatrix(float scaleX, float scaleY, float translateX, float translateY, float skewX, float skewY)
  12. {
  13. ScaleX = scaleX;
  14. ScaleY = scaleY;
  15. TranslateX = translateX;
  16. TranslateY = translateY;
  17. SkewX = skewX;
  18. SkewY = skewY;
  19. }
  20. public CanvasMatrix Translate(float x, float y)
  21. {
  22. return new CanvasMatrix(ScaleX, ScaleY, TranslateX + x, TranslateY + y, SkewX, SkewY);
  23. }
  24. public CanvasMatrix Scale(float x, float y)
  25. {
  26. return new CanvasMatrix(ScaleX * x, ScaleY * y, TranslateX, TranslateY, SkewX, SkewY);
  27. }
  28. public CanvasMatrix Rotate(float angle)
  29. {
  30. var radians = angle * MathF.PI / 180;
  31. var sin = MathF.Sin(radians);
  32. var cos = MathF.Cos(radians);
  33. return new CanvasMatrix(
  34. ScaleX * cos - ScaleY * sin,
  35. ScaleX * sin + ScaleY * cos,
  36. TranslateX,
  37. TranslateY,
  38. SkewX,
  39. SkewY
  40. );
  41. }
  42. }