Browse Source

TabStrip rendering again now at least.

pull/4/head
Steven Kirk 12 years ago
parent
commit
4a42a9e692
  1. 16
      Perspex.Controls.UnitTests/ContentControlTests.cs
  2. 11
      Perspex.Controls.UnitTests/ControlTests.cs
  3. 5
      Perspex.Controls/ItemsPresenter.cs
  4. 1
      Perspex.Direct2D1/Direct2D1Platform.cs
  5. 5
      Perspex.SceneGraph.UnitTests/TestVisual.cs
  6. 23
      Perspex.SceneGraph.UnitTests/VisualTests.cs
  7. 2
      Perspex.SceneGraph/Rendering/IRenderManager.cs
  8. 2
      Perspex.SceneGraph/Visual.cs
  9. 13
      Perspex.Windows/Window.cs
  10. 2
      TestApplication/Program.cs
  11. 4
      TestApplication/TestApplication.csproj

16
Perspex.Controls.UnitTests/ContentControlTests.cs

@ -144,14 +144,16 @@ namespace Perspex.Controls.UnitTests
private ControlTemplate GetTemplate() private ControlTemplate GetTemplate()
{ {
return new ControlTemplate(parent => return ControlTemplate.Create<ContentControl>(parent =>
{ {
Border border = new Border(); return new Border
border.Background = new Perspex.Media.SolidColorBrush(0xffffffff); {
ContentPresenter contentPresenter = new ContentPresenter(); Background = new Perspex.Media.SolidColorBrush(0xffffffff),
////contentPresenter[~ContentPresenter.ContentProperty] = parent[~ContentPresenter.ContentProperty]; Content = new ContentPresenter
border.Content = contentPresenter; {
return border; [~ContentPresenter.ContentProperty] = parent[~ContentControl.ContentProperty],
}
};
}); });
} }
} }

11
Perspex.Controls.UnitTests/ControlTests.cs

@ -6,11 +6,13 @@
namespace Perspex.Controls.UnitTests namespace Perspex.Controls.UnitTests
{ {
using System;
using System.Linq; using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq; using Moq;
using Perspex.Controls; using Perspex.Controls;
using Perspex.Layout; using Perspex.Layout;
using Perspex.Rendering;
using Perspex.Styling; using Perspex.Styling;
using Splat; using Splat;
@ -26,7 +28,7 @@ namespace Perspex.Controls.UnitTests
} }
[TestMethod] [TestMethod]
public void Adding_Control_To_ILayoutRoot_Should_Style_Control() public void Adding_Control_To_IRenderRoot_Should_Style_Control()
{ {
using (Locator.CurrentMutable.WithResolver()) using (Locator.CurrentMutable.WithResolver())
{ {
@ -68,7 +70,7 @@ namespace Perspex.Controls.UnitTests
} }
} }
private class TestRoot : Decorator, ILayoutRoot private class TestRoot : Decorator, ILayoutRoot, IRenderRoot
{ {
public Size ClientSize public Size ClientSize
{ {
@ -79,6 +81,11 @@ namespace Perspex.Controls.UnitTests
{ {
get { throw new System.NotImplementedException(); } get { throw new System.NotImplementedException(); }
} }
public IRenderManager RenderManager
{
get { throw new NotImplementedException(); }
}
} }
} }
} }

5
Perspex.Controls/ItemsPresenter.cs

@ -52,6 +52,11 @@ namespace Perspex.Controls
return finalSize; return finalSize;
} }
protected override IEnumerable<Visual> CreateVisualChildren()
{
return Enumerable.Repeat(this.GetPanel(), 1);
}
private Control CreateItemControl(object item) private Control CreateItemControl(object item)
{ {
ItemsControl i = this.TemplatedParent as ItemsControl; ItemsControl i = this.TemplatedParent as ItemsControl;

1
Perspex.Direct2D1/Direct2D1Platform.cs

@ -28,6 +28,7 @@ namespace Perspex.Direct2D1
{ {
var locator = Locator.CurrentMutable; var locator = Locator.CurrentMutable;
locator.Register(() => instance, typeof(IPlatformRenderInterface)); locator.Register(() => instance, typeof(IPlatformRenderInterface));
locator.Register(() => textService, typeof(ITextService));
locator.Register(() => d2d1Factory, typeof(SharpDX.Direct2D1.Factory)); locator.Register(() => d2d1Factory, typeof(SharpDX.Direct2D1.Factory));
locator.Register(() => dwFactory, typeof(SharpDX.DirectWrite.Factory)); locator.Register(() => dwFactory, typeof(SharpDX.DirectWrite.Factory));
locator.Register(() => imagingFactory, typeof(SharpDX.WIC.ImagingFactory)); locator.Register(() => imagingFactory, typeof(SharpDX.WIC.ImagingFactory));

5
Perspex.SceneGraph.UnitTests/TestVisual.cs

@ -22,6 +22,11 @@ namespace Perspex.SceneGraph.UnitTests
public class TestVisual : Visual public class TestVisual : Visual
{ {
public new PerspexObject InheritanceParent
{
get { return base.InheritanceParent; }
}
public Visual[] InitialChildren { get; set; } public Visual[] InitialChildren { get; set; }
public event EventHandler<ParamEventArgs<Visual>> VisualParentChangedCalled; public event EventHandler<ParamEventArgs<Visual>> VisualParentChangedCalled;

23
Perspex.SceneGraph.UnitTests/VisualTests.cs

@ -49,6 +49,17 @@ namespace Perspex.SceneGraph.UnitTests
Assert.AreEqual(target, child.GetVisualParent()); Assert.AreEqual(target, child.GetVisualParent());
} }
[TestMethod]
public void Added_Child_Should_Have_InheritanceParent_Set()
{
var target = new TestVisual();
var child = new TestVisual();
target.AddChild(child);
Assert.AreEqual(target, child.InheritanceParent);
}
[TestMethod] [TestMethod]
public void Removed_Child_Should_Have_VisualParent_Cleared() public void Removed_Child_Should_Have_VisualParent_Cleared()
{ {
@ -61,6 +72,18 @@ namespace Perspex.SceneGraph.UnitTests
Assert.IsNull(child.GetVisualParent()); Assert.IsNull(child.GetVisualParent());
} }
[TestMethod]
public void Removed_Child_Should_Have_InheritanceParent_Cleared()
{
var target = new TestVisual();
var child = new TestVisual();
target.AddChild(child);
target.RemoveChild(child);
Assert.IsNull(child.InheritanceParent);
}
[TestMethod] [TestMethod]
public void Clearing_Children_Should_Clear_VisualParent() public void Clearing_Children_Should_Clear_VisualParent()
{ {

2
Perspex.SceneGraph/Rendering/IRenderManager.cs

@ -14,5 +14,7 @@ namespace Perspex.Rendering
IObservable<Unit> RenderNeeded { get; } IObservable<Unit> RenderNeeded { get; }
void InvalidateRender(IVisual visual); void InvalidateRender(IVisual visual);
void RenderFinished();
} }
} }

2
Perspex.SceneGraph/Visual.cs

@ -214,6 +214,7 @@ namespace Perspex
case NotifyCollectionChangedAction.Add: case NotifyCollectionChangedAction.Add:
foreach (Visual v in e.NewItems) foreach (Visual v in e.NewItems)
{ {
v.InheritanceParent = this;
v.SetVisualParent(this); v.SetVisualParent(this);
} }
break; break;
@ -221,6 +222,7 @@ namespace Perspex
case NotifyCollectionChangedAction.Remove: case NotifyCollectionChangedAction.Remove:
foreach (Visual v in e.OldItems) foreach (Visual v in e.OldItems)
{ {
v.InheritanceParent = null;
v.SetVisualParent(null); v.SetVisualParent(null);
} }
break; break;

13
Perspex.Windows/Window.cs

@ -35,8 +35,6 @@ namespace Perspex.Windows
private bool layoutPending; private bool layoutPending;
private bool renderPending;
public Window() public Window()
{ {
IPlatformRenderInterface factory = Locator.Current.GetService<IPlatformRenderInterface>(); IPlatformRenderInterface factory = Locator.Current.GetService<IPlatformRenderInterface>();
@ -62,20 +60,15 @@ namespace Perspex.Windows
}); });
}); });
this.RenderManager.RenderNeeded.Where(_ => !layoutPending && !renderPending) this.RenderManager.RenderNeeded.Where(_ => !layoutPending)
.Subscribe(x => .Subscribe(x =>
{ {
this.renderPending = true;
WindowsDispatcher.CurrentDispatcher.BeginInvoke( WindowsDispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Render, DispatcherPriority.Render,
() => () =>
{ {
if (!this.layoutPending) this.renderer.Render(this);
{ this.RenderManager.RenderFinished();
this.renderer.Render(this);
}
this.renderPending = false;
}); });
}); });
} }

2
TestApplication/Program.cs

@ -218,6 +218,8 @@ namespace TestApplication
} }
}; };
System.Console.Write(Perspex.Diagnostics.Debug.PrintVisualTree(window));
////var treeView = window.FindControl<TreeView>("treeView"); ////var treeView = window.FindControl<TreeView>("treeView");
////var newTreeViewItemText = window.FindControl<TextBox>("newTreeViewItemText"); ////var newTreeViewItemText = window.FindControl<TextBox>("newTreeViewItemText");
////var addTreeViewItem = window.FindControl<Button>("addTreeViewItem"); ////var addTreeViewItem = window.FindControl<Button>("addTreeViewItem");

4
TestApplication/TestApplication.csproj

@ -98,6 +98,10 @@
<Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project> <Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project>
<Name>Perspex.Controls</Name> <Name>Perspex.Controls</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Perspex.Diagnostics\Perspex.Diagnostics.csproj">
<Project>{7062ae20-5dcc-4442-9645-8195bdece63e}</Project>
<Name>Perspex.Diagnostics</Name>
</ProjectReference>
<ProjectReference Include="..\Perspex.Direct2D1\Perspex.Direct2D1.csproj"> <ProjectReference Include="..\Perspex.Direct2D1\Perspex.Direct2D1.csproj">
<Project>{3e908f67-5543-4879-a1dc-08eace79b3cd}</Project> <Project>{3e908f67-5543-4879-a1dc-08eace79b3cd}</Project>
<Name>Perspex.Direct2D1</Name> <Name>Perspex.Direct2D1</Name>

Loading…
Cancel
Save