Browse Source

Merge remote-tracking branch 'origin/master' into scenegraph

scenegraph-after-breakage
Steven Kirk 9 years ago
parent
commit
aec3c51590
  1. 24
      src/Avalonia.Controls/AppBuilderBase.cs
  2. 7
      src/Avalonia.Layout/Layoutable.cs
  3. 53
      tests/Avalonia.Layout.UnitTests/MeasureTests.cs

24
src/Avalonia.Controls/AppBuilderBase.cs

@ -55,8 +55,7 @@ namespace Avalonia.Controls
public Action<TAppBuilder> AfterSetupCallback { get; private set; } = builder => { };
/// <summary>
/// Gets or sets a method to call before <see cref="Start{TMainWindow}"/> is called on the
/// <see cref="Application"/>.
/// Gets or sets a method to call before Startis called on the <see cref="Application"/>.
/// </summary>
public Action<TAppBuilder> BeforeStartCallback { get; private set; } = builder => { };
@ -94,8 +93,7 @@ namespace Avalonia.Controls
protected TAppBuilder Self => (TAppBuilder) this;
/// <summary>
/// Registers a callback to call before <see cref="Start{TMainWindow}"/> is called on the
/// <see cref="Application"/>.
/// Registers a callback to call before Start is called on the <see cref="Application"/>.
/// </summary>
/// <param name="callback">The callback.</param>
/// <returns>An <typeparamref name="TAppBuilder"/> instance.</returns>
@ -129,6 +127,24 @@ namespace Avalonia.Controls
Instance.Run(window);
}
/// <summary>
/// Starts the application with the provided instance of <typeparamref name="TMainWindow"/>.
/// </summary>
/// <typeparam name="TMainWindow">The window type.</typeparam>
/// <param name="mainWindow">Instance of type TMainWindow to use when starting the app</param>
/// <param name="dataContextProvider">A delegate that will be called to create a data context for the window (optional).</param>
public void Start<TMainWindow>(TMainWindow mainWindow, Func<object> dataContextProvider = null)
where TMainWindow : Window
{
Setup();
BeforeStartCallback(Self);
if (dataContextProvider != null)
mainWindow.DataContext = dataContextProvider();
mainWindow.Show();
Instance.Run(mainWindow);
}
/// <summary>
/// Sets up the platform-specific services for the application, but does not run it.
/// </summary>

7
src/Avalonia.Layout/Layoutable.cs

@ -456,10 +456,9 @@ namespace Avalonia.Layout
ApplyTemplate();
var constrained = LayoutHelper
.ApplyLayoutConstraints(this, availableSize)
.Deflate(margin);
var constrained = LayoutHelper.ApplyLayoutConstraints(
this,
availableSize.Deflate(margin));
var measured = MeasureOverride(constrained);
var width = measured.Width;

53
tests/Avalonia.Layout.UnitTests/MeasureTests.cs

@ -100,5 +100,58 @@ namespace Avalonia.Layout.UnitTests
Assert.Equal(0, target.DesiredSize.Height);
}
[Fact]
public void Margin_Should_Affect_AvailableSize()
{
MeasureTest target;
var outer = new Decorator
{
Width = 100,
Height = 100,
Child = target = new MeasureTest
{
Margin = new Thickness(10),
}
};
outer.Measure(Size.Infinity);
Assert.Equal(new Size(80, 80), target.AvailableSize);
}
[Fact]
public void Margin_Should_Be_Applied_Before_Width_Height()
{
MeasureTest target;
var outer = new Decorator
{
Width = 100,
Height = 100,
Child = target = new MeasureTest
{
Width = 80,
Height = 80,
Margin = new Thickness(10),
}
};
outer.Measure(Size.Infinity);
Assert.Equal(new Size(80, 80), target.AvailableSize);
}
class MeasureTest : Control
{
public Size? AvailableSize { get; private set; }
protected override Size MeasureOverride(Size availableSize)
{
AvailableSize = availableSize;
return availableSize;
}
}
}
}

Loading…
Cancel
Save