Пример #1
0
        /// <summary>
        /// Katkaisee merkkijonon loppupäästä niin että se sopii annettuun
        /// pikselileveyteen fontilla kirjoitettuna.
        /// </summary>
        /// <param name="str">Merkkijono</param>
        /// <param name="maxLineWidth">Maksimipikselimäärä merkkijonolle</param>
        /// <returns></returns>
        public string TruncateText(string str, double maxLineWidth)
        {
            StringBuilder builder   = new StringBuilder(str);
            double        realWidth = XnaFont.MeasureString(str).X;

            while (realWidth > maxLineWidth)
            {
                builder.Remove(builder.Length - 1, 1);
                realWidth = XnaFont.MeasureString(builder).X;
            }

            return(builder.ToString());
        }
Пример #2
0
        private void DrawNameTooltip(RenderEnv env, string name, XnaFont font, Vector2 mapPosition, Color color)
        {
            SpriteBatchEx sprite = env.Sprite;
            Vector2       size   = font.MeasureString(name);
            Rectangle     rect   = new Rectangle((int)(mapPosition.X - size.X / 2 - 2), (int)(mapPosition.Y + 2), (int)(size.X + 4), (int)(size.Y + 3));

            sprite.FillRectangle(rect, new Color(Color.Black, 0.7f), env.Camera.Origin);
            sprite.DrawStringEx(
                font,
                name,
                new Vector2(rect.X + 2, rect.Y + 2),
                color,
                env.Camera.Origin);
        }
Пример #3
0
        private void PrepareTextBlock(IList <TextBlock> list, XnaFont font, string text, ref Vector2 pos, Color color)
        {
            Vector2 size = font.MeasureString(text);

            TextBlock block = new TextBlock();

            block.Font      = font;
            block.Text      = text;
            block.Position  = pos;
            block.ForeColor = color;
            list.Add(block);

            pos.X += size.X;
        }
Пример #4
0
        public static TextBlock PrepareTextBlock(XnaFont font, string text, ref Vector2 pos, Color color)
        {
            Vector2 size = font.MeasureString(text);

            TextBlock block = new TextBlock();

            block.Font      = font;
            block.Text      = text;
            block.Position  = pos;
            block.ForeColor = color;

            pos.X += size.X;
            return(block);
        }
Пример #5
0
        /// <summary>
        /// Rivittää tekstin.
        /// </summary>
        /// <param name="text">Rivitettävä teksti.</param>
        /// <param name="softLineWidth">Leveys jonka jälkeen seuraava sana rivitetään seuraavalle riville.</param>
        /// <param name="hardLineWidth">Leveys jonka jälkeen sana katkaistaan keskeltä.</param>
        public string WrapText(string text, double softLineWidth, double hardLineWidth)
        {
            if (softLineWidth <= 0 || hardLineWidth <= 0)
            {
                throw new ArgumentException("Width must be positive.");
            }

            StringBuilder src       = new StringBuilder(text);
            StringBuilder word      = new StringBuilder();
            StringBuilder line      = new StringBuilder();
            StringBuilder dest      = new StringBuilder();
            double        lineWidth = 0;

            while (src.Length > 0 || word.Length > 0)
            {
                if (word.Length == 0)
                {
                    src.TakeFirstWord(word);
                }

                var wordWidth = XnaFont.MeasureString(word).X;

                if (lineWidth + wordWidth > softLineWidth)
                {
                    appendLine(dest, line);
                    word.PutTo(line);
                    lineWidth = 0;
                }
                else if (lineWidth + wordWidth > hardLineWidth)
                {
                    int wi = FindWrapIndex(word, hardLineWidth - lineWidth, false);
                    word.PutTo(line, 0, wi + 1);
                    appendLine(dest, line);
                    lineWidth = 0;
                }
                else
                {
                    word.PutTo(line);
                    lineWidth += wordWidth;
                }
            }

            if (line.Length > 0)
            {
                appendLine(dest, line);
            }

            return(dest.ToString());
        }
Пример #6
0
        private void PrepareTextLine(IList <TextBlock> list, XnaFont font, string text, ref Vector2 pos, Color color, ref float maxWidth)
        {
            Vector2 size = font.MeasureString(text);

            TextBlock block = new TextBlock();

            block.Font      = font;
            block.Text      = text;
            block.Position  = pos;
            block.ForeColor = color;
            list.Add(block);

            maxWidth = Math.Max(pos.X + size.X, maxWidth);
            pos.X    = 0;
            pos.Y   += size.Y;
        }
Пример #7
0
        /// <summary>
        /// Palauttaa annetun merkin koon tässä fontissa.
        /// </summary>
        /// <param name="c">Merkki</param>
        /// <returns>Kokovektori, nollavektori jos merkkiä ei ole määritelty</returns>
        public Vector GetCharacterSize(char c)
        {
            int index = XnaFont.Characters.IndexOf(c);

            if (index < 0)
            {
                return(Vector.Zero);
            }

            if (charsizes[index] == Vector.Zero)
            {
                XnaV2 xnaSize = XnaFont.MeasureString(c.ToString());
                charsizes[index] = new Vector(xnaSize.X, xnaSize.Y);
            }

            return(charsizes[index]);
        }
Пример #8
0
        public static TextBlock PrepareTextLine(XnaFont font, string text, ref Vector2 pos, Color color, ref float maxWidth)
        {
            Vector2 size = font.MeasureString(text);

            TextBlock block = new TextBlock();

            block.Font      = font;
            block.Text      = text;
            block.Position  = pos;
            block.ForeColor = color;

            maxWidth = Math.Max(pos.X + size.X, maxWidth);
            pos.X    = 0;
            pos.Y   += font.Height;

            if (size.Y >= font.Height)
            {
                pos.Y += size.Y - font.BaseFont.Size;
            }

            return(block);
        }