diff --git a/src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj b/src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj
index a27683de49..6e72118062 100644
--- a/src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj
+++ b/src/Gtk/Perspex.Cairo/Perspex.Cairo.csproj
@@ -80,6 +80,18 @@
{B09B78D8-9B26-48B0-9149-D64A2F120F3F}
Perspex.Base
+
+ {d2221c82-4a25-4583-9b43-d791e3f6820c}
+ Perspex.Controls
+
+
+ {62024b2d-53eb-4638-b26b-85eeaa54866e}
+ Perspex.Input
+
+
+ {6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}
+ Perspex.Interactivity
+
{42472427-4774-4C81-8AFF-9F27B8E31721}
Perspex.Layout
@@ -88,6 +100,10 @@
{EB582467-6ABB-43A1-B052-E981BA910E3A}
Perspex.SceneGraph
+
+ {f1baa01a-f176-4c6a-b39d-5b40bb1b148f}
+ Perspex.Styling
+
diff --git a/src/Shared/RenderHelpers/TileBrushImplHelper.cs b/src/Shared/RenderHelpers/TileBrushImplHelper.cs
index 663bc7ca9b..9b31b6c437 100644
--- a/src/Shared/RenderHelpers/TileBrushImplHelper.cs
+++ b/src/Shared/RenderHelpers/TileBrushImplHelper.cs
@@ -1,18 +1,14 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Perspex;
+// Copyright (c) The Perspex Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using Perspex.Controls;
using Perspex.Media;
using Perspex.Rendering;
-using Perspex.Layout;
-using Perspex.Media.Imaging;
-using Perspex.Platform;
-
+using Perspex.VisualTree;
namespace Perspex.RenderHelpers
{
- class TileBrushImplHelper
+ internal class TileBrushImplHelper
{
public Size IntermediateSize { get; }
public Rect DestinationRect { get; }
@@ -27,8 +23,7 @@ namespace Perspex.RenderHelpers
private readonly Rect _drawRect;
public bool IsValid { get; }
-
-
+
public TileBrushImplHelper(TileBrush brush, Size targetSize)
{
_imageBrush = brush as ImageBrush;
@@ -42,20 +37,19 @@ namespace Perspex.RenderHelpers
}
else if (_visualBrush != null)
{
- var visual = _visualBrush.Visual;
- if (visual == null)
- return;
- var layoutable = visual as ILayoutable;
+ var control = _visualBrush.Visual as IControl;
- if (layoutable != null)
+ if (control != null)
{
- if (layoutable.IsArrangeValid == false)
+ EnsureInitialized(control);
+
+ if (control.IsArrangeValid == false)
{
- layoutable.Measure(Size.Infinity);
- layoutable.Arrange(new Rect(layoutable.DesiredSize));
+ control.Measure(Size.Infinity);
+ control.Arrange(new Rect(control.DesiredSize));
}
- _imageSize = layoutable.Bounds.Size;
+ _imageSize = control.Bounds.Size;
IsValid = true;
}
}
@@ -118,8 +112,8 @@ namespace Perspex.RenderHelpers
///
- /// Calculates a _translate based on a , a source and destination
- /// rectangle and a _scale.
+ /// Calculates a translate based on a , a source and destination
+ /// rectangle and a scale.
///
/// The brush.
/// The source rectangle.
@@ -160,7 +154,6 @@ namespace Perspex.RenderHelpers
return new Vector(x, y);
}
-
public static Matrix CalculateIntermediateTransform(
TileMode tileMode,
Rect sourceRect,
@@ -189,13 +182,28 @@ namespace Perspex.RenderHelpers
return transform;
}
-
-
-
- static Size CalculateIntermediateSize(
+ private static Size CalculateIntermediateSize(
TileMode tileMode,
Size targetSize,
Size destinationSize) => tileMode == TileMode.None ? targetSize : destinationSize;
+ private static void EnsureInitialized(IControl control)
+ {
+ foreach (var i in control.GetSelfAndVisualDescendents())
+ {
+ var c = i as IControl;
+
+ if (c?.IsInitialized == false)
+ {
+ var init = c as ISupportInitialize;
+
+ if (init != null)
+ {
+ init.BeginInit();
+ init.EndInit();
+ }
+ }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/Windows/Perspex.Direct2D1/Media/TileBrushImpl.cs b/src/Windows/Perspex.Direct2D1/Media/TileBrushImpl.cs
index ab803e473e..2818e68627 100644
--- a/src/Windows/Perspex.Direct2D1/Media/TileBrushImpl.cs
+++ b/src/Windows/Perspex.Direct2D1/Media/TileBrushImpl.cs
@@ -1,13 +1,9 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
-using System;
-using Perspex.Layout;
using Perspex.Media;
-using SharpDX;
-using SharpDX.Direct2D1;
using Perspex.RenderHelpers;
-
+using SharpDX.Direct2D1;
namespace Perspex.Direct2D1.Media
{
@@ -38,7 +34,6 @@ namespace Perspex.Direct2D1.Media
}
}
-
private static BrushProperties GetBrushProperties(TileBrush brush, Rect destinationRect)
{
var tileTransform =
diff --git a/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj b/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
index c091a58c34..dc1e582bf1 100644
--- a/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
+++ b/src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
@@ -107,6 +107,18 @@
{B09B78D8-9B26-48B0-9149-D64A2F120F3F}
Perspex.Base
+
+ {d2221c82-4a25-4583-9b43-d791e3f6820c}
+ Perspex.Controls
+
+
+ {62024b2d-53eb-4638-b26b-85eeaa54866e}
+ Perspex.Input
+
+
+ {6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}
+ Perspex.Interactivity
+
{42472427-4774-4C81-8AFF-9F27B8E31721}
Perspex.Layout
@@ -115,6 +127,10 @@
{EB582467-6ABB-43A1-B052-E981BA910E3A}
Perspex.SceneGraph
+
+ {f1baa01a-f176-4c6a-b39d-5b40bb1b148f}
+ Perspex.Styling
+