diff --git a/src/Gtk/Perspex.Cairo/CairoPlatform.cs b/src/Gtk/Perspex.Cairo/CairoPlatform.cs
index 75f1c45668..5d9a003a93 100644
--- a/src/Gtk/Perspex.Cairo/CairoPlatform.cs
+++ b/src/Gtk/Perspex.Cairo/CairoPlatform.cs
@@ -36,7 +36,7 @@ namespace Perspex.Cairo
return new FormattedTextImpl(s_pangoContext, text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight);
}
- public IRenderTarget CreateRenderer(IPlatformHandle handle, double width, double height)
+ public IRenderTarget CreateRenderer(IPlatformHandle handle)
{
var window = handle as Gtk.Window;
if (window == null)
@@ -45,7 +45,7 @@ namespace Perspex.Cairo
handle.HandleDescriptor));
window.DoubleBuffered = true;
- return new RenderTarget(window, width, height);
+ return new RenderTarget(window);
}
public IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height)
diff --git a/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
index 4d8f05848a..bb12d1887e 100644
--- a/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -43,10 +43,5 @@ namespace Perspex.Cairo.Media.Imaging
{
return _renderTarget.CreateDrawingContext();
}
-
- void IRenderTarget.Resize(int width, int height)
- {
- throw new NotSupportedException();
- }
}
}
\ No newline at end of file
diff --git a/src/Gtk/Perspex.Cairo/RenderTarget.cs b/src/Gtk/Perspex.Cairo/RenderTarget.cs
index 2daab33fbe..ee02a279bd 100644
--- a/src/Gtk/Perspex.Cairo/RenderTarget.cs
+++ b/src/Gtk/Perspex.Cairo/RenderTarget.cs
@@ -27,7 +27,7 @@ namespace Perspex.Cairo
/// The window.
/// The width of the window.
/// The height of the window.
- public RenderTarget(Gtk.Window window, double width, double height)
+ public RenderTarget(Gtk.Window window)
{
_window = window;
}
@@ -37,16 +37,6 @@ namespace Perspex.Cairo
_surface = surface;
}
- ///
- /// Resizes the renderer.
- ///
- /// The new width.
- /// The new height.
- public void Resize(int width, int height)
- {
- // Don't need to do anything here.
- }
-
///
/// Creates a cairo surface that targets a platform-specific resource.
diff --git a/src/Perspex.Controls/Platform/ITopLevelRenderer.cs b/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
index 0f58dac76e..16456378b7 100644
--- a/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
+++ b/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
@@ -34,14 +34,8 @@ namespace Perspex.Controls.Platform
return;
var viewport = platformRender
- .CreateRenderer(topLevel.PlatformImpl.Handle, initialClientSize.Width, initialClientSize.Height);
+ .CreateRenderer(topLevel.PlatformImpl.Handle);
resources.Add(viewport);
-
-
- resources.Add(topLevel.GetObservable(TopLevel.ClientSizeProperty).Subscribe(clientSize =>
- {
- viewport.Resize((int) clientSize.Width, (int) clientSize.Height);
- }));
resources.Add(queueManager.RenderNeeded.Subscribe(_
=>
Dispatcher.UIThread.InvokeAsync(() => topLevel.PlatformImpl.Invalidate(new Rect(topLevel.ClientSize)))));
diff --git a/src/Perspex.SceneGraph/Media/Imaging/Bitmap.cs b/src/Perspex.SceneGraph/Media/Imaging/Bitmap.cs
index 55b25738ad..e5f918a849 100644
--- a/src/Perspex.SceneGraph/Media/Imaging/Bitmap.cs
+++ b/src/Perspex.SceneGraph/Media/Imaging/Bitmap.cs
@@ -31,17 +31,6 @@ namespace Perspex.Media.Imaging
PlatformImpl = factory.LoadBitmap(stream);
}
- ///
- /// Initializes a new instance of the class.
- ///
- /// The width of the bitmap, in pixels.
- /// The height of the bitmap, in pixels.
- public Bitmap(int width, int height)
- {
- IPlatformRenderInterface factory = PerspexLocator.Current.GetService();
- PlatformImpl = factory.CreateBitmap(width, height);
- }
-
///
/// Initializes a new instance of the class.
///
diff --git a/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs b/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
index 20fc55ebd8..289cde69b5 100644
--- a/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
+++ b/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
@@ -48,10 +48,5 @@ namespace Perspex.Media.Imaging
}
public DrawingContext CreateDrawingContext() => PlatformImpl.CreateDrawingContext();
-
- void IRenderTarget.Resize(int width, int height)
- {
- throw new NotSupportedException();
- }
}
}
diff --git a/src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs b/src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs
index e79da32923..ccf55104a8 100644
--- a/src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs
+++ b/src/Perspex.SceneGraph/Platform/IPlatformRenderInterface.cs
@@ -11,14 +11,6 @@ namespace Perspex.Platform
///
public interface IPlatformRenderInterface
{
- ///
- /// Creates a bitmap implementation.
- ///
- /// The width of the bitmap.
- /// The height of the bitmap.
- /// An .
- IBitmapImpl CreateBitmap(int width, int height);
-
///
/// Creates a formatted text implementation.
///
@@ -50,7 +42,7 @@ namespace Perspex.Platform
/// The initial width of the render.
/// The initial height of the render.
/// An .
- IRenderTarget CreateRenderer(IPlatformHandle handle, double width, double height);
+ IRenderTarget CreateRenderer(IPlatformHandle handle);
///
/// Creates a render target bitmap implementation.
diff --git a/src/Perspex.SceneGraph/Platform/IRenderTarget.cs b/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
index a5c8f71d79..e6a167c1ae 100644
--- a/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
+++ b/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
@@ -18,12 +18,5 @@ namespace Perspex.Platform
/// Creates an for a rendering session.
///
DrawingContext CreateDrawingContext();
-
- ///
- /// Resizes the rendered viewport.
- ///
- /// The new width.
- /// The new height.
- void Resize(int width, int height);
}
}
diff --git a/src/Skia/Perspex.Skia.Android/SkiaView.cs b/src/Skia/Perspex.Skia.Android/SkiaView.cs
index 934d282e2b..c261f1d3fe 100644
--- a/src/Skia/Perspex.Skia.Android/SkiaView.cs
+++ b/src/Skia/Perspex.Skia.Android/SkiaView.cs
@@ -59,7 +59,6 @@ namespace Perspex.Skia.Android
public void SurfaceChanged(ISurfaceHolder holder, Format format, int width, int height)
{
Log.Info("PERSPEX", "Surface Changed");
- _renderTarget.Resize(width, height);
Draw();
}
@@ -68,7 +67,7 @@ namespace Perspex.Skia.Android
Log.Info("PERSPEX", "Surface Created");
_renderTarget =
PerspexLocator.Current.GetService()
- .CreateRenderer(new PlatformHandle(holder.Surface.Handle, "Surface"), Width, Height);
+ .CreateRenderer(new PlatformHandle(holder.Surface.Handle, "Surface"));
Draw();
}
diff --git a/src/Skia/Perspex.Skia/BitmapImpl.cs b/src/Skia/Perspex.Skia/BitmapImpl.cs
index 19c6b2c67f..75c2ae5213 100644
--- a/src/Skia/Perspex.Skia/BitmapImpl.cs
+++ b/src/Skia/Perspex.Skia/BitmapImpl.cs
@@ -43,11 +43,6 @@ namespace Perspex.Skia
new DrawingContextImpl(MethodTable.Instance.RenderTargetCreateRenderingContext(Handle)));
}
- public void Resize(int width, int height)
- {
- MethodTable.Instance.ResizeBitmap(Handle, PixelWidth = Math.Max(1, width), PixelHeight = Math.Max(1, height));
- }
-
public BitmapImpl(IntPtr handle, int width, int height) : base(handle)
{
PixelHeight = height;
diff --git a/src/Skia/Perspex.Skia/MethodTable.cs b/src/Skia/Perspex.Skia/MethodTable.cs
index cabe262569..ee17de4f3a 100644
--- a/src/Skia/Perspex.Skia/MethodTable.cs
+++ b/src/Skia/Perspex.Skia/MethodTable.cs
@@ -10,20 +10,15 @@ namespace Perspex.Skia
internal unsafe abstract class MethodTable
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate IntPtr _CreateRenderTarget(IntPtr nativeHandle, int width, int height);
+ public delegate IntPtr _CreateWindowRenderTarget(IntPtr nativeHandle);
- public _CreateRenderTarget CreateRenderTarget;
+ public _CreateWindowRenderTarget CreateWindowWindowRenderTarget;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate IntPtr _RenderTargetCreateRenderingContext(IntPtr target);
public _RenderTargetCreateRenderingContext RenderTargetCreateRenderingContext;
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate void _RenderTargetResize(IntPtr target, int width, int height);
-
- public _RenderTargetResize RenderTargetResize;
-
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void _DisposeRenderTarget(IntPtr target);
@@ -106,11 +101,6 @@ namespace Perspex.Skia
public _CreateRenderTargetBitmap CreateRenderTargetBitmap;
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate void _ResizeBitmap(IntPtr image, int width, int height);
-
- public _ResizeBitmap ResizeBitmap;
-
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void _DisposeImage(IntPtr image);
@@ -169,9 +159,8 @@ namespace Perspex.Skia
private static readonly Type[] TableOrder = new Type[]
{
- typeof (_CreateRenderTarget),
+ typeof (_CreateWindowRenderTarget),
typeof (_DisposeRenderTarget),
- typeof (_RenderTargetResize),
typeof (_RenderTargetCreateRenderingContext),
typeof (_DisposeRenderingContext),
typeof (_DrawRectangle),
@@ -189,7 +178,6 @@ namespace Perspex.Skia
typeof (_SaveImage),
typeof (_DrawImage),
typeof (_CreateRenderTargetBitmap),
- typeof (_ResizeBitmap),
typeof (_DisposeImage),
typeof (_GetDrawingContextSettingsPtr),
typeof (_CreateTypeface),
diff --git a/src/Skia/Perspex.Skia/PlatformRenderInterface.cs b/src/Skia/Perspex.Skia/PlatformRenderInterface.cs
index 6e79c1e35c..3b67247081 100644
--- a/src/Skia/Perspex.Skia/PlatformRenderInterface.cs
+++ b/src/Skia/Perspex.Skia/PlatformRenderInterface.cs
@@ -59,11 +59,7 @@ namespace Perspex.Skia
return new BitmapImpl(width, height);
}
- public IRenderTarget CreateRenderer(IPlatformHandle handle, double width, double height)
- {
- width = Math.Min(1, width);
- height = Math.Min(1, height);
- return new RenderTarget(MethodTable.Instance.CreateRenderTarget(handle.Handle, (int) width, (int) height));
- }
+ public IRenderTarget CreateRenderer(IPlatformHandle handle)
+ => new RenderTarget(MethodTable.Instance.CreateWindowWindowRenderTarget(handle.Handle));
}
}
diff --git a/src/Skia/Perspex.Skia/RenderTarget.cs b/src/Skia/Perspex.Skia/RenderTarget.cs
index 6d47bf0405..d727146e92 100644
--- a/src/Skia/Perspex.Skia/RenderTarget.cs
+++ b/src/Skia/Perspex.Skia/RenderTarget.cs
@@ -21,10 +21,5 @@ namespace Perspex.Skia
new DrawingContext(
new DrawingContextImpl(MethodTable.Instance.RenderTargetCreateRenderingContext(Handle)));
}
-
- public void Resize(int width, int height)
- {
- MethodTable.Instance.RenderTargetResize(Handle,Math.Max(width, 1), Math.Max(height, 1));
- }
}
}
diff --git a/src/Skia/native.url b/src/Skia/native.url
index 61e18108ae..697513ae7a 100644
--- a/src/Skia/native.url
+++ b/src/Skia/native.url
@@ -1 +1 @@
-https://dl.dropboxusercontent.com/u/18301199/Perspex.Skia/abi-0001.zip
+https://dl.dropboxusercontent.com/u/18301199/Perspex.Skia/abi-0002.zip
diff --git a/src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs b/src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs
index fef168bd27..93c820b26d 100644
--- a/src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs
+++ b/src/Windows/Perspex.Direct2D1/Direct2D1Platform.cs
@@ -41,11 +41,11 @@ namespace Perspex.Direct2D1
return new FormattedTextImpl(text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight);
}
- public IRenderTarget CreateRenderer(IPlatformHandle handle, double width, double height)
+ public IRenderTarget CreateRenderer(IPlatformHandle handle)
{
if (handle.HandleDescriptor == "HWND")
{
- return new RenderTarget(handle.Handle, width, height);
+ return new RenderTarget(handle.Handle);
}
else
{
diff --git a/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
index cf785aa444..38445c0d5b 100644
--- a/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -39,10 +39,6 @@ namespace Perspex.Direct2D1.Media
}
public Perspex.Media.DrawingContext CreateDrawingContext() => new RenderTarget(_target).CreateDrawingContext();
-
- void IRenderTarget.Resize(int width, int height)
- {
- throw new NotSupportedException();
- }
+
}
}
diff --git a/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj b/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
index f8f91ea467..38e9b9ed8e 100644
--- a/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
+++ b/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
@@ -69,6 +69,9 @@
Properties\SharedAssemblyInfo.cs
+
+ UnmanagedMethods.cs
+
diff --git a/src/Windows/Perspex.Direct2D1/RenderTarget.cs b/src/Windows/Perspex.Direct2D1/RenderTarget.cs
index 66ffe80448..53a04683d2 100644
--- a/src/Windows/Perspex.Direct2D1/RenderTarget.cs
+++ b/src/Windows/Perspex.Direct2D1/RenderTarget.cs
@@ -6,6 +6,7 @@ using Perspex.Direct2D1.Media;
using Perspex.Media;
using Perspex.Platform;
using Perspex.Rendering;
+using Perspex.Win32.Interop;
using SharpDX;
using SharpDX.Direct2D1;
using DrawingContext = Perspex.Media.DrawingContext;
@@ -15,19 +16,25 @@ namespace Perspex.Direct2D1
{
public class RenderTarget : IRenderTarget
{
+ private readonly IntPtr _hwnd;
+ private Size2 _savedSize;
+
///
/// The render target.
///
private readonly SharpDX.Direct2D1.RenderTarget _renderTarget;
+
+
///
/// Initializes a new instance of the class.
///
/// The window handle.
/// The width of the window.
/// The height of the window.
- public RenderTarget(IntPtr hwnd, double width, double height)
+ public RenderTarget(IntPtr hwnd)
{
+ _hwnd = hwnd;
Direct2DFactory = PerspexLocator.Current.GetService();
DirectWriteFactory = PerspexLocator.Current.GetService();
@@ -38,7 +45,7 @@ namespace Perspex.Direct2D1
HwndRenderTargetProperties hwndProperties = new HwndRenderTargetProperties
{
Hwnd = hwnd,
- PixelSize = new Size2((int)width, (int)height),
+ PixelSize = _savedSize = GetWindowSize(),
PresentOptions = PresentOptions.Immediately,
};
@@ -48,6 +55,13 @@ namespace Perspex.Direct2D1
hwndProperties);
}
+ Size2 GetWindowSize()
+ {
+ UnmanagedMethods.RECT rc;
+ UnmanagedMethods.GetClientRect(_hwnd, out rc);
+ return new Size2(rc.right - rc.left, rc.bottom - rc.top);
+ }
+
///
/// Initializes a new instance of the class.
///
@@ -74,31 +88,22 @@ namespace Perspex.Direct2D1
get; }
///
- /// Resizes the renderer.
+ /// Creates a drawing context for a rendering session.
///
- /// The new width.
- /// The new height.
- public void Resize(int width, int height)
+ /// An .
+ public DrawingContext CreateDrawingContext()
{
- WindowRenderTarget window = _renderTarget as WindowRenderTarget;
-
- if (window == null)
+ var window = _renderTarget as WindowRenderTarget;
+ if (window != null)
{
- throw new InvalidOperationException(string.Format(
- "A renderer with a target of type '{0}' cannot be resized.",
- _renderTarget.GetType().Name));
+ var size = GetWindowSize();
+ if (size != _savedSize)
+ window.Resize(_savedSize = size);
}
- window.Resize(new Size2(width, height));
+ return new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory));
}
- ///
- /// Creates a drawing context for a rendering session.
- ///
- /// An .
- public DrawingContext CreateDrawingContext()
- => new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory));
-
public void Dispose()
{
_renderTarget.Dispose();
diff --git a/src/Windows/Perspex.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Perspex.Win32/Interop/UnmanagedMethods.cs
index aa7681a27a..80dd0cd672 100644
--- a/src/Windows/Perspex.Win32/Interop/UnmanagedMethods.cs
+++ b/src/Windows/Perspex.Win32/Interop/UnmanagedMethods.cs
@@ -5,7 +5,6 @@ using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
using System.Text;
-using Perspex.Input;
// ReSharper disable InconsistentNaming
#pragma warning disable 169