Brewmaster.Layout.LayoutHandler.SuggestClosestSplit C# (CSharp) Method

SuggestClosestSplit() private method

private SuggestClosestSplit ( LayoutSplit closestSplit, List splits, Rectangle absoluteBounds, bool horizontal ) : void
closestSplit LayoutSplit
splits List
absoluteBounds Rectangle
horizontal bool
return void
		private void SuggestClosestSplit(LayoutSplit closestSplit, List<LayoutSplit> splits, Rectangle absoluteBounds, bool horizontal)
		{
			var cursorIndex = (horizontal ? Cursor.Position.X : Cursor.Position.Y);
			var closestSplitDistance = Math.Abs(cursorIndex - closestSplit.Location);
			foreach (var split in splits)
			{
				var distance = Math.Abs(cursorIndex - split.Location);
				if (distance < closestSplitDistance)
				{
					closestSplitDistance = distance;
					closestSplit = split;
				}
			}

			Rectangle suggestion;
			if (horizontal)
			{
				var targetWidth = absoluteBounds.Width / (splits.Count + 1);
				suggestion = new Rectangle(closestSplit.Location - (targetWidth / 2), absoluteBounds.Top, targetWidth, absoluteBounds.Height);
				var oversized = suggestion.Right - absoluteBounds.Right;
				if (oversized > 0) suggestion.X -= oversized;
				oversized = absoluteBounds.Left - suggestion.Left;
				if (oversized > 0) suggestion.X += oversized;
			}
			else
			{
				var targetHeight = absoluteBounds.Height / (splits.Count + 1);
				suggestion = new Rectangle(absoluteBounds.Left, closestSplit.Location - (targetHeight / 2), absoluteBounds.Width, targetHeight);
				var oversized = suggestion.Bottom - absoluteBounds.Bottom;
				if (oversized > 0) suggestion.Y -= oversized;
				oversized = absoluteBounds.Top - suggestion.Top;
				if (oversized > 0) suggestion.Y += oversized;
			}
			if (DockSuggestion == null || suggestion != DockSuggestion.Bounds)
			{
				DockSuggestion = new DockSuggestion
				{
					Bounds = suggestion,
					LayoutSplit = closestSplit
				};
			}
		}