public void InvokeInfo(Point screenPosition, Point startScreenPosition, float scale, ISymbolCache symbolCache, Action <IWidget> widgetCallback) { var allWidgets = Layers.Select(l => l.Attribution).Where(a => a != null).Concat(Widgets).ToList(); // First check if a Widget is clicked. In the current design they are always on top of the map. var widget = WidgetTouch.GetWidget(screenPosition, startScreenPosition, scale, allWidgets); if (widget != null) { widgetCallback(widget); return; } if (Info == null) { return; } var eventArgs = InfoHelper.GetInfoEventArgs(Viewport, screenPosition, scale, InfoLayers, symbolCache); if (eventArgs != null) { Info?.Invoke(this, eventArgs); } }
public void IgnoringDisabledLayers() { // arrange var map = new Map(); map.Viewport.Resolution = 1; map.Viewport.Width = 10; map.Viewport.Height = 10; map.Viewport.Center = new Point(5, 5); var disabledLayer = new MemoryLayer { Name = "TestLayer", DataSource = new MemoryProvider(CreatePolygon(1, 3)), Enabled = false }; map.Layers.Add(disabledLayer); map.InfoLayers.Add(disabledLayer); var screenPositionHit = map.Viewport.WorldToScreen(2, 2); // act var argsHit = InfoHelper.GetInfoEventArgs(map.Viewport, screenPositionHit, map.InfoLayers, null); // assert; Assert.IsTrue(argsHit.Feature == null); Assert.IsTrue(argsHit.Layer == null); Assert.IsTrue(argsHit.WorldPosition.Equals(new Point(2, 2))); }
public bool InvokeInfo(Point screenPosition, Point startScreenPosition, float scale, ISymbolCache symbolCache, Action <IWidget, Point> widgetCallback, int numTaps) { var allWidgets = Layers.Select(l => l.Attribution).Where(a => a != null).Concat(Widgets).ToList(); // First check if a Widget is clicked. In the current design they are always on top of the map. var widget = WidgetTouch.GetWidget(screenPosition, startScreenPosition, scale, allWidgets); if (widget != null) { // TODO how should widgetCallback have a handled type thing? // Widgets should be iterated through rather than getting a single widget, // based on Z index and then called until handled = true; Ordered By highest Z widgetCallback(widget, new Point(screenPosition.X / scale, screenPosition.Y / scale)); return(true); } if (Info == null) { return(false); } var eventArgs = InfoHelper.GetInfoEventArgs(Viewport, screenPosition, scale, InfoLayers, symbolCache, numTaps); if (eventArgs != null) { // TODO Info items should be iterated through rather than getting a single item, // based on Z index and then called until handled = true; Ordered By highest Z Info?.Invoke(this, eventArgs); return(eventArgs.Handled); } return(false); }
public void InvokeInfo(Point screenPosition, ISymbolCache symbolCache) { if (Info == null) { return; } var eventArgs = InfoHelper.GetInfoEventArgs(Viewport, screenPosition, InfoLayers, symbolCache); if (eventArgs != null) { Info?.Invoke(this, eventArgs); } }
public void InvokeHover(Point screenPosition, ISymbolCache symbolCache) { if (Hover == null) { return; } if (HoverLayers.Count == 0) { return; } var hoverEventArgs = InfoHelper.GetInfoEventArgs(Viewport, screenPosition, HoverLayers, symbolCache); if (hoverEventArgs?.Feature != _previousHoverEventArgs?.Feature) // only notify when the feature changes { _previousHoverEventArgs = hoverEventArgs; Hover?.Invoke(this, hoverEventArgs); } }
public void IgnoringLayersOutOfScaleRange() { // arrange var map = new Map(); map.Viewport.Resolution = 1; map.Viewport.Width = 10; map.Viewport.Height = 10; map.Viewport.Center = new Point(5, 5); var layerBelowRange = new MemoryLayer { Name = "MaxVisibleLayer", DataSource = new MemoryProvider(CreatePolygon(1, 3)), MaxVisible = 0.9 }; var layerAboveRange = new MemoryLayer { Name = "MinVisibleLayer", DataSource = new MemoryProvider(CreatePolygon(1, 3)), MinVisible = 1.1 }; map.Layers.Add(layerBelowRange); map.Layers.Add(layerAboveRange); map.InfoLayers.Add(layerBelowRange); map.InfoLayers.Add(layerAboveRange); var screenPositionHit = map.Viewport.WorldToScreen(2, 2); var scale = 1; // act var argsHit = InfoHelper.GetInfoEventArgs(map.Viewport, screenPositionHit, scale, map.InfoLayers, null); // assert; Assert.IsTrue(argsHit.Feature == null); Assert.IsTrue(argsHit.Layer == null); Assert.IsTrue(argsHit.WorldPosition.Equals(new Point(2, 2))); }
public void TestInfo() { // arrange var map = new Map(); map.Viewport.Resolution = 1; map.Viewport.Width = 10; map.Viewport.Height = 10; map.Viewport.Center = new Point(5, 5); var layer = new MemoryLayer { Name = "TestLayer", DataSource = new MemoryProvider(CreatePolygon(1, 4)) }; map.Layers.Add(layer); map.InfoLayers.Add(layer); var screenPositionHit = map.Viewport.WorldToScreen(2, 2); var screenPositionMiss = map.Viewport.WorldToScreen(9, 9); var scale = 1; // act var argsHit = InfoHelper.GetInfoEventArgs(map.Viewport, screenPositionHit, scale, map.InfoLayers, null); var argsMis = InfoHelper.GetInfoEventArgs(map.Viewport, screenPositionMiss, scale, map.InfoLayers, null); // assert; Assert.IsTrue(argsHit.Feature.Geometry != null); Assert.IsTrue(argsHit.Layer.Name == "TestLayer"); Assert.IsTrue(argsHit.WorldPosition.Equals(new Point(2, 2))); // If not on feature still return args with world position. Assert.IsTrue(argsMis.Feature?.Geometry == null); Assert.IsTrue(argsMis.Layer == null); Assert.IsTrue(argsMis.WorldPosition.Equals(new Point(9, 9))); }