//////////////////////////////////////////////////////////////////////////////// private void DockableForm_Resize(object sender, EventArgs e) { // determine which sides of the form are being resized if (sidesBeingResized == 0) { sidesBeingResized = (Bounds.Left != boundsBeforeResize.Left ? SideFlags.Left : 0) | (Bounds.Top != boundsBeforeResize.Top ? SideFlags.Top : 0) | (Bounds.Right != boundsBeforeResize.Right ? SideFlags.Right : 0) | (Bounds.Bottom != boundsBeforeResize.Bottom ? SideFlags.Bottom : 0); } }
public void Load(BinaryReaderBE reader) { Type = (SideType)reader.ReadInt16(); Flags = (SideFlags)reader.ReadUInt16(); Primary.Load(reader); Secondary.Load(reader); Transparent.Load(reader); reader.BaseStream.Seek(16, SeekOrigin.Current); // exclusion zone ControlPanelType = reader.ReadInt16(); ControlPanelPermutation = reader.ReadInt16(); PrimaryTransferMode = reader.ReadInt16(); SecondaryTransferMode = reader.ReadInt16(); TransparentTransferMode = reader.ReadInt16(); PolygonIndex = reader.ReadInt16(); LineIndex = reader.ReadInt16(); PrimaryLightsourceIndex = reader.ReadInt16(); SecondaryLightsourceIndex = reader.ReadInt16(); TransparentLightsourceIndex = reader.ReadInt16(); AmbientDelta = reader.ReadInt32(); reader.ReadInt16(); // unused }
private void DockableForm_ResizeBegin(object sender, EventArgs e) { sidesBeingResized = SideFlags.None; boundsBeforeResize = Bounds; }
/** * Attempts to dock the specified form within the container. */ public void TryToDock(DockableForm form, SideFlags sides, bool resize) { var docks = new List <Rectangle>(); // consider the outside edges of the main window // FIXME: implement // consider the edges of the workspace (the client area) docks.Add(RectangleToScreen(uxWorkspace.Bounds)); // consider the outside edges of other dockable forms /*foreach (var dockedForm in dockedForms) * docks.Add(new Rectangle( * dockedForm.Bounds.Right, * dockedForm.Bounds.Bottom, * dockedForm.Bounds.Left, * dockedForm.Bounds.Top));*/ var distancePerSide = new int[4] { 0, 0, 0, 0 }; if ((sides & SideFlags.Left) != SideFlags.None) { int minDistance = 0; foreach (var dock in docks) { int distance = dock.Left - form.Bounds.Left; if (System.Math.Abs(distance) <= Config.DockSnapThreshold) { minDistance = Math.AbsMinNotZero(minDistance, distance); } } distancePerSide[(int)Side.Left] = minDistance; } if ((sides & SideFlags.Top) != SideFlags.None) { int minDistance = 0; foreach (var dock in docks) { int distance = dock.Top - form.Bounds.Top; if (System.Math.Abs(distance) <= Config.DockSnapThreshold) { minDistance = Math.AbsMinNotZero(minDistance, distance); } } distancePerSide[(int)Side.Top] = minDistance; } if ((sides & SideFlags.Right) != SideFlags.None) { int minDistance = 0; foreach (var dock in docks) { int distance = dock.Right - form.Bounds.Right; if (System.Math.Abs(distance) <= Config.DockSnapThreshold) { minDistance = Math.AbsMinNotZero(minDistance, distance); } } distancePerSide[(int)Side.Right] = minDistance; } if ((sides & SideFlags.Bottom) != SideFlags.None) { int minDistance = 0; foreach (var dock in docks) { int distance = dock.Bottom - form.Bounds.Bottom; if (System.Math.Abs(distance) <= Config.DockSnapThreshold) { minDistance = Math.AbsMinNotZero(minDistance, distance); } } distancePerSide[(int)Side.Bottom] = minDistance; } var newBounds = form.Bounds; if (resize) { distancePerSide[(int)Side.Right] -= distancePerSide[(int)Side.Left]; distancePerSide[(int)Side.Bottom] -= distancePerSide[(int)Side.Top]; if (distancePerSide[(int)Side.Right] != newBounds.Width) { newBounds.X += distancePerSide[(int)Side.Left]; newBounds.Width += distancePerSide[(int)Side.Right]; } if (distancePerSide[(int)Side.Bottom] != newBounds.Height) { newBounds.Y += distancePerSide[(int)Side.Top]; newBounds.Height += distancePerSide[(int)Side.Bottom]; } } else { newBounds.X += Math.AbsMinNotZero( distancePerSide[(int)Side.Left], distancePerSide[(int)Side.Right]); newBounds.Y += Math.AbsMinNotZero( distancePerSide[(int)Side.Top], distancePerSide[(int)Side.Bottom]); } form.Bounds = newBounds; }