Commit a5db3b0
4096 units per em
Changed files (8)
modifiedlibbirdfont/MoveTool.valamodifiedlibbirdfont/OpenFontFormat/GlyfData.valamodifiedlibbirdfont/OpenFontFormat/HeadTable.valamodifiedlibbirdfont/OpenFontFormat/HheaTable.valamodifiedlibbirdfont/OpenFontFormat/HmtxTable.valamodifiedlibbirdfont/OpenFontFormat/Kern.valamodifiedlibbirdfont/OpenFontFormat/OpenFontFormatWriter.valamodifiedlibbirdfont/OpenFontFormat/Os2Table.vala
Diff
@@ -247,6 +247,10 @@ class MoveTool : Tool { h = selected_path.ymax - selected_path.ymin; w = selected_path.xmax - selected_path.xmin; + if (selected_path.points.length () == 0) {+ continue;+ }+ if (h * ratio < 1 || w * ratio < 1) { return false; }@@ -51,6 +51,8 @@ class GlyfData : GLib.Object { public int16 bounding_box_xmax = 0; public int16 bounding_box_ymax = 0; + private static double UNITS = HeadTable.UNITS;+ public GlyfData (Glyph g) { glyph = g; @@ -40,7 +40,8 @@ class HeadTable : Table { uint64 created; uint64 modified; - uint16 units_per_em = 4096;+ public static uint16 units_per_em = 4096;+ public static double UNITS = 10 * (units_per_em / 1000); const uint8 BASELINE_AT_ZERO = 1 << 0; const uint8 LSB_AT_ZERO = 1 << 1;@@ -162,7 +163,7 @@ class HeadTable : Table { //font_data.add_u16 (BASELINE_AT_ZERO | LSB_AT_ZERO); font_data.add_u16 (0); // flags - font_data.add_u16 (1000); // units per em (should be a power of two for ttf fonts)+ font_data.add_u16 (units_per_em); // units per em (should be a power of two for ttf fonts) font_data.add_64 (0); // creation time since 1904-01-01 font_data.add_64 (0); // modified time since 1904-01-01@@ -87,8 +87,8 @@ class HheaTable : Table { fd.add_fixed (version); // table version - fd.add_16 ((int16) (-1 * (font.top_position - font.base_line) * UNITS)); // Ascender- fd.add_16 ((int16) (-1 * font.bottom_position * UNITS)); // Descender+ fd.add_16 ((int16) (-1 * (font.top_position - font.base_line) * HeadTable.UNITS)); // Ascender+ fd.add_16 ((int16) (-1 * font.bottom_position * HeadTable.UNITS)); // Descender fd.add_16 (0); // LineGap fd.add_u16 (hmtx_table.max_advance); // maximum advance width value in 'hmtx' table.@@ -105,9 +105,9 @@ class HmtxTable : Table { // advance and lsb foreach (Glyph g in glyf_table.glyphs) { g.boundries (out xmin, out ymin, out xmax, out ymax);- lsb = (int16) (-1 * (g.left_limit - xmin) * UNITS);- advance = (int16) ((g.right_limit - g.left_limit) * UNITS);- extent = (int16) (lsb + (xmax - xmin) * UNITS);+ lsb = (int16) (-1 * (g.left_limit - xmin) * HeadTable.UNITS);+ advance = (int16) ((g.right_limit - g.left_limit) * HeadTable.UNITS);+ extent = (int16) (lsb + (xmax - xmin) * HeadTable.UNITS); rsb = (int16) (advance - extent); fd.add_u16 (advance);@@ -177,7 +177,7 @@ class KernTable : Table { warning ("right glyph not found in kerning table"); } - kern = new Kern (gid_left, (uint16)gid_right, (int16) (k.val * UNITS));+ kern = new Kern (gid_left, (uint16)gid_right, (int16) (k.val * HeadTable.UNITS)); fd.add_ushort (kern.left); fd.add_ushort (kern.right);@@ -14,8 +14,6 @@ namespace BirdFont { -const double UNITS = 10;- class OpenFontFormatWriter : Object { DataOutputStream os;@@ -76,8 +76,8 @@ class Os2Table : Table { fd.add_u16 (glyf_table.get_first_char ()); // USHORT usFirstCharIndex fd.add_u16 (glyf_table.get_last_char ()); // USHORT usLastCharIndex - ascender = (int16) (glyf_table.xmax + font.base_line * UNITS);- descender = (int16) (-glyf_table.xmin + font.base_line * UNITS);+ ascender = (int16) (glyf_table.xmax + font.base_line * HeadTable.UNITS);+ descender = (int16) (-glyf_table.xmin + font.base_line * HeadTable.UNITS); fd.add_16 (ascender); // SHORT sTypoAscender fd.add_16 (descender); // SHORT sTypoDescender