ElementObserver.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using System.Diagnostics;
  2. using QuestPDF.Helpers;
  3. using QuestPDF.Skia;
  4. namespace QuestPDF.LayoutTests.TestEngine;
  5. internal class ElementObserver : ContainerElement
  6. {
  7. public string? ObserverId { get; set; }
  8. public DrawingRecorder? DrawingRecorder { get; set; }
  9. internal override void Draw(Size availableSpace)
  10. {
  11. Debug.Assert(ObserverId != null);
  12. Debug.Assert(DrawingRecorder != null);
  13. var matrix = Canvas.GetCurrentMatrix();
  14. DrawingRecorder?.Record(new ElementDrawingEvent
  15. {
  16. ObserverId = ObserverId,
  17. PageNumber = PageContext.CurrentPage,
  18. Position = new Position(matrix.TranslateX, matrix.TranslateY),
  19. Size = ObserverId == "$document" ? Child.Measure(availableSpace) : availableSpace
  20. });
  21. var matrixBeforeDraw = Canvas.GetCurrentMatrix().ToMatrix4x4();
  22. base.Draw(availableSpace);
  23. var matrixAfterDraw = Canvas.GetCurrentMatrix().ToMatrix4x4();
  24. if (matrixAfterDraw != matrixBeforeDraw)
  25. throw new InvalidOperationException("Canvas state was not restored after drawing operation.");
  26. }
  27. }