diff --git a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs b/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs
index 0ad826f5a9..8dd75d2374 100644
--- a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs
+++ b/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs
@@ -75,7 +75,7 @@ namespace Avalonia.Media.Imaging
public Vector Dpi => PlatformImpl.Item.Dpi;
///
- public Size Size => PlatformImpl.Item.PixelSize.ToSize(Dpi);
+ public Size Size => PlatformImpl.Item.PixelSize.ToSizeWithDpi(Dpi);
///
public PixelSize PixelSize => PlatformImpl.Item.PixelSize;
diff --git a/src/Avalonia.Visuals/Media/PixelSize.cs b/src/Avalonia.Visuals/Media/PixelSize.cs
index 6785b51716..b903b804f9 100644
--- a/src/Avalonia.Visuals/Media/PixelSize.cs
+++ b/src/Avalonia.Visuals/Media/PixelSize.cs
@@ -72,7 +72,7 @@ namespace Avalonia
/// The .
public static PixelSize Parse(string s)
{
- using (var tokenizer = new StringTokenizer(s, CultureInfo.InvariantCulture, exceptionMessage: "Invalid Size"))
+ using (var tokenizer = new StringTokenizer(s, CultureInfo.InvariantCulture, exceptionMessage: "Invalid PixelSize"))
{
return new PixelSize(
tokenizer.ReadInt32(),
@@ -126,13 +126,29 @@ namespace Avalonia
/// The new .
public PixelSize WithHeight(int height) => new PixelSize(Width, height);
+ ///
+ /// Converts the to a device-independent using the
+ /// specified scaling factor.
+ ///
+ /// The scaling factor.
+ /// The device-independent size.
+ public Size ToSize(double scale) => new Size(Width / scale, Height / scale);
+
+ ///
+ /// Converts the to a device-independent using the
+ /// specified scaling factor.
+ ///
+ /// The scaling factor.
+ /// The device-independent size.
+ public Size ToSize(Vector scale) => new Size(Width / scale.X, Height / scale.Y);
+
///
/// Converts the to a device-independent using the
/// specified dots per inch (DPI).
///
/// The dots per inch.
/// The device-independent size.
- public Size ToSize(double dpi) => new Size(Width / (dpi / 96), Height / (dpi / 96));
+ public Size ToSizeWithDpi(double dpi) => ToSize(dpi / 96);
///
/// Converts the to a device-independent using the
@@ -140,7 +156,27 @@ namespace Avalonia
///
/// The dots per inch.
/// The device-independent size.
- public Size ToSize(Vector dpi) => new Size(Width / (dpi.X / 96), Height / (dpi.Y / 96));
+ public Size ToSizeWithDpi(Vector dpi) => ToSize(new Vector(dpi.X / 96, dpi.Y / 96));
+
+ ///
+ /// Converts a to device pixels using the specified scaling factor.
+ ///
+ /// The size.
+ /// The scaling factor.
+ /// The device-independent size.
+ public static PixelSize FromSize(Size size, double scale) => new PixelSize(
+ (int)Math.Ceiling(size.Width * scale),
+ (int)Math.Ceiling(size.Height * scale));
+
+ ///
+ /// Converts a to device pixels using the specified scaling factor.
+ ///
+ /// The size.
+ /// The scaling factor.
+ /// The device-independent size.
+ public static PixelSize FromSize(Size size, Vector scale) => new PixelSize(
+ (int)Math.Ceiling(size.Width * scale.X),
+ (int)Math.Ceiling(size.Height * scale.Y));
///
/// Converts a to device pixels using the specified dots per inch (DPI).
@@ -148,9 +184,7 @@ namespace Avalonia
/// The size.
/// The dots per inch.
/// The device-independent size.
- public static PixelSize FromSize(Size size, double dpi) => new PixelSize(
- (int)(size.Width * (dpi / 96)),
- (int)(size.Height * (dpi / 96)));
+ public static PixelSize FromSizeWithDpi(Size size, double dpi) => FromSize(size, dpi / 96);
///
/// Converts a to device pixels using the specified dots per inch (DPI).
@@ -158,9 +192,7 @@ namespace Avalonia
/// The size.
/// The dots per inch.
/// The device-independent size.
- public static PixelSize FromSize(Size size, Vector dpi) => new PixelSize(
- (int)Math.Ceiling(size.Width * (dpi.X / 96)),
- (int)Math.Ceiling(size.Height * (dpi.Y / 96)));
+ public static PixelSize FromSizeWithDpi(Size size, Vector dpi) => FromSize(size, new Vector(dpi.X / 96, dpi.Y / 96));
///
/// Returns the string representation of the size.
diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
index fabfe2b225..353354da5e 100644
--- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
+++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
@@ -401,15 +401,15 @@ namespace Avalonia.Skia
/// Tile brush image.
private void ConfigureTileBrush(ref PaintWrapper paintWrapper, Size targetSize, ITileBrush tileBrush, IDrawableBitmapImpl tileBrushImage)
{
- var calc = new TileBrushCalculator(tileBrush, tileBrushImage.PixelSize.ToSize(_dpi), targetSize);
+ var calc = new TileBrushCalculator(tileBrush, tileBrushImage.PixelSize.ToSizeWithDpi(_dpi), targetSize);
var intermediate = CreateRenderTarget(calc.IntermediateSize);
paintWrapper.AddDisposable(intermediate);
using (var context = intermediate.CreateDrawingContext(null))
{
- var sourceRect = new Rect(tileBrushImage.PixelSize.ToSize(96));
- var targetRect = new Rect(tileBrushImage.PixelSize.ToSize(_dpi));
+ var sourceRect = new Rect(tileBrushImage.PixelSize.ToSizeWithDpi(96));
+ var targetRect = new Rect(tileBrushImage.PixelSize.ToSizeWithDpi(_dpi));
context.Clear(Colors.Transparent);
context.PushClip(calc.IntermediateClip);
@@ -634,7 +634,7 @@ namespace Avalonia.Skia
///
private SurfaceRenderTarget CreateRenderTarget(Size size, PixelFormat? format = null)
{
- var pixelSize = PixelSize.FromSize(size, _dpi);
+ var pixelSize = PixelSize.FromSizeWithDpi(size, _dpi);
var createInfo = new SurfaceRenderTarget.CreateInfo
{
Width = pixelSize.Width,
diff --git a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
index aaca1a3b00..5e150ff647 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
+++ b/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
@@ -330,7 +330,7 @@ namespace Avalonia.Direct2D1.Media
{
var platform = AvaloniaLocator.Current.GetService();
var dpi = new Vector(_deviceContext.DotsPerInch.Width, _deviceContext.DotsPerInch.Height);
- var pixelSize = PixelSize.FromSize(size, dpi);
+ var pixelSize = PixelSize.FromSizeWithDpi(size, dpi);
return platform.CreateRenderTargetBitmap(pixelSize, dpi);
}
}
@@ -438,12 +438,12 @@ namespace Avalonia.Direct2D1.Media
// D2D alters the DPI of the render target, which messes stuff up. PixelSize.FromSize
// will do the rounding for us.
var dpi = new Vector(_deviceContext.DotsPerInch.Width, _deviceContext.DotsPerInch.Height);
- var pixelSize = PixelSize.FromSize(intermediateSize, dpi);
+ var pixelSize = PixelSize.FromSizeWithDpi(intermediateSize, dpi);
using (var intermediate = new BitmapRenderTarget(
_deviceContext,
CompatibleRenderTargetOptions.None,
- pixelSize.ToSize(dpi).ToSharpDX()))
+ pixelSize.ToSizeWithDpi(dpi).ToSharpDX()))
{
using (var ctx = new RenderTarget(intermediate).CreateDrawingContext(_visualBrushRenderer))
{
diff --git a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
index 19d320b783..fbc6d21cb7 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
+++ b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
@@ -21,7 +21,7 @@ namespace Avalonia.Direct2D1.Media
Size targetSize)
{
var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height);
- var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSize(dpi), targetSize);
+ var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSizeWithDpi(dpi), targetSize);
if (!calc.NeedsIntermediate)
{
@@ -101,7 +101,7 @@ namespace Avalonia.Direct2D1.Media
using (var context = new RenderTarget(result).CreateDrawingContext(null))
{
var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height);
- var rect = new Rect(bitmap.PixelSize.ToSize(dpi));
+ var rect = new Rect(bitmap.PixelSize.ToSizeWithDpi(dpi));
context.Clear(Colors.Transparent);
context.PushClip(calc.IntermediateClip);
diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs
index fbe7f840d7..8ec368c999 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs
+++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs
@@ -61,8 +61,8 @@ namespace Avalonia.Direct2D1.Media.Imaging
dc.DrawImage(
RefCountable.CreateUnownedNotClonable(this),
1,
- new Rect(PixelSize.ToSize(Dpi.X)),
- new Rect(PixelSize.ToSize(Dpi.X)));
+ new Rect(PixelSize.ToSizeWithDpi(Dpi.X)),
+ new Rect(PixelSize.ToSizeWithDpi(Dpi.X)));
}
wic.Save(stream);