ClipControl.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Numerics;
  2. using Robust.Client.UserInterface;
  3. using Robust.Client.UserInterface.Controls;
  4. namespace Content.Client.UserInterface.Controls;
  5. /// <summary>
  6. /// Pretends to child controls that there's infinite space.
  7. /// This can be used to make something like a <see cref="RichTextLabel"/> clip instead of wrapping.
  8. /// </summary>
  9. public sealed class ClipControl : Control
  10. {
  11. private bool _clipHorizontal = true;
  12. private bool _clipVertical = true;
  13. public bool ClipHorizontal
  14. {
  15. get => _clipHorizontal;
  16. set
  17. {
  18. _clipHorizontal = value;
  19. InvalidateMeasure();
  20. }
  21. }
  22. public bool ClipVertical
  23. {
  24. get => _clipVertical;
  25. set
  26. {
  27. _clipVertical = value;
  28. InvalidateMeasure();
  29. }
  30. }
  31. protected override Vector2 MeasureOverride(Vector2 availableSize)
  32. {
  33. if (ClipHorizontal)
  34. availableSize = availableSize with { X = float.PositiveInfinity };
  35. if (ClipVertical)
  36. availableSize = availableSize with { Y = float.PositiveInfinity };
  37. return base.MeasureOverride(availableSize);
  38. }
  39. protected override Vector2 ArrangeOverride(Vector2 finalSize)
  40. {
  41. foreach (var child in Children)
  42. {
  43. child.Arrange(UIBox2.FromDimensions(Vector2.Zero, child.DesiredSize));
  44. }
  45. return finalSize;
  46. }
  47. }