Ejemplo n.º 1
0
////////////////////////////////////////////////////////////////////////////////

        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);
            }
        }
Ejemplo n.º 2
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
 }
Ejemplo n.º 3
0
 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;
        }