/// <summary> /// Draws a string at a specified location. /// </summary> /// <param name="str">The string to draw..</param> /// <param name="X">The X location to draw it at.</param> /// <param name="Y">The Y location to draw it at.</param> /// <param name="color">The color.</param> /// <param name="vbo">The VBO to render with.</param> /// <param name="flip">Whether to flip text upside-down.</param> /// <returns>The length of the string in pixels.</returns> public float DrawString(string str, float X, float Y, Vector4 color, TextVBO vbo, bool flip = false) { IEnumerable <string> strs = SeparateEmojiAndSpecialChars(str).ToList(); float nX = 0; if (flip) { foreach (string stri in strs) { if (stri == "\n") { Y += Height; nX = 0; } nX += DrawSingleCharacterFlipped(stri, X + nX, Y, vbo, color); } } else { foreach (string stri in strs) { if (stri == "\n") { Y += Height; nX = 0; } nX += DrawSingleCharacter(stri, X + nX, Y, vbo, color); } } return(nX); }
/// <summary> /// Draws a single symbol at a specified location, flipped. /// </summary> /// <param name="symbol">The symbol to draw..</param> /// <param name="X">The X location to draw it at.</param> /// <param name="Y">The Y location to draw it at.</param> /// <param name="vbo">The VBO to render with.</param> /// <param name="color">The color.</param> /// <returns>The length of the character in pixels.</returns> public float DrawSingleCharacterFlipped(string symbol, float X, float Y, TextVBO vbo, Vector4 color) { RectangleF rec = RectForSymbol(symbol); vbo.AddQuad(X, Y, X + rec.Width, Y + rec.Height, rec.X / GLFontEngine.DEFAULT_TEXTURE_SIZE_WIDTH, rec.Y / GLFontEngine.DEFAULT_TEXTURE_SIZE_WIDTH, (rec.X + rec.Width) / Engine.CurrentHeight, (rec.Y + rec.Height) / Engine.CurrentHeight, color); return(rec.Width); }