Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        private void DrawBorder(Graphics G)
        {
            if (SelectedIndex != -1)
            {
                Rectangle tabRect = GetTabRect(SelectedIndex);

                Rectangle clipRect = ClientRectangle;

                Point[] points = new Point[6];

                IntPtr upDownButtonHandle = UpDownButtonHandle;

                bool hasUpDown = upDownButtonHandle != IntPtr.Zero;

                if (hasUpDown)
                {
                    if (TabControlNativeMethods.IsWindowVisible(upDownButtonHandle))
                    {
                        TabControlNativeMethods.RECT upDownButtonRect = new TabControlNativeMethods.RECT();

                        TabControlNativeMethods.GetWindowRect(upDownButtonHandle, ref upDownButtonRect);

                        Rectangle upDownRect = Rectangle.FromLTRB(
                            upDownButtonRect.Left,
                            upDownButtonRect.Top,
                            upDownButtonRect.Right,
                            upDownButtonRect.Bottom);

                        upDownRect = RectangleToClient(upDownRect);

                        tabRect.X = tabRect.X > upDownRect.X ? upDownRect.X : tabRect.X;

                        tabRect.Width = tabRect.Right > upDownRect.X ? upDownRect.X - tabRect.X : tabRect.Width;
                    }
                }

                switch (Alignment)
                {
                case TabAlignment.Top:
                    points[0] = new Point(
                        tabRect.X,
                        tabRect.Bottom);
                    points[1] = new Point(
                        clipRect.X,
                        tabRect.Bottom);
                    points[2] = new Point(
                        clipRect.X,
                        clipRect.Bottom - 1);
                    points[3] = new Point(
                        clipRect.Right - 1,
                        clipRect.Bottom - 1);
                    points[4] = new Point(
                        clipRect.Right - 1,
                        tabRect.Bottom);
                    points[5] = new Point(
                        tabRect.Right,
                        tabRect.Bottom);
                    break;

                case TabAlignment.Bottom:
                    points[0] = new Point(
                        tabRect.X,
                        tabRect.Y);
                    points[1] = new Point(
                        clipRect.X,
                        tabRect.Y);
                    points[2] = new Point(
                        clipRect.X,
                        clipRect.Y);
                    points[3] = new Point(
                        clipRect.Right - 1,
                        clipRect.Y);
                    points[4] = new Point(
                        clipRect.Right - 1,
                        tabRect.Y);
                    points[5] = new Point(
                        tabRect.Right,
                        tabRect.Y);
                    break;

                case TabAlignment.Left:
                    points[0] = new Point(
                        tabRect.Right,
                        tabRect.Y);
                    points[1] = new Point(
                        tabRect.Right,
                        clipRect.Y);
                    points[2] = new Point(
                        clipRect.Right - 1,
                        clipRect.Y);
                    points[3] = new Point(
                        clipRect.Right - 1,
                        clipRect.Bottom - 1);
                    points[4] = new Point(
                        tabRect.Right,
                        clipRect.Bottom - 1);
                    points[5] = new Point(
                        tabRect.Right,
                        tabRect.Bottom);
                    break;

                case TabAlignment.Right:
                    points[0] = new Point(
                        tabRect.X,
                        tabRect.Y);
                    points[1] = new Point(
                        tabRect.X,
                        clipRect.Y);
                    points[2] = new Point(
                        clipRect.X,
                        clipRect.Y);
                    points[3] = new Point(
                        clipRect.X,
                        clipRect.Bottom - 1);
                    points[4] = new Point(
                        tabRect.X,
                        clipRect.Bottom - 1);
                    points[5] = new Point(
                        tabRect.X,
                        tabRect.Bottom);
                    break;
                }
                using (Pen pen = new Pen(_BorderColor))
                {
                    G.DrawLines(pen, points);
                }
            }
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        private void DrawTabPages(Graphics G)
        {
            Rectangle tabRect;

            Point cusorPoint = PointToClient(MousePosition);

            bool hover;

            bool selected;

            bool hasSetClip = false;

            bool alignHorizontal = (Alignment == TabAlignment.Top || Alignment == TabAlignment.Bottom);

            LinearGradientMode mode = alignHorizontal ? LinearGradientMode.Vertical : LinearGradientMode.Horizontal;

            if (alignHorizontal)
            {
                IntPtr upDownButtonHandle = UpDownButtonHandle;

                bool hasUpDown = upDownButtonHandle != IntPtr.Zero;

                if (hasUpDown)
                {
                    if (TabControlNativeMethods.IsWindowVisible(upDownButtonHandle))
                    {
                        TabControlNativeMethods.RECT upDownButtonRect = new TabControlNativeMethods.RECT();

                        TabControlNativeMethods.GetWindowRect(upDownButtonHandle, ref upDownButtonRect);

                        Rectangle upDownRect = Rectangle.FromLTRB(
                            upDownButtonRect.Left,
                            upDownButtonRect.Top,
                            upDownButtonRect.Right,
                            upDownButtonRect.Bottom);

                        upDownRect = RectangleToClient(upDownRect);

                        switch (Alignment)
                        {
                        case TabAlignment.Top:
                            upDownRect.Y = 0;
                            break;

                        case TabAlignment.Bottom:
                            upDownRect.Y =
                                ClientRectangle.Height - DisplayRectangle.Height;
                            break;
                        }
                        upDownRect.Height = ClientRectangle.Height;
                        G.SetClip(upDownRect, CombineMode.Exclude);
                        hasSetClip = true;
                    }
                }
            }

            for (int index = 0; index < base.TabCount; index++)
            {
                TabPage page = TabPages[index];

                tabRect  = GetTabRect(index);
                hover    = tabRect.Contains(cusorPoint);
                selected = SelectedIndex == index;

                Color baseColor   = _BaseColor;
                Color borderColor = _BorderColor;

                if (selected)
                {
                    baseColor = GetColor(_BaseColor, 0, -45, -30, -14);
                }
                else if (hover)
                {
                    baseColor = GetColor(_BaseColor, 0, 35, 24, 9);
                }

                RenderTabBackgroundInternal(
                    G,
                    tabRect,
                    baseColor,
                    borderColor,
                    .45F,
                    mode);

                bool hasImage = DrawTabImage(G, page, tabRect);

                DrawtabText(G, page, tabRect, hasImage);
            }
            if (hasSetClip)
            {
                G.ResetClip();
            }
        }