private void SetAnimateMark( SuperTree.TreeNode treeNode ) { if( !_animatingMarks.Contains( treeNode ) ) { _animatingMarks.Add( treeNode ); _treeInfo.BeginAnimating( treeNode, new Rectangle( _leftSep - 3, 0, 14, 19 ) ); } }
private void UnsetAnimateMark( SuperTree.TreeNode treeNode ) { if( _animatingMarks.Contains( treeNode ) ) { _animatingMarks.Remove( treeNode ); _treeInfo.EndAnimating( treeNode ); } }
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 ) ); } }
private void SetAnimateGlow( SuperTree.TreeNode treeNode ) { if( !_animatingGlows.Contains( treeNode ) ) { _animatingGlows.Add( treeNode ); _treeInfo.BeginAnimating( treeNode, new Rectangle( Point.Empty, _treeInfo.GetNodeSize( treeNode ) ) ); } }
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 ); } } } }
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 ); } } }
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; }
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; }
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 ); } } }
public void RenderTreeNodeRow( Graphics g, SuperTree.TreeNode treeNode, Rectangle nodeRectangle, Rectangle rowRectangle ) { }
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 ); } } }
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 ); } }
public void PreRender( SuperTree.ITreeInfo treeInfo, SuperTree.ITreeEvents treeEvents ) { _treeInfo = treeInfo; _treeEvents = treeEvents; }
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 ); }
public int MeasureIndent( Graphics g, SuperTree.ITreeInfo treeInfo, SuperTree.TreeNode node ) { return node.Depth * _indent; }