Example #1
0
 private void SetAnimateMark( SuperTree.TreeNode treeNode )
 {
     if( !_animatingMarks.Contains( treeNode ) )
     {
         _animatingMarks.Add( treeNode );
         _treeInfo.BeginAnimating( treeNode, new Rectangle( _leftSep - 3, 0, 14, 19 ) );
     }
 }
Example #2
0
 private void UnsetAnimateMark( SuperTree.TreeNode treeNode )
 {
     if( _animatingMarks.Contains( treeNode ) )
     {
         _animatingMarks.Remove( treeNode );
         _treeInfo.EndAnimating( treeNode );
     }
 }
Example #3
0
            private void RenderRowBackground( Graphics g, SuperTree.TreeNode treeNode, Rectangle bounds )
            {
                VectorGraphics.Primitives.Container visualItem = CreateRowVisualItem( bounds, 1 );

                using( VectorGraphics.Renderers.GdiPlusRenderer renderer = CreateRenderer( g ) )
                {
                    renderer.Render( g, visualItem, VectorGraphics.Renderers.GdiPlusUtility.Convert.Rectangle( bounds ) );
                }
            }
Example #4
0
 private void SetAnimateGlow( SuperTree.TreeNode treeNode )
 {
     if( !_animatingGlows.Contains( treeNode ) )
     {
         _animatingGlows.Add( treeNode );
         _treeInfo.BeginAnimating( treeNode, new Rectangle( Point.Empty, _treeInfo.GetNodeSize( treeNode ) ) );
     }
 }
Example #5
0
            private void RenderExpansionMark( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode treeNode, Rectangle nodeBounds )
            {
                double p = treeInfo.ExpansionAnimationPosition( treeNode );
                Point ecCenter = new Point( nodeBounds.X + _leftSep + _ecSize / 2 + 1, nodeBounds.Y + (nodeBounds.Height - _ecSize) / 2 + _ecSize / 2 - 1 );

                Debug.Assert( p >= 0 && p <= 1 );

                using( WinFormsUtility.Drawing.GdiPlusEx.SaveState( g ) )
                {
                    g.SmoothingMode = SmoothingMode.HighQuality;

                    g.TranslateTransform( ecCenter.X, ecCenter.Y );
                    g.RotateTransform( (float) (45 * p) );

                    SuperTree.TreeNode mouseOver;
                    Point nodePosition;
                    bool over = false;

                    _treeInfo.GetMouseOver( out mouseOver, out nodePosition );

                    _markUpdates.DoneUpdate( treeNode );

                    double borderGlow = GetOverallFade();
                    double glow = GetMarkFade( treeNode );

                    if( borderGlow > 0 || glow > 0 )
                    {
                        using( VectorGraphics.Renderers.GdiPlusRenderer renderer = CreateRenderer( g ) )
                        {
                            VectorGraphics.Primitives.Container visualItem = CreateExpandCollapseItem( renderer, borderGlow, glow, over );

                            renderer.Render( g, visualItem );
                        }
                    }
                }
            }
Example #6
0
            private void RenderNode( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode treeNode, Rectangle nodeBounds, bool isSelected, double glow )
            {
                using( WinFormsUtility.Drawing.GdiPlusEx.SaveState( g ) )
                {
                    g.SmoothingMode = SmoothingMode.HighQuality;

                    using( VectorGraphics.Renderers.GdiPlusRenderer renderer = CreateRenderer( g ) )
                    {
                        VectorGraphics.Primitives.Container visualItem = CreateNodeItem( renderer, nodeBounds, isSelected, glow );

                        renderer.Render( g, visualItem );
                    }
                }
            }
Example #7
0
            private double GetNodeFade( SuperTree.TreeNode treeNode )
            {
                double fadeInGlow = 0, fadeOutGlow = 0;

                if( _nodeHistory.MouseOver == treeNode )
                {
                    double fadeInTime = _nodeHistory.GetTimeOver( treeNode ) ?? 0;

                    if( fadeInTime < _nodeFadeIn )
                    {
                        _nodeUpdates.NeedsUpdate( treeNode );
                        fadeInGlow = fadeInTime / _nodeFadeIn;
                    }
                    else
                    {
                        fadeInGlow = 1;
                    }
                }

                double fadeOutTime = _nodeHistory.GetLastOver( treeNode );

                if( fadeOutTime < _nodeFadeOut )
                {
                    _nodeUpdates.NeedsUpdate( treeNode );
                    fadeOutGlow = 1 - fadeOutTime / _nodeFadeOut;
                }

                double f = Math.Max( fadeInGlow, fadeOutGlow );

                f = Math.Min( Math.Max( f, 0 ), 1 );

                return f;
            }
Example #8
0
            private bool IsOverExpandCollapseMark( SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Point p )
            {
                if( treeNode.ChildNodes.Count == 0 )
                {
                    return false;
                }

                Rectangle ecBounds = new Rectangle( nodeRectangle.X + _leftSep, nodeRectangle.Y + (nodeRectangle.Height - _ecSize) / 2, _ecSize, _ecSize );

                return ecBounds.Contains( p ) && treeNode.ChildNodes.Count > 0;
            }
Example #9
0
            public void RenderTreeNode( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Rectangle clip )
            {
                UnsetAnimateGlow( treeNode );
                UnsetAnimateMark( treeNode );

                bool isLast = (treeNode.Index == treeNode.ParentCollection.Count - 1);
                Point ecCenter = new Point( nodeRectangle.X + _leftSep + _ecSize / 2, nodeRectangle.Y + (nodeRectangle.Height - _ecSize) / 2 + _ecSize / 2 );

                int textX = nodeRectangle.X + _ecSize + _leftSep + _ecSep;

                bool isSelected = treeInfo.IsSelected( treeNode );

                Rectangle bgRect = new Rectangle( nodeRectangle.X + _ecSize + _ecSep, nodeRectangle.Y, nodeRectangle.Width - _ecSize - 8, nodeRectangle.Height - 1 );
                SuperTree.TreeNode mouseOver;
                Point nodePosition;

                treeInfo.GetMouseOver( out mouseOver, out nodePosition );

                _nodeUpdates.DoneUpdate( treeNode );

                double nodeGlow = GetNodeFade( treeNode );

                if( isSelected || nodeGlow > 0 )
                {
                    RenderNode( g, treeInfo, treeNode, bgRect, isSelected, nodeGlow );
                }

                if( treeNode.Icon != null )
                {
                    Image image = GetImage( treeNode.Icon );
                    Rectangle imageRect = new Rectangle( textX, nodeRectangle.Y + 1, image.Width, image.Height );

                    if( clip.IntersectsWith( imageRect ) )
                    {
                        g.DrawImageUnscaled( image, imageRect );
                    }

                    textX += image.Width + _imageSep;
                }

                Color textColor;
                Rectangle textRect = new Rectangle( textX + 2, nodeRectangle.Y + _verticalSep, nodeRectangle.Right - textX - 5, nodeRectangle.Height );

                if( isSelected )
                {
                    if( _treeControl.Focused )
                    {
                        textColor = _colorTable.GlowTextColor;
                    }
                    else
                    {
                        textColor = _colorTable.TextColor;
                    }
                }
                else
                {
                    textColor = SystemColors.ControlText;
                }

                if( clip.IntersectsWith( textRect ) )
                {
                    WinFormsUtility.Drawing.GdiPlusEx.DrawString
                        ( g, treeNode.Text, treeNode.Font, textColor
                        , textRect
                        , WinFormsUtility.Drawing.GdiPlusEx.TextSplitting.SingleLineEllipsis, WinFormsUtility.Drawing.GdiPlusEx.Ampersands.Display );
                }

                Rectangle ecRect = new Rectangle( nodeRectangle.X, nodeRectangle.Y, 10, 10 );

                if( clip.IntersectsWith( ecRect ) )
                {
                    if( treeNode.ChildNodes.Count > 0 )
                    {
                        RenderExpansionMark( g, treeInfo, treeNode, nodeRectangle );
                    }
                }
            }
Example #10
0
 public void RenderTreeNodeRow( Graphics g, SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Rectangle rowRectangle )
 {
 }
Example #11
0
 public void ProcessDoubleClick( Graphics g, SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Point p, SuperTree.ITreeInfo treeInfo, SuperTree.ITreeEvents treeEvents )
 {
     if( !IsOverExpandCollapseMark( treeNode, nodeRectangle, p ) )
     {
         if( treeNode.ChildNodes.Count > 0 )
         {
             treeEvents.ToggleNodeExpansion( treeNode );
         }
         else
         {
             treeEvents.SelectNode( treeNode );
         }
     }
 }
Example #12
0
 public void ProcessClick( Graphics g, SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Point p, SuperTree.ITreeInfo treeInfo, SuperTree.ITreeEvents treeEvents )
 {
     if( IsOverExpandCollapseMark( treeNode, nodeRectangle, p ) )
     {
         if( !treeInfo.IsAnimating() )
         {
             treeEvents.ToggleNodeExpansion( treeNode );
         }
     }
     else
     {
         treeEvents.SelectNode( treeNode );
     }
 }
Example #13
0
 public void PreRender( SuperTree.ITreeInfo treeInfo, SuperTree.ITreeEvents treeEvents )
 {
     _treeInfo = treeInfo;
     _treeEvents = treeEvents;
 }
Example #14
0
            public Size MeasureTreeNode( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode treeNode, bool needsWidth, bool needsHeight )
            {
                string text = treeNode.Text.Replace( "&", "&&" );

                Size textSize = WinFormsUtility.Drawing.GdiPlusEx.MeasureString( g, text, treeNode.Font, int.MaxValue );
                Size ecSize;

                if( VisualStyleRenderer.IsSupported )
                {
                    VisualStyleElement vse = VisualStyleElement.TreeView.Glyph.Opened;
                    VisualStyleRenderer vsr = new VisualStyleRenderer( vse );

                    ecSize = vsr.GetPartSize( g, ThemeSizeType.Draw );
                }
                else
                {
                    ecSize = new Size( 9, 9 );
                }

                int width = (int) textSize.Width + _leftSep + _ecSep + ecSize.Width + _rightSep + 16;
                int height = (int) textSize.Height;

                if( treeNode.Icon != null )
                {
                    width += _imageSep + treeNode.Icon.Size.Width;
                    height = Math.Max( height, treeNode.Icon.Size.Height );
                }

                height += _verticalSep;

                return new Size( width, height );
            }
Example #15
0
 public int MeasureIndent( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode node )
 {
     return node.Depth * _indent;
 }