• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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