Browse Source

Fix memory leak with drawing to bitmap.

pull/19/head
Tomas Linhart 14 years ago
parent
commit
bd4cbef68c
  1. 22
      src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs
  2. 9
      src/AddIns/Analysis/CodeQuality/Src/Utility/Helper.cs

22
src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs

@ -11,6 +11,8 @@ using System.Windows.Controls; @@ -11,6 +11,8 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Interop;
using PointF = System.Drawing.PointF;
namespace ICSharpCode.CodeQualityAnalysis.Controls
{
@ -138,6 +140,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -138,6 +140,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
var maxHeight = ((int) viewport.Height / CellHeight) + 1;
// how many cells we will draw
// sometimes happens when half of cell is hidden in scroll so text isnt drawn
// so lets drawn one more cell
var cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1;
var cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1;
@ -155,11 +159,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -155,11 +159,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
backgroundColor.Freeze();
drawingContext.DrawRectangle(backgroundColor, null, background);
// sometimes happens when half of cell is hidden in scroll so text isnt drawn
// so lets drawn one more cell
// cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1;
// cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1;
var currentXLine = (currentCell.X - scaledOffsetX) * CellWidth - offsetDiffX;
var currentYLine = (currentCell.Y - scaledOffsetY) * CellHeight - offsetDiffY;
@ -264,16 +263,19 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -264,16 +263,19 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
var spanWidth = (CellWidth - size.Width) / 2;
var spanHeight = (CellHeight - size.Height) / 2;
g.DrawString(text, fontOjb, System.Drawing.Brushes.Black, new System.Drawing.PointF(spanWidth, spanHeight));
g.DrawString(text, fontOjb, System.Drawing.Brushes.Black, new PointF(spanWidth, spanHeight));
g.Dispose();
var img = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height));
var bitmap = bmp.GetHbitmap();
var img = Imaging.CreateBitmapSourceFromHBitmap(bitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height));
img.Freeze();
imgs.Add(text, img);
Helper.DeleteObject(bitmap);
return img;
}

9
src/AddIns/Analysis/CodeQuality/Src/Utility/Helper.cs

@ -4,15 +4,20 @@ @@ -4,15 +4,20 @@
using System;
using System.Windows;
using System.Windows.Media;
using ICSharpCode.TreeView;
using System.Runtime.InteropServices;
namespace ICSharpCode.CodeQualityAnalysis
namespace ICSharpCode.CodeQualityAnalysis.Utility
{
/// <summary>
/// Description of Helper.
/// </summary>
public static class Helper
{
public static void FillTree(ICSharpCode.TreeView.SharpTreeView tree,Module module)
[DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
public static void FillTree(SharpTreeView tree, Module module)
{
var root = CreateTreeItem(module);
tree.Root = root;

Loading…
Cancel
Save