Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update SkiaSharp #26373

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 5 additions & 5 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,16 @@
- Feed URI in the nuget.config
- Native assets build and sha
-->
<_SkiaSharpVersion>2.88.8</_SkiaSharpVersion>
<_SkiaSharpExtendedVersion>2.0.0</_SkiaSharpExtendedVersion>
<_HarfBuzzSharpVersion>7.3.0.2</_HarfBuzzSharpVersion>
<_SkiaSharpNativeAssetsVersion>0.0.0-commit.7af1d0840a381c0ce7ef2877454a88dbb2949686.1086</_SkiaSharpNativeAssetsVersion>
<_SkiaSharpVersion>3.116.1</_SkiaSharpVersion>
<_SkiaSharpExtendedVersion>3.0.0-preview.13</_SkiaSharpExtendedVersion>
<_HarfBuzzSharpVersion>8.3.0.1</_HarfBuzzSharpVersion>
<_SkiaSharpNativeAssetsVersion>0.0.0-commit.e57e2a11dac4ccc72bea52939dede49816842005.1728</_SkiaSharpNativeAssetsVersion>
<MicrosoftTemplateEngineTasksVersion>7.0.120</MicrosoftTemplateEngineTasksVersion>
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>9.0.0-prerelease.25057.1</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>9.0.0-prerelease.25057.1</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
<MicrosoftDotNetXHarnessCLIVersion>9.0.0-prerelease.25057.1</MicrosoftDotNetXHarnessCLIVersion>
<TizenUIExtensionsVersion>0.9.2</TizenUIExtensionsVersion>
<SvgSkiaPackageVersion>1.0.0.16</SvgSkiaPackageVersion>
<SvgSkiaPackageVersion>2.0.0.4</SvgSkiaPackageVersion>
<FizzlerPackageVersion>1.3.0</FizzlerPackageVersion>
<TizenUIExtensionsVersion>0.9.0</TizenUIExtensionsVersion>
<ExCSSPackageVersion>4.2.3</ExCSSPackageVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<ItemGroup>
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
<PackageReference Include="SkiaSharp.Views.Gtk3" />
<PackageReference Include="GtkSharp" Version="3.24.24.34" />
<PackageReference Include="GtkSharp" Version="3.24.24.95" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public MainWindow() : base(WindowType.Toplevel)

Titlebar = headerBar;

var hpanned = new HPaned
var hpanned = new Paned(Orientation.Horizontal)
{
Position = 300
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Microsoft.Maui.Graphics.Skia.SKFontExtensions
static Microsoft.Maui.Graphics.Skia.SKFontExtensions.CreateCopy(this SkiaSharp.SKFont? font) -> SkiaSharp.SKFont?
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.get -> SkiaSharp.SKFont
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.FontFont.set -> void
~Microsoft.Maui.Graphics.Skia.SkiaCanvasState.Reset(SkiaSharp.SKPaint fontPaint, SkiaSharp.SKFont fontFont, SkiaSharp.SKPaint fillPaint, SkiaSharp.SKPaint strokePaint) -> void
~Microsoft.Maui.Graphics.Skia.SkiaTextLayout.SkiaTextLayout(string value, Microsoft.Maui.Graphics.RectF rect, Microsoft.Maui.Graphics.ITextAttributes textAttributes, Microsoft.Maui.Graphics.LayoutLine callback, Microsoft.Maui.Graphics.TextFlow textFlow = Microsoft.Maui.Graphics.TextFlow.ClipBounds, SkiaSharp.SKFont font = null) -> void
21 changes: 21 additions & 0 deletions src/Graphics/src/Graphics.Skia/SKFontExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#nullable enable
using SkiaSharp;

namespace Microsoft.Maui.Graphics.Skia;

public static class SKFontExtensions
{
public static SKFont? CreateCopy(this SKFont? font)
{
if (font is null)
return null;

return new SKFont
{
ScaleX = font.ScaleX,
Size = font.Size,
SkewX = font.SkewX,
Typeface = font.Typeface,
};
}
}
2 changes: 2 additions & 0 deletions src/Graphics/src/Graphics.Skia/SKPaintExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ public static SKPaint CreateCopy(this SKPaint paint)
StrokeJoin = paint.StrokeJoin,
StrokeMiter = paint.StrokeMiter,
StrokeWidth = paint.StrokeWidth,
#pragma warning disable CS0618 // Type or member is obsolete
TextAlign = paint.TextAlign,
TextEncoding = paint.TextEncoding,
TextScaleX = paint.TextScaleX,
TextSize = paint.TextSize,
TextSkewX = paint.TextSkewX,
Typeface = paint.Typeface,
#pragma warning restore CS0618 // Type or member is obsolete
};

return copy;
Expand Down
26 changes: 16 additions & 10 deletions src/Graphics/src/Graphics.Skia/SkiaBitmapExportContext.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using System.IO;
using SkiaSharp;

Expand All @@ -11,6 +12,7 @@ public class SkiaBitmapExportContext : BitmapExportContext
private SKImage _image;
private SKSurface _surface;
private SKCanvas _skiaCanvas;
private SkiaCanvas _platformCanvas;
private ScalingCanvas _canvas;

public SkiaBitmapExportContext(
Expand All @@ -34,17 +36,16 @@ public SkiaBitmapExportContext(

if (_surface == null)
{
System.Diagnostics.Debug.WriteLine("Unable to create a Skia surface");
return;
throw new InvalidOperationException("Unable to create a Skia surface.");
}

_skiaCanvas = _surface.Canvas;
var platformCanvas = new SkiaCanvas
_platformCanvas = new SkiaCanvas
{
Canvas = _skiaCanvas,
DisplayScale = displayScale
};
_canvas = new ScalingCanvas(platformCanvas);
_canvas = new ScalingCanvas(_platformCanvas);
_disposeBitmap = disposeBitmap;
}

Expand All @@ -60,8 +61,7 @@ public SKBitmap Bitmap
{
if (_bitmap == null)
{
var data = SKImage.Encode();
_bitmap = SKBitmap.Decode(data);
_bitmap = SKBitmap.FromImage(SKImage);
}

return _bitmap;
Expand All @@ -70,19 +70,25 @@ public SKBitmap Bitmap

public override void Dispose()
{
if (_platformCanvas != null)
{
_platformCanvas.Dispose();
_platformCanvas = null!;
}

if (_skiaCanvas != null)
{
_skiaCanvas.Dispose();
_skiaCanvas = null;
_skiaCanvas = null!;
}

if (_surface != null)
{
_surface.Dispose();
_surface = null;
_surface = null!;
}

if (_image != null)
if (_image != null && _disposeBitmap)
{
_image.Dispose();
_image = null;
Expand All @@ -94,7 +100,7 @@ public override void Dispose()
_bitmap = null;
}

_canvas = null;
_canvas = null!;

base.Dispose();
}
Expand Down
36 changes: 18 additions & 18 deletions src/Graphics/src/Graphics.Skia/SkiaCanvas.cs
Original file line number Diff line number Diff line change
Expand Up @@ -624,21 +624,21 @@ public override void DrawString(

if (horizAlignment == HorizontalAlignment.Left)
{
_canvas.DrawText(value, x, y, CurrentState.FontPaint);
_canvas.DrawText(value, x, y, CurrentState.FontFont, CurrentState.FontPaint);
}
else if (horizAlignment == HorizontalAlignment.Right)
{
var paint = CurrentState.FontPaint;
var width = paint.MeasureText(value);
var font = CurrentState.FontFont;
var width = font.MeasureText(value);
x -= width;
_canvas.DrawText(value, x, y, CurrentState.FontPaint);
_canvas.DrawText(value, x, y, CurrentState.FontFont, CurrentState.FontPaint);
}
else
{
var paint = CurrentState.FontPaint;
var width = paint.MeasureText(value);
var font = CurrentState.FontFont;
var width = font.MeasureText(value);
x -= width / 2;
_canvas.DrawText(value, x, y, CurrentState.FontPaint);
_canvas.DrawText(value, x, y, CurrentState.FontFont, CurrentState.FontPaint);
}
}

Expand All @@ -660,27 +660,27 @@ public override void DrawString(

var attributes = new StandardTextAttributes()
{
FontSize = CurrentState.FontPaint.TextSize,
FontSize = CurrentState.FontFont.Size,
Font = CurrentState.Font,
HorizontalAlignment = horizAlignment,
VerticalAlignment = vertAlignment,
};

LayoutLine callback = (
point,
textual,
text,
ascent,
descent,
leading) =>
var align = horizAlignment switch
{
_canvas.DrawText(text, point.X, point.Y, CurrentState.FontPaint);
HorizontalAlignment.Left => SKTextAlign.Left,
HorizontalAlignment.Center => SKTextAlign.Center,
HorizontalAlignment.Right => SKTextAlign.Right,
_ => SKTextAlign.Left,
};

using (var textLayout = new SkiaTextLayout(value, rect, attributes, callback, textFlow, CurrentState.FontPaint))
void DrawLineCallback(PointF point, ITextAttributes textual, string text, float ascent, float descent, float leading)
{
textLayout.LayoutText();
_canvas.DrawText(text, point.X, point.Y, align, CurrentState.FontFont, CurrentState.FontPaint);
}

using var textLayout = new SkiaTextLayout(value, rect, attributes, DrawLineCallback, textFlow, CurrentState.FontFont);
textLayout.LayoutText();
}

public override void DrawText(IAttributedText value, float x, float y, float width, float height)
Expand Down
Loading
Loading