diff --git a/src/Avalonia.Input/KeyGesture.cs b/src/Avalonia.Input/KeyGesture.cs
index ad447794bc..aa6fcc8bff 100644
--- a/src/Avalonia.Input/KeyGesture.cs
+++ b/src/Avalonia.Input/KeyGesture.cs
@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
using System.Text;
namespace Avalonia.Input
@@ -29,7 +27,7 @@ namespace Avalonia.Input
KeyModifiers = modifiers;
}
- public bool Equals(KeyGesture other)
+ public bool Equals(KeyGesture? other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
@@ -37,12 +35,12 @@ namespace Avalonia.Input
return Key == other.Key && KeyModifiers == other.KeyModifiers;
}
- public override bool Equals(object obj)
+ public override bool Equals(object? obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
- return obj is KeyGesture && Equals((KeyGesture)obj);
+ return obj is KeyGesture gesture && Equals(gesture);
}
public override int GetHashCode()
@@ -53,12 +51,12 @@ namespace Avalonia.Input
}
}
- public static bool operator ==(KeyGesture left, KeyGesture right)
+ public static bool operator ==(KeyGesture? left, KeyGesture? right)
{
return Equals(left, right);
}
- public static bool operator !=(KeyGesture left, KeyGesture right)
+ public static bool operator !=(KeyGesture? left, KeyGesture? right)
{
return !Equals(left, right);
}
diff --git a/src/Avalonia.Input/PointerEventArgs.cs b/src/Avalonia.Input/PointerEventArgs.cs
index 1cbddf89aa..451f80b1df 100644
--- a/src/Avalonia.Input/PointerEventArgs.cs
+++ b/src/Avalonia.Input/PointerEventArgs.cs
@@ -86,14 +86,14 @@ namespace Avalonia.Input
}
[Obsolete("Use GetCurrentPoint")]
- public PointerPoint GetPointerPoint(IVisual relativeTo) => GetCurrentPoint(relativeTo);
+ public PointerPoint GetPointerPoint(IVisual? relativeTo) => GetCurrentPoint(relativeTo);
///
/// Returns the PointerPoint associated with the current event
///
/// The visual which coordinate system to use. Pass null for toplevel coordinate system
///
- public PointerPoint GetCurrentPoint(IVisual relativeTo)
+ public PointerPoint GetCurrentPoint(IVisual? relativeTo)
=> new PointerPoint(Pointer, GetPosition(relativeTo), _properties);
///
diff --git a/src/Avalonia.OpenGL/AngleOptions.cs b/src/Avalonia.OpenGL/AngleOptions.cs
index 84744288ed..0807eb7ab4 100644
--- a/src/Avalonia.OpenGL/AngleOptions.cs
+++ b/src/Avalonia.OpenGL/AngleOptions.cs
@@ -10,6 +10,12 @@ namespace Avalonia.OpenGL
DirectX11
}
+ public IList GlProfiles { get; set; } = new List
+ {
+ new GlVersion(GlProfileType.OpenGLES, 3, 0),
+ new GlVersion(GlProfileType.OpenGLES, 2, 0)
+ };
+
public IList AllowedPlatformApis { get; set; } = null;
}
}
diff --git a/src/Avalonia.OpenGL/EglDisplay.cs b/src/Avalonia.OpenGL/EglDisplay.cs
index 7b194e4346..7f41e75d6a 100644
--- a/src/Avalonia.OpenGL/EglDisplay.cs
+++ b/src/Avalonia.OpenGL/EglDisplay.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Runtime.InteropServices;
using Avalonia.Platform.Interop;
using static Avalonia.OpenGL.EglConsts;
@@ -61,20 +62,43 @@ namespace Avalonia.OpenGL
if (!_egl.Initialize(_display, out var major, out var minor))
throw OpenGlException.GetFormattedException("eglInitialize", _egl);
- foreach (var cfg in new[]
+ var glProfiles = AvaloniaLocator.Current.GetService()?.GlProfiles
+ ?? new[]
+ {
+ new GlVersion(GlProfileType.OpenGLES, 3, 0),
+ new GlVersion(GlProfileType.OpenGLES, 2, 0)
+ };
+
+ var cfgs = glProfiles.Select(x =>
{
- new
+ var typeBit = EGL_OPENGL_ES3_BIT;
+
+ switch (x.Major)
+ {
+ case 2:
+ typeBit = EGL_OPENGL_ES2_BIT;
+ break;
+
+ case 1:
+ typeBit = EGL_OPENGL_ES_BIT;
+ break;
+ }
+
+ return new
{
Attributes = new[]
{
- EGL_CONTEXT_CLIENT_VERSION, 2,
+ EGL_CONTEXT_MAJOR_VERSION, x.Major,
+ EGL_CONTEXT_MINOR_VERSION, x.Minor,
EGL_NONE
},
Api = EGL_OPENGL_ES_API,
- RenderableTypeBit = EGL_OPENGL_ES2_BIT,
- Version = new GlVersion(GlProfileType.OpenGLES, 2, 0)
- }
- })
+ RenderableTypeBit = typeBit,
+ Version = x
+ };
+ });
+
+ foreach (var cfg in cfgs)
{
if (!_egl.BindApi(cfg.Api))
continue;
diff --git a/src/Avalonia.X11/Glx/GlxDisplay.cs b/src/Avalonia.X11/Glx/GlxDisplay.cs
index 903d6b570b..b82895d12c 100644
--- a/src/Avalonia.X11/Glx/GlxDisplay.cs
+++ b/src/Avalonia.X11/Glx/GlxDisplay.cs
@@ -18,7 +18,7 @@ namespace Avalonia.X11.Glx
public XVisualInfo* VisualInfo => _visual;
public GlxContext DeferredContext { get; }
public GlxInterface Glx { get; } = new GlxInterface();
- public GlxDisplay(X11Info x11, List probeProfiles)
+ public GlxDisplay(X11Info x11, IList probeProfiles)
{
_x11 = x11;
_probeProfiles = probeProfiles.ToList();
diff --git a/src/Avalonia.X11/Glx/GlxPlatformFeature.cs b/src/Avalonia.X11/Glx/GlxPlatformFeature.cs
index e3250e6733..ad3a54bcc1 100644
--- a/src/Avalonia.X11/Glx/GlxPlatformFeature.cs
+++ b/src/Avalonia.X11/Glx/GlxPlatformFeature.cs
@@ -12,7 +12,7 @@ namespace Avalonia.X11.Glx
public GlxContext DeferredContext { get; private set; }
public IGlContext MainContext => DeferredContext;
- public static bool TryInitialize(X11Info x11, List glProfiles)
+ public static bool TryInitialize(X11Info x11, IList glProfiles)
{
var feature = TryCreate(x11, glProfiles);
if (feature != null)
@@ -24,7 +24,7 @@ namespace Avalonia.X11.Glx
return false;
}
- public static GlxGlPlatformFeature TryCreate(X11Info x11, List glProfiles)
+ public static GlxGlPlatformFeature TryCreate(X11Info x11, IList glProfiles)
{
try
{
diff --git a/src/Avalonia.X11/X11Platform.cs b/src/Avalonia.X11/X11Platform.cs
index 7f3255d4da..d7bd81db98 100644
--- a/src/Avalonia.X11/X11Platform.cs
+++ b/src/Avalonia.X11/X11Platform.cs
@@ -103,7 +103,7 @@ namespace Avalonia
public bool UseDBusMenu { get; set; }
public bool UseDeferredRendering { get; set; } = true;
- public List GlProfiles { get; set; } = new List
+ public IList GlProfiles { get; set; } = new List
{
new GlVersion(GlProfileType.OpenGL, 4, 0),
new GlVersion(GlProfileType.OpenGL, 3, 2),
@@ -113,7 +113,7 @@ namespace Avalonia
new GlVersion(GlProfileType.OpenGLES, 2, 0)
};
- public List GlxRendererBlacklist { get; set; } = new List
+ public IList GlxRendererBlacklist { get; set; } = new List
{
// llvmpipe is a software GL rasterizer. If it's returned by glGetString,
// that usually means that something in the system is horribly misconfigured