Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="g"></param>
        private void OnDraw(Graphics g)
        {
            // Background
            using (var brush = new SolidBrush(BackColor))
            {
                g.FillRectangle(brush, ClientRectangle);
            }

            // Element
            var rect = ClientRectangle;

            if (borderTop || borderBottom || borderLeft || borderRight)
            {
                rect.Inflate(-1, -1);
            }

            var context = new TemplateDrawContext
            {
                PreferBaseForeColor   = false,
                PreferBaseBackColor   = false,
                PreferBaseBorderColor = false,
                BaseForeColor         = ForeColor,
                BaseBackColor         = BackColor,
                BaseBorderColor       = ElementBorderColor,
                Font = Font
            };

            var designMode = (Site != null) && Site.DesignMode;
            var source     = designData as ITemplateDesignData;
            var target     = designMode & source != null?source.Create() : item;

            TemplateDrawHelper.DrawElements(g, rect, target, elements, context);

            // Border
            g.DrawBorder(borderColor, ClientRectangle, borderTop, borderBottom, borderLeft, borderRight);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="g"></param>
        private void OnDraw(Graphics g)
        {
            // Background
            using (var brush = new SolidBrush(BackColor))
            {
                g.FillRectangle(brush, ClientRectangle);
            }

            // Element
            var rect = ClientRectangle;
            if (borderTop || borderBottom || borderLeft || borderRight)
            {
                rect.Inflate(-1, -1);
            }

            var context = new TemplateDrawContext
            {
                PreferBaseForeColor = false,
                PreferBaseBackColor = false,
                PreferBaseBorderColor = false,
                BaseForeColor = ForeColor,
                BaseBackColor = BackColor,
                BaseBorderColor = ElementBorderColor,
                Font = Font
            };

            var designMode = (Site != null) && Site.DesignMode;
            var source = designData as ITemplateDesignData;
            var target = designMode & source != null ? source.Create() : item;
            TemplateDrawHelper.DrawElements(g, rect, target, elements, context);

            // Border
            g.DrawBorder(borderColor, ClientRectangle, borderTop, borderBottom, borderLeft, borderRight);
        }
Exemplo n.º 3
0
        //--------------------------------------------------------------------------------
        // Draw
        //--------------------------------------------------------------------------------
        /// <summary>
        /// 
        /// </summary>
        /// <param name="g"></param>
        protected override void OnDraw(Graphics g)
        {
            // Elements
            var rect = CalcListRect();

            g.Clip = new Region(rect);

            var context = new TemplateDrawContext
            {
                BaseBorderColor = SplitterColor,
                Font = Font
            };

            var designMode = (Site != null) && Site.DesignMode;
            var baseY = rect.Top;
            var source = designData as ITemplateListDesignData;
            var list = designMode && source != null ? (IList)source.Create() : items;
            var i = designMode ? 0 : TopIndex;
            var max = designMode && list != null ? list.Count : items.Count;

            if (list != null)
            {
                while ((baseY < rect.Bottom) && (i < max))
                {
                    var elementRect = new Rectangle(rect.Left, baseY, rect.Width, itemHeight);
                    var selected = i == selectedIndex;
                    var foreColor = selected
                        ? (Focused ? selectedForeColor : inactiveSelectedForeColor)
                        : ForeColor;
                    var backColor = selected
                        ? (Focused ? selectedBackColor : inactiveSelectedBackColor)
                        : (i % 2 == 0) ? BackColor : alternateBackColor;

                    using (var brush = new SolidBrush(backColor))
                    {
                        g.FillRectangle(brush, elementRect);
                    }

                    context.PreferBaseForeColor = selected && PreferForeColorWhenSelected;
                    context.PreferBaseBackColor = selected && PreferBackColorWhenSelected;
                    context.PreferBaseBorderColor = selected && PreferBorderColorWhenSelected;
                    context.BaseForeColor = foreColor;
                    context.BaseBackColor = backColor;

                    TemplateDrawHelper.DrawElements(g, elementRect, list[i], elements, context);

                    baseY += itemHeight;

                    if (splitter)
                    {
                        using (var brush = new SolidBrush(SplitterColor))
                        {
                            g.FillRectangle(brush, new Rectangle(rect.Left, baseY, rect.Width, 1));
                        }

                        baseY += 1;
                    }

                    i++;
                }
            }

            using (var brush = new SolidBrush(BackColor))
            {
                g.FillRectangle(brush, rect.X, baseY, rect.Width, rect.Bottom - baseY);
            }

            // Border
            g.Clip = new Region(ClientRectangle);

            using (var pen = new Pen(borderColor))
            {
                g.DrawRectangle(pen, ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1);
            }
        }
Exemplo n.º 4
0
        //--------------------------------------------------------------------------------
        // Draw
        //--------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="g"></param>
        protected override void OnDraw(Graphics g)
        {
            // Elements
            var rect = CalcListRect();

            g.Clip = new Region(rect);

            var context = new TemplateDrawContext
            {
                BaseBorderColor = SplitterColor,
                Font            = Font
            };

            var designMode = (Site != null) && Site.DesignMode;
            var baseY      = rect.Top;
            var source     = designData as ITemplateListDesignData;
            var list       = designMode && source != null ? (IList)source.Create() : items;
            var i          = designMode ? 0 : TopIndex;
            var max        = designMode && list != null ? list.Count : items.Count;

            if (list != null)
            {
                while ((baseY < rect.Bottom) && (i < max))
                {
                    var elementRect = new Rectangle(rect.Left, baseY, rect.Width, itemHeight);
                    var selected    = i == selectedIndex;
                    var foreColor   = selected
                        ? (Focused ? selectedForeColor : inactiveSelectedForeColor)
                        : ForeColor;
                    var backColor = selected
                        ? (Focused ? selectedBackColor : inactiveSelectedBackColor)
                        : (i % 2 == 0) ? BackColor : alternateBackColor;

                    using (var brush = new SolidBrush(backColor))
                    {
                        g.FillRectangle(brush, elementRect);
                    }

                    context.PreferBaseForeColor   = selected && PreferForeColorWhenSelected;
                    context.PreferBaseBackColor   = selected && PreferBackColorWhenSelected;
                    context.PreferBaseBorderColor = selected && PreferBorderColorWhenSelected;
                    context.BaseForeColor         = foreColor;
                    context.BaseBackColor         = backColor;

                    TemplateDrawHelper.DrawElements(g, elementRect, list[i], elements, context);

                    baseY += itemHeight;

                    if (splitter)
                    {
                        using (var brush = new SolidBrush(SplitterColor))
                        {
                            g.FillRectangle(brush, new Rectangle(rect.Left, baseY, rect.Width, 1));
                        }

                        baseY += 1;
                    }

                    i++;
                }
            }

            using (var brush = new SolidBrush(BackColor))
            {
                g.FillRectangle(brush, rect.X, baseY, rect.Width, rect.Bottom - baseY);
            }

            // Border
            g.Clip = new Region(ClientRectangle);

            using (var pen = new Pen(borderColor))
            {
                g.DrawRectangle(pen, ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="g"></param>
        /// <param name="rect"></param>
        /// <param name="item"></param>
        /// <param name="elements"></param>
        /// <param name="context"></param>
        public static void DrawElements(Graphics g, Rectangle rect, object item, IList elements, TemplateDrawContext context)
        {
            var current = g.Clip;

            foreach (TemplateElement element in elements)
            {
                var elementRect   = new Rectangle(rect.X + element.Point.X, rect.Y + element.Point.Y, element.Size.Width, element.Size.Height);
                var elementRegion = new Region(elementRect);
                var hasBorder     = element.BorderTop || element.BorderBottom || element.BorderLeft || element.BorderRight;

                g.Clip = elementRegion;

                // Background
                if (!context.PreferBaseBackColor)
                {
                    var color = ResolveValue(item, element.BackColor, element.BackColorProperty, element.BackColorConverter);
                    if (!color.Equals(Color.Transparent))
                    {
                        using (var br = new SolidBrush(color))
                        {
                            g.FillRectangle(br, elementRect);
                        }
                    }
                }

                // Image
                var image = ResolveValue(item, element.Image, element.ImageProperty, element.ImageConverter);
                if (image != null)
                {
                    var imageRect = elementRect;
                    if (hasBorder)
                    {
                        imageRect.Inflate(-1, -1);
                    }

                    var rc = element.TextAlign.CalcTextRect(image.Width, image.Height, imageRect);

                    g.DrawImage(image, (int)rc.X, (int)rc.Y);
                }

                // Text
                var text = ResolveValue(item, element.Text, element.TextProperty, element.TextConverter);
                if (text != null)
                {
                    var color = context.PreferBaseForeColor ? context.BaseForeColor : ResolveValue(item, element.ForeColor, element.ForeColorProperty, element.ForeColorConverter);
                    if (color.Equals(Color.Transparent))
                    {
                        color = context.BaseForeColor;
                    }

                    var font = ResolveValue(item, element.Font, element.FontProperty, element.FontConverter) ?? context.Font;

                    var textRect = elementRect;
                    textRect.X      += element.Padding.Width;
                    textRect.Y      += element.Padding.Height;
                    textRect.Width  -= element.Padding.Width * 2;
                    textRect.Height -= element.Padding.Height * 2;
                    if (hasBorder)
                    {
                        textRect.Inflate(-1, -1);
                    }

                    if (element.Multiline)
                    {
                        var texts    = g.GetMultilineText(text, font, textRect.Width);
                        var textSize = g.CalcMultilineTextSize(texts, font);

                        var rc = element.TextAlign.CalcTextRect(textSize, textRect);

                        using (var br = new SolidBrush(color))
                        {
                            var top = rc.Top;
                            foreach (var line in texts)
                            {
                                var size   = g.MeasureString(String.IsNullOrEmpty(line) ? " " : line, font);
                                var rcLine = element.TextAlign.CalcTextRect(size, rc.Left, top, rc.Width, size.Height);

                                g.DrawString(line, font, br, rcLine.X, rcLine.Y);

                                top += rcLine.Height;
                            }
                        }
                    }
                    else
                    {
                        var rc = element.TextAlign.CalcTextRect(g.MeasureString(text, font), textRect);

                        using (var br = new SolidBrush(color))
                        {
                            g.Clip = new Region(textRect);

                            g.DrawString(text, font, br, rc);

                            g.Clip = elementRegion;
                        }
                    }
                }

                // Border
                if (hasBorder)
                {
                    var color = context.PreferBaseBorderColor ? context.BaseBorderColor : ResolveValue(item, element.BorderColor, element.BorderColorProperty, element.BorderColorConverter);
                    if (color.Equals(Color.Transparent))
                    {
                        color = context.BaseBorderColor;
                    }

                    g.DrawBorder(color, elementRect, element.BorderTop, element.BorderBottom, element.BorderLeft, element.BorderRight);
                }
            }

            g.Clip = current;
        }