use of org.terasology.rendering.assets.font.Font in project Terasology by MovingBlocks.
the class UIScrollingText method updateYValues.
/**
* Updates the Y values of the text shown in this {@code UIScrollingText} each frame
* or initialises them if they are empty.
*
* @param canvas The {@code Canvas} on which this {@code UIScrollingText} is drawn
*/
private void updateYValues(Canvas canvas) {
if (!textY.isEmpty()) {
for (Entry<String, Integer> entry : textY.entrySet()) {
textY.put(entry.getKey(), entry.getValue() - step);
}
} else {
String[] parsed = getText().split("\\r?\\n", -1);
Font font = canvas.getCurrentStyle().getFont();
int y = canvas.size().y + lineSpacing;
for (String line : parsed) {
textY.put(line, y);
y += font.getHeight(line) + lineSpacing;
}
}
}
use of org.terasology.rendering.assets.font.Font in project Terasology by MovingBlocks.
the class UIScrollingText method getPreferredContentSize.
/**
* Retrieves the preferred content size of this {@code UIScrollingText}.
* This is the minimum size this layout will take, given no space restrictions.
*
* @param canvas The {@code Canvas} on which this {@code UIScrollingText} is drawn
* @param areaHint A {@link Vector2i} representing the available space for this {@code UIScrollingText}
* @return A {@code Vector2i} representing the preferred content size of this {@code UIScrollingText}
*/
@Override
public Vector2i getPreferredContentSize(Canvas canvas, Vector2i areaHint) {
Font font = canvas.getCurrentStyle().getFont();
List<String> lines = TextLineBuilder.getLines(font, getText(), areaHint.x);
return font.getSize(lines);
}
use of org.terasology.rendering.assets.font.Font in project Terasology by MovingBlocks.
the class UIText method drawCursor.
/**
* Draws the cursor in the text field.
*
* @param canvas The canvas on which the widget resides
*/
protected void drawCursor(Canvas canvas) {
if (blinkCounter < BLINK_RATE) {
Font font = canvas.getCurrentStyle().getFont();
String beforeCursor = text.get();
if (getCursorPosition() < text.get().length()) {
beforeCursor = beforeCursor.substring(0, getCursorPosition());
}
List<String> lines = TextLineBuilder.getLines(font, beforeCursor, canvas.size().x);
// TODO: Support different alignments
int lastLineWidth = font.getWidth(lines.get(lines.size() - 1));
Rect2i region = Rect2i.createFromMinAndSize(lastLineWidth, (lines.size() - 1) * font.getLineHeight(), 1, font.getLineHeight());
canvas.drawTexture(cursorTexture, region, canvas.getCurrentStyle().getTextColor());
}
}
use of org.terasology.rendering.assets.font.Font in project Terasology by MovingBlocks.
the class TextFlowRenderable method splitAt.
@Override
public FlowRenderable.SplitResult<TextFlowRenderable> splitAt(TextRenderStyle defaultRenderStyle, int width) {
Font font = getTextRenderStyle(defaultRenderStyle).getFont(hyperlink != null);
if (!text.contains("\n")) {
int wholeTextWidth = font.getWidth(text);
if (wholeTextWidth <= width) {
return new SplitResult<>(this, null);
}
}
int spaceWidth = font.getWidth(' ');
boolean first = true;
int usedSpace = 0;
StringBuilder before = new StringBuilder();
StringBuilder after = new StringBuilder();
boolean appendingToBefore = true;
String[] lines = text.split("\n");
String[] words = lines[0].split(" ");
for (String word : words) {
if (appendingToBefore) {
if (!first) {
usedSpace += spaceWidth;
before.append(" ");
}
usedSpace += font.getWidth(word);
if (usedSpace > width) {
if (before.length() == 0) {
return new SplitResult<>(null, this);
} else {
appendingToBefore = false;
after.append(word);
}
} else {
before.append(word);
}
first = false;
} else {
after.append(" ");
after.append(word);
}
}
if (lines[0].endsWith(" ")) {
after.append(" ");
}
after = trimLeft(after);
boolean firstLine = true;
for (int i = 1; i < lines.length; i++) {
if (!firstLine || after.length() > 0) {
after.append("\n");
}
after.append(lines[i]);
firstLine = false;
}
String beforeText = trimRight(before).toString();
String afterText = after.toString();
if (afterText.isEmpty()) {
return new SplitResult<>(new TextFlowRenderable(beforeText, textRenderStyle, hyperlink), null);
} else {
return new SplitResult<>(new TextFlowRenderable(beforeText, textRenderStyle, hyperlink), new TextFlowRenderable(afterText, textRenderStyle, hyperlink));
}
}
use of org.terasology.rendering.assets.font.Font in project Terasology by MovingBlocks.
the class LwjglGraphics method registerCoreAssetTypes.
@Override
public void registerCoreAssetTypes(ModuleAwareAssetTypeManager assetTypeManager) {
// cast lambdas explicitly to avoid inconsistent compiler behavior wrt. type inference
assetTypeManager.registerCoreAssetType(Font.class, (AssetFactory<Font, FontData>) FontImpl::new, "fonts");
assetTypeManager.registerCoreAssetType(Texture.class, (AssetFactory<Texture, TextureData>) (urn, assetType, data) -> (new OpenGLTexture(urn, assetType, data, this)), "textures", "fonts");
assetTypeManager.registerCoreFormat(Texture.class, new PNGTextureFormat(Texture.FilterMode.NEAREST, path -> {
if (path.getName(1).toString().equals(ModuleAssetDataProducer.OVERRIDE_FOLDER)) {
return path.getName(3).toString().equals("textures");
} else {
return path.getName(2).toString().equals("textures");
}
}));
assetTypeManager.registerCoreFormat(Texture.class, new PNGTextureFormat(Texture.FilterMode.LINEAR, path -> {
if (path.getName(1).toString().equals(ModuleAssetDataProducer.OVERRIDE_FOLDER)) {
return path.getName(3).toString().equals("fonts");
} else {
return path.getName(2).toString().equals("fonts");
}
}));
assetTypeManager.registerCoreAssetType(Shader.class, (AssetFactory<Shader, ShaderData>) GLSLShader::new, "shaders");
assetTypeManager.registerCoreAssetType(Material.class, (AssetFactory<Material, MaterialData>) GLSLMaterial::new, "materials");
assetTypeManager.registerCoreAssetType(Mesh.class, (AssetFactory<Mesh, MeshData>) (urn, assetType, data) -> new OpenGLMesh(urn, assetType, bufferPool, data), "mesh");
assetTypeManager.registerCoreAssetType(SkeletalMesh.class, (AssetFactory<SkeletalMesh, SkeletalMeshData>) (urn, assetType, data) -> new OpenGLSkeletalMesh(urn, assetType, data, bufferPool), "skeletalMesh");
assetTypeManager.registerCoreAssetType(MeshAnimation.class, (AssetFactory<MeshAnimation, MeshAnimationData>) MeshAnimationImpl::new, "animations");
assetTypeManager.registerCoreAssetType(Atlas.class, (AssetFactory<Atlas, AtlasData>) Atlas::new, "atlas");
assetTypeManager.registerCoreAssetType(Subtexture.class, (AssetFactory<Subtexture, SubtextureData>) Subtexture::new);
}
Aggregations