Example #1
0
        internal void InternalDrawString(SpriteBatch sb, string text, Vector2 position,
                                         Color color, float rotation, Vector2 origin, Vector2 scale,
                                         SpriteEffects effects, float layerDepth)
        {
            if (effects != SpriteEffects.None)
            {
                throw new NotImplementedException("Flipped text is not implemented");
            }

            Vector2 offset    = origin / internalScale;
            bool    lineStart = true;

            foreach (char c in text)
            {
                if (c == '\r')
                {
                    continue;
                }

                if (c == '\n')
                {
                    offset.Y -= LineSpacing;
                    offset.X  = origin.X;
                    lineStart = true;
                    continue;
                }

                if (characterData.ContainsKey(c) == false)
                {
                    continue;                     // TODO: Make this match XNA behaviour
                }
                GlyphData g = characterData[c];

                if (!lineStart)
                {
                    offset.X -= g.Kerning.X;                     // add A spacing
                }
                sb.InternalDraw(texture, position, g.Glyph,
                                color, rotation, offset - new Vector2(g.Cropping.X, g.Cropping.Y),
                                scale * internalScale, SpriteEffects.None, layerDepth);

                offset.X -= (g.Kerning.Y + g.Kerning.Z + Spacing);                 // add B, C and user spacing

                lineStart = false;
            }
        }
Example #2
0
		internal void InternalDrawString(SpriteBatch sb, string text, Vector2 position,
				Color color, float rotation, Vector2 origin, Vector2 scale,
				SpriteEffects effects, float layerDepth)
		{
			if(effects != SpriteEffects.None)
				throw new NotImplementedException("Flipped text is not implemented");

			Vector2 offset = origin / internalScale;
			bool lineStart = true;

			foreach(char c in text)
			{
				if(c == '\r')
					continue;

				if(c == '\n')
				{
					offset.Y -= LineSpacing;
					offset.X = origin.X;
					lineStart = true;
					continue;
				}

				if(characterData.ContainsKey(c) == false)
					continue; // TODO: Make this match XNA behaviour

				GlyphData g = characterData[c];

				if(!lineStart)
					offset.X -= g.Kerning.X; // add A spacing

				sb.InternalDraw(texture, position, g.Glyph,
						color, rotation, offset - new Vector2(g.Cropping.X, g.Cropping.Y),
						scale * internalScale, SpriteEffects.None, layerDepth);

				offset.X -= (g.Kerning.Y + g.Kerning.Z + Spacing); // add B, C and user spacing

				lineStart = false;
			}
		}