SolidBlock.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using QuestPDF.Drawing;
  2. using QuestPDF.Helpers;
  3. using QuestPDF.Skia;
  4. namespace QuestPDF.LayoutTests.TestEngine;
  5. internal class SolidBlock : Element, IStateful
  6. {
  7. public float TotalWidth { get; set; }
  8. public float TotalHeight { get; set; }
  9. internal override SpacePlan Measure(Size availableSpace)
  10. {
  11. if (IsRendered)
  12. return SpacePlan.Empty();
  13. if (TotalWidth > availableSpace.Width + Size.Epsilon)
  14. return SpacePlan.Wrap("The content requires more horizontal space than available.");
  15. if (TotalHeight > availableSpace.Height + Size.Epsilon)
  16. return SpacePlan.Wrap("The content requires more vertical space than available.");
  17. return SpacePlan.FullRender(TotalWidth, TotalHeight);
  18. }
  19. internal override void Draw(Size availableSpace)
  20. {
  21. using var paint = new SkPaint();
  22. paint.SetSolidColor(Colors.Grey.Medium);
  23. Canvas.DrawRectangle(Position.Zero, availableSpace, paint);
  24. IsRendered = true;
  25. }
  26. #region IStateful
  27. private bool IsRendered { get; set; }
  28. public void ResetState(bool hardReset = false)
  29. {
  30. if (hardReset)
  31. IsRendered = false;
  32. }
  33. public object GetState() => IsRendered;
  34. public void SetState(object state) => IsRendered = (bool) state;
  35. #endregion
  36. }