ElementObserver.cs 1.2 KB

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