Browse Source

More things rendering, more tests passing...

pull/4/head
Steven Kirk 12 years ago
parent
commit
2398387740
  1. 1
      Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
  2. 18
      Perspex.Controls.UnitTests/TemplatedControlTests.cs
  3. 23
      Perspex.Controls.UnitTests/TestTemplatedControl.cs
  4. 11
      Perspex.Controls/ContentPresenter.cs
  5. 2
      Perspex.Controls/Control.cs
  6. 6
      Perspex.Controls/ItemsPresenter.cs
  7. 11
      Perspex.Controls/TemplatedControl.cs
  8. 3
      Perspex.Controls/TreeViewItem.cs
  9. 7
      Perspex.SceneGraph.UnitTests/TestVisual.cs
  10. 11
      Perspex.SceneGraph/Visual.cs
  11. 8
      Perspex.Windows/Window.cs

1
Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj

@ -60,6 +60,7 @@
<Compile Include="ControlTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TemplatedControlTests.cs" />
<Compile Include="TestTemplatedControl.cs" />
<Compile Include="TestRoot.cs" />
</ItemGroup>
<ItemGroup>

18
Perspex.Controls.UnitTests/TemplatedControlTests.cs

@ -4,6 +4,7 @@
// </copyright>
// -----------------------------------------------------------------------
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Perspex.Controls.UnitTests
{
using System;
@ -96,5 +97,22 @@ namespace Perspex.Controls.UnitTests
Assert.AreEqual(target, templateResult.TemplatedParent);
}
[TestMethod]
public void OnTemplateApplied_Is_Called()
{
var target = new TestTemplatedControl
{
Template = new ControlTemplate(_ =>
{
return new Control();
})
};
var children = ((IVisual)target).VisualChildren.ToArray();
Assert.IsTrue(target.OnTemplateAppliedCalled);
}
}
}

23
Perspex.Controls.UnitTests/TestTemplatedControl.cs

@ -0,0 +1,23 @@
// -----------------------------------------------------------------------
// <copyright file="TestRoot.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Controls.UnitTests
{
using System;
using Moq;
using Perspex.Layout;
using Perspex.Rendering;
internal class TestTemplatedControl : TemplatedControl
{
public bool OnTemplateAppliedCalled { get; private set; }
protected override void OnTemplateApplied()
{
this.OnTemplateAppliedCalled = true;
}
}
}

11
Perspex.Controls/ContentPresenter.cs

@ -32,7 +32,7 @@ namespace Perspex.Controls
set { this.SetValue(ContentProperty, value); }
}
protected override IEnumerable<Visual> CreateVisualChildren()
protected override void CreateVisualChildren()
{
object content = this.Content;
@ -62,11 +62,7 @@ namespace Perspex.Controls
}
result.TemplatedParent = null;
return Enumerable.Repeat(result, 1);
}
else
{
return Enumerable.Empty<Visual>();
this.AddVisualChild(result);
}
}
@ -142,9 +138,8 @@ namespace Perspex.Controls
private void ContentChanged(Tuple<object, object> content)
{
var children = this.CreateVisualChildren();
this.ClearVisualChildren();
this.AddVisualChildren(children);
this.CreateVisualChildren();
this.InvalidateMeasure();
}
}

2
Perspex.Controls/Control.cs

@ -213,7 +213,7 @@ namespace Perspex.Controls
// TODO: This needs to traverse the logical tree, not the visual.
foreach (var i in this.GetVisualAncestors().OfType<Control>())
{
foreach (DataTemplate dt in control.DataTemplates.Reverse())
foreach (DataTemplate dt in i.DataTemplates.Reverse())
{
if (dt.Match(content))
{

6
Perspex.Controls/ItemsPresenter.cs

@ -52,9 +52,10 @@ namespace Perspex.Controls
return finalSize;
}
protected override IEnumerable<Visual> CreateVisualChildren()
protected override void CreateVisualChildren()
{
return Enumerable.Repeat(this.GetPanel(), 1);
this.AddVisualChild(this.GetPanel());
this.ItemsChanged(Tuple.Create(default(IEnumerable), this.Items));
}
private Control CreateItemControl(object item)
@ -111,7 +112,6 @@ namespace Perspex.Controls
if (this.panel == null && this.ItemsPanel != null)
{
this.panel = this.ItemsPanel.Build();
this.ItemsChanged(Tuple.Create(default(IEnumerable), this.Items));
}
return this.panel;

11
Perspex.Controls/TemplatedControl.cs

@ -13,7 +13,7 @@ namespace Perspex.Controls
using Perspex.Styling;
using Splat;
public class TemplatedControl : Control, IVisual, ITemplatedControl
public class TemplatedControl : Control, ITemplatedControl
{
public static readonly PerspexProperty<ControlTemplate> TemplateProperty =
PerspexProperty.Register<TemplatedControl, ControlTemplate>("Template");
@ -56,7 +56,7 @@ namespace Perspex.Controls
return new Size();
}
protected override IEnumerable<Visual> CreateVisualChildren()
protected override void CreateVisualChildren()
{
if (this.Template != null)
{
@ -66,11 +66,8 @@ namespace Perspex.Controls
this.GetHashCode()));
var child = this.Template.Build(this);
return Enumerable.Repeat(child, 1);
}
else
{
return Enumerable.Empty<Visual>();
this.AddVisualChild(child);
this.OnTemplateApplied();
}
}

3
Perspex.Controls/TreeViewItem.cs

@ -6,6 +6,7 @@
namespace Perspex.Controls
{
using System;
using System.Linq;
public class TreeViewItem : HeaderedItemsControl
@ -44,7 +45,7 @@ namespace Perspex.Controls
}
else
{
return null;
throw new InvalidOperationException("TreeViewItem must be added to TreeView.");
}
}

7
Perspex.SceneGraph.UnitTests/TestVisual.cs

@ -50,9 +50,12 @@ namespace Perspex.SceneGraph.UnitTests
this.ClearVisualChildren();
}
protected override IEnumerable<Visual> CreateVisualChildren()
protected override void CreateVisualChildren()
{
return this.InitialChildren ?? Enumerable.Empty<Visual>();
if (this.InitialChildren != null)
{
this.AddVisualChildren(this.InitialChildren);
}
}
protected override void OnVisualParentChanged(Visual oldParent)

11
Perspex.SceneGraph/Visual.cs

@ -109,12 +109,16 @@ namespace Perspex
protected void AddVisualChild(Visual visual)
{
Contract.Requires<ArgumentNullException>(visual != null);
this.EnsureVisualChildrenCreated();
this.visualChildren.Add(visual);
}
protected void AddVisualChildren(IEnumerable<Visual> visuals)
{
Contract.Requires<ArgumentNullException>(visuals != null);
this.EnsureVisualChildrenCreated();
this.visualChildren.AddRange(visuals);
}
@ -133,6 +137,8 @@ namespace Perspex
protected void RemoveVisualChild(Visual visual)
{
Contract.Requires<ArgumentNullException>(visual != null);
this.EnsureVisualChildrenCreated();
this.visualChildren.Remove(visual);
}
@ -142,9 +148,8 @@ namespace Perspex
this.bounds = bounds;
}
protected virtual IEnumerable<Visual> CreateVisualChildren()
protected virtual void CreateVisualChildren()
{
return Enumerable.Empty<Visual>();
}
protected virtual void OnAttachedToVisualTree(IRenderRoot root)
@ -175,7 +180,7 @@ namespace Perspex
{
this.visualChildren = new PerspexList<Visual>();
this.visualChildren.CollectionChanged += VisualChildrenChanged;
this.visualChildren.AddRange(this.CreateVisualChildren());
this.CreateVisualChildren();
}
}

8
Perspex.Windows/Window.cs

@ -56,6 +56,7 @@ namespace Perspex.Windows
{
this.LayoutManager.ExecuteLayoutPass();
this.renderer.Render(this);
this.RenderManager.RenderFinished();
this.layoutPending = false;
});
});
@ -67,8 +68,11 @@ namespace Perspex.Windows
DispatcherPriority.Render,
() =>
{
this.renderer.Render(this);
this.RenderManager.RenderFinished();
if (!this.layoutPending)
{
this.renderer.Render(this);
this.RenderManager.RenderFinished();
}
});
});
}

Loading…
Cancel
Save