2
0

MockChild.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using QuestPDF.Drawing;
  2. using QuestPDF.Helpers;
  3. namespace QuestPDF.LayoutTests.TestEngine;
  4. internal class MockDrawingCommand
  5. {
  6. public string MockId { get; set; }
  7. public int PageNumber { get; set; }
  8. public Position Position { get; set; }
  9. public Size Size { get; set; }
  10. }
  11. internal class ElementMock : Element
  12. {
  13. public string MockId { get; set; }
  14. public float TotalWidth { get; set; }
  15. public float TotalHeight { get; set; }
  16. private float HeightOffset { get; set; }
  17. internal List<MockDrawingCommand> DrawingCommands { get; } = new();
  18. internal override SpacePlan Measure(Size availableSpace)
  19. {
  20. if (TotalWidth > availableSpace.Width)
  21. return SpacePlan.Wrap();
  22. if (availableSpace.Height < Size.Epsilon)
  23. return SpacePlan.Wrap();
  24. var remainingHeight = TotalHeight - HeightOffset;
  25. if (remainingHeight < Size.Epsilon)
  26. return SpacePlan.FullRender(Size.Zero);
  27. if (remainingHeight > availableSpace.Height)
  28. return SpacePlan.PartialRender(TotalWidth, availableSpace.Height);
  29. return SpacePlan.FullRender(TotalWidth, remainingHeight);
  30. }
  31. internal override void Draw(Size availableSpace)
  32. {
  33. var height = Math.Min(TotalHeight - HeightOffset, availableSpace.Height);
  34. var size = new Size(TotalWidth, height);
  35. HeightOffset += height;
  36. Canvas.DrawRectangle(Position.Zero, size, Colors.Grey.Medium);
  37. if (Canvas is not SkiaCanvasBase canvasBase)
  38. return;
  39. var matrix = canvasBase.Canvas.TotalMatrix;
  40. DrawingCommands.Add(new MockDrawingCommand
  41. {
  42. MockId = MockId,
  43. PageNumber = PageContext.CurrentPage,
  44. Position = new Position(matrix.TransX / matrix.ScaleX, matrix.TransY / matrix.ScaleY),
  45. Size = availableSpace
  46. });
  47. if (HeightOffset > TotalHeight - Size.Epsilon)
  48. HeightOffset = 0;
  49. }
  50. }