kerning fixes / improvements

This commit is contained in:
Jindra Petřík
2014-10-26 15:29:26 +01:00
parent 093d17a055
commit 2dc6de038d
5 changed files with 34 additions and 25 deletions

View File

@@ -84,7 +84,7 @@ public class DefineFont2Tag extends FontTag {
@Conditional("fontFlagsHasLayout")
public List<RECT> fontBoundsTable;
public KERNINGRECORD[] fontKerningTable;
public List<KERNINGRECORD> fontKerningTable;
public static final int ID = 48;
@Override
@@ -179,9 +179,9 @@ public class DefineFont2Tag extends FontTag {
for (int i = 0; i < numGlyphs; i++) {
sos.writeRECT(fontBoundsTable.get(i));
}
sos.writeUI16(fontKerningTable.length);
for (int k = 0; k < fontKerningTable.length; k++) {
sos.writeKERNINGRECORD(fontKerningTable[k], fontFlagsWideCodes);
sos.writeUI16(fontKerningTable.size());
for (int k = 0; k < fontKerningTable.size(); k++) {
sos.writeKERNINGRECORD(fontKerningTable.get(k), fontFlagsWideCodes);
}
}
@@ -263,9 +263,9 @@ public class DefineFont2Tag extends FontTag {
fontBoundsTable.add(sis.readRECT("rect"));
}
int kerningCount = sis.readUI16("kerningCount");
fontKerningTable = new KERNINGRECORD[kerningCount];
fontKerningTable = new ArrayList<KERNINGRECORD>();
for (int i = 0; i < kerningCount; i++) {
fontKerningTable[i] = sis.readKERNINGRECORD(fontFlagsWideCodes, "record");
fontKerningTable.add(sis.readKERNINGRECORD(fontFlagsWideCodes, "record"));
}
}
}

View File

@@ -78,7 +78,7 @@ public class DefineFont3Tag extends FontTag {
public List<Integer> fontAdvanceTable;
public List<RECT> fontBoundsTable;
public KERNINGRECORD[] fontKerningTable;
public List<KERNINGRECORD> fontKerningTable;
public static final int ID = 75;
@Override
@@ -168,9 +168,9 @@ public class DefineFont3Tag extends FontTag {
fontBoundsTable.add(sis.readRECT("rect"));
}
int kerningCount = sis.readUI16("kerningCount");
fontKerningTable = new KERNINGRECORD[kerningCount];
fontKerningTable = new ArrayList<KERNINGRECORD>();
for (int i = 0; i < kerningCount; i++) {
fontKerningTable[i] = sis.readKERNINGRECORD(fontFlagsWideCodes, "record");
fontKerningTable.add(sis.readKERNINGRECORD(fontFlagsWideCodes, "record"));
}
}
}
@@ -256,9 +256,9 @@ public class DefineFont3Tag extends FontTag {
for (int i = 0; i < numGlyphs; i++) {
sos.writeRECT(fontBoundsTable.get(i));
}
sos.writeUI16(fontKerningTable.length);
for (int k = 0; k < fontKerningTable.length; k++) {
sos.writeKERNINGRECORD(fontKerningTable[k], fontFlagsWideCodes);
sos.writeUI16(fontKerningTable.size());
for (int k = 0; k < fontKerningTable.size(); k++) {
sos.writeKERNINGRECORD(fontKerningTable.get(k), fontFlagsWideCodes);
}
}

View File

@@ -395,7 +395,7 @@ public class DefineTextTag extends TextTag {
if (nextChar != null) {
kerningAdjustment = font.getGlyphKerningAdjustment(tr.glyphEntries[i].glyphIndex, font.charToGlyph(nextChar));
}
advance = (int) Math.round(((double) textHeight * (font.getGlyphAdvance(tr.glyphEntries[i].glyphIndex + kerningAdjustment))) / (font.getDivider() * 1024.0));
advance = (int) Math.round(((double) textHeight * (font.getGlyphAdvance(tr.glyphEntries[i].glyphIndex) + kerningAdjustment)) / (font.getDivider() * 1024.0));
} else {
advance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor), c, nextChar));
}

View File

@@ -368,5 +368,5 @@ public abstract class FontTag extends CharacterTag implements AloneTag, Drawable
public FontTag toClassicFont() {
return this;
}
}
}

View File

@@ -205,7 +205,7 @@ public final class DefineCompactedFont extends FontTag implements DrawableTag {
@Override
public double getGlyphAdvance(int glyphIndex) {
return fonts.get(0).glyphInfo.get(glyphIndex).advanceX;
return resize(fonts.get(0).glyphInfo.get(glyphIndex).advanceX);
}
@Override
@@ -214,7 +214,7 @@ public final class DefineCompactedFont extends FontTag implements DrawableTag {
int char2 = glyphToChar(nextGlyphIndex);
for (KerningPairType kp : fonts.get(0).kerning) {
if (kp.char1 == char1 && kp.char2 == char2) {
return kp.advance;
return resize(kp.advance);
}
}
return 0;
@@ -222,7 +222,7 @@ public final class DefineCompactedFont extends FontTag implements DrawableTag {
@Override
public int getGlyphWidth(int glyphIndex) {
return getGlyphShapeTable().get(glyphIndex).getBounds().getWidth();
return resize(getGlyphShapeTable().get(glyphIndex).getBounds().getWidth());
}
@Override
@@ -382,14 +382,16 @@ public final class DefineCompactedFont extends FontTag implements DrawableTag {
}
ret.fontName = getFontNameIntag();
ret.languageCode = new LANGCODE(1);
ret.fontKerningTable = new KERNINGRECORD[0];/*new KERNINGRECORD[ft.kerning.size()];
for(int i=0;i<ft.kerning.size();i++){
KERNINGRECORD kr=new KERNINGRECORD();
kr.fontKerningAdjustment = resize(ft.kerning.get(i).advance);
kr.fontKerningCode1 = ft.kerning.get(i).char1;
kr.fontKerningCode2 = ft.kerning.get(i).char2;
ret.fontKerningTable[i] = kr;
}*/
ret.fontKerningTable = new ArrayList<>();
FontType ft = fonts.get(0);
for (int i = 0; i < ft.kerning.size(); i++) {
KERNINGRECORD kr = new KERNINGRECORD();
kr.fontKerningAdjustment = resize(ft.kerning.get(i).advance);
kr.fontKerningCode1 = ft.kerning.get(i).char1;
kr.fontKerningCode2 = ft.kerning.get(i).char2;
ret.fontKerningTable.add(kr);
}
return ret;
} catch (IOException ex) {
@@ -397,4 +399,11 @@ public final class DefineCompactedFont extends FontTag implements DrawableTag {
}
return null;
}
@Override
public boolean hasLayout() {
return true;
}
}