diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java index e3163c0cc..264e5e69d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java @@ -527,25 +527,26 @@ public class DefineFont2Tag extends FontTag { @Override public void setAdvanceValues(Font font) { - boolean hasLayout = fontFlagsHasLayout; - fontFlagsHasLayout = true; - fontAdvanceTable = new ArrayList<>(); - if (!hasLayout) { - fontBoundsTable = new ArrayList<>(); - fontKerningTable = new ArrayList<>(); - } - - for (Integer character : codeTable) { + List newFontBoundsTable = new ArrayList<>(); + List newFontAdvanceTable = new ArrayList<>(); + for (int i = 0; i < codeTable.size(); i++) { + Integer character = codeTable.get(i); char ch = (char) (int) character; - if (!font.canDisplay(ch)) { + if (!font.canDisplay(ch) && fontFlagsHasLayout) { //cannot display, leave old if exist + newFontAdvanceTable.add(fontAdvanceTable.get(i)); + newFontBoundsTable.add(fontBoundsTable.get(i)); continue; } SHAPE shp = SHAPERECORD.fontCharacterToSHAPE(font, (int) Math.round(getDivider() * 1024), ch); - fontBoundsTable.add(shp.getBounds()); + newFontBoundsTable.add(shp.getBounds()); int fontStyle = getFontStyle(); Font advanceFont = font.deriveFont(fontStyle, 1024); // Not multiplied with divider as it causes problems to create font with height around 20k - fontAdvanceTable.add((int) getDivider() * Math.round(FontHelper.getFontAdvance(advanceFont, ch))); + newFontAdvanceTable.add((int) getDivider() * Math.round(FontHelper.getFontAdvance(advanceFont, ch))); } + fontAdvanceTable = newFontAdvanceTable; + fontBoundsTable = newFontBoundsTable; + fontKerningTable = new ArrayList<>(); + fontFlagsHasLayout = true; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java index 7ba932956..f3eb86cee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java @@ -532,25 +532,26 @@ public class DefineFont3Tag extends FontTag { @Override public void setAdvanceValues(Font font) { - boolean hasLayout = fontFlagsHasLayout; - fontFlagsHasLayout = true; - fontAdvanceTable = new ArrayList<>(); - if (!hasLayout) { - fontBoundsTable = new ArrayList<>(); - fontKerningTable = new ArrayList<>(); - } - - for (Integer character : codeTable) { + List newFontBoundsTable = new ArrayList<>(); + List newFontAdvanceTable = new ArrayList<>(); + for (int i = 0; i < codeTable.size(); i++) { + Integer character = codeTable.get(i); char ch = (char) (int) character; - if (!font.canDisplay(ch)) { + if (!font.canDisplay(ch) && fontFlagsHasLayout) { //cannot display, leave old if exist + newFontAdvanceTable.add(fontAdvanceTable.get(i)); + newFontBoundsTable.add(fontBoundsTable.get(i)); continue; } SHAPE shp = SHAPERECORD.fontCharacterToSHAPE(font, (int) Math.round(getDivider() * 1024), ch); - fontBoundsTable.add(shp.getBounds()); + newFontBoundsTable.add(shp.getBounds()); int fontStyle = getFontStyle(); Font advanceFont = font.deriveFont(fontStyle, 1024); // Not multiplied with divider as it causes problems to create font with height around 20k - fontAdvanceTable.add((int) getDivider() * Math.round(FontHelper.getFontAdvance(advanceFont, ch))); + newFontAdvanceTable.add((int) getDivider() * Math.round(FontHelper.getFontAdvance(advanceFont, ch))); } + fontAdvanceTable = newFontAdvanceTable; + fontBoundsTable = newFontBoundsTable; + fontKerningTable = new ArrayList<>(); + fontFlagsHasLayout = true; } @Override