Example #1
0
        private static void DrawTabText(MgTabControl tabControl, Graphics graphics, GraphicsPath tabPath, int index)
        {
            Rectangle tabBounds = GetTabTextRect(tabControl, tabPath, index);

            Color textColor;

            // For selected tab
            // When 'SelectedTabColor' is set TextColor is SelectedTabFgColor else it is Tab's ForeColor
            if (tabControl.SelectedIndex == index)
            {
                textColor = tabControl.SelectedTabFgColor != Color.Empty ? tabControl.SelectedTabFgColor : tabControl.ForeColor;
            }
            else
            {
                textColor = tabControl.TitleFgColor; // Text color it is Foreground of Title Color for non selected tabs
            }
            int orientation = GetOrientation(tabControl);

            if (tabControl.RightToLeftLayout)
            {
                Rectangle clipRect = tabControl.GetTabRect(index);

                clipRect.X = tabControl.Width - clipRect.Right;

                // Set clip so that image is not painted outside tab bounds
                graphics.SetClip(clipRect);
            }

            FontDescription font = new FontDescription(tabControl.Font);

            ControlRenderer.PrintText(graphics, tabBounds, textColor, font, GetTabText(tabControl, orientation, index), false, ContentAlignment.MiddleCenter,
                                      true, false, false, false, (tabControl.RightToLeft == RightToLeft.Yes), false, orientation, true);
        }
Example #2
0
        protected override void OnPaint(PaintEventArgs e)
        {
            //Simulate Transparency
            if (BackColor == Color.Transparent)
            {
#if !PocketPC
                if (Parent is ISupportsTransparentChildRendering)
                {
                    ((ISupportsTransparentChildRendering)Parent).TransparentChild = this;
                }

                System.Drawing.Drawing2D.GraphicsContainer g = e.Graphics.BeginContainer();
                Rectangle translateRect = this.Bounds;
                e.Graphics.TranslateTransform(-Left, -Top);
                PaintEventArgs pe = new PaintEventArgs(e.Graphics, translateRect);
                this.InvokePaintBackground(Parent, pe);
                this.InvokePaint(Parent, pe);
                //fixed bug#:796041, the forgound not need to display
                //this.InvokePaint(Parent, pe);
                e.Graphics.ResetTransform();
                e.Graphics.EndContainer(g);
                pe.Dispose();

                if (Parent is ISupportsTransparentChildRendering)
                {
                    ((ISupportsTransparentChildRendering)Parent).TransparentChild = null;
                }
#endif
            }

            ControlRenderer.FillRectAccordingToGradientStyle(e.Graphics, ClientRectangle, BackColor, LinkColor, 0,
                                                             false, GradientColor, GradientStyle);

            ContentAlignment newTextAlign = ControlUtils.GetOrgContentAligment(RightToLeft, TextAlign);

            FontDescription font = new FontDescription(Font);
            ControlRenderer.PrintText(e.Graphics, ClientRectangle, LinkColor, font, Text, false, newTextAlign,
                                      Enabled, true, !UseMnemonic, false, (RightToLeft == RightToLeft.Yes));

            //fixed bug #:765815 : when parking on hypertext button,focus need to seen on text on the button (not on  entire button)
            if (Focused)
            {
                Size textExt = Utils.GetTextExt(Font, Text, this);
                // get the display the focus on the text of the control
                Rectangle textRect = ControlUtils.GetFocusRect(this, ClientRectangle, newTextAlign, textExt);
                //ass offset, it will look as in online
                textRect.Inflate(2, 2);
                textRect.Width  -= 2;
                textRect.Height -= 1;

                textRect.X      = Math.Max(1, textRect.X);
                textRect.Y      = Math.Max(1, textRect.Y);
                textRect.Width  = Math.Min(textRect.Width, ClientRectangle.Width - textRect.X);
                textRect.Height = Math.Min(textRect.Height, ClientRectangle.Height - textRect.Y);

                ControlPaint.DrawFocusRectangle(e.Graphics, textRect);
            }
        }
Example #3
0
        /// <summary> Renders the text on the Control. </summary>
        /// <param name="g"></param>
        /// <param name="rect"></param>
        /// <param name="fgColor"></param>
        protected virtual void PaintForeground(Graphics g, Rectangle rect, Color fgColor)
        {
            Rectangle drawRect = rect;

            String str = GetNotFocusedText();

            if (UseSystemPasswordChar && str != null && !HasHintWithoutText())
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(PasswordChar, str.Length);
                str = sb.ToString();
            }
            else if (Multiline)
            {
                // find the character near the top left corner of the control.
                int charIdx = GetCharIndexFromPosition(new Point(ClientRectangle.Left, ClientRectangle.Top + 2));
                str = str.Substring(charIdx);
            }

            ControlRenderer.PrintText(g, drawRect, GetNotFocusedColor(), FontDescription, str, Multiline, TextAlign, Enabled, WordWrap, true, false,
                                      RightToLeft == RightToLeft.Yes);
        }
        /// <summary>
        /// Draw the text and the focus rectangle on a CheckBox/RadioButon control.
        /// </summary>
        /// <param name="control"></param>
        /// <param name="e"></param>
        /// <param name="textToDisplay"></param>
        public static void DrawTextAndFocusRect(ButtonBase control, PaintEventArgs e, String textToDisplay, Rectangle rectangle, int textOffset)
        {
            bool             isMultiLine = ControlUtils.GetIsMultiLine(control);
            Rectangle        textRect    = new Rectangle();
            Size             textSize    = new Size();
            ContentAlignment NewTextAli  = ContentAlignment.MiddleCenter;
            FontDescription  font        = new FontDescription(control.Font);

            if (!String.IsNullOrEmpty(textToDisplay))
            {
                textRect   = rectangle;
                NewTextAli = ControlUtils.GetOrgContentAligment(control.RightToLeft, control.TextAlign);
                textSize   = Utils.GetTextExt(control.Font, textToDisplay, control);

                ControlUtils.AlignmentInfo AlignmentInfo = ControlUtils.GetAlignmentInfo(control.TextAlign);
                int Offset = (int)((float)(BOX_WIDTH + textOffset) * Utils.GetDpiScaleRatioX(control));

                switch (AlignmentInfo.HorAlign)
                {
                case AlignmentTypeHori.Left:
                    if (control.RightToLeft == RightToLeft.No)
                    {
                        textRect.X     += Offset;
                        textRect.Width -= Offset;
                    }
                    if (control.RightToLeft == RightToLeft.Yes)
                    {
                        textRect.X -= Offset;
                    }
                    break;

                case AlignmentTypeHori.Right:
                    if (isMultiLine && control.RightToLeft == RightToLeft.No)
                    {
                        textRect.X     += Offset;
                        textRect.Width -= Offset;
                    }
                    break;

                case AlignmentTypeHori.Center:
                    if (control.RightToLeft == RightToLeft.No)
                    {
                        textRect.X     += Offset;
                        textRect.Width -= Offset;
                        // if the text is bigger then the display rect.
                        if (!isMultiLine)
                        {
                            if (textSize.Width > textRect.Width)
                            {
                                textRect.X    += (int)(((textRect.Width - textSize.Width) / 2));
                                textRect.Width = Math.Max(textRect.Width, textSize.Width);
                            }
                        }
                    }
                    else if (control.RightToLeft == RightToLeft.Yes)
                    {
                        textRect.X     -= Offset;
                        textRect.Width += Offset;
                    }
                    break;
                }

                ControlRenderer.PrintText(e.Graphics, textRect, control.ForeColor, font, textToDisplay, isMultiLine, NewTextAli,
                                          control.Enabled, true, false, true, control.RightToLeft == RightToLeft.Yes, true);
            }

            // display the focus on the text of the control
            if (control.Focused)
            {
                if (!String.IsNullOrEmpty(textToDisplay))
                {
                    if (isMultiLine)
                    {
                        textSize = GetTextSize(e, textToDisplay, font, ref textRect, isMultiLine);
                    }

                    // get the display the focus on the text of the control
                    textRect = ControlUtils.GetFocusRect(control, textRect, NewTextAli, textSize);

                    ControlPaint.DrawFocusRectangle(e.Graphics, textRect);
                }
                else
                {
                    //For CheckBox, if the text is not available, focus rect should be drawn on the Glyph.
                    if (control is MgCheckBox)
                    {
                        DrawFocusRectOnCheckBoxGlyph((MgCheckBox)control, e.Graphics);
                    }
                }
            }
        }
Example #5
0
        /// <summary>paint the push button control
        /// Can be called from :
        /// 1. push control with property 'ButtonStyle' = button
        /// 2. CheckBox control with property appearance = button
        /// 3. Radio control with property appearance = button
        /// </summary>
        /// <param name="mgButton"></param>
        /// <param name="e"></param>
        private static void DrawText(Control control, PaintEventArgs e)
        {
            Debug.Assert(control.Visible);
            bool             restoreClip = false;
            Region           r           = e.Graphics.Clip;
            bool             isImage     = false;
            ContentAlignment textAlign   = ContentAlignment.MiddleLeft;
            RightToLeft      rightToLeft = RightToLeft.No;

            String Text = ((IDisplayInfo)control).TextToDisplay;

            if (Text == null)
            {
                return;
            }

            Rectangle displayRect = control.ClientRectangle;

#if PocketPC
            if (control is MgButtonBase)
            {
                isImage     = ((MgButtonBase)control).BackgroundImage != null;
                textAlign   = ((MgButtonBase)control).TextAlign;
                rightToLeft = ((MgButtonBase)control).RightToLeft;
            }
            else if (control is MgCheckBox)
            {
                isImage     = ((MgCheckBox)control).Image != null;
                textAlign   = ((MgCheckBox)control).TextAlign;
                rightToLeft = ((MgCheckBox)control).RightToLeft;
            }
            else
            {
                Debug.Assert(false);
            }
#else
            if (control is ButtonBase)
            {
                if (control is IImageProperty)
                {
                    isImage = ((IImageProperty)control).Image != null;
                }
                else
                {
                    isImage = ((ButtonBase)control).BackgroundImage != null;
                }

                textAlign   = ((ButtonBase)control).TextAlign;
                rightToLeft = ((ButtonBase)control).RightToLeft;
            }
            else
            {
                Debug.Assert(false);
            }
#endif

            // The runtime engine sends the alignment in reverse order if rightToLeft=Yes.
            // This is because the .net framework need it to be in the reverse order when rightToLeft=Yes.
            // So, when we paint the control, we should convert it back to the original alignment.
            textAlign = ControlUtils.GetOrgContentAligment(rightToLeft, textAlign);

            if (!isImage)
            {
                //2. get the display rect
                displayRect = GetTextRect(control);
                if (control is MgPushButton)
                {
                    restoreClip = true;
                    using (Region TextRegion = new Region(displayRect))
                    {
                        e.Graphics.Clip = TextRegion;
                    }
                }
            }

            bool isMultiLine = ControlUtils.GetIsMultiLine(control);
            bool RTL         = rightToLeft == RightToLeft.Yes ? true : false;
            //4. display the text of the control

            FontDescription font = new FontDescription(control.Font);
            ControlRenderer.PrintText(e.Graphics, displayRect, control.ForeColor, font, Text, isMultiLine,
                                      textAlign, control.Enabled, false, false, false, RTL, true);
            if (restoreClip)
            {
                e.Graphics.Clip = r;
            }

            //focus rect should not be drawn for image button.
            if (!ControlUtils.IsImageButton(control))
            {
                if (control.Focused)
                {
                    displayRect.Inflate(-1, -1);
                    ControlPaint.DrawFocusRectangle(e.Graphics, displayRect);
                }
            }
        }
Example #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="graphics"></param>
 /// <param name="rect"></param>
 protected virtual void DrawForeground(Graphics graphics, Rectangle rect)
 {
     ControlRenderer.PrintText(graphics, rect, ForeColor, FontDescription, Text, Multiline, TextAlign,
                               Enabled, true, !UseMnemonic, false, (RightToLeft == RightToLeft.Yes), FontOrientation);
 }