Browse Source

Merge branch 'master' into feature/setcurrentvalue

pull/10324/head
Steven Kirk 3 years ago
committed by GitHub
parent
commit
a3b50406b9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      readme.md
  2. 2
      samples/GpuInterop/VulkanDemo/D3DMemoryHelper.cs
  3. 2
      samples/GpuInterop/VulkanDemo/VulkanContext.cs
  4. 32
      samples/GpuInterop/VulkanDemo/VulkanImage.cs
  5. 4
      src/Android/Avalonia.Android/AndroidInputMethod.cs
  6. 1
      src/Android/Avalonia.Android/Avalonia.Android.csproj
  7. 2
      src/Android/Avalonia.Android/Platform/Input/AndroidKeyboardDevice.cs
  8. 2
      src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs
  9. 4
      src/Android/Avalonia.Android/PlatformIconLoader.cs
  10. 6
      src/Android/Avalonia.Android/Stubs.cs
  11. 43
      src/Avalonia.Base/AvaloniaProperty.cs
  12. 2
      src/Avalonia.Base/Platform/IPlatformThreadingInterface.cs
  13. 4
      src/Avalonia.Base/Platform/Storage/FilePickerFileType.cs
  14. 1
      src/Avalonia.Base/Rendering/IRenderTimer.cs
  15. 4
      src/Avalonia.Base/StyledElement.cs
  16. 7
      src/Avalonia.Controls/ItemsControl.cs
  17. 2
      src/Avalonia.Controls/Platform/IPlatformLifetimeEventsImpl.cs
  18. 8
      src/Avalonia.Controls/Platform/IWindowImpl.cs
  19. 2
      src/Avalonia.Controls/WindowBase.cs
  20. 2
      src/Avalonia.FreeDesktop/DBusHelper.cs
  21. 2
      src/Avalonia.FreeDesktop/DBusIme/X11DBusImeHelper.cs
  22. 2
      src/Avalonia.FreeDesktop/DBusMenuExporter.cs
  23. 6
      src/Avalonia.FreeDesktop/IX11InputMethod.cs
  24. 2
      src/Avalonia.FreeDesktop/LinuxMountedVolumeInfoProvider.cs
  25. 2
      src/Avalonia.Native/CallbackBase.cs
  26. 2
      src/Avalonia.Native/MacOSMountedVolumeInfoProvider.cs
  27. 2
      src/Avalonia.Native/MenuActionCallback.cs
  28. 2
      src/Avalonia.Native/PredicateCallback.cs
  29. 2
      src/Avalonia.Native/ScreenImpl.cs
  30. 2
      src/Avalonia.X11/Glx/Glx.cs
  31. 2
      src/Avalonia.X11/Glx/GlxConsts.cs
  32. 6
      src/Avalonia.X11/Glx/GlxContext.cs
  33. 8
      src/Avalonia.X11/Glx/GlxDisplay.cs
  34. 8
      src/Avalonia.X11/Glx/GlxGlPlatformSurface.cs
  35. 2
      src/Avalonia.X11/Glx/GlxPlatformFeature.cs
  36. 2
      src/Avalonia.X11/Keysyms.cs
  37. 29
      src/Avalonia.X11/NativeDialogs/Gtk.cs
  38. 2
      src/Avalonia.X11/TransparencyHelper.cs
  39. 16
      src/Avalonia.X11/X11Clipboard.cs
  40. 4
      src/Avalonia.X11/X11CursorFactory.cs
  41. 8
      src/Avalonia.X11/X11Enums.cs
  42. 2
      src/Avalonia.X11/X11Exception.cs
  43. 2
      src/Avalonia.X11/X11Framebuffer.cs
  44. 2
      src/Avalonia.X11/X11FramebufferSurface.cs
  45. 12
      src/Avalonia.X11/X11Globals.cs
  46. 8
      src/Avalonia.X11/X11IconLoader.cs
  47. 2
      src/Avalonia.X11/X11Info.cs
  48. 2
      src/Avalonia.X11/X11KeyTransform.cs
  49. 10
      src/Avalonia.X11/X11NativeControlHost.cs
  50. 8
      src/Avalonia.X11/X11Platform.cs
  51. 32
      src/Avalonia.X11/X11PlatformThreading.cs
  52. 20
      src/Avalonia.X11/X11Screens.cs
  53. 9
      src/Avalonia.X11/X11Structs.cs
  54. 32
      src/Avalonia.X11/X11Window.Ime.cs
  55. 4
      src/Avalonia.X11/X11Window.Xim.cs
  56. 46
      src/Avalonia.X11/X11Window.cs
  57. 5
      src/Avalonia.X11/XError.cs
  58. 16
      src/Avalonia.X11/XI2Manager.cs
  59. 54
      src/Avalonia.X11/XIStructs.cs
  60. 10
      src/Avalonia.X11/XLib.cs
  61. 2
      src/Browser/Avalonia.Browser/Skia/BrowserSkiaGpu.cs
  62. 4
      src/Shared/RawEventGrouping.cs
  63. 5
      src/Skia/Avalonia.Skia/GlyphRunImpl.cs
  64. 4
      src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs
  65. 2
      src/Skia/Avalonia.Skia/SKTypefaceCollection.cs
  66. 2
      src/Skia/Avalonia.Skia/SKTypefaceCollectionCache.cs
  67. 22
      src/Skia/Avalonia.Skia/readme.md
  68. 6
      src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj
  69. 2
      src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
  70. 33
      src/Windows/Avalonia.Direct2D1/Disposable.cs
  71. 2
      src/Windows/Avalonia.Direct2D1/ILayerFactory.cs
  72. 4
      src/Windows/Avalonia.Direct2D1/Media/BrushImpl.cs
  73. 4
      src/Windows/Avalonia.Direct2D1/Media/DWriteResourceFontFileEnumerator.cs
  74. 2
      src/Windows/Avalonia.Direct2D1/Media/DWriteResourceFontFileStream.cs
  75. 4
      src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
  76. 4
      src/Windows/Avalonia.Direct2D1/Media/GeometryImpl.cs
  77. 4
      src/Windows/Avalonia.Direct2D1/Media/GlyphTypefaceImpl.cs
  78. 4
      src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
  79. 4
      src/Windows/Avalonia.Direct2D1/Media/Imaging/BitmapImpl.cs
  80. 4
      src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DBitmapImpl.cs
  81. 4
      src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs
  82. 4
      src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs
  83. 4
      src/Windows/Avalonia.Direct2D1/Media/Imaging/WicRenderTargetBitmapImpl.cs
  84. 2
      src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs
  85. 4
      src/Windows/Avalonia.Direct2D1/Media/LinearGradientBrushImpl.cs
  86. 4
      src/Windows/Avalonia.Direct2D1/Media/RadialGradientBrushImpl.cs
  87. 4
      src/Windows/Avalonia.Direct2D1/Media/SolidColorBrushImpl.cs
  88. 3
      src/Windows/Avalonia.Direct2D1/Media/StreamGeometryContextImpl.cs
  89. 4
      src/Windows/Avalonia.Direct2D1/Media/StreamGeometryImpl.cs
  90. 4
      src/Windows/Avalonia.Direct2D1/Media/TransformedGeometryImpl.cs
  91. 2
      src/Windows/Avalonia.Direct2D1/OptionalDispose.cs
  92. 2
      src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs
  93. 2
      src/Windows/Avalonia.Direct2D1/RenderTarget.cs
  94. 2
      src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs
  95. 2
      src/Windows/Avalonia.Win32/AngleOptions.cs
  96. 2
      src/Windows/Avalonia.Win32/Automation/AutomationNode.ExpandCollapse.cs
  97. 2
      src/Windows/Avalonia.Win32/Automation/AutomationNode.RangeValue.cs
  98. 2
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Scroll.cs
  99. 8
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Selection.cs
  100. 2
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Toggle.cs

2
readme.md

@ -1,3 +1,5 @@
[![GH_Banner](https://user-images.githubusercontent.com/552074/218457976-92e76834-9e22-4e35-acfa-aa50281bc0f9.png)](https://avaloniaui.net/xpf)
[![Telegram](https://raw.githubusercontent.com/Patrolavia/telegram-badge/master/chat.svg)](https://t.me/Avalonia)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/AvaloniaUI/Avalonia?utm_campaign=pr-badge&utm_content=badge&utm_medium=badge&utm_source=badge) [![Discord](https://img.shields.io/badge/discord-join%20chat-46BC99)]( https://aka.ms/dotnet-discord) [![Build Status](https://dev.azure.com/AvaloniaUI/AvaloniaUI/_apis/build/status/AvaloniaUI.Avalonia)](https://dev.azure.com/AvaloniaUI/AvaloniaUI/_build/latest?definitionId=4) [![Backers on Open Collective](https://opencollective.com/Avalonia/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/Avalonia/sponsors/badge.svg)](#sponsors) ![License](https://img.shields.io/github/license/avaloniaui/avalonia.svg)
<br />

2
samples/GpuInterop/VulkanDemo/D3DMemoryHelper.cs

@ -47,7 +47,7 @@ public class D3DMemoryHelper
MipLevels = 1,
SampleDescription = new SampleDescription { Count = 1, Quality = 0 },
CpuAccessFlags = default,
OptionFlags = ResourceOptionFlags.SharedKeyedmutex,
OptionFlags = ResourceOptionFlags.SharedKeyedmutex|ResourceOptionFlags.SharedNthandle,
BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource
});
}

2
samples/GpuInterop/VulkanDemo/VulkanContext.cs

@ -173,7 +173,7 @@ public unsafe class VulkanContext : IDisposable
api.GetPhysicalDeviceQueueFamilyProperties(physicalDevice, ref queueFamilyCount, familyProperties);
for (uint queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; queueFamilyIndex++)
{
var family = familyProperties[c];
var family = familyProperties[queueFamilyIndex];
if (!family.QueueFlags.HasAllFlags(QueueFlags.GraphicsBit))
continue;

32
samples/GpuInterop/VulkanDemo/VulkanImage.cs

@ -4,10 +4,13 @@ using System.Runtime.InteropServices;
using Avalonia;
using Avalonia.Platform;
using Avalonia.Vulkan;
using SharpDX.DXGI;
using Silk.NET.Vulkan;
using Silk.NET.Vulkan.Extensions.KHR;
using SilkNetDemo;
using SkiaSharp;
using Device = Silk.NET.Vulkan.Device;
using Format = Silk.NET.Vulkan.Format;
namespace GpuInterop.VulkanDemo;
@ -24,7 +27,6 @@ public unsafe class VulkanImage : IDisposable
private ImageView? _imageView { get; set; }
private DeviceMemory _imageMemory { get; set; }
private SharpDX.Direct3D11.Texture2D? _d3dTexture2D;
private IntPtr _win32ShareHandle;
internal Image? InternalHandle { get; private set; }
internal Format Format { get; }
@ -60,7 +62,7 @@ public unsafe class VulkanImage : IDisposable
//MipLevels = MipLevels != 0 ? MipLevels : (uint)Math.Floor(Math.Log(Math.Max(Size.Width, Size.Height), 2));
var handleType = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?
ExternalMemoryHandleTypeFlags.D3D11TextureKmtBit :
ExternalMemoryHandleTypeFlags.D3D11TextureBit :
ExternalMemoryHandleTypeFlags.OpaqueFDBit;
var externalMemoryCreateInfo = new ExternalMemoryImageCreateInfo
{
@ -108,14 +110,14 @@ public unsafe class VulkanImage : IDisposable
if (exportable && RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
_d3dTexture2D = D3DMemoryHelper.CreateMemoryHandle(vk.D3DDevice, size, Format);
using var dxgi = _d3dTexture2D.QueryInterface<SharpDX.DXGI.Resource>();
_win32ShareHandle = dxgi.SharedHandle;
using var dxgi = _d3dTexture2D.QueryInterface<SharpDX.DXGI.Resource1>();
handleImport = new ImportMemoryWin32HandleInfoKHR
{
PNext = &dedicatedAllocation,
SType = StructureType.ImportMemoryWin32HandleInfoKhr,
HandleType = ExternalMemoryHandleTypeFlags.D3D11TextureKmtBit,
Handle = _win32ShareHandle,
HandleType = ExternalMemoryHandleTypeFlags.D3D11TextureBit,
Handle = dxgi.CreateSharedHandle(null, SharedResourceFlags.Read | SharedResourceFlags.Write),
};
}
@ -185,11 +187,19 @@ public unsafe class VulkanImage : IDisposable
return fd;
}
public IPlatformHandle Export() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?
new PlatformHandle(_win32ShareHandle,
KnownPlatformGraphicsExternalImageHandleTypes.D3D11TextureGlobalSharedHandle) :
new PlatformHandle(new IntPtr(ExportFd()),
KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaquePosixFileDescriptor);
public IPlatformHandle Export()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
using var dxgi = _d3dTexture2D!.QueryInterface<Resource1>();
return new PlatformHandle(
dxgi.CreateSharedHandle(null, SharedResourceFlags.Read | SharedResourceFlags.Write),
KnownPlatformGraphicsExternalImageHandleTypes.D3D11TextureNtHandle);
}
else
return new PlatformHandle(new IntPtr(ExportFd()),
KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaquePosixFileDescriptor);
}
public ImageTiling Tiling => ImageTiling.Optimal;

4
src/Android/Avalonia.Android/AndroidInputMethod.cs

@ -32,7 +32,7 @@ namespace Avalonia.Android
ActionPrevious = 0x00000007,
}
class AndroidInputMethod<TView> : ITextInputMethodImpl, IAndroidInputMethod
internal class AndroidInputMethod<TView> : ITextInputMethodImpl, IAndroidInputMethod
where TView : View, IInitEditorInfo
{
private readonly TView _host;
@ -167,7 +167,7 @@ namespace Avalonia.Android
}
}
public readonly record struct ComposingRegion
internal readonly record struct ComposingRegion
{
private readonly int _start = -1;
private readonly int _end = -1;

1
src/Android/Avalonia.Android/Avalonia.Android.csproj

@ -5,6 +5,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
<DebugType>portable</DebugType>
<AndroidResgenNamespace>Avalonia.Android.Internal</AndroidResgenNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />

2
src/Android/Avalonia.Android/Platform/Input/AndroidKeyboardDevice.cs

@ -5,7 +5,7 @@ using Avalonia.Input;
namespace Avalonia.Android.Platform.Input
{
public class AndroidKeyboardDevice : KeyboardDevice, IKeyboardDevice {
internal class AndroidKeyboardDevice : KeyboardDevice, IKeyboardDevice {
private static readonly Dictionary<Keycode, Key> KeyDic = new Dictionary<Keycode, Key>
{
// { Keycode.Cancel?, Key.Cancel },

2
src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs

@ -10,7 +10,7 @@ using Avalonia.Platform;
namespace Avalonia.Android
{
public abstract class InvalidationAwareSurfaceView : SurfaceView, ISurfaceHolderCallback, IPlatformNativeSurfaceHandle
internal abstract class InvalidationAwareSurfaceView : SurfaceView, ISurfaceHolderCallback, IPlatformNativeSurfaceHandle
{
bool _invalidateQueued;
readonly object _lock = new object();

4
src/Android/Avalonia.Android/PlatformIconLoader.cs

@ -3,7 +3,7 @@ using Avalonia.Platform;
namespace Avalonia.Android
{
class PlatformIconLoader : IPlatformIconLoader
internal class PlatformIconLoader : IPlatformIconLoader
{
public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
{
@ -29,7 +29,7 @@ namespace Avalonia.Android
}
// Stores the icon created as a stream to support saving even though an icon is never shown
public class FakeIcon : IWindowIconImpl
internal class FakeIcon : IWindowIconImpl
{
private Stream stream = new MemoryStream();

6
src/Android/Avalonia.Android/Stubs.cs

@ -4,7 +4,7 @@ using Avalonia.Platform;
namespace Avalonia.Android
{
class WindowingPlatformStub : IWindowingPlatform
internal class WindowingPlatformStub : IWindowingPlatform
{
public IWindowImpl CreateWindow() => throw new NotSupportedException();
@ -13,7 +13,7 @@ namespace Avalonia.Android
public ITrayIconImpl CreateTrayIcon() => null;
}
class PlatformIconLoaderStub : IPlatformIconLoader
internal class PlatformIconLoaderStub : IPlatformIconLoader
{
public IWindowIconImpl LoadIcon(IBitmapImpl bitmap)
{
@ -38,7 +38,7 @@ namespace Avalonia.Android
}
}
public class IconStub : IWindowIconImpl
internal class IconStub : IWindowIconImpl
{
private readonly MemoryStream _ms;

43
src/Avalonia.Base/AvaloniaProperty.cs

@ -225,13 +225,8 @@ namespace Avalonia
/// <param name="defaultValue">The default value of the property.</param>
/// <param name="inherits">Whether the property inherits its value.</param>
/// <param name="defaultBindingMode">The default binding mode for the property.</param>
/// <param name="validate">A value validation callback.</param>
/// <param name="validate">A value validation callback.</param>
/// <param name="coerce">A value coercion callback.</param>
/// <param name="notifying">
/// A method that gets called before and after the property starts being notified on an
/// object; the bool argument will be true before and false afterwards. This callback is
/// intended to support IsDataContextChanging.
/// </param>
/// <returns>A <see cref="StyledProperty{TValue}"/></returns>
public static StyledProperty<TValue> Register<TOwner, TValue>(
string name,
@ -239,8 +234,40 @@ namespace Avalonia
bool inherits = false,
BindingMode defaultBindingMode = BindingMode.OneWay,
Func<TValue, bool>? validate = null,
Func<AvaloniaObject, TValue, TValue>? coerce = null,
Action<AvaloniaObject, bool>? notifying = null)
Func<AvaloniaObject, TValue, TValue>? coerce = null)
where TOwner : AvaloniaObject
{
_ = name ?? throw new ArgumentNullException(nameof(name));
var metadata = new StyledPropertyMetadata<TValue>(
defaultValue,
defaultBindingMode: defaultBindingMode,
coerce: coerce);
var result = new StyledProperty<TValue>(
name,
typeof(TOwner),
metadata,
inherits,
validate);
AvaloniaPropertyRegistry.Instance.Register(typeof(TOwner), result);
return result;
}
/// <inheritdoc cref="Register{TOwner, TValue}" />
/// <param name="notifying">
/// A method that gets called before and after the property starts being notified on an
/// object; the bool argument will be true before and false afterwards. This callback is
/// intended to support IsDataContextChanging.
/// </param>
internal static StyledProperty<TValue> Register<TOwner, TValue>(
string name,
TValue defaultValue,
bool inherits,
BindingMode defaultBindingMode,
Func<TValue, bool>? validate,
Func<AvaloniaObject, TValue, TValue>? coerce,
Action<AvaloniaObject, bool>? notifying)
where TOwner : AvaloniaObject
{
_ = name ?? throw new ArgumentNullException(nameof(name));

2
src/Avalonia.Base/Platform/IPlatformThreadingInterface.cs

@ -26,6 +26,6 @@ namespace Avalonia.Platform
bool CurrentThreadIsLoopThread { get; }
event Action<DispatcherPriority?> Signaled;
event Action<DispatcherPriority?>? Signaled;
}
}

4
src/Avalonia.Base/Platform/Storage/FilePickerFileType.cs

@ -7,9 +7,9 @@ namespace Avalonia.Platform.Storage;
/// </summary>
public sealed class FilePickerFileType
{
public FilePickerFileType(string name)
public FilePickerFileType(string? name)
{
Name = name;
Name = name ?? string.Empty;
}
/// <summary>

1
src/Avalonia.Base/Rendering/IRenderTimer.cs

@ -1,5 +1,4 @@
using System;
using System.Threading.Tasks;
using Avalonia.Metadata;
namespace Avalonia.Rendering

4
src/Avalonia.Base/StyledElement.cs

@ -41,7 +41,11 @@ namespace Avalonia
public static readonly StyledProperty<object?> DataContextProperty =
AvaloniaProperty.Register<StyledElement, object?>(
nameof(DataContext),
defaultValue: null,
inherits: true,
defaultBindingMode: BindingMode.OneWay,
validate: null,
coerce: null,
notifying: DataContextNotifying);
/// <summary>

7
src/Avalonia.Controls/ItemsControl.cs

@ -559,7 +559,12 @@ namespace Avalonia.Controls
return new ItemContainerGenerator(this);
}
internal void AddLogicalChild(Control c) => LogicalChildren.Add(c);
internal void AddLogicalChild(Control c)
{
if (!LogicalChildren.Contains(c))
LogicalChildren.Add(c);
}
internal void RemoveLogicalChild(Control c) => LogicalChildren.Remove(c);
/// <summary>

2
src/Avalonia.Controls/Platform/IPlatformLifetimeEventsImpl.cs

@ -13,6 +13,6 @@ namespace Avalonia.Platform
/// <remarks>
/// Raised on on OSX via the Quit menu or right-clicking on the application icon and selecting Quit.
/// </remarks>
event EventHandler<ShutdownRequestedEventArgs> ShutdownRequested;
event EventHandler<ShutdownRequestedEventArgs>? ShutdownRequested;
}
}

8
src/Avalonia.Controls/Platform/IWindowImpl.cs

@ -19,7 +19,7 @@ namespace Avalonia.Platform
/// <summary>
/// Gets or sets a method called when the minimized/maximized state of the window changes.
/// </summary>
Action<WindowState> WindowStateChanged { get; set; }
Action<WindowState>? WindowStateChanged { get; set; }
/// <summary>
/// Sets the title of the window.
@ -42,7 +42,7 @@ namespace Avalonia.Platform
/// <summary>
/// Called when a disabled window received input. Can be used to activate child windows.
/// </summary>
Action GotInputWhenDisabled { get; set; }
Action? GotInputWhenDisabled { get; set; }
/// <summary>
/// Enables or disables system window decorations (title bar, buttons, etc)
@ -68,7 +68,7 @@ namespace Avalonia.Platform
/// Gets or sets a method called before the underlying implementation is destroyed.
/// Return true to prevent the underlying implementation from closing.
/// </summary>
Func<WindowCloseReason, bool> Closing { get; set; }
Func<WindowCloseReason, bool>? Closing { get; set; }
/// <summary>
/// Gets a value to indicate if the platform was able to extend client area to non-client area.
@ -78,7 +78,7 @@ namespace Avalonia.Platform
/// <summary>
/// Gets or Sets an action that is called whenever one of the extend client area properties changed.
/// </summary>
Action<bool> ExtendClientAreaToDecorationsChanged { get; set; }
Action<bool>? ExtendClientAreaToDecorationsChanged { get; set; }
/// <summary>
/// Gets a flag that indicates if Managed decorations i.e. caption buttons are required.

2
src/Avalonia.Controls/WindowBase.cs

@ -94,7 +94,7 @@ namespace Avalonia.Controls
private set { SetAndRaise(IsActiveProperty, ref _isActive, value); }
}
public Screens Screens { get; private set; }
public Screens Screens { get; }
/// <summary>
/// Gets or sets the owner of the window.

2
src/Avalonia.FreeDesktop/DBusHelper.cs

@ -6,7 +6,7 @@ using Tmds.DBus;
namespace Avalonia.FreeDesktop
{
public static class DBusHelper
internal static class DBusHelper
{
/// <summary>
/// This class uses synchronous execution at DBus connection establishment stage

2
src/Avalonia.FreeDesktop/DBusIme/X11DBusImeHelper.cs

@ -6,7 +6,7 @@ using Tmds.DBus;
namespace Avalonia.FreeDesktop.DBusIme
{
public class X11DBusImeHelper
internal class X11DBusImeHelper
{
private static readonly Dictionary<string, Func<Connection, IX11InputMethodFactory>> KnownMethods =
new Dictionary<string, Func<Connection, IX11InputMethodFactory>>

2
src/Avalonia.FreeDesktop/DBusMenuExporter.cs

@ -15,7 +15,7 @@ using Tmds.DBus;
namespace Avalonia.FreeDesktop
{
public class DBusMenuExporter
internal class DBusMenuExporter
{
public static ITopLevelNativeMenuExporter? TryCreateTopLevelNativeMenu(IntPtr xid)
{

6
src/Avalonia.FreeDesktop/IX11InputMethod.cs

@ -6,13 +6,13 @@ using Avalonia.Input.TextInput;
namespace Avalonia.FreeDesktop
{
public interface IX11InputMethodFactory
internal interface IX11InputMethodFactory
{
(ITextInputMethodImpl method, IX11InputMethodControl control) CreateClient(IntPtr xid);
}
#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct X11InputMethodForwardedKey
internal struct X11InputMethodForwardedKey
#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public int KeyVal { get; set; }
@ -20,7 +20,7 @@ namespace Avalonia.FreeDesktop
public RawKeyEventType Type { get; set; }
}
public interface IX11InputMethodControl : IDisposable
internal interface IX11InputMethodControl : IDisposable
{
void SetWindowActive(bool active);
bool IsEnabled { get; }

2
src/Avalonia.FreeDesktop/LinuxMountedVolumeInfoProvider.cs

@ -5,7 +5,7 @@ using Avalonia.Controls.Platform;
namespace Avalonia.FreeDesktop
{
public class LinuxMountedVolumeInfoProvider : IMountedVolumeInfoProvider
internal class LinuxMountedVolumeInfoProvider : IMountedVolumeInfoProvider
{
public IDisposable Listen(ObservableCollection<MountedVolumeInfo> mountedDrives)
{

2
src/Avalonia.Native/CallbackBase.cs

@ -6,7 +6,7 @@ using MicroCom.Runtime;
namespace Avalonia.Native
{
public abstract class NativeCallbackBase : CallbackBase, IMicroComExceptionCallback
internal abstract class NativeCallbackBase : CallbackBase, IMicroComExceptionCallback
{
public void RaiseException(Exception e)
{

2
src/Avalonia.Native/MacOSMountedVolumeInfoProvider.cs

@ -64,7 +64,7 @@ namespace Avalonia.Native
}
}
public class MacOSMountedVolumeInfoProvider : IMountedVolumeInfoProvider
internal class MacOSMountedVolumeInfoProvider : IMountedVolumeInfoProvider
{
public IDisposable Listen(ObservableCollection<MountedVolumeInfo> mountedDrives)
{

2
src/Avalonia.Native/MenuActionCallback.cs

@ -3,7 +3,7 @@ using Avalonia.Native.Interop;
namespace Avalonia.Native
{
public class MenuActionCallback : NativeCallbackBase, IAvnActionCallback
internal class MenuActionCallback : NativeCallbackBase, IAvnActionCallback
{
private Action _action;

2
src/Avalonia.Native/PredicateCallback.cs

@ -3,7 +3,7 @@ using Avalonia.Native.Interop;
namespace Avalonia.Native
{
public class PredicateCallback : NativeCallbackBase, IAvnPredicateCallback
internal class PredicateCallback : NativeCallbackBase, IAvnPredicateCallback
{
private Func<bool> _predicate;

2
src/Avalonia.Native/ScreenImpl.cs

@ -5,7 +5,7 @@ using Avalonia.Platform;
namespace Avalonia.Native
{
class ScreenImpl : IScreenImpl, IDisposable
internal class ScreenImpl : IScreenImpl, IDisposable
{
private IAvnScreens _native;

2
src/Avalonia.X11/Glx/Glx.cs

@ -10,7 +10,7 @@ using Avalonia.SourceGenerator;
namespace Avalonia.X11.Glx
{
unsafe partial class GlxInterface
internal unsafe partial class GlxInterface
{
private const string libGL = "libGL.so.1";
[GetProcAddress("glXMakeContextCurrent")]

2
src/Avalonia.X11/Glx/GlxConsts.cs

@ -4,7 +4,7 @@
#pragma warning disable 414
namespace Avalonia.X11.Glx
{
class GlxConsts
internal class GlxConsts
{
public const int GLX_USE_GL = 1;
public const int GLX_BUFFER_SIZE = 2;

6
src/Avalonia.X11/Glx/GlxContext.cs

@ -7,7 +7,7 @@ using Avalonia.Reactive;
namespace Avalonia.X11.Glx
{
class GlxContext : IGlContext
internal class GlxContext : IGlContext
{
public IntPtr Handle { get; }
public GlxInterface Glx { get; }
@ -46,8 +46,8 @@ namespace Avalonia.X11.Glx
public GlInterface GlInterface { get; }
public int SampleCount { get; }
public int StencilSize { get; }
class RestoreContext : IDisposable
private class RestoreContext : IDisposable
{
private GlxInterface _glx;
private IntPtr _defaultDisplay;

8
src/Avalonia.X11/Glx/GlxDisplay.cs

@ -6,7 +6,7 @@ using static Avalonia.X11.Glx.GlxConsts;
namespace Avalonia.X11.Glx
{
unsafe class GlxDisplay
internal unsafe class GlxDisplay
{
private readonly X11Info _x11;
private readonly GlVersion[] _probeProfiles;
@ -106,7 +106,7 @@ namespace Avalonia.X11.Glx
}
}
IntPtr CreatePBuffer()
private IntPtr CreatePBuffer()
{
return Glx.CreatePbuffer(_x11.Display, _fbconfig, new[] { GLX_PBUFFER_WIDTH, 1, GLX_PBUFFER_HEIGHT, 1, 0 });
}
@ -116,8 +116,8 @@ namespace Avalonia.X11.Glx
public GlxContext CreateContext(IGlContext share) => CreateContext(CreatePBuffer(), share,
share.SampleCount, share.StencilSize, true);
GlxContext CreateContext(IntPtr defaultXid, IGlContext share,
private GlxContext CreateContext(IntPtr defaultXid, IGlContext share,
int sampleCount, int stencilSize, bool ownsPBuffer)
{
var sharelist = ((GlxContext)share)?.Handle ?? IntPtr.Zero;

8
src/Avalonia.X11/Glx/GlxGlPlatformSurface.cs

@ -6,7 +6,7 @@ using static Avalonia.OpenGL.GlConsts;
namespace Avalonia.X11.Glx
{
class GlxGlPlatformSurface: IGlPlatformSurface
internal class GlxGlPlatformSurface: IGlPlatformSurface
{
private readonly EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo _info;
@ -21,7 +21,7 @@ namespace Avalonia.X11.Glx
return new RenderTarget((GlxContext)context, _info);
}
class RenderTarget : IGlPlatformSurfaceRenderTarget
private class RenderTarget : IGlPlatformSurfaceRenderTarget
{
private readonly GlxContext _context;
private readonly EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo _info;
@ -46,8 +46,8 @@ namespace Avalonia.X11.Glx
return new Session(_context, _info, oldContext);
}
class Session : IGlPlatformSurfaceRenderingSession
private class Session : IGlPlatformSurfaceRenderingSession
{
private readonly GlxContext _context;
private readonly EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo _info;

2
src/Avalonia.X11/Glx/GlxPlatformFeature.cs

@ -6,7 +6,7 @@ using Avalonia.Platform;
namespace Avalonia.X11.Glx
{
class GlxPlatformGraphics : IPlatformGraphics
internal class GlxPlatformGraphics : IPlatformGraphics
{
public GlxDisplay Display { get; private set; }
public bool CanCreateContexts => true;

2
src/Avalonia.X11/Keysyms.cs

@ -3,7 +3,7 @@
// ReSharper disable CommentTypo
namespace Avalonia.X11
{
enum X11Key
internal enum X11Key
{
VoidSymbol = 0xffffff /* Void symbol */,
BackSpace = 0xff08 /* Back space, back char */,

29
src/Avalonia.X11/NativeDialogs/Gtk.cs

@ -7,8 +7,7 @@ using Avalonia.Platform.Interop;
// ReSharper disable IdentifierTypo
namespace Avalonia.X11.NativeDialogs
{
static unsafe class Glib
internal static unsafe class Glib
{
private const string GlibName = "libglib-2.0.so.0";
private const string GObjectName = "libgobject-2.0.so.0";
@ -36,7 +35,7 @@ namespace Avalonia.X11.NativeDialogs
IntPtr destroy);
class ConnectedSignal : IDisposable
private class ConnectedSignal : IDisposable
{
private readonly IntPtr _instance;
private GCHandle _handle;
@ -75,7 +74,7 @@ namespace Avalonia.X11.NativeDialogs
}
static bool TimeoutHandler(IntPtr data)
private static bool TimeoutHandler(IntPtr data)
{
var handle = GCHandle.FromIntPtr(data);
var cb = (Func<bool>)handle.Target;
@ -95,7 +94,7 @@ namespace Avalonia.X11.NativeDialogs
s_pinnedHandler = TimeoutHandler;
}
static void AddTimeout(int priority, uint interval, Func<bool> callback)
private static void AddTimeout(int priority, uint interval, Func<bool> callback)
{
var handle = GCHandle.Alloc(callback);
g_timeout_add_full(priority, interval, s_pinnedHandler, GCHandle.ToIntPtr(handle), IntPtr.Zero);
@ -123,13 +122,13 @@ namespace Avalonia.X11.NativeDialogs
}
[StructLayout(LayoutKind.Sequential)]
unsafe struct GSList
internal unsafe struct GSList
{
public readonly IntPtr Data;
public readonly GSList* Next;
}
enum GtkFileChooserAction
internal enum GtkFileChooserAction
{
Open,
Save,
@ -137,7 +136,7 @@ namespace Avalonia.X11.NativeDialogs
}
// ReSharper disable UnusedMember.Global
enum GtkResponseType
internal enum GtkResponseType
{
Help = -11,
Apply = -10,
@ -153,14 +152,14 @@ namespace Avalonia.X11.NativeDialogs
}
// ReSharper restore UnusedMember.Global
static unsafe class Gtk
internal static unsafe class Gtk
{
private static IntPtr s_display;
private const string GdkName = "libgdk-3.so.0";
private const string GtkName = "libgtk-3.so.0";
[DllImport(GtkName)]
static extern void gtk_main_iteration();
private static extern void gtk_main_iteration();
[DllImport(GtkName)]
@ -231,10 +230,10 @@ namespace Avalonia.X11.NativeDialogs
public static extern void gtk_widget_hide(IntPtr gtkWidget);
[DllImport(GtkName)]
static extern bool gtk_init_check(int argc, IntPtr argv);
private static extern bool gtk_init_check(int argc, IntPtr argv);
[DllImport(GdkName)]
static extern IntPtr gdk_x11_window_foreign_new_for_display(IntPtr display, IntPtr xid);
private static extern IntPtr gdk_x11_window_foreign_new_for_display(IntPtr display, IntPtr xid);
[DllImport(GdkName)]
public static extern IntPtr gdk_x11_window_get_xid(IntPtr window);
@ -244,13 +243,13 @@ namespace Avalonia.X11.NativeDialogs
public static extern IntPtr gtk_container_add(IntPtr container, IntPtr widget);
[DllImport(GdkName)]
static extern IntPtr gdk_set_allowed_backends(Utf8Buffer backends);
private static extern IntPtr gdk_set_allowed_backends(Utf8Buffer backends);
[DllImport(GdkName)]
static extern IntPtr gdk_display_get_default();
private static extern IntPtr gdk_display_get_default();
[DllImport(GtkName)]
static extern IntPtr gtk_application_new(Utf8Buffer appId, int flags);
private static extern IntPtr gtk_application_new(Utf8Buffer appId, int flags);
[DllImport(GdkName)]
public static extern void gdk_window_set_transient_for(IntPtr window, IntPtr parent);

2
src/Avalonia.X11/TransparencyHelper.cs

@ -3,7 +3,7 @@ using Avalonia.Controls;
namespace Avalonia.X11
{
class TransparencyHelper : IDisposable, X11Globals.IGlobalsSubscriber
internal class TransparencyHelper : IDisposable, X11Globals.IGlobalsSubscriber
{
private readonly X11Info _x11;
private readonly IntPtr _window;

16
src/Avalonia.X11/X11Clipboard.cs

@ -9,7 +9,7 @@ using Avalonia.Input.Platform;
using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
class X11Clipboard : IClipboard
internal class X11Clipboard : IClipboard
{
private readonly X11Info _x11;
private IDataObject _storedDataObject;
@ -33,12 +33,12 @@ namespace Avalonia.X11
}.Where(a => a != IntPtr.Zero).ToArray();
}
bool IsStringAtom(IntPtr atom)
private bool IsStringAtom(IntPtr atom)
{
return _textAtoms.Contains(atom);
}
Encoding GetStringEncoding(IntPtr atom)
private Encoding GetStringEncoding(IntPtr atom)
{
return (atom == _x11.Atoms.XA_STRING
|| atom == _x11.Atoms.OEMTEXT)
@ -213,7 +213,7 @@ namespace Avalonia.X11
}
}
Task<IntPtr[]> SendFormatRequest()
private Task<IntPtr[]> SendFormatRequest()
{
if (_requestedFormatsTcs == null || _requestedFormatsTcs.Task.IsCompleted)
_requestedFormatsTcs = new TaskCompletionSource<IntPtr[]>();
@ -222,7 +222,7 @@ namespace Avalonia.X11
return _requestedFormatsTcs.Task;
}
Task<object> SendDataRequest(IntPtr format)
private Task<object> SendDataRequest(IntPtr format)
{
if (_requestedDataTcs == null || _requestedFormatsTcs.Task.IsCompleted)
_requestedDataTcs = new TaskCompletionSource<object>();
@ -230,7 +230,7 @@ namespace Avalonia.X11
return _requestedDataTcs.Task;
}
bool HasOwner => XGetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD) != IntPtr.Zero;
private bool HasOwner => XGetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD) != IntPtr.Zero;
public async Task<string> GetTextAsync()
{
@ -252,7 +252,7 @@ namespace Avalonia.X11
return (string)await SendDataRequest(target);
}
void StoreAtomsInClipboardManager(IntPtr[] atoms)
private void StoreAtomsInClipboardManager(IntPtr[] atoms)
{
if (_x11.Atoms.CLIPBOARD_MANAGER != IntPtr.Zero && _x11.Atoms.SAVE_TARGETS != IntPtr.Zero)
{

4
src/Avalonia.X11/X11CursorFactory.cs

@ -12,7 +12,7 @@ using Avalonia.Utilities;
namespace Avalonia.X11
{
partial class X11CursorFactory : ICursorFactory
internal partial class X11CursorFactory : ICursorFactory
{
private static readonly byte[] NullCursorData = new byte[] { 0 };
@ -142,7 +142,7 @@ namespace Avalonia.X11
}
}
class CursorImpl : ICursorImpl
internal class CursorImpl : ICursorImpl
{
public CursorImpl() { }
public CursorImpl(IntPtr handle) => Handle = handle;

8
src/Avalonia.X11/X11Enums.cs

@ -3,7 +3,7 @@ using System;
namespace Avalonia.X11
{
public enum Status
internal enum Status
{
Success = 0, /* everything's okay */
BadRequest = 1, /* bad request code */
@ -38,7 +38,7 @@ namespace Avalonia.X11
}
[Flags]
public enum XEventMask : int
internal enum XEventMask : int
{
NoEventMask = 0,
KeyPressMask = (1 << 0),
@ -69,7 +69,7 @@ namespace Avalonia.X11
}
[Flags]
public enum XModifierMask
internal enum XModifierMask
{
ShiftMask = (1 << 0),
LockMask = (1 << 1),
@ -89,7 +89,7 @@ namespace Avalonia.X11
}
[Flags]
public enum XCreateWindowFlags
internal enum XCreateWindowFlags
{
CWBackPixmap = (1 << 0),
CWBackPixel = (1 << 1),

2
src/Avalonia.X11/X11Exception.cs

@ -2,7 +2,7 @@ using System;
namespace Avalonia.X11
{
public class X11Exception : Exception
internal class X11Exception : Exception
{
public X11Exception(string message) : base(message)
{

2
src/Avalonia.X11/X11Framebuffer.cs

@ -5,7 +5,7 @@ using SkiaSharp;
using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
class X11Framebuffer : ILockedFramebuffer
internal class X11Framebuffer : ILockedFramebuffer
{
private readonly IntPtr _display;
private readonly IntPtr _xid;

2
src/Avalonia.X11/X11FramebufferSurface.cs

@ -4,7 +4,7 @@ using Avalonia.Platform;
using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
public class X11FramebufferSurface : IFramebufferPlatformSurface
internal class X11FramebufferSurface : IFramebufferPlatformSurface
{
private readonly IntPtr _display;
private readonly IntPtr _xid;

12
src/Avalonia.X11/X11Globals.cs

@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
unsafe class X11Globals
internal unsafe class X11Globals
{
private readonly AvaloniaX11Platform _plat;
private readonly int _screenNumber;
@ -75,7 +75,7 @@ namespace Avalonia.X11
}
}
IntPtr GetSupportingWmCheck(IntPtr window)
private IntPtr GetSupportingWmCheck(IntPtr window)
{
XGetWindowProperty(_x11.Display, _rootWindow, _x11.Atoms._NET_SUPPORTING_WM_CHECK,
IntPtr.Zero, new IntPtr(IntPtr.Size), false,
@ -95,7 +95,7 @@ namespace Avalonia.X11
}
}
void UpdateCompositingAtomOwner()
private void UpdateCompositingAtomOwner()
{
// This procedure is described in https://tronche.com/gui/x/icccm/sec-2.html#s-2.8
@ -128,10 +128,10 @@ namespace Avalonia.X11
if(ev.type == XEventName.DestroyNotify)
UpdateCompositingAtomOwner();
}
void UpdateWmName() => WmName = GetWmName();
string GetWmName()
private void UpdateWmName() => WmName = GetWmName();
private string GetWmName()
{
var wm = GetSupportingWmCheck(_rootWindow);
if (wm == IntPtr.Zero || wm != GetSupportingWmCheck(wm))

8
src/Avalonia.X11/X11IconLoader.cs

@ -7,9 +7,9 @@ using Avalonia.Platform;
namespace Avalonia.X11
{
class X11IconLoader : IPlatformIconLoader
internal class X11IconLoader : IPlatformIconLoader
{
static IWindowIconImpl LoadIcon(Bitmap bitmap)
private static IWindowIconImpl LoadIcon(Bitmap bitmap)
{
var rv = new X11IconData(bitmap);
bitmap.Dispose();
@ -28,8 +28,8 @@ namespace Avalonia.X11
return LoadIcon(ms);
}
}
unsafe class X11IconData : IWindowIconImpl, IFramebufferPlatformSurface
internal unsafe class X11IconData : IWindowIconImpl, IFramebufferPlatformSurface
{
private int _width;
private int _height;

2
src/Avalonia.X11/X11Info.cs

@ -6,7 +6,7 @@ using static Avalonia.X11.XLib;
// ReSharper disable UnusedAutoPropertyAccessor.Local
namespace Avalonia.X11
{
unsafe class X11Info
internal unsafe class X11Info
{
public IntPtr Display { get; }
public IntPtr DeferredDisplay { get; }

2
src/Avalonia.X11/X11KeyTransform.cs

@ -4,7 +4,7 @@ using Avalonia.Input;
namespace Avalonia.X11
{
static class X11KeyTransform
internal static class X11KeyTransform
{
private static readonly Dictionary<X11Key, Key> KeyDic = new Dictionary<X11Key, Key>
{

10
src/Avalonia.X11/X11NativeControlHost.cs

@ -6,7 +6,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
// TODO: Actually implement XEmbed instead of simply using XReparentWindow
class X11NativeControlHost : INativeControlHostImpl
internal class X11NativeControlHost : INativeControlHostImpl
{
private readonly AvaloniaX11Platform _platform;
public X11Window Window { get; }
@ -57,7 +57,7 @@ namespace Avalonia.X11
public bool IsCompatibleWith(IPlatformHandle handle) => handle.HandleDescriptor == "XID";
class DumbWindow : INativeControlHostDestroyableControlHandle
private class DumbWindow : INativeControlHostDestroyableControlHandle
{
private readonly IntPtr _display;
@ -96,8 +96,8 @@ namespace Avalonia.X11
}
}
}
class Attachment : INativeControlHostControlTopLevelAttachment
private class Attachment : INativeControlHostControlTopLevelAttachment
{
private readonly IntPtr _display;
private readonly IntPtr _orphanedWindow;
@ -129,7 +129,7 @@ namespace Avalonia.X11
_attachedTo = null;
}
void CheckDisposed()
private void CheckDisposed()
{
if (_child == null)
throw new ObjectDisposedException("X11 INativeControlHostControlTopLevelAttachment");

8
src/Avalonia.X11/X11Platform.cs

@ -20,7 +20,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
class AvaloniaX11Platform : IWindowingPlatform
internal class AvaloniaX11Platform : IWindowingPlatform
{
private Lazy<KeyboardDevice> _keyboardDevice = new Lazy<KeyboardDevice>(() => new KeyboardDevice());
public KeyboardDevice KeyboardDevice => _keyboardDevice.Value;
@ -35,7 +35,7 @@ namespace Avalonia.X11
public IntPtr OrphanedWindow { get; private set; }
public X11Globals Globals { get; private set; }
[DllImport("libc")]
static extern void setlocale(int type, string s);
private static extern void setlocale(int type, string s);
public void Initialize(X11PlatformOptions options)
{
Options = options;
@ -138,7 +138,7 @@ namespace Avalonia.X11
throw new NotSupportedException();
}
static bool EnableIme(X11PlatformOptions options)
private static bool EnableIme(X11PlatformOptions options)
{
// Disable if explicitly asked by user
var avaloniaImModule = Environment.GetEnvironmentVariable("AVALONIA_IM_MODULE");
@ -160,7 +160,7 @@ namespace Avalonia.X11
return isCjkLocale;
}
static bool ShouldUseXim()
private static bool ShouldUseXim()
{
// Check if we are forbidden from using IME
if (Environment.GetEnvironmentVariable("AVALONIA_IM_MODULE") == "none"

32
src/Avalonia.X11/X11PlatformThreading.cs

@ -9,7 +9,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
unsafe class X11PlatformThreading : IPlatformThreadingInterface
internal unsafe class X11PlatformThreading : IPlatformThreadingInterface
{
private readonly AvaloniaX11Platform _platform;
private readonly IntPtr _display;
@ -19,7 +19,7 @@ namespace Avalonia.X11
private Thread _mainThread;
[StructLayout(LayoutKind.Explicit)]
struct epoll_data
private struct epoll_data
{
[FieldOffset(0)]
public IntPtr ptr;
@ -36,30 +36,30 @@ namespace Avalonia.X11
private const int O_NONBLOCK = 2048;
[StructLayout(LayoutKind.Sequential)]
struct epoll_event
private struct epoll_event
{
public uint events;
public epoll_data data;
}
[DllImport("libc")]
extern static int epoll_create1(int size);
private extern static int epoll_create1(int size);
[DllImport("libc")]
extern static int epoll_ctl(int epfd, int op, int fd, ref epoll_event __event);
private extern static int epoll_ctl(int epfd, int op, int fd, ref epoll_event __event);
[DllImport("libc")]
extern static int epoll_wait(int epfd, epoll_event* events, int maxevents, int timeout);
private extern static int epoll_wait(int epfd, epoll_event* events, int maxevents, int timeout);
[DllImport("libc")]
extern static int pipe2(int* fds, int flags);
private extern static int pipe2(int* fds, int flags);
[DllImport("libc")]
extern static IntPtr write(int fd, void* buf, IntPtr count);
private extern static IntPtr write(int fd, void* buf, IntPtr count);
[DllImport("libc")]
extern static IntPtr read(int fd, void* buf, IntPtr count);
enum EventCodes
private extern static IntPtr read(int fd, void* buf, IntPtr count);
private enum EventCodes
{
X11 = 1,
Signal =2
@ -72,7 +72,7 @@ namespace Avalonia.X11
private int _epoll;
private Stopwatch _clock = Stopwatch.StartNew();
class X11Timer : IDisposable
private class X11Timer : IDisposable
{
private readonly X11PlatformThreading _parent;
@ -104,7 +104,7 @@ namespace Avalonia.X11
}
}
List<X11Timer> _timers = new List<X11Timer>();
private List<X11Timer> _timers = new List<X11Timer>();
public X11PlatformThreading(AvaloniaX11Platform platform)
{
@ -139,12 +139,12 @@ namespace Avalonia.X11
throw new X11Exception("Unable to attach signal pipe to epoll");
}
int TimerComparer(X11Timer t1, X11Timer t2)
private int TimerComparer(X11Timer t1, X11Timer t2)
{
return t2.Priority - t1.Priority;
}
void CheckSignaled()
private void CheckSignaled()
{
int buf = 0;
while (read(_sigread, &buf, new IntPtr(4)).ToInt64() > 0)
@ -164,7 +164,7 @@ namespace Avalonia.X11
Signaled?.Invoke(prio);
}
unsafe void HandleX11(CancellationToken cancellationToken)
private unsafe void HandleX11(CancellationToken cancellationToken)
{
while (XPending(_display) != 0)
{

20
src/Avalonia.X11/X11Screens.cs

@ -8,7 +8,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
class X11Screens : IScreenImpl
internal class X11Screens : IScreenImpl
{
private IX11Screens _impl;
@ -17,7 +17,7 @@ namespace Avalonia.X11
_impl = impl;
}
static unsafe X11Screen[] UpdateWorkArea(X11Info info, X11Screen[] screens)
private static unsafe X11Screen[] UpdateWorkArea(X11Info info, X11Screen[] screens)
{
var rect = default(PixelRect);
foreach (var s in screens)
@ -58,14 +58,14 @@ namespace Avalonia.X11
XFree(prop);
return screens;
}
class Randr15ScreensImpl : IX11Screens
private class Randr15ScreensImpl : IX11Screens
{
private readonly X11ScreensUserSettings _settings;
private X11Screen[] _cache;
private X11Info _x11;
private IntPtr _window;
const int EDIDStructureLength = 32; // Length of a EDID-Block-Length(128 bytes), XRRGetOutputProperty multiplies offset and length by 4
private const int EDIDStructureLength = 32; // Length of a EDID-Block-Length(128 bytes), XRRGetOutputProperty multiplies offset and length by 4
public Randr15ScreensImpl(AvaloniaX11Platform platform, X11ScreensUserSettings settings)
{
@ -160,7 +160,7 @@ namespace Avalonia.X11
}
}
class FallbackScreensImpl : IX11Screens
private class FallbackScreensImpl : IX11Screens
{
public FallbackScreensImpl(X11Info info, X11ScreensUserSettings settings)
{
@ -220,17 +220,17 @@ namespace Avalonia.X11
_impl.Screens.Select(s => new Screen(s.Scaling, s.Bounds, s.WorkingArea, s.IsPrimary)).ToArray();
}
interface IX11Screens
internal interface IX11Screens
{
X11Screen[] Screens { get; }
}
class X11ScreensUserSettings
internal class X11ScreensUserSettings
{
public double GlobalScaleFactor { get; set; } = 1;
public Dictionary<string, double> NamedScaleFactors { get; set; }
static double? TryParse(string s)
private static double? TryParse(string s)
{
if (s == null)
return null;
@ -276,7 +276,7 @@ namespace Avalonia.X11
}
}
class X11Screen
internal class X11Screen
{
private const int FullHDWidth = 1920;
private const int FullHDHeight = 1080;

9
src/Avalonia.X11/X11Structs.cs

@ -1751,8 +1751,7 @@ namespace Avalonia.X11 {
{
public IntPtr client_data;
public XIMProc callback;
[NonSerialized]
GCHandle gch;
[NonSerialized] private GCHandle gch;
public XIMCallback (IntPtr clientData, XIMProc proc)
{
@ -1769,7 +1768,7 @@ namespace Avalonia.X11 {
[StructLayout(LayoutKind.Sequential)]
#pragma warning disable CA1815 // Override equals and operator equals on value types
public unsafe struct XImage
internal unsafe struct XImage
#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public int width, height; /* size of image */
@ -1896,8 +1895,8 @@ namespace Avalonia.X11 {
public const string XNSpotLocation = "spotLocation";
public const string XNFontSet = "fontSet";
}
unsafe struct XRRMonitorInfo {
internal unsafe struct XRRMonitorInfo {
public IntPtr Name;
public int Primary;
public int Automatic;

32
src/Avalonia.X11/X11Window.Ime.cs

@ -11,7 +11,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
partial class X11Window
internal partial class X11Window
{
private ITextInputMethodImpl _ime;
private IX11InputMethodControl _imeControl;
@ -20,7 +20,7 @@ namespace Avalonia.X11
private Queue<(RawKeyEventArgs args, XEvent xev, int keyval, int keycode)> _imeQueue =
new Queue<(RawKeyEventArgs args, XEvent xev, int keyVal, int keyCode)>();
unsafe void CreateIC()
private unsafe void CreateIC()
{
if (_x11.HasXim)
{
@ -65,8 +65,8 @@ namespace Avalonia.X11
new IntPtr((int)(XIMProperties.XIMPreeditNothing | XIMProperties.XIMStatusNothing)),
XNames.XNClientWindow, _handle, XNames.XNFocusWindow, _handle, IntPtr.Zero);
}
void InitializeIme()
private void InitializeIme()
{
var ime = AvaloniaLocator.Current.GetService<IX11InputMethodFactory>()?.CreateClient(_handle);
if (ime == null && _x11.HasXim)
@ -89,9 +89,9 @@ namespace Avalonia.X11
}
}
void UpdateImePosition() => _imeControl?.UpdateWindowInfo(Position, RenderScaling);
private void UpdateImePosition() => _imeControl?.UpdateWindowInfo(Position, RenderScaling);
void HandleKeyEvent(ref XEvent ev)
private void HandleKeyEvent(ref XEvent ev)
{
var index = ev.KeyEvent.state.HasAllFlags(XModifierMask.ShiftMask);
@ -117,7 +117,7 @@ namespace Avalonia.X11
ScheduleKeyInput(args, ref ev, (int)key, ev.KeyEvent.keycode);
}
void TriggerClassicTextInputEvent(ref XEvent ev)
private void TriggerClassicTextInputEvent(ref XEvent ev)
{
var text = TranslateEventToString(ref ev);
if (text != null)
@ -128,8 +128,8 @@ namespace Avalonia.X11
private const int ImeBufferSize = 64 * 1024;
[ThreadStatic] private static IntPtr ImeBuffer;
unsafe string TranslateEventToString(ref XEvent ev)
private unsafe string TranslateEventToString(ref XEvent ev)
{
if (ImeBuffer == IntPtr.Zero)
ImeBuffer = Marshal.AllocHGlobal(ImeBufferSize);
@ -158,9 +158,9 @@ namespace Avalonia.X11
return text;
}
void ScheduleKeyInput(RawKeyEventArgs args, ref XEvent xev, int keyval, int keycode)
private void ScheduleKeyInput(RawKeyEventArgs args, ref XEvent xev, int keyval, int keycode)
{
_x11.LastActivityTimestamp = xev.ButtonEvent.time;
@ -170,8 +170,8 @@ namespace Avalonia.X11
ScheduleInput(args);
}
bool FilterIme(RawKeyEventArgs args, XEvent xev, int keyval, int keycode)
private bool FilterIme(RawKeyEventArgs args, XEvent xev, int keyval, int keycode)
{
if (_ime == null)
return false;
@ -182,7 +182,7 @@ namespace Avalonia.X11
return true;
}
async void ProcessNextImeEvent()
private async void ProcessNextImeEvent()
{
if(_processingIme)
return;
@ -203,7 +203,7 @@ namespace Avalonia.X11
}
// This class is used to attach the text value of the key to an asynchronously dispatched KeyDown event
class RawKeyEventArgsWithText : RawKeyEventArgs
private class RawKeyEventArgsWithText : RawKeyEventArgs
{
public RawKeyEventArgsWithText(IKeyboardDevice device, ulong timestamp, IInputRoot root,
RawKeyEventType type, Key key, RawInputModifiers modifiers, string text) :

4
src/Avalonia.X11/X11Window.Xim.cs

@ -8,9 +8,9 @@ using Avalonia.Threading;
using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
partial class X11Window
internal partial class X11Window
{
class XimInputMethod : ITextInputMethodImpl, IX11InputMethodControl
private class XimInputMethod : ITextInputMethodImpl, IX11InputMethodControl
{
private readonly X11Window _parent;
private bool _windowActive, _imeActive;

46
src/Avalonia.X11/X11Window.cs

@ -27,7 +27,7 @@ using static Avalonia.X11.XLib;
// ReSharper disable StringLiteralTypo
namespace Avalonia.X11
{
unsafe partial class X11Window : IWindowImpl, IPopupImpl, IXI2Client
internal unsafe partial class X11Window : IWindowImpl, IPopupImpl, IXI2Client
{
private readonly AvaloniaX11Platform _platform;
private readonly bool _popup;
@ -59,7 +59,7 @@ namespace Avalonia.X11
private bool _useRenderWindow = false;
private bool _usePositioningFlags = false;
enum XSyncState
private enum XSyncState
{
None,
WaitConfigure,
@ -219,7 +219,7 @@ namespace Avalonia.X11
});
}
class SurfaceInfo : EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo
private class SurfaceInfo : EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo
{
private readonly X11Window _window;
private readonly IntPtr _display;
@ -249,7 +249,7 @@ namespace Avalonia.X11
public double Scaling => _window.RenderScaling;
}
void UpdateMotifHints()
private void UpdateMotifHints()
{
var functions = MotifFunctions.Move | MotifFunctions.Close | MotifFunctions.Resize |
MotifFunctions.Minimize | MotifFunctions.Maximize;
@ -278,7 +278,7 @@ namespace Avalonia.X11
PropertyMode.Replace, ref hints, 5);
}
void UpdateSizeHints(PixelSize? preResize)
private void UpdateSizeHints(PixelSize? preResize)
{
var min = _minMaxSize.minSize;
var max = _minMaxSize.maxSize;
@ -386,7 +386,7 @@ namespace Avalonia.X11
public IRenderer CreateRenderer(IRenderRoot root) =>
new CompositingRenderer(root, _platform.Compositor, () => Surfaces);
void OnEvent(ref XEvent ev)
private void OnEvent(ref XEvent ev)
{
if (ev.type == XEventName.MapNotify)
{
@ -668,7 +668,7 @@ namespace Avalonia.X11
}
static RawInputModifiers TranslateModifiers(XModifierMask state)
private static RawInputModifiers TranslateModifiers(XModifierMask state)
{
var rv = default(RawInputModifiers);
if (state.HasAllFlags(XModifierMask.Button1Mask))
@ -704,13 +704,13 @@ namespace Avalonia.X11
private double _scaling = 1;
void ScheduleInput(RawInputEventArgs args, ref XEvent xev)
private void ScheduleInput(RawInputEventArgs args, ref XEvent xev)
{
_x11.LastActivityTimestamp = xev.ButtonEvent.time;
ScheduleInput(args);
}
void DispatchInput(RawInputEventArgs args)
private void DispatchInput(RawInputEventArgs args)
{
Input?.Invoke(args);
if (!args.Handled && args is RawKeyEventArgsWithText text && !string.IsNullOrEmpty(text.Text))
@ -746,8 +746,8 @@ namespace Avalonia.X11
_rawEventGrouper.HandleEvent(args);
}
void MouseEvent(RawPointerEventType type, ref XEvent ev, XModifierMask mods)
private void MouseEvent(RawPointerEventType type, ref XEvent ev, XModifierMask mods)
{
var mev = new RawPointerEventArgs(
_mouse, (ulong)ev.ButtonEvent.time.ToInt64(), _inputRoot,
@ -755,7 +755,7 @@ namespace Avalonia.X11
ScheduleInput(mev, ref ev);
}
void EnqueuePaint()
private void EnqueuePaint()
{
if (!_triggeredExpose)
{
@ -767,8 +767,8 @@ namespace Avalonia.X11
}, DispatcherPriority.Render);
}
}
void DoPaint()
private void DoPaint()
{
Paint?.Invoke(new Rect());
if (_xSyncCounter != IntPtr.Zero && _xSyncState == XSyncState.WaitPaint)
@ -819,8 +819,8 @@ namespace Avalonia.X11
return null;
}
void Cleanup()
private void Cleanup()
{
if (_rawEventGrouper != null)
{
@ -871,7 +871,7 @@ namespace Avalonia.X11
}
}
bool ActivateTransientChildIfNeeded()
private bool ActivateTransientChildIfNeeded()
{
if (_disabled)
{
@ -923,9 +923,9 @@ namespace Avalonia.X11
Resize(size, true, PlatformResizeReason.Layout);
}
PixelSize ToPixelSize(Size size) => new PixelSize((int)(size.Width * RenderScaling), (int)(size.Height * RenderScaling));
void Resize(Size clientSize, bool force, PlatformResizeReason reason)
private PixelSize ToPixelSize(Size size) => new PixelSize((int)(size.Width * RenderScaling), (int)(size.Height * RenderScaling));
private void Resize(Size clientSize, bool force, PlatformResizeReason reason)
{
if (!force && clientSize == ClientSize)
return;
@ -1020,7 +1020,7 @@ namespace Avalonia.X11
.OrderByDescending(x => x.Width + x.Height).FirstOrDefault();
void SendNetWMMessage(IntPtr message_type, IntPtr l0,
private void SendNetWMMessage(IntPtr message_type, IntPtr l0,
IntPtr? l1 = null, IntPtr? l2 = null, IntPtr? l3 = null, IntPtr? l4 = null)
{
var xev = new XEvent
@ -1044,7 +1044,7 @@ namespace Avalonia.X11
}
void BeginMoveResize(NetWmMoveResize side, PointerPressedEventArgs e)
private void BeginMoveResize(NetWmMoveResize side, PointerPressedEventArgs e)
{
var pos = GetCursorPos(_x11);
XUngrabPointer(_x11.Display, new IntPtr(0));
@ -1184,7 +1184,7 @@ namespace Avalonia.X11
ChangeWMAtoms(!value, _x11.Atoms._NET_WM_STATE_SKIP_TASKBAR);
}
void ChangeWMAtoms(bool enable, params IntPtr[] atoms)
private void ChangeWMAtoms(bool enable, params IntPtr[] atoms)
{
if (atoms.Length != 1 && atoms.Length != 2)
throw new ArgumentException();

5
src/Avalonia.X11/XError.cs

@ -2,11 +2,12 @@ using System;
namespace Avalonia.X11
{
static class XError
internal static class XError
{
private static readonly XErrorHandler s_errorHandlerDelegate = Handler;
public static XErrorEvent LastError;
static int Handler(IntPtr display, ref XErrorEvent error)
private static int Handler(IntPtr display, ref XErrorEvent error)
{
LastError = error;
return 0;

16
src/Avalonia.X11/XI2Manager.cs

@ -7,7 +7,7 @@ using static Avalonia.X11.XLib;
namespace Avalonia.X11
{
unsafe class XI2Manager
internal unsafe class XI2Manager
{
private static readonly XiEventType[] DefaultEventTypes = new XiEventType[]
{
@ -30,7 +30,7 @@ namespace Avalonia.X11
private bool _multitouch;
private Dictionary<IntPtr, IXI2Client> _clients = new Dictionary<IntPtr, IXI2Client>();
class DeviceInfo
private class DeviceInfo
{
public int Id { get; }
public XIValuatorClassInfo[] Valuators { get; private set; }
@ -67,7 +67,7 @@ namespace Avalonia.X11
}
}
class PointerDeviceInfo : DeviceInfo
private class PointerDeviceInfo : DeviceInfo
{
public PointerDeviceInfo(XIDeviceInfo info) : base(info)
{
@ -197,7 +197,7 @@ namespace Avalonia.X11
}
}
void OnEnterLeaveEvent(IXI2Client client, ref XIEnterLeaveEvent ev)
private void OnEnterLeaveEvent(IXI2Client client, ref XIEnterLeaveEvent ev)
{
if (ev.evtype == XiEventType.XI_Leave)
{
@ -215,7 +215,7 @@ namespace Avalonia.X11
}
}
void OnDeviceEvent(IXI2Client client, ParsedDeviceEvent ev)
private void OnDeviceEvent(IXI2Client client, ParsedDeviceEvent ev)
{
if (ev.Type == XiEventType.XI_TouchBegin
|| ev.Type == XiEventType.XI_TouchUpdate
@ -304,7 +304,7 @@ namespace Avalonia.X11
}
}
unsafe class ParsedDeviceEvent
internal unsafe class ParsedDeviceEvent
{
public XiEventType Type { get; }
public RawInputModifiers Modifiers { get; }
@ -367,8 +367,8 @@ namespace Avalonia.X11
Emulated = ev->flags.HasAllFlags(XiDeviceEventFlags.XIPointerEmulated);
}
}
interface IXI2Client
internal interface IXI2Client
{
IInputRoot InputRoot { get; }
void ScheduleXI2Input(RawInputEventArgs args);

54
src/Avalonia.X11/XIStructs.cs

@ -10,7 +10,7 @@ using Atom = System.IntPtr;
namespace Avalonia.X11
{
[StructLayout(LayoutKind.Sequential)]
struct XIAddMasterInfo
internal struct XIAddMasterInfo
{
public int Type;
public IntPtr Name;
@ -19,7 +19,7 @@ namespace Avalonia.X11
}
[StructLayout(LayoutKind.Sequential)]
struct XIRemoveMasterInfo
internal struct XIRemoveMasterInfo
{
public int Type;
public int Deviceid;
@ -29,7 +29,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
struct XIAttachSlaveInfo
internal struct XIAttachSlaveInfo
{
public int Type;
public int Deviceid;
@ -37,14 +37,14 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
struct XIDetachSlaveInfo
internal struct XIDetachSlaveInfo
{
public int Type;
public int Deviceid;
};
[StructLayout(LayoutKind.Explicit)]
struct XIAnyHierarchyChangeInfo
internal struct XIAnyHierarchyChangeInfo
{
[FieldOffset(0)]
public int type; /* must be first element */
@ -59,7 +59,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
struct XIModifierState
internal struct XIModifierState
{
public int Base;
public int Latched;
@ -68,14 +68,14 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIButtonState
internal unsafe struct XIButtonState
{
public int MaskLen;
public byte* Mask;
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIValuatorState
internal unsafe struct XIValuatorState
{
public int MaskLen;
public byte* Mask;
@ -83,7 +83,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIEventMask
internal unsafe struct XIEventMask
{
public int Deviceid;
public int MaskLen;
@ -91,14 +91,14 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
struct XIAnyClassInfo
internal struct XIAnyClassInfo
{
public XiDeviceClass Type;
public int Sourceid;
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIButtonClassInfo
internal unsafe struct XIButtonClassInfo
{
public int Type;
public int Sourceid;
@ -108,7 +108,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIKeyClassInfo
internal unsafe struct XIKeyClassInfo
{
public int Type;
public int Sourceid;
@ -117,7 +117,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
struct XIValuatorClassInfo
internal struct XIValuatorClassInfo
{
public int Type;
public int Sourceid;
@ -132,7 +132,7 @@ namespace Avalonia.X11
/* new in XI 2.1 */
[StructLayout(LayoutKind.Sequential)]
struct XIScrollClassInfo
internal struct XIScrollClassInfo
{
public int Type;
public int Sourceid;
@ -142,14 +142,14 @@ namespace Avalonia.X11
public int Flags;
};
enum XiScrollType
internal enum XiScrollType
{
Vertical = 1,
Horizontal = 2
}
[StructLayout(LayoutKind.Sequential)]
struct XITouchClassInfo
internal struct XITouchClassInfo
{
public int Type;
public int Sourceid;
@ -158,7 +158,7 @@ namespace Avalonia.X11
};
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIDeviceInfo
internal unsafe struct XIDeviceInfo
{
public int Deviceid;
public IntPtr Name;
@ -169,7 +169,7 @@ namespace Avalonia.X11
public XIAnyClassInfo** Classes;
}
enum XiDeviceType
internal enum XiDeviceType
{
XIMasterPointer = 1,
XIMasterKeyboard = 2,
@ -178,13 +178,13 @@ namespace Avalonia.X11
XIFloatingSlave = 5
}
enum XiPredefinedDeviceId : int
internal enum XiPredefinedDeviceId : int
{
XIAllDevices = 0,
XIAllMasterDevices = 1
}
enum XiDeviceClass
internal enum XiDeviceClass
{
XIKeyClass = 0,
XIButtonClass = 1,
@ -194,7 +194,7 @@ namespace Avalonia.X11
}
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIDeviceChangedEvent
internal unsafe struct XIDeviceChangedEvent
{
public int Type; /* GenericEvent */
public UIntPtr Serial; /* # of last request processed by server */
@ -211,7 +211,7 @@ namespace Avalonia.X11
}
[StructLayout(LayoutKind.Sequential)]
struct XIDeviceEvent
internal struct XIDeviceEvent
{
public XEventName type; /* GenericEvent */
public UIntPtr serial; /* # of last request processed by server */
@ -238,7 +238,7 @@ namespace Avalonia.X11
}
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIEnterLeaveEvent
internal unsafe struct XIEnterLeaveEvent
{
public XEventName type; /* GenericEvent */
public UIntPtr serial; /* # of last request processed by server */
@ -266,14 +266,14 @@ namespace Avalonia.X11
}
[Flags]
public enum XiDeviceEventFlags : int
internal enum XiDeviceEventFlags : int
{
None = 0,
XIPointerEmulated = (1 << 16)
}
[StructLayout(LayoutKind.Sequential)]
unsafe struct XIEvent
internal unsafe struct XIEvent
{
public int type; /* GenericEvent */
public UIntPtr serial; /* # of last request processed by server */
@ -284,7 +284,7 @@ namespace Avalonia.X11
public IntPtr time;
}
enum XiEventType
internal enum XiEventType
{
XI_DeviceChanged = 1,
XI_KeyPress = 2,
@ -315,7 +315,7 @@ namespace Avalonia.X11
XI_LASTEVENT = XI_BarrierLeave,
}
enum XiEnterLeaveDetail
internal enum XiEnterLeaveDetail
{
XINotifyAncestor = 0,
XINotifyVirtual = 1,

10
src/Avalonia.X11/XLib.cs

@ -16,11 +16,11 @@ namespace Avalonia.X11
{
internal unsafe static class XLib
{
const string libX11 = "libX11.so.6";
const string libX11Randr = "libXrandr.so.2";
const string libX11Ext = "libXext.so.6";
const string libXInput = "libXi.so.6";
const string libXCursor = "libXcursor.so.1";
private const string libX11 = "libX11.so.6";
private const string libX11Randr = "libXrandr.so.2";
private const string libX11Ext = "libXext.so.6";
private const string libXInput = "libXi.so.6";
private const string libXCursor = "libXcursor.so.1";
[DllImport(libX11)]
public static extern IntPtr XOpenDisplay(IntPtr display);

2
src/Browser/Avalonia.Browser/Skia/BrowserSkiaGpu.cs

@ -6,7 +6,7 @@ using Avalonia.Reactive;
namespace Avalonia.Browser.Skia
{
public class BrowserSkiaGpu : ISkiaGpu
internal class BrowserSkiaGpu : ISkiaGpu
{
public ISkiaGpuRenderTarget? TryCreateRenderTarget(IEnumerable<object> surfaces)
{

4
src/Shared/RawEventGrouping.cs

@ -17,8 +17,8 @@ internal class RawEventGrouper : IDisposable
private readonly Action<RawInputEventArgs> _eventCallback;
private readonly Queue<RawInputEventArgs> _inputQueue = new();
private readonly Action _dispatchFromQueue;
readonly Dictionary<long, RawPointerEventArgs> _lastTouchPoints = new();
RawInputEventArgs? _lastEvent;
private readonly Dictionary<long, RawPointerEventArgs> _lastTouchPoints = new();
private RawInputEventArgs? _lastEvent;
public RawEventGrouper(Action<RawInputEventArgs> eventCallback)
{

5
src/Skia/Avalonia.Skia/GlyphRunImpl.cs

@ -1,15 +1,12 @@
using System;
using System.Collections.Generic;
using Avalonia.Metadata;
using Avalonia.Platform;
using SkiaSharp;
#nullable enable
namespace Avalonia.Skia
{
/// <inheritdoc />
[Unstable]
public class GlyphRunImpl : IGlyphRunImpl
internal class GlyphRunImpl : IGlyphRunImpl
{
public GlyphRunImpl(SKTextBlob textBlob, Size size, Point baselineOrigin)
{

4
src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs

@ -1,14 +1,12 @@
using System;
using System.Runtime.InteropServices;
using Avalonia.Media;
using Avalonia.Metadata;
using HarfBuzzSharp;
using SkiaSharp;
namespace Avalonia.Skia
{
[Unstable]
public class GlyphTypefaceImpl : IGlyphTypeface
internal class GlyphTypefaceImpl : IGlyphTypeface
{
private bool _isDisposed;

2
src/Skia/Avalonia.Skia/SKTypefaceCollection.cs

@ -4,7 +4,7 @@ using SkiaSharp;
namespace Avalonia.Skia
{
public class SKTypefaceCollection
internal class SKTypefaceCollection
{
private readonly ConcurrentDictionary<Typeface, SKTypeface> _typefaces =
new ConcurrentDictionary<Typeface, SKTypeface>();

2
src/Skia/Avalonia.Skia/SKTypefaceCollectionCache.cs

@ -7,7 +7,7 @@ using SkiaSharp;
namespace Avalonia.Skia
{
public static class SKTypefaceCollectionCache
internal static class SKTypefaceCollectionCache
{
private static readonly ConcurrentDictionary<FontFamily, SKTypefaceCollection> s_cachedCollections;

22
src/Skia/Avalonia.Skia/readme.md

@ -1,22 +0,0 @@
DrawingContextImpl
- Alpha support missing as SkiaSharp does not expose this
- Gradient Shader caching?
- Pen Dash styles
Formatted Text Rendering
- Minor polish
Linux
- Need gpu platform implementation
macOS
- Need gpu platform implementation
Android
- Not tested at all yet
iOS
- Not tested at all yet
General
- Get Skia Unit Tests passing (most of the issues are related to antialiasing)

6
src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj

@ -5,11 +5,6 @@
<PackageId>Avalonia.Direct2D1</PackageId>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Avalonia.Win32\Interop\UnmanagedMethods.cs">
<Link>UnmanagedMethods.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />
<ProjectReference Include="..\Avalonia.Win32\Avalonia.Win32.csproj" />
@ -22,6 +17,7 @@
<ItemGroup Label="InternalsVisibleTo">
<InternalsVisibleTo Include="Avalonia.Direct2D1.RenderTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Direct2D1.UnitTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Win32.Interop, PublicKey=$(AvaloniaPublicKey)"/>
</ItemGroup>
<ItemGroup>

2
src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs

@ -27,7 +27,7 @@ namespace Avalonia
namespace Avalonia.Direct2D1
{
public class Direct2D1Platform : IPlatformRenderInterface
internal class Direct2D1Platform : IPlatformRenderInterface
{
private static readonly Direct2D1Platform s_instance = new Direct2D1Platform();

33
src/Windows/Avalonia.Direct2D1/Disposable.cs

@ -1,33 +0,0 @@
using System;
namespace Avalonia.Direct2D1
{
public class Disposable<T> : IDisposable where T : IDisposable
{
private readonly IDisposable _extra;
public Disposable(T inner)
{
Inner = inner;
}
public Disposable(T inner, IDisposable extra)
{
Inner = inner;
_extra = extra;
}
public T Inner { get; }
public static implicit operator T(Disposable<T> i)
{
return i.Inner;
}
public void Dispose()
{
Inner.Dispose();
_extra?.Dispose();
}
}
}

2
src/Windows/Avalonia.Direct2D1/ILayerFactory.cs

@ -2,7 +2,7 @@
namespace Avalonia.Direct2D1
{
public interface ILayerFactory
internal interface ILayerFactory
{
IDrawingContextLayerImpl CreateLayer(Size size);
}

4
src/Windows/Avalonia.Direct2D1/Media/BrushImpl.cs

@ -1,10 +1,8 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public abstract class BrushImpl : IDisposable
internal abstract class BrushImpl : IDisposable
{
public SharpDX.Direct2D1.Brush PlatformBrush { get; set; }

4
src/Windows/Avalonia.Direct2D1/Media/DWriteResourceFontFileEnumerator.cs

@ -6,7 +6,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// Resource FontFileEnumerator.
/// </summary>
public class DWriteResourceFontFileEnumerator : CallbackBase, FontFileEnumerator
internal class DWriteResourceFontFileEnumerator : CallbackBase, FontFileEnumerator
{
private readonly Factory _factory;
private readonly FontFileLoader _loader;
@ -64,4 +64,4 @@ namespace Avalonia.Direct2D1.Media
}
}
}
}
}

2
src/Windows/Avalonia.Direct2D1/Media/DWriteResourceFontFileStream.cs

@ -7,7 +7,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// This FontFileStream implementation is reading data from a <see cref="DataStream"/>.
/// </summary>
public class DWriteResourceFontFileStream : CallbackBase, FontFileStream
internal class DWriteResourceFontFileStream : CallbackBase, FontFileStream
{
private readonly DataStream _stream;

4
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

@ -11,15 +11,13 @@ using SharpDX;
using SharpDX.Direct2D1;
using SharpDX.Mathematics.Interop;
using BitmapInterpolationMode = Avalonia.Media.Imaging.BitmapInterpolationMode;
using Avalonia.Metadata;
namespace Avalonia.Direct2D1.Media
{
/// <summary>
/// Draws using Direct2D1.
/// </summary>
[Unstable]
public class DrawingContextImpl : IDrawingContextImpl
internal class DrawingContextImpl : IDrawingContextImpl
{
private readonly IVisualBrushRenderer _visualBrushRenderer;
private readonly ILayerFactory _layerFactory;

4
src/Windows/Avalonia.Direct2D1/Media/GeometryImpl.cs

@ -1,5 +1,4 @@
using Avalonia.Logging;
using Avalonia.Metadata;
using Avalonia.Platform;
using SharpDX.Direct2D1;
@ -8,8 +7,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// The platform-specific interface for <see cref="Avalonia.Media.Geometry"/>.
/// </summary>
[Unstable]
public abstract class GeometryImpl : IGeometryImpl
internal abstract class GeometryImpl : IGeometryImpl
{
private const float ContourApproximation = 0.0001f;

4
src/Windows/Avalonia.Direct2D1/Media/GlyphTypefaceImpl.cs

@ -1,6 +1,5 @@
using System;
using Avalonia.Media;
using Avalonia.Metadata;
using HarfBuzzSharp;
using SharpDX.DirectWrite;
using FontMetrics = Avalonia.Media.FontMetrics;
@ -9,8 +8,7 @@ using GlyphMetrics = Avalonia.Media.GlyphMetrics;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class GlyphTypefaceImpl : IGlyphTypeface
internal class GlyphTypefaceImpl : IGlyphTypeface
{
private bool _isDisposed;

4
src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs

@ -1,13 +1,11 @@
using Avalonia.Media;
using Avalonia.Metadata;
using Avalonia.Rendering.Utilities;
using Avalonia.Utilities;
using SharpDX.Direct2D1;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public sealed class ImageBrushImpl : BrushImpl
internal sealed class ImageBrushImpl : BrushImpl
{
private readonly OptionalDispose<Bitmap> _bitmap;

4
src/Windows/Avalonia.Direct2D1/Media/Imaging/BitmapImpl.cs

@ -1,13 +1,11 @@
using System;
using System.IO;
using Avalonia.Metadata;
using Avalonia.Platform;
using D2DBitmap = SharpDX.Direct2D1.Bitmap;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public abstract class BitmapImpl : IBitmapImpl, IDisposable
internal abstract class BitmapImpl : IBitmapImpl, IDisposable
{
public abstract Vector Dpi { get; }
public abstract PixelSize PixelSize { get; }

4
src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DBitmapImpl.cs

@ -1,6 +1,5 @@
using System;
using System.IO;
using Avalonia.Metadata;
using SharpDX.WIC;
using Bitmap = SharpDX.Direct2D1.Bitmap;
@ -9,8 +8,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// A Direct2D Bitmap implementation that uses a GPU memory bitmap as its image.
/// </summary>
[Unstable]
public class D2DBitmapImpl : BitmapImpl
internal class D2DBitmapImpl : BitmapImpl
{
private readonly Bitmap _direct2DBitmap;

4
src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs

@ -1,6 +1,5 @@
using System;
using System.IO;
using Avalonia.Metadata;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Utilities;
@ -10,8 +9,7 @@ using D2DBitmap = SharpDX.Direct2D1.Bitmap;
namespace Avalonia.Direct2D1.Media.Imaging
{
[Unstable]
public class D2DRenderTargetBitmapImpl : D2DBitmapImpl, IDrawingContextLayerImpl, ILayerFactory
internal class D2DRenderTargetBitmapImpl : D2DBitmapImpl, IDrawingContextLayerImpl, ILayerFactory
{
private readonly BitmapRenderTarget _renderTarget;

4
src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs

@ -6,7 +6,6 @@ using SharpDX.WIC;
using APixelFormat = Avalonia.Platform.PixelFormat;
using AlphaFormat = Avalonia.Platform.AlphaFormat;
using D2DBitmap = SharpDX.Direct2D1.Bitmap;
using Avalonia.Metadata;
using Avalonia.Platform;
using PixelFormat = SharpDX.WIC.PixelFormat;
@ -15,8 +14,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// A WIC implementation of a <see cref="Avalonia.Media.Imaging.Bitmap"/>.
/// </summary>
[Unstable]
public class WicBitmapImpl : BitmapImpl, IReadableBitmapImpl
internal class WicBitmapImpl : BitmapImpl, IReadableBitmapImpl
{
private readonly BitmapDecoder _decoder;

4
src/Windows/Avalonia.Direct2D1/Media/Imaging/WicRenderTargetBitmapImpl.cs

@ -1,13 +1,11 @@
using System;
using Avalonia.Metadata;
using Avalonia.Platform;
using Avalonia.Rendering;
using SharpDX.Direct2D1;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class WicRenderTargetBitmapImpl : WicBitmapImpl, IDrawingContextLayerImpl
internal class WicRenderTargetBitmapImpl : WicBitmapImpl, IDrawingContextLayerImpl
{
private readonly WicRenderTarget _renderTarget;

2
src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs

@ -6,7 +6,7 @@ using PixelFormat = Avalonia.Platform.PixelFormat;
namespace Avalonia.Direct2D1.Media.Imaging
{
class WriteableWicBitmapImpl : WicBitmapImpl, IWriteableBitmapImpl
internal class WriteableWicBitmapImpl : WicBitmapImpl, IWriteableBitmapImpl
{
public WriteableWicBitmapImpl(Stream stream, int decodeSize, bool horizontal,
Avalonia.Media.Imaging.BitmapInterpolationMode interpolationMode)

4
src/Windows/Avalonia.Direct2D1/Media/LinearGradientBrushImpl.cs

@ -1,11 +1,9 @@
using System.Linq;
using Avalonia.Media;
using Avalonia.Metadata;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class LinearGradientBrushImpl : BrushImpl
internal class LinearGradientBrushImpl : BrushImpl
{
public LinearGradientBrushImpl(
ILinearGradientBrush brush,

4
src/Windows/Avalonia.Direct2D1/Media/RadialGradientBrushImpl.cs

@ -1,11 +1,9 @@
using System.Linq;
using Avalonia.Media;
using Avalonia.Metadata;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class RadialGradientBrushImpl : BrushImpl
internal class RadialGradientBrushImpl : BrushImpl
{
public RadialGradientBrushImpl(
IRadialGradientBrush brush,

4
src/Windows/Avalonia.Direct2D1/Media/SolidColorBrushImpl.cs

@ -1,10 +1,8 @@
using Avalonia.Media;
using Avalonia.Metadata;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class SolidColorBrushImpl : BrushImpl
internal class SolidColorBrushImpl : BrushImpl
{
public SolidColorBrushImpl(ISolidColorBrush brush, SharpDX.Direct2D1.RenderTarget target)
{

3
src/Windows/Avalonia.Direct2D1/Media/StreamGeometryContextImpl.cs

@ -9,8 +9,7 @@ using SweepDirection = SharpDX.Direct2D1.SweepDirection;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class StreamGeometryContextImpl : IStreamGeometryContextImpl
internal class StreamGeometryContextImpl : IStreamGeometryContextImpl
{
private readonly GeometrySink _sink;

4
src/Windows/Avalonia.Direct2D1/Media/StreamGeometryImpl.cs

@ -1,4 +1,3 @@
using Avalonia.Metadata;
using Avalonia.Platform;
using SharpDX.Direct2D1;
@ -7,8 +6,7 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// A Direct2D implementation of a <see cref="Avalonia.Media.StreamGeometry"/>.
/// </summary>
[Unstable]
public class StreamGeometryImpl : GeometryImpl, IStreamGeometryImpl
internal class StreamGeometryImpl : GeometryImpl, IStreamGeometryImpl
{
/// <summary>
/// Initializes a new instance of the <see cref="StreamGeometryImpl"/> class.

4
src/Windows/Avalonia.Direct2D1/Media/TransformedGeometryImpl.cs

@ -1,11 +1,9 @@
using Avalonia.Metadata;
using Avalonia.Platform;
using SharpDX.Direct2D1;
namespace Avalonia.Direct2D1.Media
{
[Unstable]
public class TransformedGeometryImpl : GeometryImpl, ITransformedGeometryImpl
internal class TransformedGeometryImpl : GeometryImpl, ITransformedGeometryImpl
{
/// <summary>
/// Initializes a new instance of the <see cref="StreamGeometryImpl"/> class.

2
src/Windows/Avalonia.Direct2D1/OptionalDispose.cs

@ -2,7 +2,7 @@
namespace Avalonia.Direct2D1
{
public readonly record struct OptionalDispose<T> : IDisposable where T : IDisposable
internal readonly record struct OptionalDispose<T> : IDisposable where T : IDisposable
{
private readonly bool _dispose;

2
src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs

@ -8,7 +8,7 @@ using DWrite = SharpDX.DirectWrite;
namespace Avalonia.Direct2D1
{
public static class PrimitiveExtensions
internal static class PrimitiveExtensions
{
/// <summary>
/// The value for which all absolute numbers smaller than are considered equal to zero.

2
src/Windows/Avalonia.Direct2D1/RenderTarget.cs

@ -5,7 +5,7 @@ using Avalonia.Rendering;
namespace Avalonia.Direct2D1
{
public class RenderTarget : IRenderTarget, ILayerFactory
internal class RenderTarget : IRenderTarget, ILayerFactory
{
/// <summary>
/// The render target.

2
src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs

@ -8,7 +8,7 @@ using SharpDX.DXGI;
namespace Avalonia.Direct2D1
{
public abstract class SwapChainRenderTarget : IRenderTarget, ILayerFactory
internal abstract class SwapChainRenderTarget : IRenderTarget, ILayerFactory
{
private Size2 _savedSize;
private Size2F _savedDpi;

2
src/Windows/Avalonia.Win32/AngleOptions.cs

@ -17,6 +17,6 @@ namespace Avalonia.Win32
new GlVersion(GlProfileType.OpenGLES, 2, 0)
};
public IList<PlatformApi> AllowedPlatformApis { get; set; } = null;
public IList<PlatformApi>? AllowedPlatformApis { get; set; } = null;
}
}

2
src/Windows/Avalonia.Win32/Automation/AutomationNode.ExpandCollapse.cs

@ -2,8 +2,6 @@
using Avalonia.Automation.Provider;
using UIA = Avalonia.Win32.Interop.Automation;
#nullable enable
namespace Avalonia.Win32.Automation
{
internal partial class AutomationNode : UIA.IExpandCollapseProvider

2
src/Windows/Avalonia.Win32/Automation/AutomationNode.RangeValue.cs

@ -1,8 +1,6 @@
using Avalonia.Automation.Provider;
using UIA = Avalonia.Win32.Interop.Automation;
#nullable enable
namespace Avalonia.Win32.Automation
{
internal partial class AutomationNode : UIA.IRangeValueProvider

2
src/Windows/Avalonia.Win32/Automation/AutomationNode.Scroll.cs

@ -1,8 +1,6 @@
using Avalonia.Automation.Provider;
using UIA = Avalonia.Win32.Interop.Automation;
#nullable enable
namespace Avalonia.Win32.Automation
{
internal partial class AutomationNode : UIA.IScrollProvider, UIA.IScrollItemProvider

8
src/Windows/Avalonia.Win32/Automation/AutomationNode.Selection.cs

@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Automation.Peers;
using Avalonia.Automation.Provider;
using UIA = Avalonia.Win32.Interop.Automation;
#nullable enable
namespace Avalonia.Win32.Automation
{
internal partial class AutomationNode : UIA.ISelectionProvider, UIA.ISelectionItemProvider
@ -27,8 +24,7 @@ namespace Avalonia.Win32.Automation
UIA.IRawElementProviderSimple[] UIA.ISelectionProvider.GetSelection()
{
var peers = InvokeSync<ISelectionProvider, IReadOnlyList<AutomationPeer>>(x => x.GetSelection());
return peers?.Select(x => (UIA.IRawElementProviderSimple)GetOrCreate(x)!).ToArray() ??
Array.Empty<UIA.IRawElementProviderSimple>();
return peers.Select(x => (UIA.IRawElementProviderSimple)GetOrCreate(x)).ToArray();
}
void UIA.ISelectionItemProvider.AddToSelection() => InvokeSync<ISelectionItemProvider>(x => x.AddToSelection());

2
src/Windows/Avalonia.Win32/Automation/AutomationNode.Toggle.cs

@ -1,8 +1,6 @@
using Avalonia.Automation.Provider;
using UIA = Avalonia.Win32.Interop.Automation;
#nullable enable
namespace Avalonia.Win32.Automation
{
internal partial class AutomationNode : UIA.IToggleProvider

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save