Browse Source

Merge branch 'master' into rndr4

pull/8105/head
Jumar Macato 4 years ago
committed by GitHub
parent
commit
5d143a2cdf
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      build/ApiCompatAttributeExcludeList.txt
  2. 2
      build/CoreLibraries.props
  3. 2
      native/Avalonia.Native/src/OSX/AutoFitContentView.mm
  4. 23
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  5. 6
      native/Avalonia.Native/src/OSX/PopupImpl.mm
  6. 2
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  7. 49
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm
  8. 6
      native/Avalonia.Native/src/OSX/WindowImpl.mm
  9. 1
      samples/BindingDemo/BindingDemo.csproj
  10. 2
      samples/ControlCatalog/ControlCatalog.csproj
  11. 3
      samples/ControlCatalog/Pages/CalendarDatePickerPage.xaml
  12. 6
      samples/ControlCatalog/Pages/TextBoxPage.xaml
  13. 3
      samples/IntegrationTestApp/IntegrationTestApp.csproj
  14. 1
      samples/PlatformSanityChecks/PlatformSanityChecks.csproj
  15. 3
      samples/Previewer/Previewer.csproj
  16. 1
      samples/RenderDemo/RenderDemo.csproj
  17. 1
      samples/Sandbox/Sandbox.csproj
  18. 1
      samples/VirtualizationDemo/VirtualizationDemo.csproj
  19. 1
      samples/interop/Direct3DInteropSample/Direct3DInteropSample.csproj
  20. 1
      samples/interop/NativeEmbedSample/NativeEmbedSample.csproj
  21. 2
      src/Avalonia.Base/Animation/IAnimation.cs
  22. 3
      src/Avalonia.Base/Animation/IAnimationSetter.cs
  23. 2
      src/Avalonia.Base/Animation/IAnimator.cs
  24. 4
      src/Avalonia.Base/Animation/IClock.cs
  25. 5
      src/Avalonia.Base/Animation/IGlobalClock.cs
  26. 2
      src/Avalonia.Base/Animation/ITransition.cs
  27. 6
      src/Avalonia.Base/Collections/AvaloniaList.cs
  28. 4
      src/Avalonia.Base/Controls/INameScope.cs
  29. 2
      src/Avalonia.Base/Controls/IPseudoClasses.cs
  30. 4
      src/Avalonia.Base/Controls/IResourceHost.cs
  31. 4
      src/Avalonia.Base/Controls/IResourceNode.cs
  32. 3
      src/Avalonia.Base/Controls/ISetInheritanceParent.cs
  33. 4
      src/Avalonia.Base/Controls/ISetLogicalParent.cs
  34. 2
      src/Avalonia.Base/Data/Core/IPropertyInfo.cs
  35. 19
      src/Avalonia.Base/Data/Core/Plugins/InpcPropertyAccessorPlugin.cs
  36. 3
      src/Avalonia.Base/Data/IBinding.cs
  37. 5
      src/Avalonia.Base/DirectPropertyBase.cs
  38. 2
      src/Avalonia.Base/IAvaloniaObject.cs
  39. 3
      src/Avalonia.Base/IDataContextProvider.cs
  40. 1
      src/Avalonia.Base/IDirectPropertyAccessor.cs
  41. 3
      src/Avalonia.Base/IDirectPropertyMetadata.cs
  42. 4
      src/Avalonia.Base/IStyledElement.cs
  43. 3
      src/Avalonia.Base/IStyledPropertyMetadata.cs
  44. 3
      src/Avalonia.Base/Input/IAccessKeyHandler.cs
  45. 3
      src/Avalonia.Base/Input/IFocusManager.cs
  46. 2
      src/Avalonia.Base/Input/IInputDevice.cs
  47. 2
      src/Avalonia.Base/Input/IInputElement.cs
  48. 2
      src/Avalonia.Base/Input/IInputManager.cs
  49. 3
      src/Avalonia.Base/Input/IInputRoot.cs
  50. 2
      src/Avalonia.Base/Input/IKeyboardDevice.cs
  51. 3
      src/Avalonia.Base/Input/IKeyboardNavigationHandler.cs
  52. 2
      src/Avalonia.Base/Input/IMainMenu.cs
  53. 2
      src/Avalonia.Base/Input/IMouseDevice.cs
  54. 3
      src/Avalonia.Base/Input/IPointer.cs
  55. 2
      src/Avalonia.Base/Input/IPointerDevice.cs
  56. 18
      src/Avalonia.Base/Input/InputElement.cs
  57. 2
      src/Avalonia.Base/Input/Platform/IClipboard.cs
  58. 2
      src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs
  59. 5
      src/Avalonia.Base/Input/Raw/IDragDropDevice.cs
  60. 4
      src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs
  61. 2
      src/Avalonia.Base/Interactivity/IInteractive.cs
  62. 4
      src/Avalonia.Base/Layout/ILayoutManager.cs
  63. 3
      src/Avalonia.Base/Layout/ILayoutRoot.cs
  64. 4
      src/Avalonia.Base/Layout/ILayoutable.cs
  65. 20
      src/Avalonia.Base/Layout/Layoutable.cs
  66. 2
      src/Avalonia.Base/Layout/UniformGridLayout.cs
  67. 2
      src/Avalonia.Base/LogicalTree/ILogical.cs
  68. 5
      src/Avalonia.Base/LogicalTree/ILogicalRoot.cs
  69. 4
      src/Avalonia.Base/Media/ConicGradientBrush.cs
  70. 2
      src/Avalonia.Base/Media/IBrush.cs
  71. 5
      src/Avalonia.Base/Media/IConicGradientBrush.cs
  72. 2
      src/Avalonia.Base/Media/IDashStyle.cs
  73. 5
      src/Avalonia.Base/Media/IExperimentalAcrylicMaterial.cs
  74. 2
      src/Avalonia.Base/Media/IGradientBrush.cs
  75. 5
      src/Avalonia.Base/Media/IGradientStop.cs
  76. 4
      src/Avalonia.Base/Media/IImageBrush.cs
  77. 7
      src/Avalonia.Base/Media/ILinearGradientBrush.cs
  78. 2
      src/Avalonia.Base/Media/IMutableBrush.cs
  79. 5
      src/Avalonia.Base/Media/IMutableExperimentalAcrylicMaterial.cs
  80. 1
      src/Avalonia.Base/Media/IMutableTransform.cs
  81. 5
      src/Avalonia.Base/Media/IPen.cs
  82. 7
      src/Avalonia.Base/Media/IRadialGradientBrush.cs
  83. 5
      src/Avalonia.Base/Media/ISolidColorBrush.cs
  84. 4
      src/Avalonia.Base/Media/ITileBrush.cs
  85. 6
      src/Avalonia.Base/Media/IVisualBrush.cs
  86. 2
      src/Avalonia.Base/Media/Imaging/IBitmap.cs
  87. 4
      src/Avalonia.Base/Media/TextFormatting/ITextSource.cs
  88. 17
      src/Avalonia.Base/Metadata/NotClientImplementableAttribute.cs
  89. 12
      src/Avalonia.Base/Metadata/UnstableAttribute.cs
  90. 2
      src/Avalonia.Base/Platform/IAssetLoader.cs
  91. 2
      src/Avalonia.Base/Platform/IBitmapImpl.cs
  92. 2
      src/Avalonia.Base/Platform/ICursorImpl.cs
  93. 2
      src/Avalonia.Base/Platform/IDrawingContextImpl.cs
  94. 2
      src/Avalonia.Base/Platform/IFontManagerImpl.cs
  95. 2
      src/Avalonia.Base/Platform/IGeometryImpl.cs
  96. 2
      src/Avalonia.Base/Platform/IGlyphRunImpl.cs
  97. 2
      src/Avalonia.Base/Platform/IGlyphTypefaceImpl.cs
  98. 2
      src/Avalonia.Base/Platform/IMacOSTopLevelPlatformHandle.cs
  99. 2
      src/Avalonia.Base/Platform/IPlatformRenderInterface.cs
  100. 2
      src/Avalonia.Base/Platform/IPlatformSettings.cs

2
build/ApiCompatAttributeExcludeList.txt

@ -0,0 +1,2 @@
T:Avalonia.Metadata.NotClientImplementableAttribute
T:Avalonia.Metadata.UnstableAttribute

2
build/CoreLibraries.props

@ -3,8 +3,6 @@
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Base/Avalonia.Base.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Controls/Avalonia.Controls.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.OpenGL/Avalonia.OpenGL.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Dialogs/Avalonia.Dialogs.csproj" />
<ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Markup/Avalonia.Markup/Avalonia.Markup.csproj" />

2
native/Avalonia.Native/src/OSX/AutoFitContentView.mm

@ -85,7 +85,7 @@
_settingSize = true;
[super setFrameSize:newSize];
auto window = static_cast<id <AvnWindowProtocol>>([self window]);
auto window = (id <AvnWindowProtocol>) [self window];
// TODO get actual titlebar size

23
native/Avalonia.Native/src/OSX/AvnWindow.mm

@ -174,6 +174,11 @@
[self setBackgroundColor: [NSColor clearColor]];
_isExtended = false;
#ifdef IS_NSPANEL
[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
#endif
return self;
}
@ -194,6 +199,8 @@
[self backingScaleFactor];
}
- (void)windowWillClose:(NSNotification *)notification
{
_closed = true;
@ -212,11 +219,14 @@
// If the window has a child window being shown as a dialog then don't allow it to become the key window.
for(NSWindow* uch in [self childWindows])
{
auto ch = static_cast<id <AvnWindowProtocol>>(uch);
if(ch == nil)
if (![uch conformsToProtocol:@protocol(AvnWindowProtocol)])
{
continue;
if (ch.isDialog)
return false;
}
id <AvnWindowProtocol> ch = (id <AvnWindowProtocol>) uch;
return !ch.isDialog;
}
return true;
@ -372,6 +382,11 @@
if(cparent != nullptr)
{
if(!cparent->IsShown())
{
return;
}
if(cparent->WindowState() == Maximized)
{
cparent->SetWindowState(Normal);

6
native/Avalonia.Native/src/OSX/PopupImpl.mm

@ -50,11 +50,17 @@ protected:
return S_OK;
}
}
public:
virtual bool ShouldTakeFocusOnShow() override
{
return false;
}
virtual HRESULT Show(bool activate, bool isDialog) override
{
return WindowBaseImpl::Show(activate, true);
}
};

2
native/Avalonia.Native/src/OSX/WindowBaseImpl.h

@ -60,6 +60,8 @@ BEGIN_INTERFACE_MAP()
virtual HRESULT Show(bool activate, bool isDialog) override;
virtual bool IsShown ();
virtual bool ShouldTakeFocusOnShow();
virtual HRESULT Hide() override;

49
native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

@ -30,8 +30,8 @@ WindowBaseImpl::WindowBaseImpl(IAvnWindowBaseEvents *events, IAvnGlContext *gl)
View = [[AvnView alloc] initWithParent:this];
StandardContainer = [[AutoFitContentView new] initWithContent:View];
lastPositionSet.X = 100;
lastPositionSet.Y = 100;
lastPositionSet.X = -1;
lastPositionSet.Y = -1;
lastSize = NSSize { 100, 100 };
lastMaxSize = NSSize { CGFLOAT_MAX, CGFLOAT_MAX};
lastMinSize = NSSize { 0, 0 };
@ -92,7 +92,11 @@ HRESULT WindowBaseImpl::Show(bool activate, bool isDialog) {
CreateNSWindow(isDialog);
InitialiseNSWindow();
SetPosition(lastPositionSet);
if(lastPositionSet.X >= 0 && lastPositionSet.Y >= 0)
{
SetPosition(lastPositionSet);
}
UpdateStyle();
[Window setTitle:_lastTitle];
@ -112,6 +116,11 @@ HRESULT WindowBaseImpl::Show(bool activate, bool isDialog) {
}
}
bool WindowBaseImpl::IsShown ()
{
return _shown;
}
bool WindowBaseImpl::ShouldTakeFocusOnShow() {
return true;
}
@ -191,9 +200,8 @@ HRESULT WindowBaseImpl::GetClientSize(AvnSize *ret) {
if (ret == nullptr)
return E_POINTER;
auto frame = [View frame];
ret->Width = frame.size.width;
ret->Height = frame.size.height;
ret->Width = lastSize.width;
ret->Height = lastSize.height;
return S_OK;
}
@ -206,9 +214,11 @@ HRESULT WindowBaseImpl::GetFrameSize(AvnSize *ret) {
if (ret == nullptr)
return E_POINTER;
auto frame = [Window frame];
ret->Width = frame.size.width;
ret->Height = frame.size.height;
if(Window != nullptr){
auto frame = [Window frame];
ret->Width = frame.size.width;
ret->Height = frame.size.height;
}
return S_OK;
}
@ -354,12 +364,17 @@ HRESULT WindowBaseImpl::GetPosition(AvnPoint *ret) {
return E_POINTER;
}
auto frame = [Window frame];
if(Window != nullptr) {
auto frame = [Window frame];
ret->X = frame.origin.x;
ret->Y = frame.origin.y + frame.size.height;
ret->X = frame.origin.x;
ret->Y = frame.origin.y + frame.size.height;
*ret = ConvertPointY(*ret);
*ret = ConvertPointY(*ret);
} else
{
*ret = lastPositionSet;
}
return S_OK;
}
@ -370,7 +385,10 @@ HRESULT WindowBaseImpl::SetPosition(AvnPoint point) {
@autoreleasepool {
lastPositionSet = point;
[Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(point))];
if(Window != nullptr) {
[Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(point))];
}
return S_OK;
}
@ -559,6 +577,7 @@ void WindowBaseImpl::InitialiseNSWindow() {
[Window setContentMaxSize:lastMaxSize];
[Window setOpaque:false];
[Window center];
if (lastMenu != nullptr) {
[GetWindowProtocol() applyMenu:lastMenu];
@ -576,7 +595,7 @@ id <AvnWindowProtocol> WindowBaseImpl::GetWindowProtocol() {
return nullptr;
}
return static_cast<id <AvnWindowProtocol>>(Window);
return (id <AvnWindowProtocol>) Window;
}
extern IAvnWindow* CreateAvnWindow(IAvnWindowEvents*events, IAvnGlContext* gl)

6
native/Avalonia.Native/src/OSX/WindowImpl.mm

@ -430,6 +430,9 @@ HRESULT WindowImpl::SetWindowState(AvnWindowState state) {
START_COM_CALL;
@autoreleasepool {
auto currentState = _actualWindowState;
_lastWindowState = state;
if (Window == nullptr) {
return S_OK;
}
@ -440,9 +443,6 @@ HRESULT WindowImpl::SetWindowState(AvnWindowState state) {
_inSetWindowState = true;
auto currentState = _actualWindowState;
_lastWindowState = state;
if (currentState == Normal) {
_preZoomSize = [Window frame];
}

1
samples/BindingDemo/BindingDemo.csproj

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
<ProjectReference Include="..\MiniMvvm\MiniMvvm.csproj" />
</ItemGroup>

2
samples/ControlCatalog/ControlCatalog.csproj

@ -25,6 +25,8 @@
<ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Controls.ColorPicker\Avalonia.Controls.ColorPicker.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Controls.DataGrid\Avalonia.Controls.DataGrid.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj" />
<ProjectReference Include="..\MiniMvvm\MiniMvvm.csproj" />
<ProjectReference Include="..\SampleControls\ControlSamples.csproj" />
</ItemGroup>

3
samples/ControlCatalog/Pages/CalendarDatePickerPage.xaml

@ -10,8 +10,7 @@
Margin="0,16,0,0"
HorizontalAlignment="Center"
Spacing="16">
<StackPanel Orientation="Vertical"
Width="200">
<StackPanel Orientation="Vertical">
<TextBlock Text="SelectedDateFormat: Short"/>
<CalendarDatePicker Name="DatePicker1"
SelectedDateFormat="Short"

6
samples/ControlCatalog/Pages/TextBoxPage.xaml

@ -66,6 +66,12 @@
FontFamily="Comic Sans MS"
InputMethod.IsInputMethodEnabled="False"
Foreground="Red"/>
<TextBox AcceptsReturn="True"
TextWrapping="Wrap"
Width="200"
Height="125"
LineHeight="32"
Text="Multiline TextBox with TextWrapping and increased LineHeight.&#xD;&#xD;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est." />
</StackPanel>
<StackPanel Orientation="Vertical" Spacing="8" Margin="8">
<Label Classes="h2" Target="{Binding #firstResMFont}">res_m fonts</Label>

3
samples/IntegrationTestApp/IntegrationTestApp.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
@ -18,6 +18,7 @@
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj" />
</ItemGroup>
<Import Project="..\..\build\BuildTargets.targets" />

1
samples/PlatformSanityChecks/PlatformSanityChecks.csproj

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Desktop\Avalonia.Desktop.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\src\Avalonia.X11\Avalonia.X11.csproj" />
</ItemGroup>

3
samples/Previewer/Previewer.csproj

@ -9,6 +9,9 @@
</Compile>
<EmbeddedResource Include="**\*.xaml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
</ItemGroup>
<Import Project="..\..\build\SampleApp.props" />
<Import Project="..\..\build\ReferenceCoreLibraries.props" />

1
samples/RenderDemo/RenderDemo.csproj

@ -12,6 +12,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj" />
<ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
<ProjectReference Include="..\MiniMvvm\MiniMvvm.csproj" />
<ProjectReference Include="..\SampleControls\ControlSamples.csproj" />

1
samples/Sandbox/Sandbox.csproj

@ -10,6 +10,7 @@
<ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Controls.ColorPicker\Avalonia.Controls.ColorPicker.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Controls.DataGrid\Avalonia.Controls.DataGrid.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj" />
</ItemGroup>
<Import Project="..\..\build\SampleApp.props" />

1
samples/VirtualizationDemo/VirtualizationDemo.csproj

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
<ProjectReference Include="..\MiniMvvm\MiniMvvm.csproj" />
</ItemGroup>

1
samples/interop/Direct3DInteropSample/Direct3DInteropSample.csproj

@ -22,6 +22,7 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\..\src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj" />
<ProjectReference Include="..\..\..\src\Windows\Avalonia.Win32\Avalonia.Win32.csproj" />
<ProjectReference Include="..\..\MiniMvvm\MiniMvvm.csproj" />

1
samples/interop/NativeEmbedSample/NativeEmbedSample.csproj

@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="MonoMac.NetStandard" Version="0.0.4" />
<ProjectReference Include="..\..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
<ProjectReference Include="..\..\..\src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj" />
<ProjectReference Include="..\..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
<ProjectReference Include="..\..\..\src\Avalonia.X11\Avalonia.X11.csproj" />

2
src/Avalonia.Base/Animation/IAnimation.cs

@ -1,12 +1,14 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Avalonia.Metadata;
namespace Avalonia.Animation
{
/// <summary>
/// Interface for Animation objects
/// </summary>
[NotClientImplementable]
public interface IAnimation
{
/// <summary>

3
src/Avalonia.Base/Animation/IAnimationSetter.cs

@ -1,5 +1,8 @@
using Avalonia.Metadata;
namespace Avalonia.Animation
{
[NotClientImplementable]
public interface IAnimationSetter
{
AvaloniaProperty? Property { get; set; }

2
src/Avalonia.Base/Animation/IAnimator.cs

@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using Avalonia.Metadata;
namespace Avalonia.Animation
{
/// <summary>
/// Interface for Animator objects
/// </summary>
[NotClientImplementable]
public interface IAnimator : IList<AnimatorKeyFrame>
{
/// <summary>

4
src/Avalonia.Base/Animation/IClock.cs

@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;
using Avalonia.Metadata;
namespace Avalonia.Animation
{
[NotClientImplementable]
public interface IClock : IObservable<TimeSpan>
{
PlayState PlayState { get; set; }

5
src/Avalonia.Base/Animation/IGlobalClock.cs

@ -1,9 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;
using Avalonia.Metadata;
namespace Avalonia.Animation
{
[NotClientImplementable]
public interface IGlobalClock : IClock
{
}

2
src/Avalonia.Base/Animation/ITransition.cs

@ -1,10 +1,12 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Animation
{
/// <summary>
/// Interface for Transition objects.
/// </summary>
[NotClientImplementable]
public interface ITransition
{
/// <summary>

6
src/Avalonia.Base/Collections/AvaloniaList.cs

@ -394,7 +394,13 @@ namespace Avalonia.Collections
} while (en.MoveNext());
if (notificationItems is not null)
{
NotifyAdd(notificationItems, index);
}
else
{
NotifyCountChanged();
}
}
}
}

4
src/Avalonia.Base/Controls/INameScope.cs

@ -1,5 +1,4 @@
using System;
using System.Threading.Tasks;
using Avalonia.Metadata;
using Avalonia.Utilities;
namespace Avalonia.Controls
@ -7,6 +6,7 @@ namespace Avalonia.Controls
/// <summary>
/// Defines a name scope.
/// </summary>
[NotClientImplementable]
public interface INameScope
{
/// <summary>

2
src/Avalonia.Base/Controls/IPseudoClasses.cs

@ -1,9 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Controls
{
/// <summary>
/// Exposes an interface for setting pseudoclasses on a <see cref="Classes"/> collection.
/// </summary>
[NotClientImplementable]
public interface IPseudoClasses
{
/// <summary>

4
src/Avalonia.Base/Controls/IResourceHost.cs

@ -1,6 +1,5 @@
using System;
#nullable enable
using Avalonia.Metadata;
namespace Avalonia.Controls
{
@ -10,6 +9,7 @@ namespace Avalonia.Controls
/// <remarks>
/// This interface is implemented by <see cref="StyledElement"/> and `Application`.
/// </remarks>
[NotClientImplementable]
public interface IResourceHost : IResourceNode
{
/// <summary>

4
src/Avalonia.Base/Controls/IResourceNode.cs

@ -1,6 +1,5 @@
using System;
#nullable enable
using Avalonia.Metadata;
namespace Avalonia.Controls
{
@ -12,6 +11,7 @@ namespace Avalonia.Controls
/// (<see cref="IResourceHost"/>) and resource providers such as <see cref="ResourceDictionary"/>
/// (see <see cref="IResourceProvider"/>).
/// </remarks>
[NotClientImplementable]
public interface IResourceNode
{
/// <summary>

3
src/Avalonia.Base/Controls/ISetInheritanceParent.cs

@ -1,4 +1,4 @@
#nullable enable
using Avalonia.Metadata;
namespace Avalonia.Controls
{
@ -10,6 +10,7 @@ namespace Avalonia.Controls
/// Additionally, <see cref="ISetLogicalParent"/> also sets the inheritance parent; this
/// interface is only needed where the logical and inheritance parents differ.
/// </remarks>
[NotClientImplementable]
public interface ISetInheritanceParent
{
/// <summary>

4
src/Avalonia.Base/Controls/ISetLogicalParent.cs

@ -1,6 +1,5 @@
using Avalonia.LogicalTree;
#nullable enable
using Avalonia.Metadata;
namespace Avalonia.Controls
{
@ -10,6 +9,7 @@ namespace Avalonia.Controls
/// <remarks>
/// You should not usually need to use this interface - it is for advanced scenarios only.
/// </remarks>
[NotClientImplementable]
public interface ISetLogicalParent
{
/// <summary>

2
src/Avalonia.Base/Data/Core/IPropertyInfo.cs

@ -1,7 +1,9 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Data.Core
{
[NotClientImplementable]
public interface IPropertyInfo
{
string Name { get; }

19
src/Avalonia.Base/Data/Core/Plugins/InpcPropertyAccessorPlugin.cs

@ -17,7 +17,7 @@ namespace Avalonia.Data.Core.Plugins
new Dictionary<(Type, string), PropertyInfo?>();
/// <inheritdoc/>
public bool Match(object obj, string propertyName) => GetFirstPropertyWithName(obj.GetType(), propertyName) != null;
public bool Match(object obj, string propertyName) => GetFirstPropertyWithName(obj, propertyName) != null;
/// <summary>
/// Starts monitoring the value of a property on an object.
@ -36,7 +36,7 @@ namespace Avalonia.Data.Core.Plugins
if (!reference.TryGetTarget(out var instance) || instance is null)
return null;
var p = GetFirstPropertyWithName(instance.GetType(), propertyName);
var p = GetFirstPropertyWithName(instance, propertyName);
if (p != null)
{
@ -50,8 +50,16 @@ namespace Avalonia.Data.Core.Plugins
}
}
private PropertyInfo? GetFirstPropertyWithName(Type type, string propertyName)
private const BindingFlags PropertyBindingFlags =
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
private PropertyInfo? GetFirstPropertyWithName(object instance, string propertyName)
{
if (instance is IReflectableType reflectableType)
return reflectableType.GetTypeInfo().GetProperty(propertyName, PropertyBindingFlags);
var type = instance.GetType();
var key = (type, propertyName);
if (!_propertyLookup.TryGetValue(key, out var propertyInfo))
@ -66,10 +74,7 @@ namespace Avalonia.Data.Core.Plugins
{
PropertyInfo? found = null;
const BindingFlags bindingFlags =
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
var properties = type.GetProperties(bindingFlags);
var properties = type.GetProperties(PropertyBindingFlags);
foreach (PropertyInfo propertyInfo in properties)
{

3
src/Avalonia.Base/Data/IBinding.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Data
{
/// <summary>
/// Holds a binding that can be applied to a property on an object.
/// </summary>
[NotClientImplementable]
public interface IBinding
{
/// <summary>

5
src/Avalonia.Base/DirectPropertyBase.cs

@ -2,7 +2,6 @@
using Avalonia.Data;
using Avalonia.Reactive;
using Avalonia.Styling;
using Avalonia.Utilities;
namespace Avalonia
{
@ -188,10 +187,10 @@ namespace Avalonia
}
else if (value is ITemplate template && !typeof(ITemplate).IsAssignableFrom(PropertyType))
{
return new PropertySetterLazyInstance<TValue>(
return new PropertySetterTemplateInstance<TValue>(
target,
this,
() => (TValue)template.Build());
template);
}
else
{

2
src/Avalonia.Base/IAvaloniaObject.cs

@ -1,11 +1,13 @@
using System;
using Avalonia.Data;
using Avalonia.Metadata;
namespace Avalonia
{
/// <summary>
/// Interface for getting/setting <see cref="AvaloniaProperty"/> values on an object.
/// </summary>
[NotClientImplementable]
public interface IAvaloniaObject
{
/// <summary>

3
src/Avalonia.Base/IDataContextProvider.cs

@ -1,10 +1,11 @@
#nullable enable
using Avalonia.Metadata;
namespace Avalonia
{
/// <summary>
/// Defines an element with a data context that can be used for binding.
/// </summary>
[NotClientImplementable]
public interface IDataContextProvider : IAvaloniaObject
{
/// <summary>

1
src/Avalonia.Base/IDirectPropertyAccessor.cs

@ -1,4 +1,5 @@
using System;
using Avalonia.Metadata;
namespace Avalonia
{

3
src/Avalonia.Base/IDirectPropertyMetadata.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia
{
/// <summary>
/// Untyped interface to <see cref="DirectPropertyMetadata{TValue}"/>
/// </summary>
[NotClientImplementable]
public interface IDirectPropertyMetadata
{
/// <summary>

4
src/Avalonia.Base/IStyledElement.cs

@ -2,12 +2,12 @@
using System.ComponentModel;
using Avalonia.Controls;
using Avalonia.LogicalTree;
using Avalonia.Metadata;
using Avalonia.Styling;
#nullable enable
namespace Avalonia
{
[NotClientImplementable]
public interface IStyledElement :
IStyleable,
IStyleHost,

3
src/Avalonia.Base/IStyledPropertyMetadata.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia
{
/// <summary>
/// Untyped interface to <see cref="StyledPropertyMetadata{TValue}"/>
/// </summary>
[NotClientImplementable]
public interface IStyledPropertyMetadata
{
/// <summary>

3
src/Avalonia.Base/Input/IAccessKeyHandler.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Input
{
/// <summary>
/// Defines the interface for classes that handle access keys for a window.
/// </summary>
[Unstable]
public interface IAccessKeyHandler
{
/// <summary>

3
src/Avalonia.Base/Input/IFocusManager.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Input
{
/// <summary>
/// Manages focus for the application.
/// </summary>
[NotClientImplementable]
public interface IFocusManager
{
/// <summary>

2
src/Avalonia.Base/Input/IInputDevice.cs

@ -1,7 +1,9 @@
using Avalonia.Input.Raw;
using Avalonia.Metadata;
namespace Avalonia.Input
{
[NotClientImplementable]
public interface IInputDevice
{
/// <summary>

2
src/Avalonia.Base/Input/IInputElement.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Avalonia.Interactivity;
using Avalonia.Metadata;
using Avalonia.VisualTree;
#nullable enable
@ -10,6 +11,7 @@ namespace Avalonia.Input
/// <summary>
/// Defines input-related functionality for a control.
/// </summary>
[NotClientImplementable]
public interface IInputElement : IInteractive, IVisual
{
/// <summary>

2
src/Avalonia.Base/Input/IInputManager.cs

@ -1,5 +1,6 @@
using System;
using Avalonia.Input.Raw;
using Avalonia.Metadata;
namespace Avalonia.Input
{
@ -7,6 +8,7 @@ namespace Avalonia.Input
/// Receives input from the windowing subsystem and dispatches it to interested parties
/// for processing.
/// </summary>
[NotClientImplementable]
public interface IInputManager
{
/// <summary>

3
src/Avalonia.Base/Input/IInputRoot.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Input
{
/// <summary>
/// Defines the interface for top-level input elements.
/// </summary>
[NotClientImplementable]
public interface IInputRoot : IInputElement
{
/// <summary>

2
src/Avalonia.Base/Input/IKeyboardDevice.cs

@ -1,5 +1,6 @@
using System;
using System.ComponentModel;
using Avalonia.Metadata;
namespace Avalonia.Input
{
@ -50,6 +51,7 @@ namespace Avalonia.Input
KeyboardMask = Alt | Control | Shift | Meta
}
[NotClientImplementable]
public interface IKeyboardDevice : IInputDevice, INotifyPropertyChanged
{
IInputElement? FocusedElement { get; }

3
src/Avalonia.Base/Input/IKeyboardNavigationHandler.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Input
{
/// <summary>
/// Defines the interface for classes that handle keyboard navigation for a window.
/// </summary>
[Unstable]
public interface IKeyboardNavigationHandler
{
/// <summary>

2
src/Avalonia.Base/Input/IMainMenu.cs

@ -1,5 +1,6 @@
using System;
using Avalonia.Interactivity;
using Avalonia.Metadata;
using Avalonia.VisualTree;
namespace Avalonia.Input
@ -7,6 +8,7 @@ namespace Avalonia.Input
/// <summary>
/// Defines the interface for a window's main menu.
/// </summary>
[NotClientImplementable]
public interface IMainMenu : IVisual
{
/// <summary>

2
src/Avalonia.Base/Input/IMouseDevice.cs

@ -1,10 +1,12 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Input
{
/// <summary>
/// Represents a mouse device.
/// </summary>
[NotClientImplementable]
public interface IMouseDevice : IPointerDevice
{
/// <summary>

3
src/Avalonia.Base/Input/IPointer.cs

@ -1,5 +1,8 @@
using Avalonia.Metadata;
namespace Avalonia.Input
{
[NotClientImplementable]
public interface IPointer
{
int Id { get; }

2
src/Avalonia.Base/Input/IPointerDevice.cs

@ -1,9 +1,11 @@
using System;
using Avalonia.VisualTree;
using Avalonia.Input.Raw;
using Avalonia.Metadata;
namespace Avalonia.Input
{
[NotClientImplementable]
public interface IPointerDevice : IInputDevice
{
/// <inheritdoc cref="IPointer.Captured" />

18
src/Avalonia.Base/Input/InputElement.cs

@ -94,7 +94,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<KeyEventArgs> KeyDownEvent =
RoutedEvent.Register<InputElement, KeyEventArgs>(
"KeyDown",
nameof(KeyDown),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -102,7 +102,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<KeyEventArgs> KeyUpEvent =
RoutedEvent.Register<InputElement, KeyEventArgs>(
"KeyUp",
nameof(KeyUp),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -116,7 +116,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<TextInputEventArgs> TextInputEvent =
RoutedEvent.Register<InputElement, TextInputEventArgs>(
"TextInput",
nameof(TextInput),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -124,7 +124,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<TextInputMethodClientRequestedEventArgs> TextInputMethodClientRequestedEvent =
RoutedEvent.Register<InputElement, TextInputMethodClientRequestedEventArgs>(
"TextInputMethodClientRequested",
nameof(TextInputMethodClientRequested),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -144,7 +144,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<PointerEventArgs> PointerMovedEvent =
RoutedEvent.Register<InputElement, PointerEventArgs>(
"PointerMove",
nameof(PointerMoved),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -152,7 +152,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<PointerPressedEventArgs> PointerPressedEvent =
RoutedEvent.Register<InputElement, PointerPressedEventArgs>(
"PointerPressed",
nameof(PointerPressed),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -160,7 +160,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<PointerReleasedEventArgs> PointerReleasedEvent =
RoutedEvent.Register<InputElement, PointerReleasedEventArgs>(
"PointerReleased",
nameof(PointerReleased),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>
@ -168,7 +168,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<PointerCaptureLostEventArgs> PointerCaptureLostEvent =
RoutedEvent.Register<InputElement, PointerCaptureLostEventArgs>(
"PointerCaptureLost",
nameof(PointerCaptureLost),
RoutingStrategies.Direct);
/// <summary>
@ -176,7 +176,7 @@ namespace Avalonia.Input
/// </summary>
public static readonly RoutedEvent<PointerWheelEventArgs> PointerWheelChangedEvent =
RoutedEvent.Register<InputElement, PointerWheelEventArgs>(
"PointerWheelChanged",
nameof(PointerWheelChanged),
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
/// <summary>

2
src/Avalonia.Base/Input/Platform/IClipboard.cs

@ -1,7 +1,9 @@
using System.Threading.Tasks;
using Avalonia.Metadata;
namespace Avalonia.Input.Platform
{
[NotClientImplementable]
public interface IClipboard
{
Task<string> GetTextAsync();

2
src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs

@ -1,7 +1,9 @@
using System.Threading.Tasks;
using Avalonia.Metadata;
namespace Avalonia.Input.Platform
{
[Unstable]
public interface IPlatformDragSource
{
Task<DragDropEffects> DoDragDrop(PointerEventArgs triggerEvent, IDataObject data, DragDropEffects allowedEffects);

5
src/Avalonia.Base/Input/Raw/IDragDropDevice.cs

@ -1,5 +1,8 @@
namespace Avalonia.Input.Raw
using Avalonia.Metadata;
namespace Avalonia.Input.Raw
{
[NotClientImplementable]
public interface IDragDropDevice : IInputDevice
{
}

4
src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs

@ -1,5 +1,8 @@
using Avalonia.Metadata;
namespace Avalonia.Input.TextInput
{
[Unstable]
public interface ITextInputMethodImpl
{
void SetClient(ITextInputMethodClient? client);
@ -8,6 +11,7 @@ namespace Avalonia.Input.TextInput
void Reset();
}
[NotClientImplementable]
public interface ITextInputMethodRoot : IInputRoot
{
ITextInputMethodImpl? InputMethod { get; }

2
src/Avalonia.Base/Interactivity/IInteractive.cs

@ -1,4 +1,5 @@
using System;
using Avalonia.Metadata;
#nullable enable
@ -7,6 +8,7 @@ namespace Avalonia.Interactivity
/// <summary>
/// Interface for objects that raise routed events.
/// </summary>
[NotClientImplementable]
public interface IInteractive
{
/// <summary>

4
src/Avalonia.Base/Layout/ILayoutManager.cs

@ -1,12 +1,12 @@
using System;
#nullable enable
using Avalonia.Metadata;
namespace Avalonia.Layout
{
/// <summary>
/// Manages measuring and arranging of controls.
/// </summary>
[NotClientImplementable]
public interface ILayoutManager : IDisposable
{
/// <summary>

3
src/Avalonia.Base/Layout/ILayoutRoot.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Layout
{
/// <summary>
/// Defines the root of a layoutable tree.
/// </summary>
[NotClientImplementable]
public interface ILayoutRoot : ILayoutable
{
/// <summary>

4
src/Avalonia.Base/Layout/ILayoutable.cs

@ -1,12 +1,12 @@
using Avalonia.Metadata;
using Avalonia.VisualTree;
#nullable enable
namespace Avalonia.Layout
{
/// <summary>
/// Defines layout-related functionality for a control.
/// </summary>
[NotClientImplementable]
public interface ILayoutable : IVisual
{
/// <summary>

20
src/Avalonia.Base/Layout/Layoutable.cs

@ -141,7 +141,6 @@ namespace Avalonia.Layout
static Layoutable()
{
AffectsMeasure<Layoutable>(
IsVisibleProperty,
WidthProperty,
HeightProperty,
MinWidthProperty,
@ -791,6 +790,25 @@ namespace Avalonia.Layout
{
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
if (change.Property == IsVisibleProperty)
{
DesiredSize = default;
// All changes to visibility cause the parent element to be notified.
this.GetVisualParent<ILayoutable>()?.ChildDesiredSizeChanged(this);
// We only invalidate outselves when visibility is changed to true.
if (change.GetNewValue<bool>())
{
InvalidateMeasure();
}
}
}
/// <inheritdoc/>
protected sealed override void OnVisualParentChanged(IVisual? oldParent, IVisual? newParent)
{

2
src/Avalonia.Base/Layout/UniformGridLayout.cs

@ -116,7 +116,7 @@ namespace Avalonia.Layout
/// Defines the <see cref="MaximumRowsOrColumnsProperty"/> property.
/// </summary>
public static readonly StyledProperty<int> MaximumRowsOrColumnsProperty =
AvaloniaProperty.Register<UniformGridLayout, int>(nameof(MinItemWidth));
AvaloniaProperty.Register<UniformGridLayout, int>(nameof(MaximumRowsOrColumns));
/// <summary>
/// Defines the <see cref="Orientation"/> property.

2
src/Avalonia.Base/LogicalTree/ILogical.cs

@ -1,12 +1,14 @@
using System;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Metadata;
namespace Avalonia.LogicalTree
{
/// <summary>
/// Represents a node in the logical tree.
/// </summary>
[NotClientImplementable]
public interface ILogical
{
/// <summary>

5
src/Avalonia.Base/LogicalTree/ILogicalRoot.cs

@ -1,8 +1,11 @@
namespace Avalonia.LogicalTree
using Avalonia.Metadata;
namespace Avalonia.LogicalTree
{
/// <summary>
/// Represents a root of a logical tree.
/// </summary>
[NotClientImplementable]
public interface ILogicalRoot : ILogical
{
}

4
src/Avalonia.Base/Media/ConicGradientBrush.cs

@ -11,7 +11,7 @@ namespace Avalonia.Media
/// Defines the <see cref="Center"/> property.
/// </summary>
public static readonly StyledProperty<RelativePoint> CenterProperty =
AvaloniaProperty.Register<RadialGradientBrush, RelativePoint>(
AvaloniaProperty.Register<ConicGradientBrush, RelativePoint>(
nameof(Center),
RelativePoint.Center);
@ -19,7 +19,7 @@ namespace Avalonia.Media
/// Defines the <see cref="Angle"/> property.
/// </summary>
public static readonly StyledProperty<double> AngleProperty =
AvaloniaProperty.Register<RadialGradientBrush, double>(
AvaloniaProperty.Register<ConicGradientBrush, double>(
nameof(Angle),
0);

2
src/Avalonia.Base/Media/IBrush.cs

@ -1,4 +1,5 @@
using System.ComponentModel;
using Avalonia.Metadata;
namespace Avalonia.Media
{
@ -6,6 +7,7 @@ namespace Avalonia.Media
/// Describes how an area is painted.
/// </summary>
[TypeConverter(typeof(BrushConverter))]
[NotClientImplementable]
public interface IBrush
{
/// <summary>

5
src/Avalonia.Base/Media/IConicGradientBrush.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Paints an area with a conic gradient.
/// </summary>
[NotClientImplementable]
public interface IConicGradientBrush : IGradientBrush
{
/// <summary>

2
src/Avalonia.Base/Media/IDashStyle.cs

@ -1,10 +1,12 @@
using System.Collections.Generic;
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Represents the sequence of dashes and gaps that will be applied by a <see cref="Pen"/>.
/// </summary>
[NotClientImplementable]
public interface IDashStyle
{
/// <summary>

5
src/Avalonia.Base/Media/IExperimentalAcrylicMaterial.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Experimental Interface for producing Acrylic-like materials.
/// </summary>
[NotClientImplementable]
public interface IExperimentalAcrylicMaterial
{
/// <summary>

2
src/Avalonia.Base/Media/IGradientBrush.cs

@ -1,10 +1,12 @@
using System.Collections.Generic;
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// A brush that draws with a gradient.
/// </summary>
[NotClientImplementable]
public interface IGradientBrush : IBrush
{
/// <summary>

5
src/Avalonia.Base/Media/IGradientStop.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Describes the location and color of a transition point in a gradient.
/// </summary>
[NotClientImplementable]
public interface IGradientStop
{
/// <summary>

4
src/Avalonia.Base/Media/IImageBrush.cs

@ -1,10 +1,12 @@
using Avalonia.Media.Imaging;
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Paints an area with an <see cref="IBitmap"/>.
/// </summary>
[NotClientImplementable]
public interface IImageBrush : ITileBrush
{
/// <summary>
@ -12,4 +14,4 @@ namespace Avalonia.Media
/// </summary>
IBitmap Source { get; }
}
}
}

7
src/Avalonia.Base/Media/ILinearGradientBrush.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// A brush that draws with a linear gradient.
/// </summary>
[NotClientImplementable]
public interface ILinearGradientBrush : IGradientBrush
{
/// <summary>
@ -15,4 +18,4 @@
/// </summary>
RelativePoint EndPoint { get; }
}
}
}

2
src/Avalonia.Base/Media/IMutableBrush.cs

@ -1,10 +1,12 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Represents a mutable brush which can return an immutable clone of itself.
/// </summary>
[NotClientImplementable]
public interface IMutableBrush : IBrush, IAffectsRender
{
/// <summary>

5
src/Avalonia.Base/Media/IMutableExperimentalAcrylicMaterial.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Represents a mutable brush which can return an immutable clone of itself.
/// </summary>
[NotClientImplementable]
public interface IMutableExperimentalAcrylicMaterial : IExperimentalAcrylicMaterial, IAffectsRender
{
/// <summary>

1
src/Avalonia.Base/Media/IMutableTransform.cs

@ -1,4 +1,5 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Media
{

5
src/Avalonia.Base/Media/IPen.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Describes how a stroke is drawn.
/// </summary>
[NotClientImplementable]
public interface IPen
{
/// <summary>

7
src/Avalonia.Base/Media/IRadialGradientBrush.cs

@ -1,8 +1,11 @@
namespace Avalonia.Media
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Paints an area with a radial gradient.
/// </summary>
[NotClientImplementable]
public interface IRadialGradientBrush : IGradientBrush
{
/// <summary>
@ -21,4 +24,4 @@
/// </summary>
double Radius { get; }
}
}
}

5
src/Avalonia.Base/Media/ISolidColorBrush.cs

@ -1,8 +1,11 @@
using Avalonia.Metadata;
namespace Avalonia.Media
{
/// <summary>
/// Fills an area with a solid color.
/// </summary>
[NotClientImplementable]
public interface ISolidColorBrush : IBrush
{
/// <summary>
@ -10,4 +13,4 @@ namespace Avalonia.Media
/// </summary>
Color Color { get; }
}
}
}

4
src/Avalonia.Base/Media/ITileBrush.cs

@ -1,10 +1,12 @@
using Avalonia.Media.Imaging;
using Avalonia.Metadata;
namespace Avalonia.Media
{
{
/// <summary>
/// A brush which displays a repeating image.
/// </summary>
[NotClientImplementable]
public interface ITileBrush : IBrush
{
/// <summary>

6
src/Avalonia.Base/Media/IVisualBrush.cs

@ -1,10 +1,12 @@
using Avalonia.VisualTree;
using Avalonia.Metadata;
using Avalonia.VisualTree;
namespace Avalonia.Media
{
/// <summary>
/// Paints an area with an <see cref="IVisual"/>.
/// </summary>
[NotClientImplementable]
public interface IVisualBrush : ITileBrush
{
/// <summary>
@ -12,4 +14,4 @@ namespace Avalonia.Media
/// </summary>
IVisual Visual { get; }
}
}
}

2
src/Avalonia.Base/Media/Imaging/IBitmap.cs

@ -1,5 +1,6 @@
using System;
using System.IO;
using Avalonia.Metadata;
using Avalonia.Platform;
using Avalonia.Utilities;
@ -8,6 +9,7 @@ namespace Avalonia.Media.Imaging
/// <summary>
/// Represents a bitmap image.
/// </summary>
[NotClientImplementable]
public interface IBitmap : IImage, IDisposable
{
/// <summary>

4
src/Avalonia.Base/Media/TextFormatting/ITextSource.cs

@ -1,4 +1,6 @@
namespace Avalonia.Media.TextFormatting
using Avalonia.Metadata;
namespace Avalonia.Media.TextFormatting
{
/// <summary>
/// Produces <see cref="TextRun"/> objects that are used by the <see cref="TextFormatter"/>.

17
src/Avalonia.Base/Metadata/NotClientImplementableAttribute.cs

@ -0,0 +1,17 @@
using System;
namespace Avalonia.Metadata
{
/// <summary>
/// This interface is not intended to be implemented outside of the core Avalonia framework as
/// its API may change without warning.
/// </summary>
/// <remarks>
/// This interface is stable for consumption by a client, but should not be implemented as members
/// may be added to its API.
/// </remarks>
[AttributeUsage(AttributeTargets.Interface)]
public class NotClientImplementableAttribute : Attribute
{
}
}

12
src/Avalonia.Base/Metadata/UnstableAttribute.cs

@ -0,0 +1,12 @@
using System;
namespace Avalonia.Metadata
{
/// <summary>
/// This API is unstable and is not covered by API compatibility guarantees between minor and
/// patch releases.
/// </summary>
public class UnstableAttribute : Attribute
{
}
}

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

@ -2,12 +2,14 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Loads assets compiled into the application binary.
/// </summary>
[Unstable]
public interface IAssetLoader
{
/// <summary>

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

@ -1,11 +1,13 @@
using System;
using System.IO;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Defines the platform-specific interface for a <see cref="Avalonia.Media.Imaging.Bitmap"/>.
/// </summary>
[Unstable]
public interface IBitmapImpl : IDisposable
{
/// <summary>

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

@ -1,5 +1,6 @@
using System;
using Avalonia.Input;
using Avalonia.Metadata;
#nullable enable
@ -8,6 +9,7 @@ namespace Avalonia.Platform
/// <summary>
/// Represents a platform implementation of a <see cref="Cursor"/>.
/// </summary>
[Unstable]
public interface ICursorImpl : IDisposable
{
}

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

@ -3,12 +3,14 @@ using Avalonia.Media;
using Avalonia.Rendering.SceneGraph;
using Avalonia.Utilities;
using Avalonia.Media.Imaging;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Defines the interface through which drawing occurs.
/// </summary>
[Unstable]
public interface IDrawingContextImpl : IDisposable
{
/// <summary>

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

@ -1,9 +1,11 @@
using System.Collections.Generic;
using System.Globalization;
using Avalonia.Media;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
[Unstable]
public interface IFontManagerImpl
{
/// <summary>

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

@ -1,10 +1,12 @@
using Avalonia.Media;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Defines the platform-specific interface for a <see cref="Geometry"/>.
/// </summary>
[Unstable]
public interface IGeometryImpl
{
/// <summary>

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

@ -1,9 +1,11 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Actual implementation of a glyph run that stores platform dependent resources.
/// </summary>
[Unstable]
public interface IGlyphRunImpl : IDisposable { }
}

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

@ -1,7 +1,9 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
[Unstable]
public interface IGlyphTypefaceImpl : IDisposable
{
/// <summary>

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

@ -1,7 +1,9 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
[Unstable]
public interface IMacOSTopLevelPlatformHandle
{
IntPtr NSView { get; }

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

@ -3,12 +3,14 @@ using System.Collections.Generic;
using System.IO;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
/// <summary>
/// Defines the main platform-specific interface for the rendering subsystem.
/// </summary>
[Unstable]
public interface IPlatformRenderInterface
{
/// <summary>

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

@ -1,7 +1,9 @@
using System;
using Avalonia.Metadata;
namespace Avalonia.Platform
{
[Unstable]
public interface IPlatformSettings
{
Size DoubleClickSize { get; }

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

Loading…
Cancel
Save