public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // Get the cell colour that is associated with the cell symbol object type aMetaData.CellBoxColor = RampedColourByBoxNumber(ColorForCell(aCell), aMetaData.CellBoxCount, aCell.Address, aAddress); // Draw actual cell SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } }
public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // We paint the cell a different shade of red, depending on it's length. The larger the heap cell, // then the more intense the colour. Shorter length cells are de-emphasised. aMetaData.CellBoxColor = RampedColourByIntensityRange(KBiggestCellColour, aCell.Length, iCellLengthSmallest, iCellLengthLongest); // Draw actual cell SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } }
public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // Get the cell colour that is associated with the cell symbol object type. This // makes oldest cells very light and youngest cells very dark. We really want // it the other way around... aMetaData.CellBoxColor = CellColour(aCell); // Draw actual cell SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } }
public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // Get the cell colour that is associated with the cell symbol object type aMetaData.CellBoxColor = ColourForHeapCell(aCell); // Draw actual cell SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } // If first box, we show the number of inwards links to the cell HeapCell.TRegion region = aMetaData.Region; if (region == HeapCell.TRegion.EHeader && aMetaData.CellBoxIndex == 0) { boxRect.Inflate(KShrinkSize, KShrinkSize); // Draw the fill Color lightenColor = ColourUtils.LightenMore(aMetaData.CellBoxColor); using (SolidBrush brush = new SolidBrush(lightenColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } lightenColor = ColourUtils.Lighten(lightenColor); using (Pen borderPen = new Pen(lightenColor, KHeaderBoxWidth)) { aGraphics.DrawRectangle(borderPen, boxRect.Rectangle); } // Draw the count int count = aCell.RelationshipManager.ReferencedBy.Count; if (count == 0) { PaintBoxedText(count.ToString(), aGraphics, Color.Red, boxRect); } else { PaintBoxedTextWithLuminanceHandling(count.ToString(), aGraphics, Color.Black, boxRect); } } }
public void PaintContentBorder(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); aGraphics.DrawRectangle(Pens.Black, boxRect.Rectangle); // If we're drawing the header, we can decorate the header with an // additional line. HeapCell.TRegion region = aCell.RegionForAddress(aAddress); if (region == HeapCell.TRegion.EHeader) { Point linePosStart = boxRect.TopLeft; linePosStart.X += KHeaderBoxLineCornerOffset; Point linePosEnd = boxRect.TopLeft; linePosEnd.Y += KHeaderBoxLineCornerOffset; // aGraphics.DrawLine(Pens.Black, linePosStart, linePosEnd); } }
public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // Get the cell colour to use and also the region associated with // the cell address. HeapCell.TRegion region; aMetaData.CellBoxColor = RampedCellFillColourByRegion(aCell, aMetaData.CellBoxCount, aAddress, out region); // Draw actual cell SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } using (Pen borderPen = new Pen(Color.Black)) { aGraphics.DrawRectangle(borderPen, boxRect.Rectangle); } }
public void PaintContent(Graphics aGraphics, HeapCellMetaData aMetaData, HeapCell aCell, uint aAddress, Point aPosition, Size aBoxSize, Size aPaddingSize) { // Get the cell colour that is associated with the cell symbol object type aMetaData.CellBoxColor = ColourForHeapCell(aCell); SymRect boxRect = new SymRect(aPosition, aBoxSize); boxRect.HalfOffset(aPaddingSize); // Draw actual cell using (SolidBrush brush = new SolidBrush(aMetaData.CellBoxColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } HeapCell.TRegion region = aMetaData.Region; if (region == HeapCell.TRegion.EHeader && aMetaData.CellBoxIndex == 0) { // If first box, we show the number of inwards links to the cell boxRect.Inflate(KShrinkSize, KShrinkSize); // Draw the fill Color lightenColor = ColourUtils.Lighten(aMetaData.CellBoxColor); using (SolidBrush brush = new SolidBrush(lightenColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } lightenColor = ColourUtils.Lighten(lightenColor); using (Pen borderPen = new Pen(lightenColor, KHeaderBoxWidth)) { aGraphics.DrawRectangle(borderPen, boxRect.Rectangle); } // Draw the count PaintBoxedTextWithLuminanceHandling(aCell.RelationshipManager.EmbeddedReferencesTo.Count.ToString(), aGraphics, Color.Black, boxRect); } else { // If we're in the payload section, then get the raw item corresponding to the address we are drawing RawItem rawItem = aMetaData.RawItem; if (rawItem != null && rawItem.Tag != null && rawItem.Tag is HeapLib.Relationships.RelationshipInfo) { RelationshipInfo relInfo = (RelationshipInfo)rawItem.Tag; // Make the box a bit smaller boxRect.Inflate(KShrinkSize, KShrinkSize); // Draw the fill Color lightenColor = ColourUtils.Lighten(aMetaData.CellBoxColor); using (SolidBrush brush = new SolidBrush(lightenColor)) { aGraphics.FillRectangle(brush, boxRect.Rectangle); } lightenColor = ColourUtils.Lighten(lightenColor); using (Pen borderPen = new Pen(lightenColor, KHeaderBoxWidth)) { aGraphics.DrawRectangle(borderPen, boxRect.Rectangle); // If it's a clean reference, then draw a diagonal line to decorate the box reference if (relInfo.IsCleanLink) { Point linePosStart = boxRect.TopLeft; linePosStart.X += KHeaderBoxLineCornerOffset; Point linePosEnd = boxRect.TopLeft; linePosEnd.Y += KHeaderBoxLineCornerOffset; // aGraphics.DrawLine(borderPen, linePosStart, linePosEnd); } } } } }