(final FileHandle ttfFile, final String fontName, final int fontSize)
| 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); |
no test coverage detected