示例#1
0
        public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info)
        {
            Update(info.EllapsedTime, info.ButtonState);

            SharedString str = _text != null ? _text : info.Text;

            float         scale = _font.Scale;
            UniversalFont font  = _font.Font;

            Color color = ColorFromState * info.Opacity * Opacity;

            Rectangle target = _margin.ComputeRect(info.Target);

            drawBatch.DrawText(font, str, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation);
        }
示例#2
0
        public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info)
        {
            Update(info.EllapsedTime, info.ButtonState);

            SharedString str = _text != null ? _text : info.Text;

            float         scale = _font.Scale;
            UniversalFont font  = _font.Font;

            Color     color  = ColorFromState * info.Opacity * Opacity;
            Rectangle target = _margin.ComputeRect(info.Target);

            bool drawWithEllipsis = false;
            int  ellipsisSize     = _textRotation == TextRotation.Rotate90 || _textRotation == TextRotation.Rotate270 ? target.Height : target.Width;

            if (_pathEllipsis)
            {
                int length = (int)_font.MeasureString(str).X;

                if (length >= ellipsisSize)
                {
                    drawWithEllipsis = true;
                }
            }

            if (drawWithEllipsis)
            {
                int cut = 3;
                while (drawWithEllipsis)
                {
                    lock (str)
                    {
                        ComputeEllipsis(_stringBuilder, str.StringBuilder, cut);
                    }

                    int length = (int)_font.MeasureString(_stringBuilder).X;

                    if (length < ellipsisSize)
                    {
                        break;
                    }

                    cut += 2;
                }

                drawBatch.DrawText(font, _stringBuilder, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation);
            }
            else if (_line >= 0)
            {
                _stringBuilder.Clear();

                lock (str)
                {
                    StringBuilder textStringBuilder = str.StringBuilder;

                    int line = 0;

                    for (int idx = 0; idx < textStringBuilder.Length; ++idx)
                    {
                        char character = textStringBuilder[idx];

                        if (character == '\n')
                        {
                            line++;

                            if (line > _line)
                            {
                                break;
                            }
                        }

                        if (character == '\r')
                        {
                            continue;
                        }

                        if (line == _line)
                        {
                            _stringBuilder.Append(textStringBuilder[idx]);
                        }
                    }
                }

                drawBatch.DrawText(font, _stringBuilder, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation);
            }
            else
            {
                drawBatch.DrawText(font, str, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation);
            }
        }
示例#3
0
        public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info)
        {
            int  carretPosition = info.Additional != null ? (int)info.Additional : -1;
            bool focused        = false;

            Update(info.EllapsedTime, info.ButtonState);

            if (info.ButtonState.HasFlag(ButtonState.Checked) && carretPosition >= 0)
            {
                _flash += info.EllapsedTime * 2;
                _flash %= 2;
                focused = true;
            }
            else
            {
                _flash = 0;
            }

            SharedString str = info.Text;

            float         scale = _font.Scale;
            UniversalFont font  = _font.Font;
            Color         color = ColorFromState * info.Opacity * Opacity;

            Rectangle target  = _margin.ComputeRect(info.Target);
            float     spacing = _font.Spacing;

            lock (str)
            {
                StringBuilder builder = str.StringBuilder;

                if (_flash > 1)
                {
                    _string.Clear();
                    carretPosition = Math.Min(builder.Length, carretPosition);
                    for (int idx = 0; idx < carretPosition; ++idx)
                    {
                        _string.Append(builder[idx]);
                    }

                    carretPosition = (int)(font.MeasureString(_string, spacing, 0) * scale).X;
                }

                _string.Clear();
                _string.Append(builder);
            }

            Vector2 size = font.MeasureString(_string, spacing, 0) * scale;

            if (focused)
            {
                size.X += font.MeasureString("|", spacing).X *scale;
            }

            int positionX = target.X;

            if (size.X >= target.Width)
            {
                positionX = target.Right - (int)size.X;
            }
            else
            {
                switch (_textAlign & TextAlign.Horz)
                {
                case TextAlign.Right:
                    positionX = target.Right - (int)size.X;
                    break;

                case TextAlign.Center:
                    positionX = target.Center.X - (int)size.X / 2;
                    break;
                }
            }

            drawBatch.PushClip(target);

            target.X = positionX;

            drawBatch.DrawText(font, _string, target, _textAlign & TextAlign.Vert, color, spacing, 0, scale, TextRotation.None);

            if (_flash > 1)
            {
                target.X += carretPosition;

                drawBatch.DrawText(font, "|", target, _textAlign & TextAlign.Vert, color, spacing, 0, scale);
            }

            drawBatch.PopClip();
        }