Browse Source

Merge branch 'master' into render-loop

pull/773/head
Nikita Tsukanov 10 years ago
committed by GitHub
parent
commit
527355a919
  1. 16
      src/Avalonia.SceneGraph/Media/DrawingContext.cs
  2. 4
      src/Avalonia.SceneGraph/Rendering/RendererMixin.cs
  3. 44
      src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs
  4. 2
      src/Skia/Avalonia.Skia/StreamGeometryImpl.cs
  5. 12
      src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj
  6. 6
      src/Windows/Avalonia.Direct2D1/packages.config

16
src/Avalonia.SceneGraph/Media/DrawingContext.cs

@ -12,6 +12,9 @@ namespace Avalonia.Media
{
private readonly IDrawingContextImpl _impl;
private int _currentLevel;
//Internal tranformation that is applied but not exposed anywhere
//To be used for DPI scaling, etc
private Matrix? _hiddenPostTransform = Matrix.Identity;
@ -36,9 +39,10 @@ namespace Avalonia.Media
}
}
public DrawingContext(IDrawingContextImpl impl)
public DrawingContext(IDrawingContextImpl impl, Matrix? hiddenPostTransform = null)
{
_impl = impl;
_hiddenPostTransform = hiddenPostTransform;
}
@ -55,11 +59,17 @@ namespace Avalonia.Media
private set
{
_currentTransform = value;
_impl.Transform = _currentTransform*_currentContainerTransform;
var transform = _currentTransform*_currentContainerTransform;
if (_hiddenPostTransform.HasValue)
transform = transform*_hiddenPostTransform.Value;
_impl.Transform = transform;
}
}
internal Matrix CurrentContainerTransform => _currentContainerTransform;
//HACK: This is a temporary hack that is used in the render loop
//to update TransformedBounds property
[Obsolete("HACK for render loop, don't use")]
internal Matrix CurrentContainerTransform => _currentContainerTransform;
/// <summary>
/// Draws a bitmap image.

4
src/Avalonia.SceneGraph/Rendering/RendererMixin.cs

@ -124,8 +124,12 @@ namespace Avalonia.Rendering
using (context.PushTransformContainer())
{
visual.Render(context);
#pragma warning disable 0618
var transformed =
new TransformedBounds(bounds, new Rect(), context.CurrentContainerTransform);
#pragma warning restore 0618
if (visual is Visual)
{
BoundsTracker.SetTransformedBounds((Visual)visual, transformed);

44
src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs

@ -79,6 +79,29 @@ namespace Avalonia.Skia
#endif
}
private Size GetWindowDpiWin32()
{
if (UnmanagedMethods.ShCoreAvailable)
{
uint dpix, dpiy;
var monitor = UnmanagedMethods.MonitorFromWindow(
_hwnd.Handle,
UnmanagedMethods.MONITOR.MONITOR_DEFAULTTONEAREST);
if (UnmanagedMethods.GetDpiForMonitor(
monitor,
UnmanagedMethods.MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI,
out dpix,
out dpiy) == 0)
{
return new Size(dpix, dpiy);
}
}
return new Size(96, 96);
}
public override DrawingContext CreateDrawingContext()
{
FixSize();
@ -89,9 +112,26 @@ namespace Avalonia.Skia
canvas.Clear(SKColors.Red);
canvas.ResetMatrix();
return
double scale = 1.0;
var runtimeService = AvaloniaLocator.Current.GetService<IRuntimePlatform>();
if (runtimeService != null)
{
switch (runtimeService.GetRuntimeInfo().OperatingSystem)
{
case OperatingSystemType.WinNT:
var dpi = GetWindowDpiWin32();
scale = dpi.Width / 96.0;
break;
}
}
var result =
new DrawingContext(
new WindowDrawingContextImpl(this));
new WindowDrawingContextImpl(this), Matrix.CreateScale(scale, scale));
return result;
}
public void Present()

2
src/Skia/Avalonia.Skia/StreamGeometryImpl.cs

@ -72,6 +72,8 @@ namespace Avalonia.Skia
public IStreamGeometryContextImpl Open()
{
_path = new SKPath();
_path.FillType = SKPathFillType.EvenOdd;
return new StreamContext(this);
}

12
src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj

@ -37,16 +37,16 @@
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<Reference Include="SharpDX, Version=3.0.2.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.3.0.2\lib\net45\SharpDX.dll</HintPath>
<Reference Include="SharpDX, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.3.1.0\lib\net45\SharpDX.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="SharpDX.Direct2D1, Version=3.0.2.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.Direct2D1.3.0.2\lib\net45\SharpDX.Direct2D1.dll</HintPath>
<Reference Include="SharpDX.Direct2D1, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.Direct2D1.3.1.0\lib\net45\SharpDX.Direct2D1.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="SharpDX.DXGI, Version=3.0.2.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.DXGI.3.0.2\lib\net45\SharpDX.DXGI.dll</HintPath>
<Reference Include="SharpDX.DXGI, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\SharpDX.DXGI.3.1.0\lib\net45\SharpDX.DXGI.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />

6
src/Windows/Avalonia.Direct2D1/packages.config

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="SharpDX" version="3.0.2" targetFramework="net45" />
<package id="SharpDX.Direct2D1" version="3.0.2" targetFramework="net45" />
<package id="SharpDX.DXGI" version="3.0.2" targetFramework="net45" />
<package id="SharpDX" version="3.1.0" targetFramework="net45" />
<package id="SharpDX.Direct2D1" version="3.1.0" targetFramework="net45" />
<package id="SharpDX.DXGI" version="3.1.0" targetFramework="net45" />
</packages>
Loading…
Cancel
Save