From 89c359bd10d6be55263fb27444c7fe8bd3ffd3a6 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Fri, 5 Jul 2019 14:26:39 +0300 Subject: [PATCH 1/4] Expose GRContext from ISkiaDrawingContextImpl --- src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 1 + src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index ee4564ff35..262d87d8b6 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -101,6 +101,7 @@ namespace Avalonia.Skia public SKCanvas Canvas { get; } SKCanvas ISkiaDrawingContextImpl.SkCanvas => Canvas; + GRContext ISkiaDrawingContextImpl.GrContext => _grContext; /// public void Clear(Color color) diff --git a/src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs b/src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs index ff82990c47..a9b91384d7 100644 --- a/src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs @@ -6,5 +6,6 @@ namespace Avalonia.Skia public interface ISkiaDrawingContextImpl : IDrawingContextImpl { SKCanvas SkCanvas { get; } + GRContext GrContext { get; } } } From b18a2075967a921397b0bf5b96323bcb98f60900 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 6 Jul 2019 21:02:23 +0300 Subject: [PATCH 2/4] Use 0.8.999 for nightlies --- build/SharedVersion.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/SharedVersion.props b/build/SharedVersion.props index 4f0b1f0a5b..76abcf6912 100644 --- a/build/SharedVersion.props +++ b/build/SharedVersion.props @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> Avalonia - 0.8.1 + 0.8.999 Copyright 2019 © The AvaloniaUI Project https://github.com/AvaloniaUI/Avalonia/blob/master/licence.md https://github.com/AvaloniaUI/Avalonia/ From 2136f5e2c87c35b9094478e1a86efcfd6f1b315b Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 6 Jul 2019 21:25:45 +0300 Subject: [PATCH 3/4] [X11] Blacklist llvmpipe --- src/Avalonia.OpenGL/GlInterface.cs | 18 ++++++++++++++---- src/Avalonia.X11/Glx/GlxDisplay.cs | 13 +++++++++++++ src/Avalonia.X11/X11Platform.cs | 8 ++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.OpenGL/GlInterface.cs b/src/Avalonia.OpenGL/GlInterface.cs index 718afc4a94..f556949cfa 100644 --- a/src/Avalonia.OpenGL/GlInterface.cs +++ b/src/Avalonia.OpenGL/GlInterface.cs @@ -9,12 +9,14 @@ namespace Avalonia.OpenGL public class GlInterface : GlInterfaceBase { public string Version { get; } + public string Vendor { get; } + public string Renderer { get; } public GlInterface(Func getProcAddress) : base(getProcAddress) { - var versionPtr = GetString(GlConsts.GL_VERSION); - if (versionPtr != IntPtr.Zero) - Version = Marshal.PtrToStringAnsi(versionPtr); + Version = GetString(GlConsts.GL_VERSION); + Renderer = GetString(GlConsts.GL_RENDERER); + Vendor = GetString(GlConsts.GL_VENDOR); } public GlInterface(Func n) : this(ConvertNative(n)) @@ -54,7 +56,15 @@ namespace Avalonia.OpenGL public delegate IntPtr GlGetString(int v); [GlEntryPoint("glGetString")] - public GlGetString GetString { get; } + public GlGetString GetStringNative { get; } + + public string GetString(int v) + { + var ptr = GetStringNative(v); + if (ptr != IntPtr.Zero) + return Marshal.PtrToStringAnsi(ptr); + return null; + } public delegate void GlGetIntegerv(int name, out int rv); [GlEntryPoint("glGetIntegerv")] diff --git a/src/Avalonia.X11/Glx/GlxDisplay.cs b/src/Avalonia.X11/Glx/GlxDisplay.cs index 5602b33280..04f2a7137c 100644 --- a/src/Avalonia.X11/Glx/GlxDisplay.cs +++ b/src/Avalonia.X11/Glx/GlxDisplay.cs @@ -90,6 +90,19 @@ namespace Avalonia.X11.Glx GlInterface = new GlInterface(GlxInterface.GlxGetProcAddress); if (GlInterface.Version == null) throw new OpenGlException("GL version string is null, aborting"); + if (GlInterface.Renderer == null) + throw new OpenGlException("GL renderer string is null, aborting"); + + if (Environment.GetEnvironmentVariable("AVALONIA_GLX_IGNORE_RENDERER_BLACKLIST") != "1") + { + var blacklist = AvaloniaLocator.Current.GetService() + ?.GlxRendererBlacklist; + if (blacklist != null) + foreach(var item in blacklist) + if (GlInterface.Renderer.Contains(item)) + throw new OpenGlException($"Renderer '{GlInterface.Renderer}' is blacklisted by '{item}'"); + } + } public void ClearContext() => Glx.MakeContextCurrent(_x11.Display, diff --git a/src/Avalonia.X11/X11Platform.cs b/src/Avalonia.X11/X11Platform.cs index cf5902eff7..7bdc61eb28 100644 --- a/src/Avalonia.X11/X11Platform.cs +++ b/src/Avalonia.X11/X11Platform.cs @@ -96,6 +96,14 @@ namespace Avalonia { public bool UseEGL { get; set; } public bool UseGpu { get; set; } = true; + + public List 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 + // and sometimes attempts to use GLX might cause a segfault + "llvmpipe" + }; public string WmClass { get; set; } = Assembly.GetEntryAssembly()?.GetName()?.Name ?? "AvaloniaApplication"; public bool? EnableMultiTouch { get; set; } } From 1986de1bf86e0717373d146737da5afb66d37aa9 Mon Sep 17 00:00:00 2001 From: v-yadli Date: Tue, 9 Jul 2019 11:35:23 -0700 Subject: [PATCH 4/4] add some key mappings for osx --- .gitignore | 7 +++++++ build-native.sh | 0 .../Avalonia.Native/src/OSX/KeyTransform.mm | 21 ++++++++++--------- 3 files changed, 18 insertions(+), 10 deletions(-) mode change 100644 => 100755 build-native.sh diff --git a/.gitignore b/.gitignore index 971c945246..8a1c107ee0 100644 --- a/.gitignore +++ b/.gitignore @@ -198,3 +198,10 @@ info.plist build-intermediate obj-Direct2D1/ obj-Skia/ + + +################## +# Vim +################## +.vim +.ccls-cache diff --git a/build-native.sh b/build-native.sh old mode 100644 new mode 100755 diff --git a/native/Avalonia.Native/src/OSX/KeyTransform.mm b/native/Avalonia.Native/src/OSX/KeyTransform.mm index 7486aaad69..971bcf24f8 100644 --- a/native/Avalonia.Native/src/OSX/KeyTransform.mm +++ b/native/Avalonia.Native/src/OSX/KeyTransform.mm @@ -26,7 +26,7 @@ const int kVK_ANSI_3 = 0x14; const int kVK_ANSI_4 = 0x15; const int kVK_ANSI_6 = 0x16; const int kVK_ANSI_5 = 0x17; -//const int kVK_ANSI_Equal = 0x18; +const int kVK_ANSI_Equal = 0x18; const int kVK_ANSI_9 = 0x19; const int kVK_ANSI_7 = 0x1A; const int kVK_ANSI_Minus = 0x1B; @@ -45,11 +45,11 @@ const int kVK_ANSI_K = 0x28; const int kVK_ANSI_Semicolon = 0x29; const int kVK_ANSI_Backslash = 0x2A; const int kVK_ANSI_Comma = 0x2B; -//const int kVK_ANSI_Slash = 0x2C; +const int kVK_ANSI_Slash = 0x2C; const int kVK_ANSI_N = 0x2D; const int kVK_ANSI_M = 0x2E; const int kVK_ANSI_Period = 0x2F; -//const int kVK_ANSI_Grave = 0x32; +const int kVK_ANSI_Grave = 0x32; const int kVK_ANSI_KeypadDecimal = 0x41; const int kVK_ANSI_KeypadMultiply = 0x43; const int kVK_ANSI_KeypadPlus = 0x45; @@ -57,7 +57,7 @@ const int kVK_ANSI_KeypadClear = 0x47; const int kVK_ANSI_KeypadDivide = 0x4B; const int kVK_ANSI_KeypadEnter = 0x4C; const int kVK_ANSI_KeypadMinus = 0x4E; -//const int kVK_ANSI_KeypadEquals = 0x51; +const int kVK_ANSI_KeypadEquals = 0x51; const int kVK_ANSI_Keypad0 = 0x52; const int kVK_ANSI_Keypad1 = 0x53; const int kVK_ANSI_Keypad2 = 0x54; @@ -121,7 +121,7 @@ const int kVK_UpArrow = 0x7E; //const int kVK_JIS_Underscore = 0x5E; //const int kVK_JIS_KeypadComma = 0x5F; //const int kVK_JIS_Eisu = 0x66; -//const int kVK_JIS_Kana = 0x68; +const int kVK_JIS_Kana = 0x68; std::map s_KeyMap = { @@ -148,7 +148,7 @@ const int kVK_UpArrow = 0x7E; {kVK_ANSI_4, D4}, {kVK_ANSI_6, D6}, {kVK_ANSI_5, D5}, - //{kVK_ANSI_Equal, ?}, + {kVK_ANSI_Equal, OemPlus}, {kVK_ANSI_9, D9}, {kVK_ANSI_7, D7}, {kVK_ANSI_Minus, OemMinus}, @@ -167,11 +167,11 @@ const int kVK_UpArrow = 0x7E; {kVK_ANSI_Semicolon, OemSemicolon}, {kVK_ANSI_Backslash, OemBackslash}, {kVK_ANSI_Comma, OemComma}, - //{kVK_ANSI_Slash, ?}, + {kVK_ANSI_Slash, Oem2}, {kVK_ANSI_N, N}, {kVK_ANSI_M, M}, {kVK_ANSI_Period, OemPeriod}, - //{kVK_ANSI_Grave, ?}, + {kVK_ANSI_Grave, OemTilde}, {kVK_ANSI_KeypadDecimal, Decimal}, {kVK_ANSI_KeypadMultiply, Multiply}, {kVK_ANSI_KeypadPlus, OemPlus}, @@ -179,7 +179,7 @@ const int kVK_UpArrow = 0x7E; {kVK_ANSI_KeypadDivide, Divide}, {kVK_ANSI_KeypadEnter, AvnKeyEnter}, {kVK_ANSI_KeypadMinus, OemMinus}, - //{kVK_ANSI_KeypadEquals, ?}, + {kVK_ANSI_KeypadEquals, OemPlus}, {kVK_ANSI_Keypad0, NumPad0}, {kVK_ANSI_Keypad1, NumPad1}, {kVK_ANSI_Keypad2, NumPad2}, @@ -237,5 +237,6 @@ const int kVK_UpArrow = 0x7E; {kVK_LeftArrow, Left}, {kVK_RightArrow, Right}, {kVK_DownArrow, Down}, - {kVK_UpArrow, Up} + {kVK_UpArrow, Up}, + {kVK_JIS_Kana, AvnKeyKanaMode}, };