TestRenderRoot.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Avalonia.Rendering;
  2. using System.Threading.Tasks;
  3. using System;
  4. using System.Collections.Generic;
  5. using Avalonia.Controls;
  6. using Avalonia.Platform;
  7. namespace Avalonia.Skia.RenderTests
  8. {
  9. public class TestRenderRoot : Decorator, IRenderRoot
  10. {
  11. private readonly IRenderTarget _renderTarget;
  12. public Size ClientSize { get; private set; }
  13. internal IRenderer Renderer { get; private set; }
  14. IRenderer IRenderRoot.Renderer => Renderer;
  15. IHitTester IRenderRoot.HitTester => new NullHitTester();
  16. public double RenderScaling { get; }
  17. public TestRenderRoot(double scaling, IRenderTarget renderTarget)
  18. {
  19. _renderTarget = renderTarget;
  20. RenderScaling = scaling;
  21. }
  22. class NullHitTester : IHitTester
  23. {
  24. public IEnumerable<Visual> HitTest(Point p, Visual root, Func<Visual, bool> filter) => Array.Empty<Visual>();
  25. public Visual HitTestFirst(Point p, Visual root, Func<Visual, bool> filter) => null;
  26. }
  27. internal void Initialize(IRenderer renderer, Control child)
  28. {
  29. Renderer = renderer;
  30. Child = child;
  31. Width = child.Width;
  32. Height = child.Height;
  33. ClientSize = new Size(Width, Height);
  34. Measure(ClientSize);
  35. Arrange(new Rect(ClientSize));
  36. }
  37. public IRenderTarget CreateRenderTarget() => _renderTarget;
  38. public void Invalidate(Rect rect)
  39. {
  40. }
  41. public Point PointToClient(PixelPoint point) => point.ToPoint(RenderScaling);
  42. public PixelPoint PointToScreen(Point point) => PixelPoint.FromPoint(point, RenderScaling);
  43. }
  44. }