Example #1
0
        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);
            }
        }
Example #2
0
        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)));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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)));
        }
Example #7
0
        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)));
        }