Browse Source

Merge branch 'master' into SVG_Paths

pull/1163/head
Jurjen Biewenga 9 years ago
committed by GitHub
parent
commit
0a1af2620c
  1. 2
      src/Skia/Avalonia.Skia/BitmapImpl.cs
  2. 4
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  3. 13
      src/Skia/Avalonia.Skia/FormattedTextImpl.cs

2
src/Skia/Avalonia.Skia/BitmapImpl.cs

@ -48,7 +48,7 @@ namespace Avalonia.Skia
public BitmapDrawingContext(SKBitmap bitmap, Vector dpi, IVisualBrushRenderer visualBrushRenderer) public BitmapDrawingContext(SKBitmap bitmap, Vector dpi, IVisualBrushRenderer visualBrushRenderer)
: this(CreateSurface(bitmap), dpi, visualBrushRenderer) : this(CreateSurface(bitmap), dpi, visualBrushRenderer)
{ {
CanUseLcdRendering = false;
} }
private static SKSurface CreateSurface(SKBitmap bitmap) private static SKSurface CreateSurface(SKBitmap bitmap)

4
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -16,7 +16,7 @@ namespace Avalonia.Skia
private readonly IDisposable[] _disposables; private readonly IDisposable[] _disposables;
private readonly IVisualBrushRenderer _visualBrushRenderer; private readonly IVisualBrushRenderer _visualBrushRenderer;
private Stack<PaintWrapper> maskStack = new Stack<PaintWrapper>(); private Stack<PaintWrapper> maskStack = new Stack<PaintWrapper>();
protected bool CanUseLcdRendering = true;
public SKCanvas Canvas { get; private set; } public SKCanvas Canvas { get; private set; }
public DrawingContextImpl( public DrawingContextImpl(
@ -345,7 +345,7 @@ namespace Avalonia.Skia
using (var paint = CreatePaint(foreground, text.Size)) using (var paint = CreatePaint(foreground, text.Size))
{ {
var textImpl = (FormattedTextImpl)text; var textImpl = (FormattedTextImpl)text;
textImpl.Draw(this, Canvas, origin.ToSKPoint(), paint); textImpl.Draw(this, Canvas, origin.ToSKPoint(), paint, CanUseLcdRendering);
} }
} }

13
src/Skia/Avalonia.Skia/FormattedTextImpl.cs

@ -171,8 +171,10 @@ namespace Avalonia.Skia
} }
internal void Draw(DrawingContextImpl context, internal void Draw(DrawingContextImpl context,
SKCanvas canvas, SKPoint origin, SKCanvas canvas,
DrawingContextImpl.PaintWrapper foreground) SKPoint origin,
DrawingContextImpl.PaintWrapper foreground,
bool canUseLcdRendering)
{ {
/* TODO: This originated from Native code, it might be useful for debugging character positions as /* 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 * 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; SKPaint currentPaint = null;
try try
{ {
ApplyWrapperTo(ref currentPaint, foreground, ref currd, paint); ApplyWrapperTo(ref currentPaint, foreground, ref currd, paint, canUseLcdRendering);
bool hasCusomFGBrushes = _foregroundBrushes.Any(); bool hasCusomFGBrushes = _foregroundBrushes.Any();
for (int c = 0; c < _skiaLines.Count; c++) for (int c = 0; c < _skiaLines.Count; c++)
@ -243,7 +245,7 @@ namespace Avalonia.Skia
subStr = Text.Substring(i, len); 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); canvas.DrawText(subStr, currX, origin.Y + line.Top + _lineOffset, paint);
@ -277,12 +279,13 @@ namespace Avalonia.Skia
private List<AvaloniaFormattedTextLine> _skiaLines; private List<AvaloniaFormattedTextLine> _skiaLines;
private static void ApplyWrapperTo(ref SKPaint current, DrawingContextImpl.PaintWrapper wrapper, 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) if (current == wrapper.Paint)
return; return;
curr?.Dispose(); curr?.Dispose();
curr = wrapper.ApplyTo(paint); curr = wrapper.ApplyTo(paint);
paint.LcdRenderText = canUseLcdRendering;
} }
private static bool IsBreakChar(char c) private static bool IsBreakChar(char c)

Loading…
Cancel
Save