Beispiel #1
0
        /// <summary>
        /// Draws the context menu control.
        /// </summary>
        /// <param name="renderer">Render management object.</param>
        /// <param name="rect">Destination rectangle.</param>
        /// <param name="gameTime">Snapshot of the application's timing values.</param>
        public override void DrawControl(Renderer renderer, Rectangle rect, GameTime gameTime)
        {
            base.DrawControl(renderer, rect, gameTime);

            var l1 = Skin.Layers["Control"];
            var l2 = Skin.Layers["Selection"];

            var vsize = LineHeight();
            var col   = Color.White;

            // Draw each context menu entry.
            for (var i = 0; i < Items.Count; i++)
            {
                var mod  = i > 0 ? 2 : 0;
                var left = rect.Left + l1.ContentMargins.Left + vsize;
                var h    = vsize - mod - (i < (Items.Count - 1) ? 1 : 0);
                var top  = rect.Top + l1.ContentMargins.Top + (i * vsize) + mod;


                if (Items[i].Separated && i > 0)
                {
                    Rectangle r = new Rectangle(left, rect.Top + l1.ContentMargins.Top + (i * vsize), LineWidth() - vsize + 4, 1);
                    renderer.Draw(Manager.Skin.Controls["Control"].Layers[0].Image.Resource, r, l1.Text.Colors.Enabled);
                }

                if (ItemIndex != i)
                {
                    if (Items[i].Enabled)
                    {
                        Rectangle r = new Rectangle(left, top, LineWidth() - vsize, h);
                        renderer.DrawString(this, l1, Items[i].Text, r, false, base.DrawFormattedText);
                        col = l1.Text.Colors.Enabled;
                    }
                    else
                    {
                        Rectangle r = new Rectangle(left + l1.Text.OffsetX,
                                                    top + l1.Text.OffsetY,
                                                    LineWidth() - vsize, h);
                        renderer.DrawString(l1.Text.Font.Resource, Items[i].Text, r, l1.Text.Colors.Disabled, l1.Text.Alignment, base.DrawFormattedText);
                        col = l1.Text.Colors.Disabled;
                    }
                }
                else
                {
                    if (Items[i].Enabled)
                    {
                        Rectangle rs = new Rectangle(rect.Left + l1.ContentMargins.Left,
                                                     top,
                                                     Width - (l1.ContentMargins.Horizontal - Skin.OriginMargins.Horizontal),
                                                     h);
                        renderer.DrawLayer(this, l2, rs);

                        Rectangle r = new Rectangle(left,
                                                    top, LineWidth() - vsize, h);

                        renderer.DrawString(this, l2, Items[i].Text, r, false, base.DrawFormattedText);
                        col = l2.Text.Colors.Enabled;
                    }
                    else
                    {
                        Rectangle rs = new Rectangle(rect.Left + l1.ContentMargins.Left,
                                                     top,
                                                     Width - (l1.ContentMargins.Horizontal - Skin.OriginMargins.Horizontal),
                                                     vsize);
                        renderer.DrawLayer(l2, rs, l2.States.Disabled.Color, l2.States.Disabled.Index);

                        Rectangle r = new Rectangle(left + l1.Text.OffsetX,
                                                    top + l1.Text.OffsetY,
                                                    LineWidth() - vsize, h);
                        renderer.DrawString(l2.Text.Font.Resource, Items[i].Text, r, l2.Text.Colors.Disabled, l2.Text.Alignment, base.DrawFormattedText);
                        col = l2.Text.Colors.Disabled;
                    }
                }

                // Menu item has an image icon?
                if (Items[i].Image != null)
                {
                    var r = new Rectangle(rect.Left + l1.ContentMargins.Left + 3,
                                          rect.Top + top + 3,
                                          LineHeight() - 6,
                                          LineHeight() - 6);
                    renderer.Draw(Items[i].Image, r, Color.White);
                }

                if (Items[i].Items != null && Items[i].Items.Count > 0)
                {
                    renderer.Draw(Manager.Skin.Images["Shared.ArrowRight"].Resource, rect.Left + LineWidth() - 4, rect.Top + l1.ContentMargins.Top + (i * vsize) + 8, col);
                }
            }
        }
Beispiel #2
0
        public override void DrawControl(Renderer renderer, Rectangle rect, GameTime gameTime)
        {
            var         l1 = captionVisible ? Skin.Layers[lrCaption] : Skin.Layers[lrFrameTop];
            var         l2 = Skin.Layers[lrFrameLeft];
            var         l3 = Skin.Layers[lrFrameRight];
            var         l4 = Skin.Layers[lrFrameBottom];
            var         l5 = Skin.Layers[lrIcon];
            LayerStates s1, s2, s3, s4;
            var         f1 = l1.Text.Font.Resource;
            var         c1 = l1.Text.Colors.Enabled;

// Window has focus?
            if ((Focused || (Manager.FocusedControl != null && Manager.FocusedControl.Root == Root)) &&
                ControlState != ControlState.Disabled)
            {
                s1 = l1.States.Focused;
                s2 = l2.States.Focused;
                s3 = l3.States.Focused;
                s4 = l4.States.Focused;
                c1 = l1.Text.Colors.Focused;
            }
// Window is disabled?
            else if (ControlState == ControlState.Disabled)
            {
                s1 = l1.States.Disabled;
                s2 = l2.States.Disabled;
                s3 = l3.States.Disabled;
                s4 = l4.States.Disabled;
                c1 = l1.Text.Colors.Disabled;
            }
// Window not active or child control has focus?
            else
            {
                s1 = l1.States.Enabled;
                s2 = l2.States.Enabled;
                s3 = l3.States.Enabled;
                s4 = l4.States.Enabled;
                c1 = l1.Text.Colors.Enabled;
            }

            if (!clearBackground)
            {
                renderer.DrawLayer(Skin.Layers[lrWindow], rect, Skin.Layers[lrWindow].States.Enabled.Color,
                                   Skin.Layers[lrWindow].States.Enabled.Index);
            }

// Need to draw the window border?
            if (BorderVisible)
            {
// Draw caption layer or top frame layer, then draw the left, right, and bottom frame layers.
                renderer.DrawLayer(l1, new Rectangle(rect.Left, rect.Top, rect.Width, l1.Height), s1.Color, s1.Index);
                renderer.DrawLayer(l2,
                                   new Rectangle(rect.Left, rect.Top + l1.Height, l2.Width, rect.Height - l1.Height - l4.Height),
                                   s2.Color, s2.Index);
                renderer.DrawLayer(l3,
                                   new Rectangle(rect.Right - l3.Width, rect.Top + l1.Height, l3.Width,
                                                 rect.Height - l1.Height - l4.Height), s3.Color, s3.Index);
                renderer.DrawLayer(l4, new Rectangle(rect.Left, rect.Bottom - l4.Height, rect.Width, l4.Height),
                                   s4.Color, s4.Index);

// Draw the window icon if there is one and the window caption is displayed.
                if (iconVisible && (icon != null || l5 != null) && CaptionVisible)
                {
                    var i = (icon != null) ? icon : l5.Image.Resource;
                    renderer.Draw(i, GetIconRect(), Color.White);
                }

                var icosize = 0;
                if (l5 != null && iconVisible && CaptionVisible)
                {
                    icosize = l1.Height - l1.ContentMargins.Vertical + 4 + l5.OffsetX;
                }
// Draw the close button if visible.
                var closesize = 0;
                if (btnClose.Visible)
                {
                    closesize = btnClose.Width - (btnClose.Skin.Layers[lrButton].OffsetX);
                }

// Create the rectangle defining the remaining caption area to draw text in.
                var r = new Rectangle(rect.Left + l1.ContentMargins.Left + icosize,
                                      rect.Top + l1.ContentMargins.Top,
                                      rect.Width - l1.ContentMargins.Horizontal - closesize - icosize,
                                      l1.Height - l1.ContentMargins.Top - l1.ContentMargins.Bottom);
                var ox = l1.Text.OffsetX;
                var oy = l1.Text.OffsetY;
                renderer.DrawString(f1, Text, r, c1, l1.Text.Alignment, ox, oy, true);
            }
        }
Beispiel #3
0
        /// <param name="all">Indicates if the bevel is applied to a single side (false) or all sides (true) of the control.</param>
        /// <param name="style">Specifies the style of beveling to apply to the control.</param>
        /// <param name="pos">Specifies which side of the control is beveled.</param>
        /// <param name="rect">Bounds of the control the bevel is applied to.</param>
        /// <param name="renderer">Render management object.</param>
        /// <summary>
        /// Draws a piece of the beveled control based on the bevel's border and style.
        /// </summary>
        private void DrawPart(Renderer renderer, Rectangle rect, BevelBorder pos, BevelStyle style, bool all)
        {
// Get the skin's control layer and parse the bevel color values.
            var layer = Skin.Layers["Control"];
            var c1    = Utilities.ParseColor(layer.Attributes["LightColor"].Value);
            var c2    = Utilities.ParseColor(layer.Attributes["DarkColor"].Value);
            var c3    = Utilities.ParseColor(layer.Attributes["FlatColor"].Value);

            if (Color != UndefinedColor)
            {
                c3 = Color;
            }

// Get the control's image asset.
            var img = Skin.Layers["Control"].Image.Resource;

            var x1 = 0;
            var y1 = 0;
            var w1 = 0;
            var h1 = 0;
            var x2 = 0;
            var y2 = 0;
            var w2 = 0;
            var h2 = 0;

            if (style == BevelStyle.Bumped || style == BevelStyle.Etched)
            {
                if (all && (pos == BevelBorder.Top || pos == BevelBorder.Bottom))
                {
                    rect = new Rectangle(rect.Left + 1, rect.Top, rect.Width - 2, rect.Height);
                }
                else if (all && (pos == BevelBorder.Left))
                {
                    rect = new Rectangle(rect.Left, rect.Top, rect.Width, rect.Height - 1);
                }
                switch (pos)
                {
                case BevelBorder.Left:
                {
                    x1 = rect.Left;
                    y1 = rect.Top;
                    w1 = 1;
                    h1 = rect.Height;
                    x2 = x1 + 1;
                    y2 = y1;
                    w2 = w1;
                    h2 = h1;
                    break;
                }

                case BevelBorder.Top:
                {
                    x1 = rect.Left;
                    y1 = rect.Top;
                    w1 = rect.Width;
                    h1 = 1;
                    x2 = x1;
                    y2 = y1 + 1;
                    w2 = w1;
                    h2 = h1;
                    break;
                }

                case BevelBorder.Right:
                {
                    x1 = rect.Left + rect.Width - 2;
                    y1 = rect.Top;
                    w1 = 1;
                    h1 = rect.Height;
                    x2 = x1 + 1;
                    y2 = y1;
                    w2 = w1;
                    h2 = h1;
                    break;
                }

                case BevelBorder.Bottom:
                {
                    x1 = rect.Left;
                    y1 = rect.Top + rect.Height - 2;
                    w1 = rect.Width;
                    h1 = 1;
                    x2 = x1;
                    y2 = y1 + 1;
                    w2 = w1;
                    h2 = h1;
                    break;
                }
                }
            }
            else
            {
                switch (pos)
                {
                case BevelBorder.Left:
                {
                    x1 = rect.Left;
                    y1 = rect.Top;
                    w1 = 1;
                    h1 = rect.Height;
                    break;
                }

                case BevelBorder.Top:
                {
                    x1 = rect.Left;
                    y1 = rect.Top;
                    w1 = rect.Width;
                    h1 = 1;
                    break;
                }

                case BevelBorder.Right:
                {
                    x1 = rect.Left + rect.Width - 1;
                    y1 = rect.Top;
                    w1 = 1;
                    h1 = rect.Height;
                    break;
                }

                case BevelBorder.Bottom:
                {
                    x1 = rect.Left;
                    y1 = rect.Top + rect.Height - 1;
                    w1 = rect.Width;
                    h1 = 1;
                    break;
                }
                }
            }

            switch (Style)
            {
            case BevelStyle.Bumped:
            {
                renderer.Draw(img, new Rectangle(x1, y1, w1, h1), c1);
                renderer.Draw(img, new Rectangle(x2, y2, w2, h2), c2);
                break;
            }

            case BevelStyle.Etched:
            {
                renderer.Draw(img, new Rectangle(x1, y1, w1, h1), c2);
                renderer.Draw(img, new Rectangle(x2, y2, w2, h2), c1);
                break;
            }

            case BevelStyle.Raised:
            {
                var c = c1;
                if (pos == BevelBorder.Left || pos == BevelBorder.Top)
                {
                    c = c1;
                }
                else
                {
                    c = c2;
                }

                renderer.Draw(img, new Rectangle(x1, y1, w1, h1), c);
                break;
            }

            case BevelStyle.Lowered:
            {
                var c = c1;
                if (pos == BevelBorder.Left || pos == BevelBorder.Top)
                {
                    c = c2;
                }
                else
                {
                    c = c1;
                }

                renderer.Draw(img, new Rectangle(x1, y1, w1, h1), c);
                break;
            }

            default:
            {
                renderer.Draw(img, new Rectangle(x1, y1, w1, h1), c3);
                break;
            }
            }
        }