diff --git a/src/Skia/Avalonia.Skia/BitmapImpl.cs b/src/Skia/Avalonia.Skia/BitmapImpl.cs index 9f807b8c1d..ce3efded11 100644 --- a/src/Skia/Avalonia.Skia/BitmapImpl.cs +++ b/src/Skia/Avalonia.Skia/BitmapImpl.cs @@ -48,7 +48,7 @@ namespace Avalonia.Skia public BitmapDrawingContext(SKBitmap bitmap, Vector dpi, IVisualBrushRenderer visualBrushRenderer) : this(CreateSurface(bitmap), dpi, visualBrushRenderer) { - + CanUseLcdRendering = false; } private static SKSurface CreateSurface(SKBitmap bitmap) diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 7a83835b10..4feb910deb 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -16,7 +16,7 @@ namespace Avalonia.Skia private readonly IDisposable[] _disposables; private readonly IVisualBrushRenderer _visualBrushRenderer; private Stack maskStack = new Stack(); - + protected bool CanUseLcdRendering = true; public SKCanvas Canvas { get; private set; } public DrawingContextImpl( @@ -345,7 +345,7 @@ namespace Avalonia.Skia using (var paint = CreatePaint(foreground, text.Size)) { var textImpl = (FormattedTextImpl)text; - textImpl.Draw(this, Canvas, origin.ToSKPoint(), paint); + textImpl.Draw(this, Canvas, origin.ToSKPoint(), paint, CanUseLcdRendering); } } diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs index c73e1dbcbe..5da1469ab8 100644 --- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs +++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs @@ -171,8 +171,10 @@ namespace Avalonia.Skia } internal void Draw(DrawingContextImpl context, - SKCanvas canvas, SKPoint origin, - DrawingContextImpl.PaintWrapper foreground) + SKCanvas canvas, + SKPoint origin, + DrawingContextImpl.PaintWrapper foreground, + bool canUseLcdRendering) { /* TODO: This originated from Native code, it might be useful for debugging character positions as * we improve the FormattedText support. Will need to port this to C# obviously. Rmove when @@ -206,7 +208,7 @@ namespace Avalonia.Skia SKPaint currentPaint = null; try { - ApplyWrapperTo(ref currentPaint, foreground, ref currd, paint); + ApplyWrapperTo(ref currentPaint, foreground, ref currd, paint, canUseLcdRendering); bool hasCusomFGBrushes = _foregroundBrushes.Any(); for (int c = 0; c < _skiaLines.Count; c++) @@ -243,7 +245,7 @@ namespace Avalonia.Skia subStr = Text.Substring(i, len); - ApplyWrapperTo(ref currentPaint, currentWrapper, ref currd, paint); + ApplyWrapperTo(ref currentPaint, currentWrapper, ref currd, paint, canUseLcdRendering); canvas.DrawText(subStr, currX, origin.Y + line.Top + _lineOffset, paint); @@ -277,12 +279,13 @@ namespace Avalonia.Skia private List _skiaLines; private static void ApplyWrapperTo(ref SKPaint current, DrawingContextImpl.PaintWrapper wrapper, - ref IDisposable curr, SKPaint paint) + ref IDisposable curr, SKPaint paint, bool canUseLcdRendering) { if (current == wrapper.Paint) return; curr?.Dispose(); curr = wrapper.ApplyTo(paint); + paint.LcdRenderText = canUseLcdRendering && paint.Color.Alpha == 255; } private static bool IsBreakChar(char c)