1 /******************************************************************************* 2 * Copyright 2011 See AUTHORS file. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 ******************************************************************************/ 16 17 package com.badlogic.gdx.tests.extensions; 18 19 import com.badlogic.gdx.Gdx; 20 import com.badlogic.gdx.files.FileHandle; 21 import com.badlogic.gdx.graphics.Color; 22 import com.badlogic.gdx.graphics.GL20; 23 import com.badlogic.gdx.graphics.g2d.BitmapFont; 24 import com.badlogic.gdx.graphics.g2d.GlyphLayout; 25 import com.badlogic.gdx.graphics.g2d.SpriteBatch; 26 import com.badlogic.gdx.graphics.g2d.TextureAtlas; 27 import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; 28 import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData; 29 import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter; 30 import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 31 import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; 32 import com.badlogic.gdx.tests.utils.GdxTest; 33 34 public class FreeTypeMetricsTest extends GdxTest { 35 private SpriteBatch spriteBatch; 36 private TextureAtlas atlas; 37 private BitmapFont font, smallFont; 38 private ShapeRenderer renderer; 39 40 @Override create()41 public void create () { 42 spriteBatch = new SpriteBatch(); 43 atlas = new TextureAtlas("data/pack"); 44 smallFont = new BitmapFont(); 45 46 FreeTypeFontParameter parameter = new FreeTypeFontParameter(); 47 parameter.size = 60; 48 49 FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("data/arial.ttf")); 50 font = generator.generateFont(parameter); 51 generator.dispose(); 52 53 renderer = new ShapeRenderer(); 54 renderer.setProjectionMatrix(spriteBatch.getProjectionMatrix()); 55 } 56 57 @Override render()58 public void render () { 59 // red.a = (red.a + Gdx.graphics.getDeltaTime() * 0.1f) % 1; 60 61 int viewHeight = Gdx.graphics.getHeight(); 62 63 Gdx.gl.glClearColor(1, 1, 1, 1); 64 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 65 spriteBatch.begin(); 66 67 // String text = "Sphinx of black quartz, judge my vow."; 68 String text = "Sphinx of black quartz."; 69 font.setColor(Color.RED); 70 71 float x = 20, y = 200; 72 float alignmentWidth; 73 74 smallFont.setColor(Color.BLACK); 75 smallFont.draw(spriteBatch, "draw position", 20, viewHeight - 0); 76 smallFont.setColor(Color.BLUE); 77 smallFont.draw(spriteBatch, "bounds", 20, viewHeight - 20); 78 smallFont.setColor(Color.MAGENTA); 79 smallFont.draw(spriteBatch, "baseline", 20, viewHeight - 40); 80 smallFont.setColor(Color.GREEN); 81 smallFont.draw(spriteBatch, "x height", 20, viewHeight - 60); 82 smallFont.setColor(Color.CYAN); 83 smallFont.draw(spriteBatch, "ascent", 20, viewHeight - 80); 84 smallFont.setColor(Color.RED); 85 smallFont.draw(spriteBatch, "descent", 20, viewHeight - 100); 86 smallFont.setColor(Color.ORANGE); 87 smallFont.draw(spriteBatch, "line height", 20, viewHeight - 120); 88 smallFont.setColor(Color.LIGHT_GRAY); 89 smallFont.draw(spriteBatch, "cap height", 20, viewHeight - 140); 90 91 font.setColor(Color.BLACK); 92 GlyphLayout layout = font.draw(spriteBatch, text, x, y); 93 94 spriteBatch.end(); 95 96 renderer.begin(ShapeType.Filled); 97 renderer.setColor(Color.BLACK); 98 renderer.rect(x - 3, y - 3, 6, 6); 99 renderer.end(); 100 101 float baseline = y - font.getCapHeight(); 102 renderer.begin(ShapeType.Line); 103 renderer.setColor(Color.LIGHT_GRAY); 104 renderer.line(0, y, 9999, y); 105 renderer.setColor(Color.MAGENTA); 106 renderer.line(0, baseline, 9999, baseline); 107 renderer.setColor(Color.GREEN); 108 renderer.line(0, baseline + font.getXHeight(), 9999, baseline + font.getXHeight()); 109 renderer.setColor(Color.CYAN); 110 renderer.line(0, y + font.getAscent(), 9999, y + font.getAscent()); 111 renderer.setColor(Color.RED); 112 renderer.line(0, baseline + font.getDescent(), 9999, baseline + font.getDescent()); 113 renderer.setColor(Color.ORANGE); 114 renderer.line(0, y - font.getLineHeight(), 9999, y - font.getLineHeight()); 115 renderer.end(); 116 117 renderer.begin(ShapeType.Line); 118 renderer.setColor(Color.BLUE); 119 renderer.rect(x, y, layout.width, -layout.height); 120 renderer.end(); 121 } 122 123 @Override dispose()124 public void dispose () { 125 spriteBatch.dispose(); 126 renderer.dispose(); 127 font.dispose(); 128 atlas.dispose(); 129 } 130 } 131