Browse Source

Merge branch 'master' into grokys/designer-updates

pull/2307/head
Steven Kirk 8 years ago
parent
commit
1f25265170
  1. 17
      .github/PULL_REQUEST_TEMPLATE.md
  2. 12
      src/Avalonia.Base/AvaloniaPropertyRegistry.cs
  3. 2
      src/Avalonia.Base/Data/Core/BindingExpression.cs
  4. 20
      src/Avalonia.Base/Utilities/AvaloniaResourcesIndex.cs
  5. 2
      src/Avalonia.Controls/AutoCompleteBox.cs
  6. 2
      src/Avalonia.Controls/MenuItem.cs
  7. 2
      src/Avalonia.Controls/PixelPointEventArgs.cs
  8. 2
      src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
  9. 13
      src/Avalonia.Controls/Shapes/Shape.cs
  10. 18
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  11. 2
      src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs
  12. 3
      src/Avalonia.X11/X11Screens.cs
  13. 16
      src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
  14. 5
      tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs

17
.github/PULL_REQUEST_TEMPLATE.md

@ -1,18 +1,18 @@
## What does the pull request do?
<!--- Give a bit of background on the PR here, together with links to with related issues etc. -->
Give a bit of background on the PR here, together with links to with related issues etc.
## What is the current behavior?
<!--- If the PR is a fix, describe the current incorrect behavior, otherwise delete this section. -->
If the PR is a fix, describe the current incorrect behavior, otherwise delete this section.
## What is the updated/expected behavior with this PR?
<!--- Describe how to test the PR. -->
Describe how to test the PR.
## How was the solution implemented (if it's not obvious)?
<!--- Include any information that might be of use to a reviewer here. -->
Include any information that might be of use to a reviewer here.
## Checklist
@ -21,12 +21,11 @@ Include any information that might be of use to a reviewer here.
- [ ] Consider submitting a PR to https://github.com/AvaloniaUI/Avaloniaui.net with user documentation
## Breaking changes
<!--- List any breaking changes here. When the PR is merged please add an entry to https://github.com/AvaloniaUI/Avalonia/wiki/Breaking-Changes -->
List any breaking changes here. When the PR is merged please add an entry to https://github.com/AvaloniaUI/Avalonia/wiki/Breaking-Changes
## Fixed issues
If the pull request fixes issue(s) list them like this:
<!--- If the pull request fixes issue(s) list them like this:
Fixes #123
Fixes #456
Fixes #456
-->

12
src/Avalonia.Base/AvaloniaPropertyRegistry.cs

@ -13,8 +13,8 @@ namespace Avalonia
/// </summary>
public class AvaloniaPropertyRegistry
{
private readonly List<AvaloniaProperty> _properties =
new List<AvaloniaProperty>();
private readonly Dictionary<int, AvaloniaProperty> _properties =
new Dictionary<int, AvaloniaProperty>();
private readonly Dictionary<Type, Dictionary<int, AvaloniaProperty>> _registered =
new Dictionary<Type, Dictionary<int, AvaloniaProperty>>();
private readonly Dictionary<Type, Dictionary<int, AvaloniaProperty>> _attached =
@ -33,7 +33,7 @@ namespace Avalonia
/// <summary>
/// Gets a list of all registered properties.
/// </summary>
internal IReadOnlyList<AvaloniaProperty> Properties => _properties;
internal IReadOnlyCollection<AvaloniaProperty> Properties => _properties.Values;
/// <summary>
/// Gets all non-attached <see cref="AvaloniaProperty"/>s registered on a type.
@ -220,7 +220,11 @@ namespace Avalonia
inner.Add(property.Id, property);
}
_properties.Add(property);
if (!_properties.ContainsKey(property.Id))
{
_properties.Add(property.Id, property);
}
_registeredCache.Clear();
}

2
src/Avalonia.Base/Data/Core/BindingExpression.cs

@ -177,7 +177,7 @@ namespace Avalonia.Data.Core
protected override void Subscribed(IObserver<object> observer, bool first)
{
if (!first && _value != null && _value.TryGetTarget(out var val) == true)
if (!first && _value != null && _value.TryGetTarget(out var val))
{
observer.OnNext(val);
}

20
src/Avalonia.Base/Utilities/AvaloniaResourcesIndex.cs

@ -4,6 +4,8 @@ using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Xml.Linq;
using System.Linq;
// ReSharper disable AssignNullToNotNullAttribute
@ -19,10 +21,20 @@ namespace Avalonia.Utilities
{
var ver = new BinaryReader(stream).ReadInt32();
if (ver > LastKnownVersion)
throw new Exception("Resources index format version is not known");
var index = (AvaloniaResourcesIndex)
new DataContractSerializer(typeof(AvaloniaResourcesIndex)).ReadObject(stream);
return index.Entries;
throw new Exception("Resources index format version is not known");
var assetDoc = XDocument.Load(stream);
XNamespace assetNs = assetDoc.Root.Attribute("xmlns").Value;
List<AvaloniaResourcesIndexEntry> entries=
(from entry in assetDoc.Root.Element(assetNs + "Entries").Elements(assetNs + "AvaloniaResourcesIndexEntry")
select new AvaloniaResourcesIndexEntry
{
Path = entry.Element(assetNs + "Path").Value,
Offset = int.Parse(entry.Element(assetNs + "Offset").Value),
Size = int.Parse(entry.Element(assetNs + "Size").Value)
}).ToList();
return entries;
}
public static void Write(Stream stream, List<AvaloniaResourcesIndexEntry> entries)

2
src/Avalonia.Controls/AutoCompleteBox.cs

@ -1893,7 +1893,7 @@ namespace Avalonia.Controls
{
bool callTextChanged = false;
// Update the Text dependency property
if ((userInitiated == null || userInitiated == true) && Text != value)
if ((userInitiated ?? true) && Text != value)
{
_ignoreTextPropertyChange++;
Text = value;

2
src/Avalonia.Controls/MenuItem.cs

@ -421,7 +421,7 @@ namespace Avalonia.Controls
}
/// <summary>
/// Called when the <see cref="Header"/> property changes.
/// Called when the <see cref="HeaderedSelectingItemsControl.Header"/> property changes.
/// </summary>
/// <param name="e">The property change event.</param>
private void HeaderChanged(AvaloniaPropertyChangedEventArgs e)

2
src/Avalonia.Controls/PixelPointEventArgs.cs

@ -13,7 +13,7 @@ namespace Avalonia.Controls
/// <summary>
/// Initializes a new instance of the <see cref="PixelPointEventArgs"/> class.
/// </summary>
/// <param name="point">The <see cref=PixelPoint"/> data.</param>
/// <param name="point">The <see cref="PixelPoint"/> data.</param>
public PixelPointEventArgs(PixelPoint point)
{
Point = point;

2
src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs

@ -285,7 +285,7 @@ namespace Avalonia.Controls.Presenters
{
scrollable.InvalidateScroll = () => UpdateFromScrollable(scrollable);
if (scrollable.IsLogicalScrollEnabled == true)
if (scrollable.IsLogicalScrollEnabled)
{
_logicalScrollSubscription = new CompositeDisposable(
this.GetObservable(CanHorizontallyScrollProperty)

13
src/Avalonia.Controls/Shapes/Shape.cs

@ -20,7 +20,10 @@ namespace Avalonia.Controls.Shapes
AvaloniaProperty.Register<Shape, IBrush>(nameof(Stroke));
public static readonly StyledProperty<AvaloniaList<double>> StrokeDashArrayProperty =
AvaloniaProperty.Register<Shape, AvaloniaList<double>>("StrokeDashArray");
AvaloniaProperty.Register<Shape, AvaloniaList<double>>(nameof(StrokeDashArray));
public static readonly StyledProperty<double> StrokeDashOffsetProperty =
AvaloniaProperty.Register<Shape, double>(nameof(StrokeDashOffset));
public static readonly StyledProperty<double> StrokeThicknessProperty =
AvaloniaProperty.Register<Shape, double>(nameof(StrokeThickness));
@ -103,6 +106,12 @@ namespace Avalonia.Controls.Shapes
get { return GetValue(StrokeDashArrayProperty); }
set { SetValue(StrokeDashArrayProperty, value); }
}
public double StrokeDashOffset
{
get { return GetValue(StrokeDashOffsetProperty); }
set { SetValue(StrokeDashOffsetProperty, value); }
}
public double StrokeThickness
{
@ -124,7 +133,7 @@ namespace Avalonia.Controls.Shapes
if (geometry != null)
{
var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray),
var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray, StrokeDashOffset),
StrokeDashCap, StrokeStartLineCap, StrokeEndLineCap, StrokeJoin);
context.DrawGeometry(Fill, pen, geometry);
}

18
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@ -255,15 +255,19 @@ namespace Avalonia.Rendering
}
var (scene, updated) = UpdateRenderLayersAndConsumeSceneIfNeeded(GetContext);
using (scene)
{
var overlay = DrawDirtyRects || DrawFps;
if (DrawDirtyRects)
_dirtyRectsDisplay.Tick();
if (overlay)
RenderOverlay(scene.Item, GetContext());
if (updated || forceComposite || overlay)
RenderComposite(scene.Item, GetContext());
if (scene?.Item != null)
{
var overlay = DrawDirtyRects || DrawFps;
if (DrawDirtyRects)
_dirtyRectsDisplay.Tick();
if (overlay)
RenderOverlay(scene.Item, GetContext());
if (updated || forceComposite || overlay)
RenderComposite(scene.Item, GetContext());
}
}
}
finally

2
src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

@ -236,7 +236,7 @@ namespace Avalonia.Rendering.SceneGraph
{
foreach (var operation in DrawOperations)
{
if (operation.Item.HitTest(p) == true)
if (operation.Item.HitTest(p))
{
return true;
}

3
src/Avalonia.X11/X11Screens.cs

@ -218,6 +218,7 @@ namespace Avalonia.X11
class X11Screen
{
private const int FullHDWidth = 1920;
public bool Primary { get; }
public string Name { get; set; }
public PixelRect Bounds { get; set; }
@ -247,6 +248,6 @@ namespace Avalonia.X11
}
public static double GuessPixelDensity(double pixelWidth, double mmWidth)
=> Math.Max(1, Math.Round(pixelWidth / mmWidth * 25.4 / 96));
=> pixelWidth <= FullHDWidth ? 1 : Math.Max(1, Math.Round(pixelWidth / mmWidth * 25.4 / 96));
}
}

16
src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs

@ -13,6 +13,8 @@ using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Xml.Linq;
using System.Linq;
namespace Avalonia.Markup.Xaml
{
@ -240,15 +242,21 @@ namespace Avalonia.Markup.Xaml
{
using (var xamlInfoStream = assetLocator.Open(xamlInfoUri))
{
var xamlInfo = (AvaloniaResourceXamlInfo)s_xamlInfoSerializer.ReadObject(xamlInfoStream);
if (xamlInfo.ClassToResourcePathIndex.TryGetValue(typeName, out var rv) == true)
var assetDoc = XDocument.Load(xamlInfoStream);
XNamespace assetNs = assetDoc.Root.Attribute("xmlns").Value;
XNamespace arrayNs = "http://schemas.microsoft.com/2003/10/Serialization/Arrays";
Dictionary<string,string> xamlInfo =
assetDoc.Root.Element(assetNs + "ClassToResourcePathIndex").Elements(arrayNs + "KeyValueOfstringstring")
.ToDictionary(entry =>entry.Element(arrayNs + "Key").Value,
entry => entry.Element(arrayNs + "Value").Value);
if (xamlInfo.TryGetValue(typeName, out var rv))
{
yield return new Uri($"avares://{asm}{rv}");
yield break;
}
}
}
}
yield return new Uri("resm:" + typeName + ".xaml?assembly=" + asm);
yield return new Uri("resm:" + typeName + ".paml?assembly=" + asm);

5
tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs

@ -27,6 +27,7 @@ namespace Avalonia.Base.UnitTests
var property = new AttachedProperty<int>("test", typeof(object), metadata, true);
registry.Register(typeof(object), property);
registry.RegisterAttached(typeof(AvaloniaPropertyRegistryTests), property);
property.AddOwner<Class4>();
Assert.Equal(1, registry.Properties.Count);
}
@ -150,5 +151,9 @@ namespace Avalonia.Base.UnitTests
private class AttachedOwner2 : AttachedOwner
{
}
private class Class4 : AvaloniaObject
{
}
}
}

Loading…
Cancel
Save