Esempio n. 1
0
        //----------------------------------------------------------------------
        public void DrawWithOffset(Point _pOffset)
        {
            if (WrapText)
            {
                for (int i = 0; i < mlWrappedText.Count; i++)
                {
                    float fX         = mpTextPosition.X + _pOffset.X;
                    float fTextWidth = mFont.MeasureString(mlWrappedText[i].Item1).X;
                    if (Anchor == UI.Anchor.Center)
                    {
                        fX += ContentWidth / 2 - Padding.Left - fTextWidth / 2f;
                    }

                    Screen.Game.DrawBlurredText(OutlineRadius, mFont, mlWrappedText[i].Item1, new Vector2((int)fX, mpTextPosition.Y + (int)(Font.LineSpacing * i) + Font.YOffset + _pOffset.Y), Color, OutlineColor);

                    if (Underline)
                    {
                        var vBottomLeft = new Vector2(fX, mpTextPosition.Y + (int)(Font.LineSpacing * (i + 1)) + Font.YOffset + _pOffset.Y);
                        Screen.Game.DrawLine(vBottomLeft, vBottomLeft + new Vector2(fTextWidth, 0), Color);
                    }
                }
            }
            else
            {
                Screen.Game.DrawBlurredText(OutlineRadius, mFont, mstrDisplayedText, new Vector2(mpTextPosition.X + _pOffset.X, mpTextPosition.Y + Font.YOffset + _pOffset.Y), Color, OutlineColor);

                if (Underline)
                {
                    var vBottomLeft = new Vector2(mpTextPosition.X + _pOffset.X, mpTextPosition.Y + Font.YOffset + _pOffset.Y + Font.LineSpacing);
                    Screen.Game.DrawLine(vBottomLeft, vBottomLeft + new Vector2(miEllipsizedTextWidth - Padding.Horizontal, 0), Color);
                }
            }
        }
Esempio n. 2
0
        //----------------------------------------------------------------------
        protected internal override void UpdateContentSize()
        {
            UIFont uiFont = Screen.Style.MediumFont;

            int iMaxWidth = 0;

            foreach (DropDownItem _item in Items)
            {
                iMaxWidth = Math.Max(iMaxWidth, (int)uiFont.MeasureString(_item.Text).X);
            }

            ContentWidth  = iMaxWidth + Padding.Horizontal + TextPadding.Horizontal + Screen.Style.DropDownArrow.Width;
            ContentHeight = (int)(uiFont.LineSpacing * 0.9f) + Padding.Vertical + TextPadding.Vertical;

            base.UpdateContentSize();
        }
Esempio n. 3
0
        //----------------------------------------------------------------------
        public override void Draw()
        {
            if (mfTooltipTimer < sfTooltipDelay || string.IsNullOrEmpty(Text))
            {
                return;
            }

            UIFont font = Screen.Style.MediumFont;

            Vector2 vSize   = font.MeasureString(Text);
            int     iWidth  = (int)vSize.X;
            int     iHeight = (int)vSize.Y;

            Point topLeft = new Point(
                Math.Min(Screen.Game.InputMgr.MouseState.X, Screen.Width - iWidth - Padding.Horizontal),
                Math.Min(Screen.Game.InputMgr.MouseState.Y + 20, Screen.Height - iHeight - Padding.Vertical));

            Screen.DrawBox(Screen.Style.TooltipFrame, new Rectangle(topLeft.X, topLeft.Y, iWidth + Padding.Horizontal, iHeight + Padding.Vertical), Screen.Style.TooltipCornerSize, Color.White);
            Screen.Game.SpriteBatch.DrawString(font, Text, new Vector2(topLeft.X + Padding.Left, topLeft.Y + Padding.Top + font.YOffset), Screen.Style.TooltipTextColor);
        }
Esempio n. 4
0
        int ComputeCaretOffsetAtX( int _iX, string _strText, UIFont _font )
        {
            // FIXME: This does many calls to Font.MeasureString
            // We should do a binary search instead!
            int iIndex = 0;
            float fPreviousX = 0f;

            while( iIndex < _strText.Length )
            {
                iIndex++;

                float fX = _font.MeasureString( _strText.Substring( 0, iIndex ) ).X;
                if( fX > _iX )
                {
                    bool bAfter = ( fX - _iX ) < ( ( fX - fPreviousX ) / 2f );
                    return bAfter ? iIndex : ( iIndex - 1 );
                }

                fPreviousX = fX;
            }

            return _strText.Length;
        }