MCPcopy Create free account
hub / github.com/Card-Forge/forge / generateFont

Method generateFont

forge-gui-mobile/src/forge/assets/FSkinFont.java:443–508  ·  view source on GitHub ↗
(final FileHandle ttfFile, final String fontName, final int fontSize)

Source from the content-addressed store, hash-verified

441 }
442
443 private void generateFont(final FileHandle ttfFile, final String fontName, final int fontSize) {
444 if (!ttfFile.exists()) { return; }
445
446 final FreeTypeFontGenerator generator = new FreeTypeFontGenerator(ttfFile);
447
448 //approximate optimal page size
449 int pageSize;
450 if (fontSize >= 50) {
451 pageSize = 1024;
452 } else if (fontSize >= 20) {
453 pageSize = 512;
454 } else {
455 pageSize = 256;
456 }
457 if (Lang.initInstance(Forge.locale).getFontFile() != null && !Forge.forcedEnglishonCJKMissing) {
458 pageSize = 1024;
459 }
460
461 final PixmapPacker packer = new PixmapPacker(pageSize, pageSize, Pixmap.Format.RGBA8888, 2, false);
462 final FreeTypeFontParameter parameter = new FreeTypeFontParameter();
463 parameter.characters = getCharacterSet(Forge.locale);
464 parameter.size = fontSize;
465 parameter.packer = packer;
466 final FreeTypeFontGenerator.FreeTypeBitmapFontData fontData = generator.generateData(parameter);
467 final Array<PixmapPacker.Page> pages = packer.getPages();
468
469 //finish generating font on UI thread
470 FThreads.invokeInEdtNowOrLater(new Runnable() {
471 @Override
472 public void run() {
473 Array<TextureRegion> textureRegions = new Array<>();
474 for (int i = 0; i < pages.size; i++) {
475 PixmapPacker.Page p = pages.get(i);
476 Texture texture = new Texture(new PixmapTextureData(p.getPixmap(), p.getPixmap().getFormat(), false, false)) {
477 @Override
478 public void dispose() {
479 super.dispose();
480 getTextureData().consumePixmap().dispose();
481 }
482 };
483 texture.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
484 textureRegions.addAll(new TextureRegion(texture));
485 }
486
487 BitmapFont temp = new BitmapFont(fontData, textureRegions, true);
488
489 //create .fnt and .png files for font
490 FileHandle pixmapDir = Gdx.files.absolute(ForgeConstants.FONTS_DIR);
491 if (pixmapDir != null) {
492 FileHandle fontFile = pixmapDir.child(fontName + ".fnt");
493 BitmapFontWriter.setOutputFormat(BitmapFontWriter.OutputFormat.Text);
494
495 String[] pageRefs = BitmapFontWriter.writePixmaps(packer.getPages(), pixmapDir, fontName);
496 BitmapFontWriter.writeFont(temp.getData(), pageRefs, fontFile, new BitmapFontWriter.FontInfo(fontName, fontSize), 1, 1);
497 //load to assetManager
498 Forge.getAssets().manager().load(fontFile.path(), BitmapFont.class);
499 Forge.getAssets().manager().finishLoadingAsset(fontFile.path());
500 font = Forge.getAssets().manager().get(fontFile.path(), BitmapFont.class);

Callers 1

updateFontMethod · 0.95

Calls 5

initInstanceMethod · 0.95
getCharacterSetMethod · 0.95
invokeInEdtNowOrLaterMethod · 0.95
getPagesMethod · 0.80
getFontFileMethod · 0.45

Tested by

no test coverage detected