Ejemplo n.º 1
0
        public void DrawText(string text, GLFont font, float startX, float startY, GLBrush brush, float width = 1000)
        {
            if (string.IsNullOrEmpty(text))
            {
                return;
            }

            GL.Enable(EnableCap.Texture2D);
            GL.BindTexture(TextureTarget.Texture2D, font.Texture);
            GL.Color4(brush.Color0.R, brush.Color0.G, brush.Color0.B, (byte)255);
            GL.Begin(BeginMode.Quads);

            int alignmentOffsetX = 0;

            if (font.Alignment != 0)
            {
                font.MeasureString(text, out int minX, out int maxX);

                if (font.Alignment == 1)
                {
                    alignmentOffsetX -= minX;
                    alignmentOffsetX += ((int)width - maxX - minX) / 2;
                }
                else
                {
                    alignmentOffsetX -= minX;
                    alignmentOffsetX += ((int)width - maxX - minX);
                }
            }

            int x = (int)(startX + alignmentOffsetX);
            int y = (int)(startY + font.OffsetY);

            for (int i = 0; i < text.Length; i++)
            {
                var c0   = text[i];
                var info = font.GetCharInfo(c0);

                int x0 = x + info.xoffset;
                int y0 = y + info.yoffset;
                int x1 = x0 + info.width;
                int y1 = y0 + info.height;

                GL.TexCoord2(info.u0, info.v0); GL.Vertex2(x0, y0);
                GL.TexCoord2(info.u1, info.v0); GL.Vertex2(x1, y0);
                GL.TexCoord2(info.u1, info.v1); GL.Vertex2(x1, y1);
                GL.TexCoord2(info.u0, info.v1); GL.Vertex2(x0, y1);

                x += info.xadvance;
                if (i != text.Length - 1)
                {
                    char c1 = text[i + 1];
                    x += font.GetKerning(c0, c1);
                }
            }

            GL.End();
            GL.Disable(EnableCap.Texture2D);
        }
Ejemplo n.º 2
0
 public float MeasureString(string text, GLFont font)
 {
     font.MeasureString(text, out int minX, out int maxX);
     return(maxX - minX);
 }