Browse Source

Merge branch 'master' into Direct2D1LocatorRemoval

Benedikt Schroeder 7 years ago
parent
commit
1ba88c3900
100 changed files with 252 additions and 333 deletions
  1. 1 1
      samples/ControlCatalog/ControlCatalog.csproj
  2. 2 1
      samples/ControlCatalog/MainView.xaml
  3. 13 0
      samples/ControlCatalog/Pages/ListBoxPage.xaml
  4. 25 0
      samples/ControlCatalog/Pages/ListBoxPage.xaml.cs
  5. 2 2
      samples/ControlCatalog/Pages/NumericUpDownPage.xaml
  6. 6 2
      samples/ControlCatalog/Pages/ScreenPage.cs
  7. 1 5
      src/Android/Avalonia.Android/AndroidPlatform.cs
  8. 0 10
      src/Android/Avalonia.Android/AndroidThreadingInterface.cs
  9. 1 13
      src/Android/Avalonia.Android/AppBuilder.cs
  10. 1 8
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  11. 1 8
      src/Android/Avalonia.Android/AvaloniaView.cs
  12. 1 1
      src/Android/Avalonia.Android/CursorFactory.cs
  13. 2 2
      src/Android/Avalonia.Android/Platform/ClipboardImpl.cs
  14. 2 3
      src/Android/Avalonia.Android/Platform/Input/AndroidKeyboardDevice.cs
  15. 1 1
      src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs
  16. 1 9
      src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs
  17. 1 8
      src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs
  18. 5 8
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs
  19. 4 4
      src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs
  20. 2 4
      src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidTouchEventsHelper.cs
  21. 1 8
      src/Android/Avalonia.Android/Platform/Specific/IAndroidView.cs
  22. 2 13
      src/Android/Avalonia.Android/PlatformIconLoader.cs
  23. 1 1
      src/Android/Avalonia.Android/SystemDialogImpl.cs
  24. 3 6
      src/Avalonia.Animation/Animatable.cs
  25. 4 8
      src/Avalonia.Animation/Animation.cs
  26. 0 4
      src/Avalonia.Animation/AnimatorKeyFrame.cs
  27. 7 10
      src/Avalonia.Animation/Animator`1.cs
  28. 0 2
      src/Avalonia.Animation/Cue.cs
  29. 1 10
      src/Avalonia.Animation/DoubleAnimator.cs
  30. 0 1
      src/Avalonia.Animation/DoubleTransition.cs
  31. 0 1
      src/Avalonia.Animation/Easing/BounceEaseIn.cs
  32. 1 4
      src/Avalonia.Animation/Easing/Easing.cs
  33. 1 2
      src/Avalonia.Animation/Easing/EasingTypeConverter.cs
  34. 1 1
      src/Avalonia.Animation/Easing/ElasticEaseIn.cs
  35. 1 1
      src/Avalonia.Animation/Easing/ElasticEaseOut.cs
  36. 1 1
      src/Avalonia.Animation/Easing/SineEaseIn.cs
  37. 1 1
      src/Avalonia.Animation/Easing/SineEaseOut.cs
  38. 1 5
      src/Avalonia.Animation/FillMode.cs
  39. 0 1
      src/Avalonia.Animation/FloatTransition.cs
  40. 0 2
      src/Avalonia.Animation/IAnimation.cs
  41. 0 1
      src/Avalonia.Animation/IAnimator.cs
  42. 0 2
      src/Avalonia.Animation/ITransition.cs
  43. 0 1
      src/Avalonia.Animation/IntegerTransition.cs
  44. 0 3
      src/Avalonia.Animation/KeyFrame.cs
  45. 0 11
      src/Avalonia.Animation/KeyFramePair`1.cs
  46. 2 6
      src/Avalonia.Animation/PlayState.cs
  47. 1 5
      src/Avalonia.Animation/PlaybackDirection.cs
  48. 1 4
      src/Avalonia.Animation/RepeatCount.cs
  49. 1 2
      src/Avalonia.Animation/RepeatCountTypeConverter.cs
  50. 0 2
      src/Avalonia.Animation/Timing.cs
  51. 1 2
      src/Avalonia.Animation/Transition`1.cs
  52. 0 2
      src/Avalonia.Animation/Utils/DoubleUtils.cs
  53. 0 1
      src/Avalonia.Base/Data/Core/Plugins/DataValidationBase.cs
  54. 2 0
      src/Avalonia.Controls/ContentControl.cs
  55. 32 0
      src/Avalonia.Controls/Converters/MarginMultiplierConverter.cs
  56. 42 0
      src/Avalonia.Controls/TreeView.cs
  57. 34 2
      src/Avalonia.Controls/TreeViewItem.cs
  58. 1 1
      src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs
  59. 1 4
      src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs
  60. 0 2
      src/Avalonia.Diagnostics/Debug.cs
  61. 0 1
      src/Avalonia.Diagnostics/ViewModels/LogicalTreeNode.cs
  62. 1 2
      src/Avalonia.Diagnostics/ViewModels/ViewModelBase.cs
  63. 1 1
      src/Avalonia.Diagnostics/Views/PropertyChangedExtenions.cs
  64. 0 1
      src/Avalonia.Diagnostics/Views/SimpleGrid.cs
  65. 2 7
      src/Avalonia.DotNetCoreRuntime/AppBuilder.cs
  66. 0 4
      src/Avalonia.DotNetCoreRuntime/RuntimeInfo.cs
  67. 1 1
      src/Avalonia.Input/AccessKeyHandler.cs
  68. 1 5
      src/Avalonia.Input/Cursors.cs
  69. 1 3
      src/Avalonia.Input/DataObject.cs
  70. 2 2
      src/Avalonia.Input/DragDrop.cs
  71. 0 1
      src/Avalonia.Input/ICustomKeyboardNavigation.cs
  72. 2 2
      src/Avalonia.Input/IDataObject.cs
  73. 4 4
      src/Avalonia.Input/IInputManager.cs
  74. 0 2
      src/Avalonia.Input/IPointerDevice.cs
  75. 0 1
      src/Avalonia.Input/InputElement.cs
  76. 2 2
      src/Avalonia.Input/InputExtensions.cs
  77. 1 1
      src/Avalonia.Input/InputManager.cs
  78. 1 1
      src/Avalonia.Input/Key.cs
  79. 0 5
      src/Avalonia.Input/KeyBinding.cs
  80. 0 1
      src/Avalonia.Input/KeyEventArgs.cs
  81. 2 4
      src/Avalonia.Input/KeyGesture.cs
  82. 0 3
      src/Avalonia.Input/KeyboardDevice.cs
  83. 1 1
      src/Avalonia.Input/KeyboardNavigationHandler.cs
  84. 2 3
      src/Avalonia.Input/MouseDevice.cs
  85. 0 4
      src/Avalonia.Input/Platform/IClipboard.cs
  86. 1 6
      src/Avalonia.Input/Platform/IPlatformDragSource.cs
  87. 0 5
      src/Avalonia.Input/Platform/IStandardCursorFactory.cs
  88. 0 1
      src/Avalonia.Input/PointerEventArgs.cs
  89. 2 4
      src/Avalonia.Input/Raw/IDragDropDevice.cs
  90. 2 6
      src/Avalonia.Input/Raw/RawDragEvent.cs
  91. 0 2
      src/Avalonia.Input/Raw/RawMouseWheelEventArgs.cs
  92. 0 5
      src/Avalonia.Input/TextInputEventArgs.cs
  93. 1 1
      src/Avalonia.Interactivity/IInteractive.cs
  94. 1 1
      src/Avalonia.Interactivity/Interactive.cs
  95. 0 2
      src/Avalonia.Layout/ILayoutManager.cs
  96. 2 3
      src/Avalonia.Layout/LayoutManager.cs
  97. 2 3
      src/Avalonia.Layout/Layoutable.cs
  98. 1 2
      src/Avalonia.Logging.Serilog/SerilogExtensions.cs
  99. 0 3
      src/Avalonia.ReactiveUI/AppBuilderExtensions.cs
  100. 0 4
      src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs

+ 1 - 1
samples/ControlCatalog/ControlCatalog.csproj

@@ -35,4 +35,4 @@
   </ItemGroup>
   
   <Import Project="..\..\build\Serilog.props" />
-</Project>
+</Project>

+ 2 - 1
samples/ControlCatalog/MainView.xaml

@@ -20,8 +20,9 @@
     <TabItem Header="Expander"><pages:ExpanderPage/></TabItem>
     <TabItem Header="Image"><pages:ImagePage/></TabItem>
     <TabItem Header="LayoutTransformControl"><pages:LayoutTransformControlPage/></TabItem>
+    <TabItem Header="ListBox"><pages:ListBoxPage/></TabItem>
     <TabItem Header="Menu"><pages:MenuPage/></TabItem>
-	  <TabItem Header="NumericUpDown"><pages:NumericUpDownPage/></TabItem>
+	<TabItem Header="NumericUpDown"><pages:NumericUpDownPage/></TabItem>
     <TabItem Header="ProgressBar"><pages:ProgressBarPage/></TabItem>
     <TabItem Header="RadioButton"><pages:RadioButtonPage/></TabItem>
     <TabItem Header="Slider"><pages:SliderPage/></TabItem>

+ 13 - 0
samples/ControlCatalog/Pages/ListBoxPage.xaml

@@ -0,0 +1,13 @@
+<UserControl xmlns="https://github.com/avaloniaui">
+  <StackPanel Orientation="Vertical" Spacing="4">
+    <TextBlock Classes="h1">ListBox</TextBlock>
+    <TextBlock Classes="h2">Hosts a collection of ListBoxItem.</TextBlock>
+
+    <StackPanel Orientation="Horizontal"
+              Margin="0,16,0,0"
+              HorizontalAlignment="Center"
+              Spacing="16">
+      <ListBox Items="{Binding}" Width="250" Height="350"></ListBox>
+    </StackPanel>
+  </StackPanel>
+</UserControl>

+ 25 - 0
samples/ControlCatalog/Pages/ListBoxPage.xaml.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace ControlCatalog.Pages
+{
+    public class ListBoxPage : UserControl
+    {
+        public ListBoxPage()
+        {
+            this.InitializeComponent();
+            DataContext = Enumerable.Range(1, 10).Select(i => $"Item {i}" )
+                .ToArray();
+        }
+
+        private void InitializeComponent()
+        {
+            AvaloniaXamlLoader.Load(this);
+        }
+
+    }
+}

+ 2 - 2
samples/ControlCatalog/Pages/NumericUpDownPage.xaml

@@ -14,7 +14,7 @@
         <CheckBox Grid.Row="1" Grid.Column="1" IsChecked="{Binding #upDown.IsReadOnly}" VerticalAlignment="Center" Margin="2"/>
 
         <TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="2">AllowSpin:</TextBlock>
-        <CheckBox Grid.Row="2" Grid.Column="1" IsChecked="{Binding #upDown.AllowSpin}" IsEnabled="{Binding #upDown.!IsReadOnly}" VerticalAlignment="Center" Margin="2"/>
+        <CheckBox Grid.Row="2" Grid.Column="1" IsChecked="{Binding #upDown.AllowSpin}" VerticalAlignment="Center" Margin="2"/>
 
         <TextBlock Grid.Row="3" Grid.Column="0" VerticalAlignment="Center" Margin="2">ClipValueToMinMax:</TextBlock>
         <CheckBox Grid.Row="3" Grid.Column="1" IsChecked="{Binding #upDown.ClipValueToMinMax}" VerticalAlignment="Center" Margin="2"/>
@@ -77,4 +77,4 @@
     </StackPanel>
 
   </StackPanel>
-</UserControl>
+</UserControl>

+ 6 - 2
samples/ControlCatalog/Pages/ScreenPage.cs

@@ -42,7 +42,11 @@ namespace ControlCatalog.Pages
                     context.DrawRectangle(p, boundsRect);
                     context.DrawRectangle(p, workingAreaRect);
                     
-                    FormattedText text = new FormattedText();
+                    FormattedText text = new FormattedText()
+                    {
+                        Typeface = Typeface.Default
+                    };
+
                     text.Text = $"Bounds: {screen.Bounds.Width}:{screen.Bounds.Height}";
                     context.DrawText(Brushes.Black, boundsRect.Position.WithY(boundsRect.Size.Height), text);
                     
@@ -59,4 +63,4 @@ namespace ControlCatalog.Pages
             context.DrawRectangle(p, new Rect(w.Position.X / 10f + Math.Abs(_leftMost), w.Position.Y / 10, w.Bounds.Width / 10, w.Bounds.Height / 10));
         }
     }
-}
+}

+ 1 - 5
src/Android/Avalonia.Android/AndroidPlatform.cs

@@ -1,8 +1,4 @@
 using System;
-using System.IO;
-using System.Linq;
-using Android.Content;
-using Android.Views;
 using Avalonia.Android.Platform;
 using Avalonia.Android.Platform.Input;
 using Avalonia.Android.Platform.SkiaPlatform;
@@ -79,4 +75,4 @@ namespace Avalonia.Android
             return new PopupImpl();
         }
     }
-}
+}

+ 0 - 10
src/Android/Avalonia.Android/AndroidThreadingInterface.cs

@@ -1,16 +1,7 @@
 using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
 using System.Reactive.Disposables;
-using System.Text;
 using System.Threading;
-using Android.App;
-using Android.Content;
 using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
 using Avalonia.Platform;
 using Avalonia.Threading;
 
@@ -88,4 +79,3 @@ namespace Avalonia.Android
         public event Action<DispatcherPriority?> Signaled;
     }
 }
- 

+ 1 - 13
src/Android/Avalonia.Android/AppBuilder.cs

@@ -1,16 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
-using Android.Content;
-using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
 using Avalonia.Controls;
-using Avalonia.Platform;
 using Avalonia.Shared.PlatformSupport;
 
 namespace Avalonia
@@ -23,4 +11,4 @@ namespace Avalonia
 
         }
     }
-}
+}

+ 1 - 8
src/Android/Avalonia.Android/AvaloniaActivity.cs

@@ -1,14 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 
 using Android.App;
-using Android.Content;
 using Android.OS;
-using Android.Runtime;
 using Android.Views;
-using Android.Widget;
 
 namespace Avalonia.Android
 {
@@ -48,4 +41,4 @@ namespace Avalonia.Android
             return View.DispatchKeyEvent(e);
         }
     }
-}
+}

+ 1 - 8
src/Android/Avalonia.Android/AvaloniaView.cs

@@ -1,12 +1,5 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
 using Android.Content;
-using Android.OS;
-using Android.Runtime;
 using Android.Views;
 using Android.Widget;
 using Avalonia.Android.Platform.SkiaPlatform;
@@ -66,4 +59,4 @@ namespace Avalonia.Android
             public IDisposable ShowDialog() => null;
         }
     }
-}
+}

+ 1 - 1
src/Android/Avalonia.Android/CursorFactory.cs

@@ -9,4 +9,4 @@ namespace Avalonia.Android
         public IPlatformHandle GetCursor(StandardCursorType cursorType)
             => new PlatformHandle(IntPtr.Zero, "ZeroCursor");
     }
-}
+}

+ 2 - 2
src/Android/Avalonia.Android/Platform/ClipboardImpl.cs

@@ -1,9 +1,9 @@
+using System.Threading.Tasks;
 using Android.Content;
 using Android.Runtime;
 using Android.Views;
 using Avalonia.Input.Platform;
 using Avalonia.Platform;
-using System.Threading.Tasks;
 
 namespace Avalonia.Android.Platform
 {
@@ -44,4 +44,4 @@ namespace Avalonia.Android.Platform
             return Task.FromResult<object>(null);
         }
     }
-}
+}

+ 2 - 3
src/Android/Avalonia.Android/Platform/Input/AndroidKeyboardDevice.cs

@@ -1,12 +1,11 @@
-using System;
-using Avalonia.Input;
 //using Android.InputMethodServices;
 using System.Collections.Generic;
 using Android.Views;
+using Avalonia.Input;
 
 namespace Avalonia.Android.Platform.Input
 {
-  public class AndroidKeyboardDevice : KeyboardDevice, IKeyboardDevice {
+    public class AndroidKeyboardDevice : KeyboardDevice, IKeyboardDevice {
     private static readonly Dictionary<Keycode, Key> KeyDic = new Dictionary<Keycode, Key>
      {
          //   { Keycode.Cancel?, Key.Cancel },

+ 1 - 1
src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs

@@ -102,4 +102,4 @@ namespace Avalonia.Android.Platform.SkiaPlatform
             uint reserved6;
         }
     }
-}
+}

+ 1 - 9
src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs

@@ -1,17 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
 using Android.Content;
 using Android.Graphics;
 using Android.OS;
-using Android.Runtime;
 using Android.Util;
 using Android.Views;
-using Android.Widget;
-using Avalonia.Media;
 using Avalonia.Platform;
 
 namespace Avalonia.Android
@@ -90,4 +82,4 @@ namespace Avalonia.Android
         protected abstract void Draw();
         public string HandleDescriptor => "SurfaceView";
     }
-}
+}

+ 1 - 8
src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
 using Android.Content;
 using Android.Graphics;
-using Android.OS;
 using Android.Runtime;
 using Android.Views;
-using Android.Widget;
 using Avalonia.Controls;
 using Avalonia.Platform;
 
@@ -116,4 +109,4 @@ namespace Avalonia.Android.Platform.SkiaPlatform
             //Not supported
         }
     }
-}
+}

+ 5 - 8
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@@ -1,18 +1,15 @@
-using Android.App;
+using System;
+using System.Collections.Generic;
 using Android.Content;
 using Android.Graphics;
 using Android.Views;
+using Avalonia.Android.Platform.Input;
 using Avalonia.Android.Platform.Specific;
 using Avalonia.Android.Platform.Specific.Helpers;
+using Avalonia.Controls.Platform.Surfaces;
 using Avalonia.Input;
 using Avalonia.Input.Raw;
 using Avalonia.Platform;
-using System;
-using System.Collections.Generic;
-using System.Reactive.Disposables;
-using Avalonia.Android.Platform.Input;
-using Avalonia.Controls;
-using Avalonia.Controls.Platform.Surfaces;
 using Avalonia.Rendering;
 
 namespace Avalonia.Android.Platform.SkiaPlatform
@@ -196,4 +193,4 @@ namespace Avalonia.Android.Platform.SkiaPlatform
 
         ILockedFramebuffer IFramebufferPlatformSurface.Lock()=>new AndroidFramebuffer(_view.Holder.Surface);
     }
-}
+}

+ 4 - 4
src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs

@@ -1,3 +1,5 @@
+using System;
+using System.ComponentModel;
 using Android.Content;
 using Android.Runtime;
 using Android.Views;
@@ -7,8 +9,6 @@ using Avalonia.Controls;
 using Avalonia.Input;
 using Avalonia.Input.Raw;
 using Avalonia.Platform;
-using System;
-using System.ComponentModel;
 
 namespace Avalonia.Android.Platform.Specific.Helpers
 {
@@ -120,7 +120,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers
             _lastFocusedElement = element;
         }
 
-        public void ActivateAutoShowKeybord()
+        public void ActivateAutoShowKeyboard()
         {
             var kbDevice = (KeyboardDevice.Instance as INotifyPropertyChanged);
 
@@ -142,4 +142,4 @@ namespace Avalonia.Android.Platform.Specific.Helpers
             HandleEvents = false;
         }
     }
-}
+}

+ 2 - 4
src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidTouchEventsHelper.cs

@@ -1,10 +1,8 @@
-using Android.Graphics;
+using System;
 using Android.Views;
 using Avalonia.Input;
 using Avalonia.Input.Raw;
-using Avalonia.Media;
 using Avalonia.Platform;
-using System;
 
 namespace Avalonia.Android.Platform.Specific.Helpers
 {
@@ -131,4 +129,4 @@ namespace Avalonia.Android.Platform.Specific.Helpers
             HandleEvents = false;
         }
     }
-}
+}

+ 1 - 8
src/Android/Avalonia.Android/Platform/Specific/IAndroidView.cs

@@ -1,16 +1,9 @@
-using Android.Graphics;
 using Android.Views;
-using System;
-using System.Collections.Generic;
 
 namespace Avalonia.Android.Platform.Specific
 {
     public interface IAndroidView
     {
-
-
         View View { get; }
     }
-
-
-}
+}

+ 2 - 13
src/Android/Avalonia.Android/PlatformIconLoader.cs

@@ -1,16 +1,5 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
-using Android.Content;
-using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
-using Avalonia.Platform;
 using System.IO;
+using Avalonia.Platform;
 
 namespace Avalonia.Android
 {
@@ -54,4 +43,4 @@ namespace Avalonia.Android
             stream.CopyTo(outputStream);
         }
     }
-}
+}

+ 1 - 1
src/Android/Avalonia.Android/SystemDialogImpl.cs

@@ -18,4 +18,4 @@ namespace Avalonia.Android
             throw new NotImplementedException();
         }
     }
-}
+}

+ 3 - 6
src/Avalonia.Animation/Animatable.cs

@@ -1,15 +1,12 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System.Linq;
-using Avalonia.Data;
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Reactive.Linq;
 using Avalonia.Collections;
-using Avalonia.Animation;
-using System.Collections.Generic;
-using System.Threading;
-using System.Collections.Concurrent;
+using Avalonia.Data;
 
 namespace Avalonia.Animation
 {

+ 4 - 8
src/Avalonia.Animation/Animation.cs

@@ -1,18 +1,14 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Easings;
-using Avalonia.Animation;
-using Avalonia.Collections;
-using Avalonia.Metadata;
 using System;
 using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Reflection;
 using System.Linq;
-using System.Threading.Tasks;
-using System.Reactive.Linq;
 using System.Reactive.Disposables;
+using System.Reactive.Linq;
+using System.Threading.Tasks;
+using Avalonia.Animation.Easings;
+using Avalonia.Collections;
 
 namespace Avalonia.Animation
 {

+ 0 - 4
src/Avalonia.Animation/AnimatorKeyFrame.cs

@@ -1,9 +1,5 @@
 using System;
-using System.Collections.Generic;
-using System.Text;
 using System.ComponentModel;
-using Avalonia.Metadata;
-using Avalonia.Collections;
 using Avalonia.Data;
 using Avalonia.Reactive;
 

+ 7 - 10
src/Avalonia.Animation/Animator`1.cs

@@ -1,13 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Text;
-using Avalonia.Collections;
-using System.ComponentModel;
-using Avalonia.Animation.Utils;
-using System.Reactive.Linq;
 using System.Linq;
+using System.Reactive.Linq;
+using Avalonia.Animation.Utils;
+using Avalonia.Collections;
 using Avalonia.Data;
-using System.Reactive.Disposables;
 
 namespace Avalonia.Animation
 {
@@ -21,7 +18,7 @@ namespace Avalonia.Animation
         /// </summary>
         private readonly SortedList<double, (AnimatorKeyFrame, bool isNeutral)> _convertedKeyframes = new SortedList<double, (AnimatorKeyFrame, bool)>();
 
-        private bool _isVerfifiedAndConverted;
+        private bool _isVerifiedAndConverted;
 
         /// <summary>
         /// Gets or sets the target property for the keyframe.
@@ -31,13 +28,13 @@ namespace Avalonia.Animation
         public Animator()
         {
             // Invalidate keyframes when changed.
-            this.CollectionChanged += delegate { _isVerfifiedAndConverted = false; };
+            this.CollectionChanged += delegate { _isVerifiedAndConverted = false; };
         }
 
         /// <inheritdoc/>
         public virtual IDisposable Apply(Animation animation, Animatable control, IObservable<bool> obsMatch, Action onComplete)
         {
-            if (!_isVerfifiedAndConverted)
+            if (!_isVerifiedAndConverted)
                 VerifyConvertKeyFrames();
 
             return obsMatch
@@ -124,7 +121,7 @@ namespace Avalonia.Animation
             }
 
             AddNeutralKeyFramesIfNeeded();
-            _isVerfifiedAndConverted = true;
+            _isVerifiedAndConverted = true;
 
         }
 

+ 0 - 2
src/Avalonia.Animation/Cue.cs

@@ -1,8 +1,6 @@
 using System;
-using System.Collections.Generic;
 using System.ComponentModel;
 using System.Globalization;
-using System.Text;
 
 namespace Avalonia.Animation
 {

+ 1 - 10
src/Avalonia.Animation/DoubleAnimator.cs

@@ -1,13 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Linq;
-using System.Reactive.Linq;
-using System.Diagnostics;
-using Avalonia.Animation.Utils;
-using Avalonia.Data;
-
-namespace Avalonia.Animation
+namespace Avalonia.Animation
 {
     /// <summary>
     /// Animator that handles <see cref="double"/> properties.

+ 0 - 1
src/Avalonia.Animation/DoubleTransition.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Metadata;
 using System;
 using System.Reactive.Linq;
 

+ 0 - 1
src/Avalonia.Animation/Easing/BounceEaseIn.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-
 using Avalonia.Animation.Utils;
 
 namespace Avalonia.Animation.Easings

+ 1 - 4
src/Avalonia.Animation/Easing/Easing.cs

@@ -1,10 +1,7 @@
-using Avalonia.Collections;
 using System;
 using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-using System.Linq;
 using System.ComponentModel;
+using System.Linq;
 
 namespace Avalonia.Animation.Easings
 {

+ 1 - 2
src/Avalonia.Animation/Easing/EasingTypeConverter.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Easings;
 using System;
 using System.ComponentModel;
 using System.Globalization;
@@ -20,4 +19,4 @@ namespace Avalonia.Animation.Easings
             return Easing.Parse((string)value);
         }
     }
-}
+}

+ 1 - 1
src/Avalonia.Animation/Easing/ElasticEaseIn.cs

@@ -1,8 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Utils;
 using System;
+using Avalonia.Animation.Utils;
 
 namespace Avalonia.Animation.Easings
 {

+ 1 - 1
src/Avalonia.Animation/Easing/ElasticEaseOut.cs

@@ -1,8 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Utils;
 using System;
+using Avalonia.Animation.Utils;
 
 namespace Avalonia.Animation.Easings
 {

+ 1 - 1
src/Avalonia.Animation/Easing/SineEaseIn.cs

@@ -1,8 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Utils;
 using System;
+using Avalonia.Animation.Utils;
 
 namespace Avalonia.Animation.Easings
 {

+ 1 - 1
src/Avalonia.Animation/Easing/SineEaseOut.cs

@@ -1,8 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Utils;
 using System;
+using Avalonia.Animation.Utils;
 
 namespace Avalonia.Animation.Easings
 {

+ 1 - 5
src/Avalonia.Animation/FillMode.cs

@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Avalonia.Animation
+namespace Avalonia.Animation
 {
     public enum FillMode
     {

+ 0 - 1
src/Avalonia.Animation/FloatTransition.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Metadata;
 using System;
 using System.Reactive.Linq;
 

+ 0 - 2
src/Avalonia.Animation/IAnimation.cs

@@ -1,6 +1,4 @@
 using System;
-using System.Collections.Generic;
-using System.Text;
 using System.Threading.Tasks;
 
 namespace Avalonia.Animation

+ 0 - 1
src/Avalonia.Animation/IAnimator.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.Text;
 
 namespace Avalonia.Animation
 {

+ 0 - 2
src/Avalonia.Animation/ITransition.cs

@@ -1,9 +1,7 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Metadata;
 using System;
-using System.Reactive.Linq;
 
 namespace Avalonia.Animation
 {

+ 0 - 1
src/Avalonia.Animation/IntegerTransition.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Metadata;
 using System;
 using System.Reactive.Linq;
 

+ 0 - 3
src/Avalonia.Animation/KeyFrame.cs

@@ -1,8 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.Text;
-using System.ComponentModel;
-using Avalonia.Metadata;
 using Avalonia.Collections;
 
 namespace Avalonia.Animation

+ 0 - 11
src/Avalonia.Animation/KeyFramePair`1.cs

@@ -1,14 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Avalonia.Collections;
-using System.ComponentModel;
-using Avalonia.Animation.Utils;
-using System.Reactive.Linq;
-using System.Linq;
-using Avalonia.Data;
-using System.Reactive.Disposables;
-
 namespace Avalonia.Animation
 {
     /// <summary>

+ 2 - 6
src/Avalonia.Animation/PlayState.cs

@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Avalonia.Animation
+namespace Avalonia.Animation
 {
     /// <summary>
     /// Determines the playback state of an animation.
@@ -24,4 +20,4 @@ namespace Avalonia.Animation
         /// </summary>
         Stop
     }
-}
+}

+ 1 - 5
src/Avalonia.Animation/PlaybackDirection.cs

@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Avalonia.Animation
+namespace Avalonia.Animation
 {
     /// <summary>
     /// Determines the playback direction of an animation.

+ 1 - 4
src/Avalonia.Animation/RepeatCount.cs

@@ -1,12 +1,9 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Utilities;
 using System;
-using System.Collections.Generic;
 using System.ComponentModel;
 using System.Globalization;
-using System.Linq;
 
 namespace Avalonia.Animation
 {
@@ -199,4 +196,4 @@ namespace Avalonia.Animation
             }
         }
     }
-}
+}

+ 1 - 2
src/Avalonia.Animation/RepeatCountTypeConverter.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Animation.Easings;
 using System;
 using System.ComponentModel;
 using System.Globalization;
@@ -20,4 +19,4 @@ namespace Avalonia.Animation
             return RepeatCount.Parse((string)value);
         }
     }
-}
+}

+ 0 - 2
src/Avalonia.Animation/Timing.cs

@@ -2,10 +2,8 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Diagnostics;
 using System.Linq;
 using System.Reactive.Linq;
-using Avalonia.Data;
 using Avalonia.Threading;
 
 namespace Avalonia.Animation

+ 1 - 2
src/Avalonia.Animation/Transition`1.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.Metadata;
 using System;
 using System.Reactive.Linq;
 using Avalonia.Animation.Easings;
@@ -65,4 +64,4 @@ namespace Avalonia.Animation
             return control.Bind(Property, transition, Data.BindingPriority.Animation);
         }
     }
-}
+}

+ 0 - 2
src/Avalonia.Animation/Utils/DoubleUtils.cs

@@ -2,8 +2,6 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Collections.Generic;
-using System.Text;
 
 namespace Avalonia.Animation.Utils
 {

+ 0 - 1
src/Avalonia.Base/Data/Core/Plugins/DataValidationBase.cs

@@ -2,7 +2,6 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using Avalonia.Data;
 
 namespace Avalonia.Data.Core.Plugins
 {

+ 2 - 0
src/Avalonia.Controls/ContentControl.cs

@@ -45,6 +45,8 @@ namespace Avalonia.Controls
         static ContentControl()
         {
             ContentControlMixin.Attach<ContentControl>(ContentProperty, x => x.LogicalChildren);
+            PseudoClass(ContentProperty, x => x != null, ":valid");
+            PseudoClass(ContentProperty, x => x == null, ":invalid");
         }
 
         /// <summary>

+ 32 - 0
src/Avalonia.Controls/Converters/MarginMultiplierConverter.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+
+namespace Avalonia.Controls.Converters
+{
+    public class MarginMultiplierConverter : IValueConverter
+    {
+        public double Indent { get; set; }
+
+        public bool Left { get; set; } = false;
+
+        public bool Top { get; set; } = false;
+
+        public bool Right { get; set; } = false;
+
+        public bool Bottom { get; set; } = false;
+
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            if (!(value is int depth))
+                return new Thickness(0);
+
+            return new Thickness(Left ? Indent * depth : 0, Top ? Indent * depth : 0, Right ? Indent * depth : 0, Bottom ? Indent * depth : 0);
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            throw new System.NotImplementedException();
+        }
+    }
+}

+ 42 - 0
src/Avalonia.Controls/TreeView.cs

@@ -1,6 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using Avalonia.Controls.Generators;
 using Avalonia.Controls.Primitives;
@@ -31,6 +33,14 @@ namespace Avalonia.Controls
                 o => o.SelectedItem,
                 (o, v) => o.SelectedItem = v);
 
+        /// <summary>
+        /// Defines the <see cref="SelectedItemChanged"/> event.
+        /// </summary>
+        public static readonly RoutedEvent<SelectionChangedEventArgs> SelectedItemChangedEvent =
+            RoutedEvent.Register<TreeView, SelectionChangedEventArgs>(
+                "SelectedItemChanged",
+                RoutingStrategies.Bubble);
+
         private object _selectedItem;
 
         /// <summary>
@@ -41,6 +51,15 @@ namespace Avalonia.Controls
             // HACK: Needed or SelectedItem property will not be found in Release build.
         }
 
+        /// <summary>
+        /// Occurs when the control's selection changes.
+        /// </summary>
+        public event EventHandler<SelectionChangedEventArgs> SelectedItemChanged
+        {
+            add { AddHandler(SelectedItemChangedEvent, value); }
+            remove { RemoveHandler(SelectedItemChangedEvent, value); }
+        }
+
         /// <summary>
         /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
         /// </summary>
@@ -74,6 +93,7 @@ namespace Avalonia.Controls
                     MarkContainerSelected(container, false);
                 }
 
+                var oldItem = _selectedItem;
                 SetAndRaise(SelectedItemProperty, ref _selectedItem, value);
 
                 if (_selectedItem != null)
@@ -86,6 +106,28 @@ namespace Avalonia.Controls
                         container.BringIntoView();
                     }
                 }
+
+                if (oldItem != _selectedItem)
+                {
+                    // Fire the SelectionChanged event
+                    List<object> removed = new List<object>();
+                    if (oldItem != null)
+                    {
+                        removed.Add(oldItem);
+                    }
+
+                    List<object> added = new List<object>();
+                    if (_selectedItem != null)
+                    {
+                        added.Add(_selectedItem);
+                    }
+
+                    var changed = new SelectionChangedEventArgs(
+                        SelectedItemChangedEvent,
+                        added,
+                        removed);
+                    RaiseEvent(changed);
+                }
             }
         }
 

+ 34 - 2
src/Avalonia.Controls/TreeViewItem.cs

@@ -21,7 +21,7 @@ namespace Avalonia.Controls
         /// </summary>
         public static readonly DirectProperty<TreeViewItem, bool> IsExpandedProperty =
             AvaloniaProperty.RegisterDirect<TreeViewItem, bool>(
-                "IsExpanded",
+                nameof(IsExpanded),
                 o => o.IsExpanded,
                 (o, v) => o.IsExpanded = v);
 
@@ -31,17 +31,25 @@ namespace Avalonia.Controls
         public static readonly StyledProperty<bool> IsSelectedProperty =
             ListBoxItem.IsSelectedProperty.AddOwner<TreeViewItem>();
 
+        /// <summary>
+        /// Defines the <see cref="Level"/> property.
+        /// </summary>
+        public static readonly DirectProperty<TreeViewItem, int> LevelProperty =
+            AvaloniaProperty.RegisterDirect<TreeViewItem, int>(
+                nameof(Level), o => o.Level);
+
         private static readonly ITemplate<IPanel> DefaultPanel =
             new FuncTemplate<IPanel>(() => new StackPanel());
 
         private TreeView _treeView;
         private bool _isExpanded;
+        private int _level;
 
         /// <summary>
         /// Initializes static members of the <see cref="TreeViewItem"/> class.
         /// </summary>
         static TreeViewItem()
-        {            
+        {
             SelectableMixin.Attach<TreeViewItem>(IsSelectedProperty);
             FocusableProperty.OverrideDefaultValue<TreeViewItem>(true);
             ItemsPanelProperty.OverrideDefaultValue<TreeViewItem>(DefaultPanel);
@@ -65,6 +73,15 @@ namespace Avalonia.Controls
             set { SetValue(IsSelectedProperty, value); }
         }
 
+        /// <summary>
+        /// Gets the level/indentation of the item.
+        /// </summary>
+        public int Level
+        {
+            get { return _level; }
+            private set { SetAndRaise(LevelProperty, ref _level, value); }
+        }
+
         /// <summary>
         /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
         /// </summary>
@@ -89,6 +106,8 @@ namespace Avalonia.Controls
             base.OnAttachedToLogicalTree(e);
             _treeView = this.GetLogicalAncestors().OfType<TreeView>().FirstOrDefault();
 
+            Level = CalculateDistanceFromLogicalParent<TreeView>(this) - 1;
+
             if (ItemTemplate == null && _treeView?.ItemTemplate != null)
             {
                 ItemTemplate = _treeView.ItemTemplate;
@@ -126,5 +145,18 @@ namespace Avalonia.Controls
 
             // Don't call base.OnKeyDown - let events bubble up to containing TreeView.
         }
+
+        private static int CalculateDistanceFromLogicalParent<T>(ILogical logical, int @default = -1) where T : class
+        {
+            var result = 0;
+
+            while (logical != null && logical.GetType() != typeof(T))
+            {
+                ++result;
+                logical = logical.LogicalParent;
+            }
+
+            return logical != null ? result : @default;
+        }
     }
 }

+ 1 - 1
src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs

@@ -63,4 +63,4 @@ namespace Avalonia.DesignerSupport.Remote
         public Size DoubleClickSize { get; } = new Size(2, 2);
         public TimeSpan DoubleClickTime { get; } = TimeSpan.FromMilliseconds(500);
     }
-}
+}

+ 1 - 4
src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs

@@ -1,11 +1,8 @@
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Net;
 using System.Reflection;
 using Avalonia.Controls;
-using Avalonia.Controls.Shapes;
-using Avalonia.DesignerSupport;
 using Avalonia.Input;
 using Avalonia.Remote.Protocol;
 using Avalonia.Remote.Protocol.Designer;
@@ -207,4 +204,4 @@ namespace Avalonia.DesignerSupport.Remote
             }
         });
     }
-}
+}

+ 0 - 2
src/Avalonia.Diagnostics/Debug.cs

@@ -2,10 +2,8 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using System.Text;
-using System.Threading.Tasks;
 using Avalonia.Controls;
 using Avalonia.Data;
 using Avalonia.VisualTree;

+ 0 - 1
src/Avalonia.Diagnostics/ViewModels/LogicalTreeNode.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
 using Avalonia.Collections;
 using Avalonia.Controls;
 using Avalonia.LogicalTree;

+ 1 - 2
src/Avalonia.Diagnostics/ViewModels/ViewModelBase.cs

@@ -1,5 +1,4 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.Runtime.CompilerServices;
 using JetBrains.Annotations;

+ 1 - 1
src/Avalonia.Diagnostics/Views/PropertyChangedExtenions.cs

@@ -5,7 +5,7 @@ using System.Reflection;
 
 namespace Avalonia.Diagnostics.Views
 {
-    internal static class PropertyChangedExtenions
+    internal static class PropertyChangedExtensions
     {
         public static IObservable<T> GetObservable<T>(this INotifyPropertyChanged source, string propertyName)
         {

+ 0 - 1
src/Avalonia.Diagnostics/Views/SimpleGrid.cs

@@ -2,7 +2,6 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System.Collections.Generic;
-using System.Linq;
 using Avalonia.Controls;
 
 namespace Avalonia.Diagnostics.Views

+ 2 - 7
src/Avalonia.DotNetCoreRuntime/AppBuilder.cs

@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
+using System.Reflection;
 using Avalonia.Controls;
 using Avalonia.Platform;
 using Avalonia.Shared.PlatformSupport;
@@ -60,4 +55,4 @@ namespace Avalonia
         void LoadWin32() => this.UseWin32();
         void LoadGtk3() => this.UseGtk3();
     }
-}
+}

+ 0 - 4
src/Avalonia.DotNetCoreRuntime/RuntimeInfo.cs

@@ -1,9 +1,5 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
 using Avalonia.Platform;
 
 

+ 1 - 1
src/Avalonia.Input/AccessKeyHandler.cs

@@ -49,7 +49,7 @@ namespace Avalonia.Input
         private bool _altIsDown;
 
         /// <summary>
-        /// Element to restore folowing AltKey taking focus.
+        /// Element to restore following AltKey taking focus.
         /// </summary>
         private IInputElement _restoreFocusElement;
 

+ 1 - 5
src/Avalonia.Input/Cursors.cs

@@ -2,10 +2,6 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Avalonia.Platform;
 
 namespace Avalonia.Input
@@ -69,7 +65,7 @@ namespace Avalonia.Input
         {
             return Enum.TryParse<StandardCursorType>(s, true, out var t) ?
                 new Cursor(t) :
-                throw new ArgumentException($"Unrecognised cursor type '{s}'.");
+                throw new ArgumentException($"Unrecognized cursor type '{s}'.");
         }
 
         private static IPlatformHandle GetCursor(StandardCursorType type)

+ 1 - 3
src/Avalonia.Input/DataObject.cs

@@ -1,6 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
+using System.Collections.Generic;
 
 namespace Avalonia.Input
 {

+ 2 - 2
src/Avalonia.Input/DragDrop.cs

@@ -1,6 +1,6 @@
 using System.Threading.Tasks;
-using Avalonia.Interactivity;
 using Avalonia.Input.Platform;
+using Avalonia.Interactivity;
 
 namespace Avalonia.Input
 {
@@ -51,4 +51,4 @@ namespace Avalonia.Input
             return src?.DoDragDrop(data, allowedEffects) ?? Task.FromResult(DragDropEffects.None);
         }
     }
-}
+}

+ 0 - 1
src/Avalonia.Input/ICustomKeyboardNavigation.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
 
 namespace Avalonia.Input
 {

+ 2 - 2
src/Avalonia.Input/IDataObject.cs

@@ -14,7 +14,7 @@ namespace Avalonia.Input
         IEnumerable<string> GetDataFormats();
 
         /// <summary>
-        /// Checks wether a given DataFormat is present in this object
+        /// Checks whether a given DataFormat is present in this object
         /// <seealso cref="DataFormats"/>
         /// </summary>
         bool Contains(string dataFormat);
@@ -36,4 +36,4 @@ namespace Avalonia.Input
         /// </summary>
         object Get(string dataFormat);
     }
-}
+}

+ 4 - 4
src/Avalonia.Input/IInputManager.cs

@@ -7,24 +7,24 @@ using Avalonia.Input.Raw;
 namespace Avalonia.Input
 {
     /// <summary>
-    /// Recieves input from the windowing subsystem and dispatches it to interested parties
+    /// Receives input from the windowing subsystem and dispatches it to interested parties
     /// for processing.
     /// </summary>
     public interface IInputManager
     {
         /// <summary>
-        /// Gets an observable that notifies on each input event recieved before
+        /// Gets an observable that notifies on each input event received before
         /// <see cref="Process"/>.
         /// </summary>
         IObservable<RawInputEventArgs> PreProcess { get; }
 
         /// <summary>
-        /// Gets an observable that notifies on each input event recieved.
+        /// Gets an observable that notifies on each input event received.
         /// </summary>
         IObservable<RawInputEventArgs> Process { get; }
 
         /// <summary>
-        /// Gets an observable that notifies on each input event recieved after
+        /// Gets an observable that notifies on each input event received after
         /// <see cref="Process"/>.
         /// </summary>
         IObservable<RawInputEventArgs> PostProcess { get; }

+ 0 - 2
src/Avalonia.Input/IPointerDevice.cs

@@ -1,8 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using Avalonia.Interactivity;
 using Avalonia.VisualTree;
 
 namespace Avalonia.Input

+ 0 - 1
src/Avalonia.Input/InputElement.cs

@@ -5,7 +5,6 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using Avalonia.Interactivity;
-using Avalonia.Rendering;
 using Avalonia.VisualTree;
 
 namespace Avalonia.Input

+ 2 - 2
src/Avalonia.Input/InputExtensions.cs

@@ -1,10 +1,10 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using Avalonia.VisualTree;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Avalonia.VisualTree;
 
 namespace Avalonia.Input
 {
@@ -48,4 +48,4 @@ namespace Avalonia.Input
                    element.IsEnabledCore;
         }
     }
-}
+}

+ 1 - 1
src/Avalonia.Input/InputManager.cs

@@ -8,7 +8,7 @@ using Avalonia.Input.Raw;
 namespace Avalonia.Input
 {
     /// <summary>
-    /// Recieves input from the windowing subsystem and dispatches it to interested parties
+    /// Receives input from the windowing subsystem and dispatches it to interested parties
     /// for processing.
     /// </summary>
     public class InputManager : IInputManager

+ 1 - 1
src/Avalonia.Input/Key.cs

@@ -77,7 +77,7 @@ namespace Avalonia.Input
         KanaMode = 9,
 
         /// <summary>
-        /// The IME Janja mode key.
+        /// The IME Junja mode key.
         /// </summary>
         JunjaMode = 10,
 

+ 0 - 5
src/Avalonia.Input/KeyBinding.cs

@@ -1,8 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using System.Windows.Input;
 
 namespace Avalonia.Input

+ 0 - 1
src/Avalonia.Input/KeyEventArgs.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
 using Avalonia.Interactivity;
 
 namespace Avalonia.Input

+ 2 - 4
src/Avalonia.Input/KeyGesture.cs

@@ -1,8 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Avalonia.Input
 {
@@ -45,7 +43,7 @@ namespace Avalonia.Input
         public InputModifiers Modifiers { get; set; }
 
         
-        static readonly Dictionary<string, Key> KeySynonims = new Dictionary<string, Key>
+        static readonly Dictionary<string, Key> KeySynonyms = new Dictionary<string, Key>
         {
             {"+", Key.OemPlus },
             {"-", Key.OemMinus},
@@ -56,7 +54,7 @@ namespace Avalonia.Input
         static Key ParseKey(string key)
         {
             Key rv;
-            if (KeySynonims.TryGetValue(key.ToLower(), out rv))
+            if (KeySynonyms.TryGetValue(key.ToLower(), out rv))
                 return rv;
             return (Key)Enum.Parse(typeof (Key), key, true);
         }

+ 0 - 3
src/Avalonia.Input/KeyboardDevice.cs

@@ -1,10 +1,7 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
 using System.ComponentModel;
-using System.Linq;
-using System.Reactive.Linq;
 using System.Runtime.CompilerServices;
 using Avalonia.Input.Raw;
 using Avalonia.Interactivity;

+ 1 - 1
src/Avalonia.Input/KeyboardNavigationHandler.cs

@@ -46,7 +46,7 @@ namespace Avalonia.Input
         /// <param name="direction">The navigation direction.</param>
         /// <returns>
         /// The next element in the specified direction, or null if <paramref name="element"/>
-        /// was the last in therequested direction.
+        /// was the last in the requested direction.
         /// </returns>
         public static IInputElement GetNext(
             IInputElement element,

+ 2 - 3
src/Avalonia.Input/MouseDevice.cs

@@ -2,7 +2,6 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using System.Reactive.Linq;
 using Avalonia.Input.Raw;
@@ -27,7 +26,7 @@ namespace Avalonia.Input
         /// Gets the control that is currently capturing by the mouse, if any.
         /// </summary>
         /// <remarks>
-        /// When an element captures the mouse, it recieves mouse input whether the cursor is 
+        /// When an element captures the mouse, it receives mouse input whether the cursor is 
         /// within the control's bounds or not. To set the mouse capture, call the 
         /// <see cref="Capture"/> method.
         /// </remarks>
@@ -66,7 +65,7 @@ namespace Avalonia.Input
         /// </summary>
         /// <param name="control">The control.</param>
         /// <remarks>
-        /// When an element captures the mouse, it recieves mouse input whether the cursor is 
+        /// When an element captures the mouse, it receives mouse input whether the cursor is 
         /// within the control's bounds or not. The current mouse capture control is exposed
         /// by the <see cref="Captured"/> property.
         /// </remarks>

+ 0 - 4
src/Avalonia.Input/Platform/IClipboard.cs

@@ -1,10 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 
 namespace Avalonia.Input.Platform

+ 1 - 6
src/Avalonia.Input/Platform/IPlatformDragSource.cs

@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using Avalonia.Input;
-using Avalonia.Interactivity;
+using System.Threading.Tasks;
 
 namespace Avalonia.Input.Platform
 {

+ 0 - 5
src/Avalonia.Input/Platform/IStandardCursorFactory.cs

@@ -1,11 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Avalonia.Input;
 
 namespace Avalonia.Platform

+ 0 - 1
src/Avalonia.Input/PointerEventArgs.cs

@@ -1,7 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
 using Avalonia.Interactivity;
 using Avalonia.VisualTree;
 

+ 2 - 4
src/Avalonia.Input/Raw/IDragDropDevice.cs

@@ -1,8 +1,6 @@
-using Avalonia.Input;
-
-namespace Avalonia.Input.Raw
+namespace Avalonia.Input.Raw
 {
     public interface IDragDropDevice : IInputDevice
     {
     }
-}
+}

+ 2 - 6
src/Avalonia.Input/Raw/RawDragEvent.cs

@@ -1,8 +1,4 @@
-using System;
-using Avalonia.Input;
-using Avalonia.Input.Raw;
-
-namespace Avalonia.Input.Raw
+namespace Avalonia.Input.Raw
 {
     public class RawDragEvent : RawInputEventArgs
     {
@@ -25,4 +21,4 @@ namespace Avalonia.Input.Raw
             Modifiers = modifiers;
         }
     }
-}
+}

+ 0 - 2
src/Avalonia.Input/Raw/RawMouseWheelEventArgs.cs

@@ -1,8 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using Avalonia.Layout;
 
 namespace Avalonia.Input.Raw
 {

+ 0 - 5
src/Avalonia.Input/TextInputEventArgs.cs

@@ -1,11 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Avalonia.Interactivity;
 
 namespace Avalonia.Input

+ 1 - 1
src/Avalonia.Interactivity/IInteractive.cs

@@ -11,7 +11,7 @@ namespace Avalonia.Interactivity
     public interface IInteractive
     {
         /// <summary>
-        /// Gets the interactive parent of the object for bubbling and tunnelling events.
+        /// Gets the interactive parent of the object for bubbling and tunneling events.
         /// </summary>
         IInteractive InteractiveParent { get; }
 

+ 1 - 1
src/Avalonia.Interactivity/Interactive.cs

@@ -19,7 +19,7 @@ namespace Avalonia.Interactivity
         private Dictionary<RoutedEvent, List<EventSubscription>> _eventHandlers;
 
         /// <summary>
-        /// Gets the interactive parent of the object for bubbling and tunnelling events.
+        /// Gets the interactive parent of the object for bubbling and tunneling events.
         /// </summary>
         IInteractive IInteractive.InteractiveParent => ((IVisual)this).VisualParent as IInteractive;
 

+ 0 - 2
src/Avalonia.Layout/ILayoutManager.cs

@@ -1,8 +1,6 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
-using System;
-using System.Reactive;
 
 namespace Avalonia.Layout
 {

+ 2 - 3
src/Avalonia.Layout/LayoutManager.cs

@@ -3,7 +3,6 @@
 
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using Avalonia.Logging;
 using Avalonia.Threading;
 
@@ -100,7 +99,7 @@ namespace Avalonia.Layout
                 }
 
                 stopwatch.Stop();
-                Logger.Information(LogArea.Layout, this, "Layout pass finised in {Time}", stopwatch.Elapsed);
+                Logger.Information(LogArea.Layout, this, "Layout pass finished in {Time}", stopwatch.Elapsed);
             }
 
             _queued = false;
@@ -150,7 +149,7 @@ namespace Avalonia.Layout
             // Controls closest to the visual root need to be arranged first. We don't try to store
             // ordered invalidation lists, instead we traverse the tree upwards, measuring the
             // controls closest to the root first. This has been shown by benchmarks to be the
-            // fastest and most memory-efficent algorithm.
+            // fastest and most memory-efficient algorithm.
             if (control.VisualParent is ILayoutable parent)
             {
                 Measure(parent);

+ 2 - 3
src/Avalonia.Layout/Layoutable.cs

@@ -4,7 +4,6 @@
 using System;
 using System.Linq;
 using Avalonia.Logging;
-using Avalonia.Platform;
 using Avalonia.VisualTree;
 
 namespace Avalonia.Layout
@@ -654,7 +653,7 @@ namespace Avalonia.Layout
         }
 
         /// <summary>
-        /// Tests whether any of a <see cref="Rect"/>'s properties incude nagative values,
+        /// Tests whether any of a <see cref="Rect"/>'s properties include negative values,
         /// a NaN or Infinity.
         /// </summary>
         /// <param name="rect">The rect.</param>
@@ -669,7 +668,7 @@ namespace Avalonia.Layout
         }
 
         /// <summary>
-        /// Tests whether any of a <see cref="Size"/>'s properties incude nagative values,
+        /// Tests whether any of a <see cref="Size"/>'s properties include negative values,
         /// a NaN or Infinity.
         /// </summary>
         /// <param name="size">The size.</param>

+ 1 - 2
src/Avalonia.Logging.Serilog/SerilogExtensions.cs

@@ -1,5 +1,4 @@
-using System;
-using Avalonia.Controls;
+using Avalonia.Controls;
 using Serilog;
 using SerilogLevel = Serilog.Events.LogEventLevel;
 

+ 0 - 3
src/Avalonia.ReactiveUI/AppBuilderExtensions.cs

@@ -4,9 +4,6 @@
 using Avalonia.Controls;
 using Avalonia.Threading;
 using ReactiveUI;
-using System;
-using System.Reactive.Concurrency;
-using System.Threading;
 
 namespace Avalonia
 {

+ 0 - 4
src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs

@@ -1,8 +1,4 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Avalonia.Remote.Protocol
 {

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