Browse Source

Started converting PPs to direct PPs.

Steven Kirk 10 years ago
parent
commit
5c4d2b84a3

+ 4 - 10
src/Perspex.Controls/Control.cs

@@ -2,14 +2,12 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
-using System.Linq;
 using System.Reactive.Linq;
 using Perspex.Collections;
 using Perspex.Controls.Primitives;
 using Perspex.Controls.Templates;
 using Perspex.Input;
 using Perspex.Interactivity;
-using Perspex.LogicalTree;
 using Perspex.Rendering;
 using Perspex.Styling;
 
@@ -46,7 +44,7 @@ namespace Perspex.Controls
         /// Defines the <see cref="Parent"/> property.
         /// </summary>
         public static readonly PerspexProperty<IControl> ParentProperty =
-            PerspexProperty.Register<Control, IControl>(nameof(Parent));
+            PerspexProperty.RegisterDirect<Control, IControl>(nameof(Parent), o => o.Parent);
 
         /// <summary>
         /// Defines the <see cref="Tag"/> property.
@@ -66,16 +64,12 @@ namespace Perspex.Controls
         public static readonly RoutedEvent<RequestBringIntoViewEventArgs> RequestBringIntoViewEvent =
             RoutedEvent.Register<Control, RequestBringIntoViewEventArgs>("RequestBringIntoView", RoutingStrategies.Bubble);
 
+        private IControl _parent;
         private readonly Classes _classes = new Classes();
-
         private DataTemplates _dataTemplates;
-
         private IControl _focusAdorner;
-
         private string _id;
-
         private IPerspexList<ILogical> _logicalChildren;
-
         private Styles _styles;
 
         /// <summary>
@@ -227,7 +221,7 @@ namespace Perspex.Controls
         /// <summary>
         /// Gets the control's logical parent.
         /// </summary>
-        public IControl Parent => GetValue(ParentProperty);
+        public IControl Parent => _parent;
 
         /// <summary>
         /// Gets or sets a user-defined object attached to the control.
@@ -297,7 +291,7 @@ namespace Perspex.Controls
                 throw new InvalidOperationException("The Control already has a parent.");
             }
 
-            SetValue(ParentProperty, parent);
+            SetAndRaise(ParentProperty, ref _parent, (IControl)parent);
         }
 
         /// <summary>

+ 16 - 4
src/Perspex.Controls/ItemsControl.cs

@@ -33,7 +33,7 @@ namespace Perspex.Controls
         /// Defines the <see cref="Items"/> property.
         /// </summary>
         public static readonly PerspexProperty<IEnumerable> ItemsProperty =
-            PerspexProperty.Register<ItemsControl, IEnumerable>(nameof(Items));
+            PerspexProperty.RegisterDirect<ItemsControl, IEnumerable>(nameof(Items), o => o.Items, (o, v) => o.Items = v);
 
         /// <summary>
         /// Defines the <see cref="ItemsPanel"/> property.
@@ -47,6 +47,7 @@ namespace Perspex.Controls
         public static readonly PerspexProperty<IMemberSelector> MemberSelectorProperty =
             PerspexProperty.Register<ItemsControl, IMemberSelector>(nameof(MemberSelector));
 
+        private IEnumerable _items;
         private IItemContainerGenerator _itemContainerGenerator;
 
         /// <summary>
@@ -63,7 +64,6 @@ namespace Perspex.Controls
         public ItemsControl()
         {
             Classes.Add(":empty");
-            Items = new PerspexList<object>();
         }
 
         /// <summary>
@@ -87,8 +87,20 @@ namespace Perspex.Controls
         /// </summary>
         public IEnumerable Items
         {
-            get { return GetValue(ItemsProperty); }
-            set { SetValue(ItemsProperty, value); }
+            get
+            {
+                if (_items == null)
+                {
+                    _items = new PerspexList<object>();
+                }
+
+                return _items;
+            }
+
+            set
+            {
+                SetAndRaise(ItemsProperty, ref _items, value);
+            }
         }
 
         /// <summary>

+ 4 - 4
src/Perspex.Controls/Presenters/DeckPresenter.cs

@@ -23,7 +23,7 @@ namespace Perspex.Controls.Presenters
         /// Defines the <see cref="Items"/> property.
         /// </summary>
         public static readonly PerspexProperty<IEnumerable> ItemsProperty =
-            ItemsControl.ItemsProperty.AddOwner<DeckPresenter>();
+            ItemsControl.ItemsProperty.AddOwner<DeckPresenter>(o => o.Items, (o, v) => o.Items = v);
 
         /// <summary>
         /// Defines the <see cref="ItemsPanel"/> property.
@@ -49,8 +49,8 @@ namespace Perspex.Controls.Presenters
         public static readonly PerspexProperty<IPageTransition> TransitionProperty =
             Deck.TransitionProperty.AddOwner<DeckPresenter>();
 
+        private IEnumerable _items;
         private bool _createdPanel;
-
         private IItemContainerGenerator _generator;
 
         /// <summary>
@@ -94,8 +94,8 @@ namespace Perspex.Controls.Presenters
         /// </summary>
         public IEnumerable Items
         {
-            get { return GetValue(ItemsProperty); }
-            set { SetValue(ItemsProperty, value); }
+            get { return _items; }
+            set { SetAndRaise(ItemsProperty, ref _items, value); }
         }
 
         /// <summary>

+ 4 - 4
src/Perspex.Controls/Presenters/ItemsPresenter.cs

@@ -20,7 +20,7 @@ namespace Perspex.Controls.Presenters
         /// Defines the <see cref="Items"/> property.
         /// </summary>
         public static readonly PerspexProperty<IEnumerable> ItemsProperty =
-            ItemsControl.ItemsProperty.AddOwner<ItemsPresenter>();
+            ItemsControl.ItemsProperty.AddOwner<ItemsPresenter>(o => o.Items, (o, v) => o.Items = v);
 
         /// <summary>
         /// Defines the <see cref="ItemsPanel"/> property.
@@ -34,8 +34,8 @@ namespace Perspex.Controls.Presenters
         public static readonly PerspexProperty<IMemberSelector> MemberSelectorProperty =
             ItemsControl.MemberSelectorProperty.AddOwner<ItemsPresenter>();
 
+        private IEnumerable _items;
         private bool _createdPanel;
-
         private IItemContainerGenerator _generator;
 
         /// <summary>
@@ -89,8 +89,8 @@ namespace Perspex.Controls.Presenters
         /// </summary>
         public IEnumerable Items
         {
-            get { return GetValue(ItemsProperty); }
-            set { SetValue(ItemsProperty, value); }
+            get { return _items; }
+            set { SetAndRaise(ItemsProperty, ref _items, value); }
         }
 
         /// <summary>

+ 9 - 6
src/Perspex.Input/InputElement.cs

@@ -42,7 +42,7 @@ namespace Perspex.Input
         /// Defines the <see cref="IsFocused"/> property.
         /// </summary>
         public static readonly PerspexProperty<bool> IsFocusedProperty =
-            PerspexProperty.Register<InputElement, bool>("IsFocused");
+            PerspexProperty.RegisterDirect<InputElement, bool>("IsFocused", o => o.IsFocused);
 
         /// <summary>
         /// Defines the <see cref="IsHitTestVisible"/> property.
@@ -54,7 +54,7 @@ namespace Perspex.Input
         /// Defines the <see cref="IsPointerOver"/> property.
         /// </summary>
         public static readonly PerspexProperty<bool> IsPointerOverProperty =
-            PerspexProperty.Register<InputElement, bool>("IsPointerOver");
+            PerspexProperty.RegisterDirect<InputElement, bool>("IsPointerOver", o => o.IsPointerOver);
 
         /// <summary>
         /// Defines the <see cref="GotFocus"/> event.
@@ -136,6 +136,9 @@ namespace Perspex.Input
                 "PointerWheelChanged",
                 RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
 
+        private bool _isFocused;
+        private bool _isPointerOver;
+
         /// <summary>
         /// Initializes static members of the <see cref="InputElement"/> class.
         /// </summary>
@@ -287,8 +290,8 @@ namespace Perspex.Input
         /// </summary>
         public bool IsFocused
         {
-            get { return GetValue(IsFocusedProperty); }
-            private set { SetValue(IsFocusedProperty, value); }
+            get { return _isFocused; }
+            private set { SetAndRaise(IsFocusedProperty, ref _isFocused, value); }
         }
 
         /// <summary>
@@ -305,8 +308,8 @@ namespace Perspex.Input
         /// </summary>
         public bool IsPointerOver
         {
-            get { return GetValue(IsPointerOverProperty); }
-            internal set { SetValue(IsPointerOverProperty, value); }
+            get { return _isPointerOver; }
+            internal set { SetAndRaise(IsPointerOverProperty, ref _isPointerOver, value); }
         }
 
         /// <summary>

+ 0 - 2
src/Perspex.Interactivity/Interactive.cs

@@ -4,11 +4,9 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Reactive;
 using System.Reactive.Disposables;
 using System.Reactive.Linq;
 using Perspex.Layout;
-using Perspex.VisualTree;
 
 namespace Perspex.Interactivity
 {

+ 8 - 3
src/Perspex.SceneGraph/Visual.cs

@@ -32,7 +32,7 @@ namespace Perspex
         /// Defines the <see cref="Bounds"/> property.
         /// </summary>
         public static readonly PerspexProperty<Rect> BoundsProperty =
-            PerspexProperty.Register<Visual, Rect>(nameof(Bounds));
+            PerspexProperty.RegisterDirect<Visual, Rect>(nameof(Bounds), o => o.Bounds);
 
         /// <summary>
         /// Defines the <see cref="ClipToBounds"/> property.
@@ -75,6 +75,11 @@ namespace Perspex
         /// </summary>
         private readonly PerspexList<IVisual> _visualChildren;
 
+        /// <summary>
+        /// The visual's bounds relative to its parent.
+        /// </summary>
+        private Rect _bounds;
+
         /// <summary>
         /// Holds the parent of the visual.
         /// </summary>
@@ -121,8 +126,8 @@ namespace Perspex
         /// </summary>
         public Rect Bounds
         {
-            get { return GetValue(BoundsProperty); }
-            protected set { SetValue(BoundsProperty, value); }
+            get { return _bounds; }
+            protected set { SetAndRaise(BoundsProperty, ref _bounds, value); }
         }
 
         /// <summary>