private void method_0(TreeItem treeItem_1)
		{
			foreach (TreeItem current in treeItem_1.method_4())
			{
				this.method_0(current);
			}
			if (treeItem_1.BaseObject != null)
			{
				if (!this.dictionary_0.ContainsKey(treeItem_1.BaseObject))
				{
					this.dictionary_0.Add(treeItem_1.BaseObject, treeItem_1);
				}
				else
				{
					Console.WriteLine(treeItem_1.BaseObject.ToString() + " multiple refs");
				}
			}
		}
		internal void method_3(TreeItem treeItem_1)
		{
			this.list_0.Add(treeItem_1);
			treeItem_1.treeItem_0 = this;
		}
		private static int smethod_0(TreeItem treeItem_1, TreeItem treeItem_2)
		{
			return treeItem_2.Size.CompareTo(treeItem_1.Size);
		}
		public void MakeCushionTreeMap(TreeItem root)
		{
			this.ClearHighlighting();
			this.ClearLabeling();
			this.treemapHost_0.MakeCushionTreeMap(root, base.ActualWidth, base.ActualHeight);
		}
		public void MakeCushionTreeMap(TreeItem root, double width, double height)
		{
			this.DesiredWidth = width;
			this.DesiredHeight = height;
			this.treeItem_0 = root;
			this.dictionary_0.Clear();
			this.method_0(this.treeItem_0);
			root.Bounds = new Rect
			{
				Width = width,
				Height = height
			};
			DrawingVisual drawingVisual = new DrawingVisual();
			this.drawingContext_0 = drawingVisual.RenderOpen();
			this.method_1(root, new TreeSurface(), 0.5);
			this.drawingContext_0.Close();
			this.drawingContext_0 = null;
			Matrix transformToDevice = PresentationSource.FromVisual(Application.Current.MainWindow).CompositionTarget.TransformToDevice;
			double dpiX = transformToDevice.M11 * 96.0;
			double dpiY = transformToDevice.M22 * 96.0;
			RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(Convert.ToInt32(width), Convert.ToInt32(height), dpiX, dpiY, PixelFormats.Default);
			renderTargetBitmap.Render(drawingVisual);
			base.Source = renderTargetBitmap;
		}
		public TreeItem FindItemByPoint(TreeItem item, Point point)
		{
			TreeItem result;
			if (!item.Bounds.Contains(point))
			{
				result = null;
			}
			else
			{
				TreeItem treeItem = null;
				if (item.method_5())
				{
					treeItem = item;
				}
				else
				{
					for (int i = 0; i < item.method_1(); i++)
					{
						TreeItem treeItem2 = item.method_2(i);
						if (treeItem2.Bounds.Contains(point))
						{
							treeItem = this.FindItemByPoint(treeItem2, point);
							break;
						}
					}
				}
				if (treeItem == null)
				{
					treeItem = item;
				}
				result = treeItem;
			}
			return result;
		}
		private void method_3(TreeItem treeItem_1, ref Rect rect_0, TreeSurface treeSurface_0, double double_7)
		{
			treeItem_1.Bounds = rect_0;
			TreeSurface treeSurface_ = new TreeSurface();
			treeSurface_ = treeSurface_0.Clone();
			this.method_7(rect_0, treeSurface_, double_7);
			if (treeItem_1.method_6())
			{
				this.method_1(treeItem_1, treeSurface_, double_7);
			}
			else
			{
				this.method_8(treeItem_1.Bounds, treeSurface_);
			}
		}
		private void method_2(TreeItem treeItem_1, TreeSurface treeSurface_0, double double_7, Rect rect_0, TreemapHost.Enum2 enum2_0, double double_8, int int_1, int int_2, double double_9, ref Rect rect_1, ref double double_10)
		{
			for (int i = int_1; i < int_2; i++)
			{
				double num = treeItem_1.method_2(i).Size / double_9;
				double num2 = double_10 + num * double_8;
				bool flag;
				if (flag = (i == int_2 - 1 || treeItem_1.method_2(i + 1).Size == 0.0))
				{
					num2 = ((enum2_0 == (TreemapHost.Enum2)1) ? (rect_0.X + double_8) : (rect_0.Y + double_8));
				}
				if (enum2_0 == (TreemapHost.Enum2)1)
				{
					rect_1.X = double_10;
					rect_1.Width = num2 - double_10;
				}
				else
				{
					rect_1.Y = double_10;
					rect_1.Height = num2 - double_10;
				}
				this.method_3(treeItem_1.method_2(i), ref rect_1, treeSurface_0, double_7 * 0.75);
				if (flag)
				{
					break;
				}
				double_10 = num2;
			}
		}
		private static int smethod_0(TreeItem treeItem_1, int int_1, double double_7, double double_8, ref double double_9, ref double double_10)
		{
			int result;
			while (int_1 < treeItem_1.method_1())
			{
				double size = treeItem_1.method_2(int_1).Size;
				if (size != 0.0)
				{
					double num = double_10 + size;
					double num2 = num * num;
					double val = double_7 * double_8 / num2;
					double val2 = num2 / double_7 / size;
					double num3 = Math.Max(val, val2);
					if (num3 <= double_9)
					{
						double_10 += size;
						int_1++;
						double_9 = num3;
						continue;
					}
					result = int_1;
				}
				else
				{
					int_1 = treeItem_1.method_1();
					result = int_1;
				}
				return result;
			}
			result = int_1;
			return result;
		}
		private void method_1(TreeItem treeItem_1, TreeSurface treeSurface_0, double double_7)
		{
			Rect bounds = treeItem_1.Bounds;
			double num = treeItem_1.Size / bounds.Area();
			double num2 = treeItem_1.Size;
			int i = 0;
			while (i < treeItem_1.method_1())
			{
				TreemapHost.Enum2 @enum = (bounds.Width >= bounds.Height) ? ((TreemapHost.Enum2)0) : ((TreemapHost.Enum2)1);
				double num3 = (@enum == (TreemapHost.Enum2)1) ? bounds.Width : bounds.Height;
				double double_8 = num3 * num3 * num;
				int num4 = i;
				int num5 = i;
				double num6 = 0.0;
				double size = treeItem_1.method_2(num4).Size;
				double num7 = 1.7976931348623157E+308;
				num5 = TreemapHost.smethod_0(treeItem_1, num5, double_8, size, ref num7, ref num6);
				double num8 = (@enum == (TreemapHost.Enum2)1) ? bounds.Height : bounds.Width;
				if (num6 < num2)
				{
					num8 = (double)((int)(num6 / num2 * num8));
				}
				Rect rect = default(Rect);
				double num9 = TreemapHost.smethod_1(bounds, @enum, num8, ref rect);
				this.method_2(treeItem_1, treeSurface_0, double_7, bounds, @enum, num3, num4, num5, num6, ref rect, ref num9);
				TreemapHost.smethod_2(ref bounds, @enum, num8);
				num2 -= num6;
				i += num5 - num4;
				if (bounds.Width <= 0.0 || bounds.Height <= 0.0)
				{
					if (i < treeItem_1.method_1())
					{
						treeItem_1.method_2(i).Bounds = default(Rect);
					}
					return;
				}
			}
		}