AppBuilderDesktopExtensions.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Avalonia.Controls;
  2. using Avalonia.Platform;
  3. namespace Avalonia
  4. {
  5. public static class AppBuilderDesktopExtensions
  6. {
  7. public static TAppBuilder UsePlatformDetect<TAppBuilder>(this TAppBuilder builder)
  8. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  9. {
  10. var os = builder.RuntimePlatform.GetRuntimeInfo().OperatingSystem;
  11. // We don't have the ability to load every assembly right now, so we are
  12. // stuck with manual configuration here
  13. // Helpers are extracted to separate methods to take the advantage of the fact
  14. // that CLR doesn't try to load dependencies before referencing method is jitted
  15. // Additionally, by having a hard reference to each assembly,
  16. // we verify that the assemblies are in the final .deps.json file
  17. // so .NET Core knows where to load the assemblies from,.
  18. if (os == OperatingSystemType.WinNT)
  19. {
  20. LoadWin32(builder);
  21. LoadSkia(builder);
  22. }
  23. else if(os==OperatingSystemType.OSX)
  24. {
  25. LoadAvaloniaNative(builder);
  26. LoadSkia(builder);
  27. }
  28. else
  29. {
  30. LoadGtk3(builder);
  31. LoadSkia(builder);
  32. }
  33. return builder;
  34. }
  35. static void LoadAvaloniaNative<TAppBuilder>(TAppBuilder builder)
  36. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  37. => builder.UseAvaloniaNative();
  38. static void LoadWin32<TAppBuilder>(TAppBuilder builder)
  39. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  40. => builder.UseWin32();
  41. static void LoadGtk3<TAppBuilder>(TAppBuilder builder)
  42. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  43. => builder.UseGtk3();
  44. static void LoadDirect2D1<TAppBuilder>(TAppBuilder builder)
  45. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  46. => builder.UseDirect2D1();
  47. static void LoadSkia<TAppBuilder>(TAppBuilder builder)
  48. where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
  49. => builder.UseSkia();
  50. }
  51. }