Browse Source

Moved render-related code from TopLevel to a separate class

(needed for wm stuff)
Nikita Tsukanov 10 years ago
parent
commit
c8e617231c
27 changed files with 130 additions and 103 deletions
  1. 2 2
      src/Gtk/Perspex.Cairo/CairoPlatform.cs
  2. 4 4
      src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
  3. 1 1
      src/Gtk/Perspex.Cairo/Media/TileBrushes.cs
  4. 1 1
      src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj
  5. 4 4
      src/Gtk/Perspex.Cairo/Viewport.cs
  6. 1 1
      src/Perspex.Application/Application.cs
  7. 1 0
      src/Perspex.Controls/Perspex.Controls.csproj
  8. 62 0
      src/Perspex.Controls/Platform/ITopLevelRenderer.cs
  9. 9 40
      src/Perspex.Controls/TopLevel.cs
  10. 3 3
      src/Perspex.SceneGraph/Perspex.SceneGraph.csproj
  11. 2 2
      src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs
  12. 1 1
      src/Perspex.SceneGraph/Platform/IRenderingViewport.cs
  13. 2 2
      src/Perspex.SceneGraph/Rendering/IRenderQueueManager.cs
  14. 1 6
      src/Perspex.SceneGraph/Rendering/IRenderRoot.cs
  15. 1 1
      src/Perspex.SceneGraph/Rendering/RenderQueueManager.cs
  16. 10 10
      src/Perspex.SceneGraph/Rendering/RendererBase.cs
  17. 3 3
      src/Perspex.SceneGraph/Visual.cs
  18. 2 2
      src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs
  19. 2 2
      src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
  20. 1 1
      src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs
  21. 1 1
      src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
  22. 5 5
      src/Windows/Perspex.Direct2D1/Viewport.cs
  23. 2 2
      tests/Perspex.Controls.UnitTests/ControlTests.cs
  24. 2 2
      tests/Perspex.Controls.UnitTests/TestRoot.cs
  25. 3 3
      tests/Perspex.Controls.UnitTests/TopLevelTests.cs
  26. 2 2
      tests/Perspex.Layout.UnitTests/FullLayoutTests.cs
  27. 2 2
      tests/Perspex.SceneGraph.UnitTests/TestRoot.cs

+ 2 - 2
src/Gtk/Perspex.Cairo/CairoPlatform.cs

@@ -36,9 +36,9 @@ namespace Perspex.Cairo
             return new FormattedTextImpl(s_pangoContext, text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight);
         }
 
-        public IRenderer CreateRenderer(IPlatformHandle handle, double width, double height)
+        public IRenderingViewport CreateRenderer(IPlatformHandle handle, double width, double height)
         {
-            return new Renderer(handle, width, height);
+            return new Viewport(handle, width, height);
         }
 
         public IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height)

+ 4 - 4
src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs

@@ -14,7 +14,7 @@ namespace Perspex.Cairo.Media.Imaging
         public RenderTargetBitmapImpl(Cairo.ImageSurface surface)
         {
             Surface = surface;
-            renderer = new Renderer(Surface);
+            viewport = new Viewport(Surface);
         }
 
         public int PixelWidth => Surface.Width;
@@ -23,7 +23,7 @@ namespace Perspex.Cairo.Media.Imaging
 
         public void Dispose()
         {
-            renderer.Dispose();
+            viewport.Dispose();
         }
 
         public Cairo.ImageSurface Surface
@@ -31,10 +31,10 @@ namespace Perspex.Cairo.Media.Imaging
             get;
         }
 
-        private Renderer renderer;
+        private Viewport viewport;
         public void Render(IVisual visual)
         {
-            renderer.Render(visual, new PlatformHandle(IntPtr.Zero, "RTB"));
+            viewport.Render(visual, new PlatformHandle(IntPtr.Zero, "RTB"));
         }
 
         public void Save(string fileName)

+ 1 - 1
src/Gtk/Perspex.Cairo/Media/TileBrushes.cs

@@ -111,7 +111,7 @@ namespace Perspex.Cairo.Media
                     scale,
                     translate,
                     out drawRect);
-                var renderer = new Renderer(intermediate);
+                var renderer = new Viewport(intermediate);
 
                 context.Rectangle(drawRect.ToCairo());
                 context.Clip();

+ 1 - 1
src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj

@@ -61,7 +61,7 @@
     <Compile Include="Media\RadialGradientBrushImpl.cs" />
     <Compile Include="Media\TileBrushes.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Renderer.cs" />
+    <Compile Include="Viewport.cs" />
     <Compile Include="CairoExtensions.cs" />
     <Compile Include="Media\StreamGeometryContextImpl.cs" />
     <Compile Include="Media\StreamGeometryImpl.cs" />

+ 4 - 4
src/Gtk/Perspex.Cairo/Renderer.cs → src/Gtk/Perspex.Cairo/Viewport.cs

@@ -15,22 +15,22 @@ namespace Perspex.Cairo
     /// <summary>
     /// A cairo renderer.
     /// </summary>
-    public class Renderer : IRenderer
+    public class Viewport : IRenderingViewport
     {
         private readonly Surface _surface;
         private Gdk.Window _window;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Renderer"/> class.
+        /// Initializes a new instance of the <see cref="Viewport"/> class.
         /// </summary>
         /// <param name="handle">The window handle.</param>
         /// <param name="width">The width of the window.</param>
         /// <param name="height">The height of the window.</param>
-        public Renderer(IPlatformHandle handle, double width, double height)
+        public Viewport(IPlatformHandle handle, double width, double height)
         {
         }
 
-        public Renderer(ImageSurface surface)
+        public Viewport(ImageSurface surface)
         {
             _surface = surface;
         }

+ 1 - 1
src/Perspex.Application/Application.cs

@@ -168,7 +168,7 @@ namespace Perspex
                 .Bind<IKeyboardNavigationHandler>().ToTransient<KeyboardNavigationHandler>()
                 .Bind<IStyler>().ToConstant(_styler)
                 .Bind<ILayoutManager>().ToTransient<LayoutManager>()
-                .Bind<IRenderManager>().ToTransient<RenderManager>();
+                .Bind<IRenderQueueManager>().ToTransient<RenderQueueManager>();
         }
 
         /// <summary>

+ 1 - 0
src/Perspex.Controls/Perspex.Controls.csproj

@@ -43,6 +43,7 @@
     </Compile>
     <Compile Include="DockPanel.cs" />
     <Compile Include="HotkeyManager.cs" />
+    <Compile Include="Platform\ITopLevelRenderer.cs" />
     <Compile Include="SystemDialog.cs" />
     <Compile Include="Generators\ITreeItemContainerGenerator.cs" />
     <Compile Include="Generators\ItemContainers.cs" />

+ 62 - 0
src/Perspex.Controls/Platform/ITopLevelRenderer.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Perspex.Platform;
+using Perspex.Rendering;
+
+namespace Perspex.Controls.Platform
+{
+    public interface ITopLevelRenderer
+    {
+        void Attach(TopLevel topLevel);
+    }
+
+
+    class DefaultTopLevelRenderer : ITopLevelRenderer
+    {
+
+        public void Attach(TopLevel topLevel)
+        {
+            var resources = new List<IDisposable>();
+            var initialClientSize = topLevel.PlatformImpl.ClientSize;
+
+
+            var queueManager = ((IRenderRoot)topLevel).RenderQueueManager;
+
+            if (queueManager == null)
+                return;
+
+            var platformRender = PerspexLocator.Current.GetService<IPlatformRenderInterface>();
+            if(platformRender == null)
+                return;
+
+            var viewport = platformRender
+                .CreateRenderer(topLevel.PlatformImpl.Handle, initialClientSize.Width, initialClientSize.Height);
+            resources.Add(viewport);
+
+
+            resources.Add(topLevel.GetObservable(TopLevel.ClientSizeProperty).Subscribe(clientSize =>
+            {
+                viewport.Resize((int) clientSize.Width, (int) clientSize.Height);
+            }));
+            resources.Add(queueManager.RenderNeeded.Subscribe(_
+                => topLevel.PlatformImpl.Invalidate(new Rect(topLevel.ClientSize))));
+
+            topLevel.PlatformImpl.Paint = (rect, handle) =>
+            {
+                viewport.Render(topLevel, handle);
+                queueManager.RenderFinished();
+            };
+
+            topLevel.Closed += delegate
+            {
+                foreach (var disposable in resources)
+                    disposable.Dispose();
+                resources.Clear();
+            };
+
+        }
+    }
+}

+ 9 - 40
src/Perspex.Controls/TopLevel.cs

@@ -4,6 +4,7 @@
 using System;
 using System.Reactive.Disposables;
 using System.Reactive.Linq;
+using Perspex.Controls.Platform;
 using Perspex.Controls.Primitives;
 using Perspex.Input;
 using Perspex.Input.Raw;
@@ -43,8 +44,8 @@ namespace Perspex.Controls
         public static readonly PerspexProperty<IInputElement> PointerOverElementProperty =
             PerspexProperty.Register<TopLevel, IInputElement>(nameof(IInputRoot.PointerOverElement));
 
-        private readonly IRenderManager _renderManager;
-        private readonly IRenderer _renderer;
+        private readonly IRenderQueueManager _renderQueueManager;
+        private readonly IRenderingViewport _viewport;
         private readonly IInputManager _inputManager;
         private readonly IAccessKeyHandler _accessKeyHandler;
         private readonly IKeyboardNavigationHandler _keyboardNavigationHandler;
@@ -92,21 +93,21 @@ namespace Perspex.Controls
             _inputManager = TryGetService<IInputManager>(dependencyResolver);
             _keyboardNavigationHandler = TryGetService<IKeyboardNavigationHandler>(dependencyResolver);
             LayoutManager = TryGetService<ILayoutManager>(dependencyResolver);
-            _renderManager = TryGetService<IRenderManager>(dependencyResolver);
+            _renderQueueManager = TryGetService<IRenderQueueManager>(dependencyResolver);
+            (TryGetService<ITopLevelRenderer>(dependencyResolver) ?? new DefaultTopLevelRenderer()).Attach(this);
 
             PlatformImpl.SetInputRoot(this);
             PlatformImpl.Activated = HandleActivated;
             PlatformImpl.Deactivated = HandleDeactivated;
             PlatformImpl.Closed = HandleClosed;
             PlatformImpl.Input = HandleInput;
-            PlatformImpl.Paint = HandlePaint;
             PlatformImpl.Resized = HandleResized;
 
             Size clientSize = ClientSize = PlatformImpl.ClientSize;
 
             if (renderInterface != null)
             {
-                _renderer = renderInterface.CreateRenderer(PlatformImpl.Handle, clientSize.Width, clientSize.Height);
+                _viewport = renderInterface.CreateRenderer(PlatformImpl.Handle, clientSize.Width, clientSize.Height);
             }
 
             if (LayoutManager != null)
@@ -116,11 +117,6 @@ namespace Perspex.Controls
                 LayoutManager.LayoutCompleted.Subscribe(_ => HandleLayoutCompleted());
             }
 
-            if (_renderManager != null)
-            {
-                _renderManager.RenderNeeded.Subscribe(_ => HandleRenderNeeded());
-            }
-
             if (_keyboardNavigationHandler != null)
             {
                 _keyboardNavigationHandler.SetOwner(this);
@@ -188,16 +184,11 @@ namespace Perspex.Controls
         {
             get;
         }
-
-        /// <summary>
-        /// Gets the window renderer.
-        /// </summary>
-        IRenderer IRenderRoot.Renderer => _renderer;
-
+        
         /// <summary>
         /// Gets the window render manager.
         /// </summary>
-        IRenderManager IRenderRoot.RenderManager => _renderManager;
+        IRenderQueueManager IRenderRoot.RenderQueueManager => _renderQueueManager;
 
         /// <summary>
         /// Gets the access key handler for the window.
@@ -297,7 +288,6 @@ namespace Perspex.Controls
             }
 
             ClientSize = clientSize;
-            _renderer.Resize((int)clientSize.Width, (int)clientSize.Height);
             LayoutManager.ExecuteLayoutPass();
             PlatformImpl.Invalidate(new Rect(clientSize));
         }
@@ -389,28 +379,7 @@ namespace Perspex.Controls
         /// </summary>
         private void HandleLayoutCompleted()
         {
-            _renderManager?.InvalidateRender(this);
-        }
-
-        /// <summary>
-        /// Handles a render request from <see cref="RenderManager.RenderNeeded"/>.
-        /// </summary>
-        private void HandleRenderNeeded()
-        {
-            Dispatcher.UIThread.InvokeAsync(
-                () => PlatformImpl.Invalidate(new Rect(ClientSize)),
-                DispatcherPriority.Render);
-        }
-
-        /// <summary>
-        /// Handles a paint request from <see cref="ITopLevelImpl.Paint"/>.
-        /// </summary>
-        /// <param name="rect">The rectangle to paint.</param>
-        /// <param name="handle">An optional platform-specific handle.</param>
-        private void HandlePaint(Rect rect, IPlatformHandle handle)
-        {
-            _renderer.Render(this, handle);
-            _renderManager.RenderFinished();
+            _renderQueueManager?.InvalidateRender(this);
         }
     }
 }

+ 3 - 3
src/Perspex.SceneGraph/Perspex.SceneGraph.csproj

@@ -105,7 +105,7 @@
     <Compile Include="Platform\IBitmapImpl.cs" />
     <Compile Include="Platform\IGeometryImpl.cs" />
     <Compile Include="Platform\IPlatformRenderInterface.cs" />
-    <Compile Include="Platform\IRenderer.cs" />
+    <Compile Include="Platform\IRenderingViewport.cs" />
     <Compile Include="Platform\IRenderTargetBitmapImpl.cs" />
     <Compile Include="Platform\IStreamGeometryContextImpl.cs" />
     <Compile Include="Platform\IStreamGeometryImpl.cs" />
@@ -114,9 +114,9 @@
     <Compile Include="RelativeRect.cs" />
     <Compile Include="Rect.cs" />
     <Compile Include="Rendering\IRenderRoot.cs" />
-    <Compile Include="Rendering\IRenderManager.cs" />
+    <Compile Include="Rendering\IRenderQueueManager.cs" />
     <Compile Include="Rendering\RendererBase.cs" />
-    <Compile Include="Rendering\RenderManager.cs" />
+    <Compile Include="Rendering\RenderQueueManager.cs" />
     <Compile Include="Size.cs" />
     <Compile Include="Thickness.cs" />
     <Compile Include="Vector.cs" />

+ 2 - 2
src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs

@@ -49,8 +49,8 @@ namespace Perspex.Platform
         /// <param name="handle">The platform handle for the renderer.</param>
         /// <param name="width">The initial width of the render.</param>
         /// <param name="height">The initial height of the render.</param>
-        /// <returns>An <see cref="IRenderer"/>.</returns>
-        IRenderer CreateRenderer(IPlatformHandle handle, double width, double height);
+        /// <returns>An <see cref="IRenderingViewport"/>.</returns>
+        IRenderingViewport CreateRenderer(IPlatformHandle handle, double width, double height);
 
         /// <summary>
         /// Creates a render target bitmap implementation.

+ 1 - 1
src/Perspex.SceneGraph/Platform/IRenderer.cs → src/Perspex.SceneGraph/Platform/IRenderingViewport.cs

@@ -15,7 +15,7 @@ namespace Perspex.Platform
     /// as RenderBase has a default implementation for the non-platform specific parts of a
     /// renderer.
     /// </remarks>
-    public interface IRenderer : IDisposable
+    public interface IRenderingViewport : IDisposable
     {
         /// <summary>
         /// Creates an <see cref="IDrawingContext"/> for a rendering session.

+ 2 - 2
src/Perspex.SceneGraph/Rendering/IRenderManager.cs → src/Perspex.SceneGraph/Rendering/IRenderQueueManager.cs

@@ -7,9 +7,9 @@ using System.Reactive;
 namespace Perspex.Rendering
 {
     /// <summary>
-    /// Defines the interface for a <see cref="RenderManager"/>.
+    /// Defines the interface for a <see cref="RenderQueueManager"/>.
     /// </summary>
-    public interface IRenderManager
+    public interface IRenderQueueManager
     {
         /// <summary>
         /// Gets an observable that is fired whenever a render is required.

+ 1 - 6
src/Perspex.SceneGraph/Rendering/IRenderRoot.cs

@@ -10,15 +10,10 @@ namespace Perspex.Rendering
     /// </summary>
     public interface IRenderRoot
     {
-        /// <summary>
-        /// Gets the renderer for the tree.
-        /// </summary>
-        IRenderer Renderer { get; }
-
         /// <summary>
         /// Gets the render manager which schedules renders.
         /// </summary>
-        IRenderManager RenderManager { get; }
+        IRenderQueueManager RenderQueueManager { get; }
 
         /// <summary>
         /// Translates a point to screen co-ordinates.

+ 1 - 1
src/Perspex.SceneGraph/Rendering/RenderManager.cs → src/Perspex.SceneGraph/Rendering/RenderQueueManager.cs

@@ -10,7 +10,7 @@ namespace Perspex.Rendering
     /// <summary>
     /// Schedules the rendering of a tree.
     /// </summary>
-    public class RenderManager : IRenderManager
+    public class RenderQueueManager : IRenderQueueManager
     {
         private readonly Subject<Unit> _renderNeeded = new Subject<Unit>();
 

+ 10 - 10
src/Perspex.SceneGraph/Rendering/RendererBase.cs

@@ -12,47 +12,47 @@ namespace Perspex.Rendering
     /// Base class for standard renderers.
     /// </summary>
     /// <remarks>
-    /// This class provides implements the platform-independent parts of <see cref="IRenderer"/>.
+    /// This class provides implements the platform-independent parts of <see cref="IRenderingViewport"/>.
     /// </remarks>
     public static class RendererMixin
     {
         /// <summary>
         /// Renders the specified visual.
         /// </summary>
-        /// <param name="renderer">IRenderer instance</param>
+        /// <param name="viewport">IRenderer instance</param>
         /// <param name="visual">The visual to render.</param>
         /// <param name="target">An optional platform-specific handle.</param>
-        public static void Render(this IRenderer renderer, IVisual visual, IPlatformHandle target)
+        public static void Render(this IRenderingViewport viewport, IVisual visual, IPlatformHandle target)
         {
-            using (var ctx = renderer.CreateDrawingContext(target))
+            using (var ctx = viewport.CreateDrawingContext(target))
                 ctx.Render(visual);
         }
 
         /// <summary>
         /// Renders the specified visual.
         /// </summary>
-        /// <param name="renderer">IRenderer instance</param>
+        /// <param name="viewport">IRenderer instance</param>
         /// <param name="target">An optional platform-specific handle.</param>
         /// <param name="visual">The visual to render.</param>
         /// <param name="translation">The current translation.</param>
         /// <param name="transform">The current transform.</param>
-        public static void Render(this IRenderer renderer, IVisual visual, IPlatformHandle target, Matrix translation, Matrix transform)
+        public static void Render(this IRenderingViewport viewport, IVisual visual, IPlatformHandle target, Matrix translation, Matrix transform)
         {
-            using (var ctx = renderer.CreateDrawingContext(target))
+            using (var ctx = viewport.CreateDrawingContext(target))
                 ctx.Render(visual, translation, transform);
         }
 
         /// <summary>
         /// Renders the specified visual with the specified transform and clip.
         /// </summary>
-        /// <param name="renderer">IRenderer instance</param>
+        /// <param name="viewport">IRenderer instance</param>
         /// <param name="target">An optional platform-specific handle.</param>
         /// <param name="visual">The visual to render.</param>
         /// <param name="transform">The transform.</param>
         /// <param name="clip">An optional clip rectangle.</param>
-        public static void Render(this IRenderer renderer, IVisual visual, IPlatformHandle target, Matrix transform, Rect? clip = null)
+        public static void Render(this IRenderingViewport viewport, IVisual visual, IPlatformHandle target, Matrix transform, Rect? clip = null)
         {
-            using (var context = renderer.CreateDrawingContext(target))
+            using (var context = viewport.CreateDrawingContext(target))
                 context.Render(visual, transform, clip);
         }
 

+ 3 - 3
src/Perspex.SceneGraph/Visual.cs

@@ -22,7 +22,7 @@ namespace Perspex
     /// </summary>
     /// <remarks>
     /// The <see cref="Visual"/> class acts as a node in the Perspex scene graph and holds
-    /// all the information needed for an <see cref="IRenderer"/> to render the control.
+    /// all the information needed for an <see cref="IRenderingViewport"/> to render the control.
     /// To traverse the scene graph (aka Visual Tree), use the extension methods defined
     /// in <see cref="VisualExtensions"/>.
     /// </remarks>
@@ -222,9 +222,9 @@ namespace Perspex
                 .OfType<IRenderRoot>()
                 .FirstOrDefault();
 
-            if (root != null && root.RenderManager != null)
+            if (root != null && root.RenderQueueManager != null)
             {
-                root.RenderManager.InvalidateRender(this);
+                root.RenderQueueManager.InvalidateRender(this);
             }
         }
 

+ 2 - 2
src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs

@@ -41,11 +41,11 @@ namespace Perspex.Direct2D1
             return new FormattedTextImpl(text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight);
         }
 
-        public IRenderer CreateRenderer(IPlatformHandle handle, double width, double height)
+        public IRenderingViewport CreateRenderer(IPlatformHandle handle, double width, double height)
         {
             if (handle.HandleDescriptor == "HWND")
             {
-                return new Renderer(handle.Handle, width, height);
+                return new Viewport(handle.Handle, width, height);
             }
             else
             {

+ 2 - 2
src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs

@@ -39,8 +39,8 @@ namespace Perspex.Direct2D1.Media
 
         public void Render(IVisual visual)
         {
-            Renderer renderer = new Renderer(_target);
-            renderer.Render(visual, null);
+            Viewport viewport = new Viewport(_target);
+            viewport.Render(visual, null);
         }
     }
 }

+ 1 - 1
src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs

@@ -51,7 +51,7 @@ namespace Perspex.Direct2D1.Media
                     scale,
                     translate,
                     out drawRect);
-                var renderer = new Renderer(intermediate);
+                var renderer = new Viewport(intermediate);
 
                 renderer.Render(visual, null, transform, drawRect);
 

+ 1 - 1
src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj

@@ -89,7 +89,7 @@
     <Compile Include="Media\FormattedTextImpl.cs" />
     <Compile Include="PrimitiveExtensions.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Renderer.cs" />
+    <Compile Include="Viewport.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />

+ 5 - 5
src/Windows/Perspex.Direct2D1/Renderer.cs → src/Windows/Perspex.Direct2D1/Viewport.cs

@@ -12,7 +12,7 @@ using DwFactory = SharpDX.DirectWrite.Factory;
 
 namespace Perspex.Direct2D1
 {
-    public class Renderer : IRenderer
+    public class Viewport : IRenderingViewport
     {
         /// <summary>
         /// The render target.
@@ -20,12 +20,12 @@ namespace Perspex.Direct2D1
         private readonly RenderTarget _renderTarget;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Renderer"/> class.
+        /// Initializes a new instance of the <see cref="Viewport"/> class.
         /// </summary>
         /// <param name="hwnd">The window handle.</param>
         /// <param name="width">The width of the window.</param>
         /// <param name="height">The height of the window.</param>
-        public Renderer(IntPtr hwnd, double width, double height)
+        public Viewport(IntPtr hwnd, double width, double height)
         {
             Direct2DFactory = PerspexLocator.Current.GetService<Factory>();
             DirectWriteFactory = PerspexLocator.Current.GetService<DwFactory>();
@@ -48,10 +48,10 @@ namespace Perspex.Direct2D1
         }
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Renderer"/> class.
+        /// Initializes a new instance of the <see cref="Viewport"/> class.
         /// </summary>
         /// <param name="renderTarget">The render target.</param>
-        public Renderer(RenderTarget renderTarget)
+        public Viewport(RenderTarget renderTarget)
         {
             Direct2DFactory = PerspexLocator.Current.GetService<Factory>();
             DirectWriteFactory = PerspexLocator.Current.GetService<DwFactory>();

+ 2 - 2
tests/Perspex.Controls.UnitTests/ControlTests.cs

@@ -76,12 +76,12 @@ namespace Perspex.Controls.UnitTests
                 get { throw new NotImplementedException(); }
             }
 
-            public IRenderer Renderer
+            public IRenderingViewport Viewport
             {
                 get { throw new NotImplementedException(); }
             }
 
-            public IRenderManager RenderManager
+            public IRenderQueueManager RenderQueueManager
             {
                 get { throw new NotImplementedException(); }
             }

+ 2 - 2
tests/Perspex.Controls.UnitTests/TestRoot.cs

@@ -15,12 +15,12 @@ namespace Perspex.Controls.UnitTests
 
         public ILayoutManager LayoutManager => new Mock<ILayoutManager>().Object;
 
-        public IRenderer Renderer
+        public IRenderingViewport Viewport
         {
             get { throw new NotImplementedException(); }
         }
 
-        public IRenderManager RenderManager
+        public IRenderQueueManager RenderQueueManager
         {
             get { throw new NotImplementedException(); }
         }

+ 3 - 3
tests/Perspex.Controls.UnitTests/TopLevelTests.cs

@@ -180,7 +180,7 @@ namespace Perspex.Controls.UnitTests
                 var target = new TestTopLevel(impl.Object);
                 completed.OnNext(Unit.Default);
 
-                var renderManagerMock = Mock.Get(PerspexLocator.Current.GetService<IRenderManager>());
+                var renderManagerMock = Mock.Get(PerspexLocator.Current.GetService<IRenderQueueManager>());
                 renderManagerMock.Verify(x => x.InvalidateRender(target));
             }
         }
@@ -313,7 +313,7 @@ namespace Perspex.Controls.UnitTests
             var globalStyles = new Mock<IGlobalStyles>();
             var layoutManager = fixture.Create<ILayoutManager>();
             var renderInterface = fixture.Create<IPlatformRenderInterface>();
-            var renderManager = fixture.Create<IRenderManager>();
+            var renderManager = fixture.Create<IRenderQueueManager>();
             var windowImpl = new Mock<IWindowImpl>();
             var theme = new Styles();
 
@@ -327,7 +327,7 @@ namespace Perspex.Controls.UnitTests
                 .Bind<ILayoutManager>().ToConstant(layoutManager)
                 .Bind<IPlatformRenderInterface>().ToConstant(renderInterface)
                 .Bind<IPlatformThreadingInterface>().ToConstant(new Mock<IPlatformThreadingInterface>().Object)
-                .Bind<IRenderManager>().ToConstant(renderManager)
+                .Bind<IRenderQueueManager>().ToConstant(renderManager)
                 .Bind<IStyler>().ToConstant(new Styler());
         }
 

+ 2 - 2
tests/Perspex.Layout.UnitTests/FullLayoutTests.cs

@@ -134,7 +134,7 @@ namespace Perspex.Layout.UnitTests
             var formattedText = fixture.Create<IFormattedTextImpl>();
             var globalStyles = new Mock<IGlobalStyles>();
             var renderInterface = fixture.Create<IPlatformRenderInterface>();
-            var renderManager = fixture.Create<IRenderManager>();
+            var renderManager = fixture.Create<IRenderQueueManager>();
             var theme = new DefaultTheme();
             var windowImpl = new Mock<IWindowImpl>();
 
@@ -148,7 +148,7 @@ namespace Perspex.Layout.UnitTests
                 .Bind<ILayoutManager>().ToConstant(new LayoutManager())
                 .Bind<IPlatformRenderInterface>().ToConstant(renderInterface)
                 .Bind<IPlatformThreadingInterface>().ToConstant(new Mock<IPlatformThreadingInterface>().Object)
-                .Bind<IRenderManager>().ToConstant(renderManager)
+                .Bind<IRenderQueueManager>().ToConstant(renderManager)
                 .Bind<IStyler>().ToConstant(new Styler())
                 .Bind<IWindowImpl>().ToConstant(windowImpl.Object);
         }

+ 2 - 2
tests/Perspex.SceneGraph.UnitTests/TestRoot.cs

@@ -9,12 +9,12 @@ namespace Perspex.SceneGraph.UnitTests
 {
     public class TestRoot : TestVisual, IRenderRoot
     {
-        public IRenderer Renderer
+        public IRenderingViewport Viewport
         {
             get { throw new NotImplementedException(); }
         }
 
-        public IRenderManager RenderManager
+        public IRenderQueueManager RenderQueueManager
         {
             get { throw new NotImplementedException(); }
         }