private void AddText(TextNodeInfo textNodeInfo)
        {
            var visual = AddImage(_textBrushes[textNodeInfo.BrushIndex], textNodeInfo, textNodeInfo.Opacity, textNodeInfo.ApplyDistanceEffects);

            if (!textNodeInfo.ApplyDistanceEffects)
            {
                visual.Opacity = textNodeInfo.Opacity;
            }
        }
        private void LoadNodes()
        {
            _nodes = new List <NodeInfo>(200);

            //
            // First, add in the text nodes
            //

            CanvasTextFormat monthsTextFormat = new CanvasTextFormat();

            monthsTextFormat.FontFamily = "Segoe UI";
            monthsTextFormat.FontSize   = 120.0f;

            CanvasTextFormat textFormat = new CanvasTextFormat();

            textFormat.FontFamily = "Segoe UI";
            textFormat.FontSize   = 36.0f;

            _textNodes = new TextNodeInfo[]
            {
                new TextNodeInfo("JAN    FEB    MAR    APR    MAY", monthsTextFormat, new Vector2(1920, 200), new Vector3(0.0f, -2500.0f, -3000.0f), 10.0f, 0.1f, false),
                new TextNodeInfo("LAYOUT", textFormat, new Vector2(180, 52), new Vector3(76.1f, 131.2f, -100.0f), 1.0f, 0.5f, true),
                new TextNodeInfo("ADVENTURE", textFormat, new Vector2(240, 52), new Vector3(-259.8f, -101.1f, -500.0f), 0.8f, 0.5f, true),
                new TextNodeInfo("ENGINEERING", textFormat, new Vector2(280, 52), new Vector3(509.8f, 51.1f, -322.2f), 0.8f, 0.5f, true),
            };

            _nodes.AddRange(_textNodes);



            //
            // Add some extra random images to fill up the world
            //


            //
            // Set the min/max of the images to limits how far in each directly we randomly place each image.
            //
            // Note: for z-position, the items are also randomly placed on one of several planes.  It looks
            // a little too scattered/chaotic otherwise.
            //

            var min = new Vector3(_tracker.MinPosition.X, -_rootContainer.Size.Y * 0.65f, -25);
            var max = new Vector3(_tracker.MaxPosition.X, _rootContainer.Size.Y * 0.65f, 25);


            NodeManager.Instance.MinPosition = min;
            NodeManager.Instance.MaxPosition = max;

            NodeManager.Instance.MinScale = 0.05f;
            NodeManager.Instance.MaxScale = 0.4f;

            for (int i = _nodes.Count; i < _nodes.Capacity; i++)
            {
                _nodes.Add(NodeManager.Instance.GenerateRandomImageNode(_thumbnails.Count));
            }


            //
            // Sort the list by z, then x, then y so that they draw in the correct order.
            //

            _nodes.Sort();
        }