diff --git a/src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs b/src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs
index 63d5e32bd6..768aa90dba 100644
--- a/src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs
+++ b/src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs
@@ -77,40 +77,25 @@ namespace Avalonia.Cairo.Media
/// The rect in the output to draw to.
public void DrawImage(IBitmap bitmap, double opacity, Rect sourceRect, Rect destRect)
{
- var impl = bitmap.PlatformImpl as BitmapImpl;
- var size = new Size(impl.PixelWidth, impl.PixelHeight);
- var scale = new Vector(destRect.Width / sourceRect.Width, destRect.Height / sourceRect.Height);
-
- _context.Save();
- _context.Scale(scale.X, scale.Y);
- destRect /= scale;
-
- if (opacityOverride < 1.0f) {
- _context.PushGroup ();
- Gdk.CairoHelper.SetSourcePixbuf (
- _context,
- impl,
- -sourceRect.X + destRect.X,
- -sourceRect.Y + destRect.Y);
-
- _context.Rectangle (destRect.ToCairo ());
- _context.Fill ();
- _context.PopGroupToSource ();
- _context.PaintWithAlpha (opacityOverride);
- } else {
- _context.PushGroup ();
- Gdk.CairoHelper.SetSourcePixbuf (
- _context,
- impl,
- -sourceRect.X + destRect.X,
- -sourceRect.Y + destRect.Y);
-
- _context.Rectangle (destRect.ToCairo ());
- _context.Fill ();
- _context.PopGroupToSource ();
- _context.PaintWithAlpha (opacityOverride);
- }
- _context.Restore();
+ var impl = bitmap.PlatformImpl as BitmapImpl;
+ var size = new Size(impl.PixelWidth, impl.PixelHeight);
+ var scale = new Vector(destRect.Width / sourceRect.Width, destRect.Height / sourceRect.Height);
+
+ _context.Save();
+
+ Gdk.CairoHelper.SetSourcePixbuf (
+ _context,
+ impl,
+ -sourceRect.X + destRect.X,
+ -sourceRect.Y + destRect.Y);
+ impl.Scale (impl, (int)destRect.X, (int)destRect.Y, (int)destRect.Width, (int)destRect.Height, 0, 0, scale.X, scale.Y, Gdk.InterpType.Bilinear);
+
+ _context.PushGroup ();
+ _context.Rectangle (destRect.ToCairo ());
+ _context.Fill ();
+ _context.PopGroupToSource ();
+ _context.PaintWithAlpha (opacityOverride);
+ _context.Restore();
}
///