Browse Source

Moved render-related code from TopLevel to a separate class

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

4
src/Gtk/Perspex.Cairo/CairoPlatform.cs

@ -36,9 +36,9 @@ namespace Perspex.Cairo
return new FormattedTextImpl(s_pangoContext, text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight); 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) public IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height)

8
src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs

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

2
src/Gtk/Perspex.Cairo/Media/TileBrushes.cs

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

2
src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj

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

8
src/Gtk/Perspex.Cairo/Renderer.cs → src/Gtk/Perspex.Cairo/Viewport.cs

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

2
src/Perspex.Application/Application.cs

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

1
src/Perspex.Controls/Perspex.Controls.csproj

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

62
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();
};
}
}
}

49
src/Perspex.Controls/TopLevel.cs

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

6
src/Perspex.SceneGraph/Perspex.SceneGraph.csproj

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

4
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="handle">The platform handle for the renderer.</param>
/// <param name="width">The initial width of the render.</param> /// <param name="width">The initial width of the render.</param>
/// <param name="height">The initial height of the render.</param> /// <param name="height">The initial height of the render.</param>
/// <returns>An <see cref="IRenderer"/>.</returns> /// <returns>An <see cref="IRenderingViewport"/>.</returns>
IRenderer CreateRenderer(IPlatformHandle handle, double width, double height); IRenderingViewport CreateRenderer(IPlatformHandle handle, double width, double height);
/// <summary> /// <summary>
/// Creates a render target bitmap implementation. /// Creates a render target bitmap implementation.

2
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 /// as RenderBase has a default implementation for the non-platform specific parts of a
/// renderer. /// renderer.
/// </remarks> /// </remarks>
public interface IRenderer : IDisposable public interface IRenderingViewport : IDisposable
{ {
/// <summary> /// <summary>
/// Creates an <see cref="IDrawingContext"/> for a rendering session. /// Creates an <see cref="IDrawingContext"/> for a rendering session.

4
src/Perspex.SceneGraph/Rendering/IRenderManager.cs → src/Perspex.SceneGraph/Rendering/IRenderQueueManager.cs

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

7
src/Perspex.SceneGraph/Rendering/IRenderRoot.cs

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

2
src/Perspex.SceneGraph/Rendering/RenderManager.cs → src/Perspex.SceneGraph/Rendering/RenderQueueManager.cs

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

20
src/Perspex.SceneGraph/Rendering/RendererBase.cs

@ -12,47 +12,47 @@ namespace Perspex.Rendering
/// Base class for standard renderers. /// Base class for standard renderers.
/// </summary> /// </summary>
/// <remarks> /// <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> /// </remarks>
public static class RendererMixin public static class RendererMixin
{ {
/// <summary> /// <summary>
/// Renders the specified visual. /// Renders the specified visual.
/// </summary> /// </summary>
/// <param name="renderer">IRenderer instance</param> /// <param name="viewport">IRenderer instance</param>
/// <param name="visual">The visual to render.</param> /// <param name="visual">The visual to render.</param>
/// <param name="target">An optional platform-specific handle.</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); ctx.Render(visual);
} }
/// <summary> /// <summary>
/// Renders the specified visual. /// Renders the specified visual.
/// </summary> /// </summary>
/// <param name="renderer">IRenderer instance</param> /// <param name="viewport">IRenderer instance</param>
/// <param name="target">An optional platform-specific handle.</param> /// <param name="target">An optional platform-specific handle.</param>
/// <param name="visual">The visual to render.</param> /// <param name="visual">The visual to render.</param>
/// <param name="translation">The current translation.</param> /// <param name="translation">The current translation.</param>
/// <param name="transform">The current transform.</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); ctx.Render(visual, translation, transform);
} }
/// <summary> /// <summary>
/// Renders the specified visual with the specified transform and clip. /// Renders the specified visual with the specified transform and clip.
/// </summary> /// </summary>
/// <param name="renderer">IRenderer instance</param> /// <param name="viewport">IRenderer instance</param>
/// <param name="target">An optional platform-specific handle.</param> /// <param name="target">An optional platform-specific handle.</param>
/// <param name="visual">The visual to render.</param> /// <param name="visual">The visual to render.</param>
/// <param name="transform">The transform.</param> /// <param name="transform">The transform.</param>
/// <param name="clip">An optional clip rectangle.</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); context.Render(visual, transform, clip);
} }

6
src/Perspex.SceneGraph/Visual.cs

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

4
src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs

@ -41,11 +41,11 @@ namespace Perspex.Direct2D1
return new FormattedTextImpl(text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight); 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") if (handle.HandleDescriptor == "HWND")
{ {
return new Renderer(handle.Handle, width, height); return new Viewport(handle.Handle, width, height);
} }
else else
{ {

4
src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs

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

2
src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs

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

2
src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj

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

10
src/Windows/Perspex.Direct2D1/Renderer.cs → src/Windows/Perspex.Direct2D1/Viewport.cs

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

4
tests/Perspex.Controls.UnitTests/ControlTests.cs

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

4
tests/Perspex.Controls.UnitTests/TestRoot.cs

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

6
tests/Perspex.Controls.UnitTests/TopLevelTests.cs

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

4
tests/Perspex.Layout.UnitTests/FullLayoutTests.cs

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

4
tests/Perspex.SceneGraph.UnitTests/TestRoot.cs

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

Loading…
Cancel
Save