| File: System\Windows\Forms\Design\Behavior\DragAssistanceManager.Line.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; namespace System.Windows.Forms.Design.Behavior; internal sealed partial class DragAssistanceManager { /// <summary> /// Our 'line' class - used to manage two points and calculate the difference between any two lines. /// </summary> internal class Line { public int X1 { get; set; } public int Y1 { get; set; } public int X2 { get; set; } public int Y2 { get; set; } public LineType LineType { get; set; } public Rectangle OriginalBounds { get; set; } public PaddingLineType PaddingLineType { get; set; } public Line(int x1, int y1, int x2, int y2) { X1 = x1; Y1 = y1; X2 = x2; Y2 = y2; LineType = LineType.Standard; } private Line(int x1, int y1, int x2, int y2, LineType type) { X1 = x1; Y1 = y1; X2 = x2; Y2 = y2; LineType = type; } public static Line[]? GetDiffs(Line l1, Line l2) { // x's align if (l1.X1 == l1.X2 && l1.X1 == l2.X1) { return [ new(l1.X1, Math.Min(l1.Y1, l2.Y1), l1.X1, Math.Max(l1.Y1, l2.Y1)), new(l1.X1, Math.Min(l1.Y2, l2.Y2), l1.X1, Math.Max(l1.Y2, l2.Y2)) ]; } // y's align if (l1.Y1 == l1.Y2 && l1.Y1 == l2.Y1) { return [ new(Math.Min(l1.X1, l2.X1), l1.Y1, Math.Max(l1.X1, l2.X1), l1.Y1), new(Math.Min(l1.X2, l2.X2), l1.Y1, Math.Max(l1.X2, l2.X2), l1.Y1) ]; } return null; } public static Line? Overlap(Line l1, Line l2) { // Need to be the same type if (l1.LineType != l2.LineType) { return null; } // only makes sense to do this for Standard and Baseline if (l1.LineType is not LineType.Standard and not LineType.Baseline) { return null; } // 2 overlapping vertical lines if ((l1.X1 == l1.X2) && (l2.X1 == l2.X2) && (l1.X1 == l2.X1)) { return new Line(l1.X1, Math.Min(l1.Y1, l2.Y1), l1.X2, Math.Max(l1.Y2, l2.Y2), l1.LineType); } // 2 overlapping horizontal lines if ((l1.Y1 == l1.Y2) && (l2.Y1 == l2.Y2) && (l1.Y1 == l2.Y2)) { return new Line(Math.Min(l1.X1, l2.X1), l1.Y1, Math.Max(l1.X2, l2.X2), l1.Y2, l1.LineType); } return null; } public override string ToString() => $"Line, type = {LineType}, dims =({X1}, {Y1})->({X2}, {Y2})"; } }