diff --git a/build/HarfBuzzSharp.props b/build/HarfBuzzSharp.props
index 873048ef21..88c4d36282 100644
--- a/build/HarfBuzzSharp.props
+++ b/build/HarfBuzzSharp.props
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props
index 4def44cbd0..a8d9332c57 100644
--- a/build/SkiaSharp.props
+++ b/build/SkiaSharp.props
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/src/Avalonia.Controls/Primitives/Track.cs b/src/Avalonia.Controls/Primitives/Track.cs
index c91adaa26e..29e7f28b44 100644
--- a/src/Avalonia.Controls/Primitives/Track.cs
+++ b/src/Avalonia.Controls/Primitives/Track.cs
@@ -353,6 +353,15 @@ namespace Avalonia.Controls.Primitives
var trackLength = isVertical ? arrangeSize.Height : arrangeSize.Width;
double thumbMinLength = 10;
+ StyledProperty minLengthProperty = isVertical ? MinHeightProperty : MinWidthProperty;
+
+ var thumb = Thumb;
+
+ if (thumb != null && thumb.IsSet(minLengthProperty))
+ {
+ thumbMinLength = thumb.GetValue(minLengthProperty);
+ }
+
thumbLength = trackLength * viewportSize / extent;
CoerceLength(ref thumbLength, trackLength);
thumbLength = Math.Max(thumbMinLength, thumbLength);
diff --git a/src/Avalonia.X11/X11Screens.cs b/src/Avalonia.X11/X11Screens.cs
index e247a4241a..af6d2674b6 100644
--- a/src/Avalonia.X11/X11Screens.cs
+++ b/src/Avalonia.X11/X11Screens.cs
@@ -48,9 +48,13 @@ namespace Avalonia.X11
var pwa = (IntPtr*)prop;
var wa = new PixelRect(pwa[0].ToInt32(), pwa[1].ToInt32(), pwa[2].ToInt32(), pwa[3].ToInt32());
-
- foreach (var s in screens)
+
+ foreach (var s in screens)
+ {
s.WorkingArea = s.Bounds.Intersect(wa);
+ if (s.WorkingArea.Width <= 0 || s.WorkingArea.Height <= 0)
+ s.WorkingArea = s.Bounds;
+ }
XFree(prop);
return screens;
@@ -134,8 +138,14 @@ namespace Avalonia.X11
settings.GlobalScaleFactor)
});
}
-
- Screens = new[] {new X11Screen(new PixelRect(0, 0, 1920, 1280), true, "Default", null, settings.GlobalScaleFactor)};
+ else
+ {
+ Screens = new[]
+ {
+ new X11Screen(new PixelRect(0, 0, 1920, 1280), true, "Default", null,
+ settings.GlobalScaleFactor)
+ };
+ }
}
public X11Screen[] Screens { get; }
diff --git a/src/Shared/PlatformSupport/StandardRuntimePlatform.cs b/src/Shared/PlatformSupport/StandardRuntimePlatform.cs
index 03832d3063..d574732e3d 100644
--- a/src/Shared/PlatformSupport/StandardRuntimePlatform.cs
+++ b/src/Shared/PlatformSupport/StandardRuntimePlatform.cs
@@ -86,11 +86,15 @@ namespace Avalonia.Shared.PlatformSupport
#if DEBUG
if (Thread.CurrentThread.ManagedThreadId == GCThread?.ManagedThreadId)
{
- lock(_lock)
+ lock (_lock)
+ {
if (!IsDisposed)
+ {
Console.Error.WriteLine("Native blob disposal from finalizer thread\nBacktrace: "
- + Environment.StackTrace
- + "\n\nBlob created by " + _backtrace);
+ + Environment.StackTrace
+ + "\n\nBlob created by " + _backtrace);
+ }
+ }
}
#endif
DoDispose();
diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
index a510763f64..d818e683c3 100644
--- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
+++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
@@ -629,8 +629,8 @@ namespace Avalonia.Skia
var tileTransform =
tileBrush.TileMode != TileMode.None
- ? SKMatrix.MakeTranslation(-(float)calc.DestinationRect.X, -(float)calc.DestinationRect.Y)
- : SKMatrix.MakeIdentity();
+ ? SKMatrix.CreateTranslation(-(float)calc.DestinationRect.X, -(float)calc.DestinationRect.Y)
+ : SKMatrix.CreateIdentity();
SKShaderTileMode tileX =
tileBrush.TileMode == TileMode.None
@@ -655,7 +655,7 @@ namespace Avalonia.Skia
SKMatrix.Concat(
ref paintTransform,
tileTransform,
- SKMatrix.MakeScale((float)(96.0 / _dpi.X), (float)(96.0 / _dpi.Y)));
+ SKMatrix.CreateScale((float)(96.0 / _dpi.X), (float)(96.0 / _dpi.Y)));
using (var shader = image.ToShader(tileX, tileY, paintTransform))
{
diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs
index ade659f5eb..d1f8d6a779 100644
--- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs
+++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs
@@ -35,6 +35,7 @@ namespace Avalonia.Skia
IsAntialias = true,
LcdRenderText = true,
SubpixelText = true,
+ IsLinearText = true,
Typeface = glyphTypeface.Typeface,
TextSize = (float)fontSize,
TextAlign = textAlignment.ToSKTextAlign()
diff --git a/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs b/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs
index 9b73174006..e0b7019672 100644
--- a/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs
+++ b/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs
@@ -82,10 +82,10 @@ namespace Avalonia.Skia
var renderTarget =
new GRBackendRenderTarget(size.Width, size.Height, disp.SampleCount, disp.StencilSize,
- new GRGlFramebufferInfo((uint)fb, GRPixelConfig.Rgba8888.ToGlSizedFormat()));
+ new GRGlFramebufferInfo((uint)fb, SKColorType.Rgba8888.ToGlSizedFormat()));
var surface = SKSurface.Create(_grContext, renderTarget,
glSession.IsYFlipped ? GRSurfaceOrigin.TopLeft : GRSurfaceOrigin.BottomLeft,
- GRPixelConfig.Rgba8888.ToColorType());
+ SKColorType.Rgba8888);
success = true;
return new GlGpuSession(_grContext, renderTarget, surface, glSession);
diff --git a/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlSkiaGpu.cs b/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlSkiaGpu.cs
index de188f42bd..9278de2137 100644
--- a/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlSkiaGpu.cs
+++ b/src/Skia/Avalonia.Skia/Gpu/OpenGl/GlSkiaGpu.cs
@@ -15,19 +15,18 @@ namespace Avalonia.Skia
using (context.MakeCurrent())
{
using (var iface = context.Version.Type == GlProfileType.OpenGL ?
- GRGlInterface.AssembleGlInterface((_, proc) => context.GlInterface.GetProcAddress(proc)) :
- GRGlInterface.AssembleGlesInterface((_, proc) => context.GlInterface.GetProcAddress(proc)))
+ GRGlInterface.CreateOpenGl(proc => context.GlInterface.GetProcAddress(proc)) :
+ GRGlInterface.CreateGles(proc => context.GlInterface.GetProcAddress(proc)))
{
- _grContext = GRContext.Create(GRBackend.OpenGL, iface);
+ _grContext = GRContext.CreateGl(iface);
if (maxResourceBytes.HasValue)
{
- _grContext.GetResourceCacheLimits(out var maxResources, out _);
- _grContext.SetResourceCacheLimits(maxResources, maxResourceBytes.Value);
+ _grContext.SetResourceCacheLimit(maxResourceBytes.Value);
}
}
}
}
-
+
public ISkiaGpuRenderTarget TryCreateRenderTarget(IEnumerable