Version 6.0: Added WinUI

This commit is contained in:
Clemens 2021-06-14 21:41:37 +02:00
parent 4fc8594563
commit c215e1fb61
57 changed files with 287 additions and 90 deletions

View file

@ -2,8 +2,13 @@
// © 2021 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media.Animation;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media.Animation;
#endif
namespace MapControl
{

View file

@ -8,8 +8,13 @@ using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
#if WINUI
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Media.Imaging;
#else
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
#endif
namespace MapControl
{

View file

@ -3,8 +3,13 @@
// Licensed under the Microsoft Public License (Ms-PL)
using System;
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Input;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Input;
#endif
namespace MapControl
{

View file

@ -2,10 +2,15 @@
// © 2021 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
using Windows.Foundation;
#if WINUI
using Microsoft.UI;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
#else
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
#endif
namespace MapControl
{
@ -43,7 +48,11 @@ namespace MapControl
internal static readonly DependencyProperty CenterPointProperty = DependencyProperty.Register(
"CenterPoint", typeof(Windows.Foundation.Point), typeof(MapBase),
new PropertyMetadata(new Windows.Foundation.Point(), (o, e) => ((MapBase)o).CenterPointPropertyChanged((Windows.Foundation.Point)e.NewValue)));
new PropertyMetadata(new Windows.Foundation.Point(), (o, e) =>
{
var center = (Windows.Foundation.Point)e.NewValue;
((MapBase)o).CenterPointPropertyChanged(new Location(center.Y, center.X));
}));
public MapBase()
{
@ -52,26 +61,23 @@ namespace MapControl
style.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.White)));
Style = style;
SizeChanged += (s, e) =>
{
Clip = new RectangleGeometry
{
Rect = new Rect(0d, 0d, e.NewSize.Width, e.NewSize.Height)
};
SizeChanged += OnSizeChanged;
}
ResetTransformCenter();
UpdateTransform();
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
Clip = new RectangleGeometry
{
Rect = new Windows.Foundation.Rect(0d, 0d, e.NewSize.Width, e.NewSize.Height)
};
ResetTransformCenter();
UpdateTransform();
}
private void SetViewScale(double scale)
{
SetValue(ViewScaleProperty, scale);
}
private void CenterPointPropertyChanged(Windows.Foundation.Point center)
{
CenterPointPropertyChanged(new Location(center.Y, center.X));
}
}
}

View file

@ -2,8 +2,13 @@
// © 2021 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
#endif
namespace MapControl
{

View file

@ -4,9 +4,15 @@
using System;
using Windows.Foundation;
#if WINUI
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Shapes;
#else
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Shapes;
#endif
namespace MapControl
{

View file

@ -3,9 +3,15 @@
// Licensed under the Microsoft Public License (Ms-PL)
using Windows.System;
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Input;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
#endif
namespace MapControl
{

View file

@ -2,9 +2,16 @@
// © 2021 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
#if WINUI
using Microsoft.UI.Text;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using Windows.UI.Text;
#else
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
#endif
namespace MapControl
{

View file

@ -2,8 +2,13 @@
// © 2021 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
#endif
namespace MapControl
{
@ -36,7 +41,7 @@ namespace MapControl
}
else
{
// Workaround for missing property value inheritance in UWP.
// Workaround for missing property value inheritance.
// Loaded and Unloaded handlers set and clear the ParentMap property value.
element.Loaded += (s, e) => GetParentMap(element);

View file

@ -6,9 +6,15 @@ using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using Windows.Foundation;
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Shapes;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Shapes;
#endif
namespace MapControl
{
@ -19,7 +25,7 @@ namespace MapControl
MapPanel.InitMapElement(this);
}
#region Methods used only by derived classes MapPolyline and MapPolygon
#region Methods used only by derived classes MapPolyline and MapPolygon
protected void DataCollectionPropertyChanged(DependencyPropertyChangedEventArgs e)
{
@ -113,6 +119,6 @@ namespace MapControl
}
}
#endregion
#endregion
}
}

View file

@ -3,6 +3,11 @@
// Licensed under the Microsoft Public License (Ms-PL)
using System;
#if WINUI
using XamlMedia = Microsoft.UI.Xaml.Media;
#else
using XamlMedia = Windows.UI.Xaml.Media;
#endif
namespace MapControl
{
@ -28,9 +33,9 @@ namespace MapControl
OffsetY = offsetY;
}
public static implicit operator Windows.UI.Xaml.Media.Matrix(Matrix m)
public static implicit operator XamlMedia.Matrix(Matrix m)
{
return new Windows.UI.Xaml.Media.Matrix(m.M11, m.M12, m.M21, m.M22, m.OffsetX, m.OffsetY);
return new XamlMedia.Matrix(m.M11, m.M12, m.M21, m.M22, m.OffsetX, m.OffsetY);
}
public Point Transform(Point p)

View file

@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © 2021 Clemens Fischer")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("5.6.0")]
[assembly: AssemblyFileVersion("5.6.0")]
[assembly: AssemblyVersion("6.0.0")]
[assembly: AssemblyFileVersion("6.0.0")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]

View file

@ -3,10 +3,17 @@
// Licensed under the Microsoft Public License (Ms-PL)
using System;
#if WINUI
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Media.Imaging;
#else
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
#endif
namespace MapControl
{

View file

@ -6,8 +6,13 @@ using System;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Storage;
#if WINUI
using Microsoft.System;
using Microsoft.UI.Xaml.Media;
#else
using Windows.UI.Core;
using Windows.UI.Xaml.Media;
#endif
namespace MapControl
{
@ -60,7 +65,7 @@ namespace MapControl
{
var tcs = new TaskCompletionSource<object>();
await tile.Image.Dispatcher.RunAsync(CoreDispatcherPriority.Low, async () =>
async void callback()
{
try
{
@ -71,9 +76,18 @@ namespace MapControl
{
tcs.SetException(ex);
}
});
await tcs.Task.ConfigureAwait(false); // wait until image loading in the UI thread is completed
}
#if WINUI
if (!tile.Image.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, callback))
{
// not sure if this can ever happen, but just in case: reset tile.Pending and complete tcs
tile.Pending = true;
tcs.SetResult(null);
}
#else
_ = tile.Image.Dispatcher.RunAsync(CoreDispatcherPriority.Low, callback);
#endif
_ = await tcs.Task.ConfigureAwait(false); // wait until image loading in the UI thread is completed
}
}
}