Browse Source

Merge branch 'irenderer' of https://github.com/ncarrillo/Perspex into ncarrillo-irenderer

pull/119/head
Steven Kirk 11 years ago
parent
commit
f71dcf3917
  1. 21
      src/Gtk/Perspex.Cairo/Media/DrawingContext.cs
  2. 18
      src/Gtk/Perspex.Cairo/Renderer.cs
  3. 4
      src/Perspex.SceneGraph/Platform/IRenderer.cs
  4. 3
      src/Perspex.SceneGraph/Rendering/RendererBase.cs
  5. 5
      src/Windows/Perspex.Direct2D1/Renderer.cs

21
src/Gtk/Perspex.Cairo/Media/DrawingContext.cs

@ -24,19 +24,13 @@ namespace Perspex.Cairo.Media
/// The cairo context.
/// </summary>
private Cairo.Context context;
/// <summary>
/// The cairo surface.
/// </summary>
private Cairo.Surface surface;
/// <summary>
/// Initializes a new instance of the <see cref="DrawingContext"/> class.
/// </summary>
/// <param name="surface">The target surface.</param>
public DrawingContext(Cairo.Surface surface)
{
this.surface = surface;
this.context = new Cairo.Context(surface);
this.CurrentTransform = Matrix.Identity;
}
@ -47,7 +41,6 @@ namespace Perspex.Cairo.Media
/// <param name="surface">The GDK drawable.</param>
public DrawingContext(Gdk.Drawable drawable)
{
this.Drawable = drawable;
this.context = Gdk.CairoHelper.Create(drawable);
this.CurrentTransform = Matrix.Identity;
}
@ -58,24 +51,12 @@ namespace Perspex.Cairo.Media
private set;
}
public Gdk.Drawable Drawable
{
get;
private set;
}
/// <summary>
/// Ends a draw operation.
/// </summary>
public void Dispose()
{
this.context.Dispose();
// if (this.surface is Cairo.Win32Surface)
// {
if (this.surface != null)
this.surface.Dispose();
// }
}
public void DrawImage(IBitmap bitmap, double opacity, Rect sourceRect, Rect destRect)

18
src/Gtk/Perspex.Cairo/Renderer.cs

@ -20,7 +20,8 @@ namespace Perspex.Cairo
/// </summary>
public class Renderer : RendererBase
{
private ImageSurface surface;
private Surface surface;
private Gdk.Window window;
/// <summary>
/// Initializes a new instance of the <see cref="Renderer"/> class.
@ -46,6 +47,7 @@ namespace Perspex.Cairo
{
// Don't need to do anything here.
}
/// <summary>
/// Creates a cairo surface that targets a platform-specific resource.
@ -54,16 +56,16 @@ namespace Perspex.Cairo
/// <returns>A surface wrapped in an <see cref="IDrawingContext"/>.</returns>
protected override IDrawingContext CreateDrawingContext(IPlatformHandle handle)
{
switch (handle.HandleDescriptor)
{
case "HWND":
return new DrawingContext(new Win32Surface(GetDC(handle.Handle)));
case "RTB":
return new DrawingContext(this.surface);
case "HDC":
return new DrawingContext(new Win32Surface(handle.Handle));
case "GdkWindow":
return new DrawingContext(new Gdk.Window(handle.Handle));
if (this.window == null)
this.window = new Gdk.Window(handle.Handle);
return new DrawingContext(this.window);
default:
throw new NotSupportedException(string.Format(
"Don't know how to create a Cairo renderer from a '{0}' handle",
@ -73,5 +75,9 @@ namespace Perspex.Cairo
[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
public override void Dispose()
{
}
}
}

4
src/Perspex.SceneGraph/Platform/IRenderer.cs

@ -6,6 +6,8 @@
namespace Perspex.Platform
{
using System;
/// <summary>
/// Defines a renderer.
/// </summary>
@ -15,7 +17,7 @@ namespace Perspex.Platform
/// as RenderBase has a default implementation for the non-platform specific parts of a
/// renderer.
/// </remarks>
public interface IRenderer
public interface IRenderer : IDisposable
{
/// <summary>
/// Gets the number of times <see cref="Render"/> has been called.

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

@ -6,6 +6,7 @@
namespace Perspex.Rendering
{
using System;
using System.Linq;
using Perspex.Media;
using Perspex.Platform;
@ -27,6 +28,8 @@ namespace Perspex.Rendering
private set;
}
public abstract void Dispose();
/// <summary>
/// Renders the specified visual.
/// </summary>

5
src/Windows/Perspex.Direct2D1/Renderer.cs

@ -108,5 +108,10 @@ namespace Perspex.Direct2D1
{
return new DrawingContext(this.renderTarget, this.DirectWriteFactory);
}
public override void Dispose()
{
this.renderTarget.Dispose();
}
}
}

Loading…
Cancel
Save