Commit 826dd7e
kern by glyph name instead of unicode value
Changed files (3)
Diff
@@ -68,7 +68,7 @@ public class ContextDisplay : FontDisplay { wi = 0; foreach (string s in word.glyph) { - g = (!) BirdFont.get_current_font ().get_glyph (s); + g = (!) BirdFont.get_current_font ().get_glyph_by_name (s); if (s == "") { continue;@@ -154,8 +154,8 @@ public class ContextDisplay : FontDisplay { b = s; if (handle == wi) {- kern = font.get_kerning (a, b) + val;- font.set_kerning (a, b, kern);+ kern = font.get_kerning_by_name (a, b) + val;+ font.set_kerning_by_name (a, b, kern); } wi++;@@ -169,7 +169,7 @@ public class ContextDisplay : FontDisplay { private double get_kerning (string a, string b) { Font font = BirdFont.get_current_font ();- return font.get_kerning (a, b);+ return font.get_kerning_by_name (a, b); } public override void selected_canvas () {@@ -269,7 +269,7 @@ public class ContextDisplay : FontDisplay { foreach (string s in word.glyph) { // draw glyph- g = (!) BirdFont.get_current_font ().get_glyph (s); + g = (!) BirdFont.get_current_font ().get_glyph_by_name (s); kern = (prev != "") ? get_kerning (prev, s) : 0; if (g == null) {@@ -414,6 +414,45 @@ public class Font : GLib.Object { background_images.append (file); } + /** Obtain kerning for pair with name a and b.+ * @param a name of left glyph kerning pair+ * @param b name of right glyph kerning pair+ */+ public double get_kerning_by_name (string a, string b) {+ Glyph? gl = get_glyph_by_name (a);+ Glyph g;+ + if (gl == null) {+ warning (@"glyph \"$a\" does not exist cannot obtain kerning");+ return 0;+ }+ + g = (!) gl;+ + return g.get_kerning (b);+ }++ /** Set kerning for pair with name a and b.+ * @param a name of left glyph kerning pair+ * @param b name of right glyph kerning pair+ * @param val kerning+ */ + public void set_kerning_by_name (string a, string b, double val) {+ Glyph? gl;+ Glyph g;+ + gl = get_glyph_by_name (a);+ + if (unlikely (gl == null)) {+ warning (@"glyph \"$a\" is not parsed yet cannot add kerning");+ return;+ }+ + g = (!) gl;+ g.add_kerning (b, val); + }++ // TODO: this can be removed public double get_kerning (string a, string b) { Glyph? gl = get_glyph (a); Glyph g;@@ -428,6 +467,7 @@ public class Font : GLib.Object { return g.get_kerning (b); } + // TODO: this can be removed public void set_kerning (string a, string b, double val) { Glyph? gl; Glyph g;@@ -1659,7 +1659,7 @@ public class Glyph : FontDisplay { juxtaposed = (font.has_glyph (name)) ? (!) font.get_glyph (name) : font.get_space (); if (font.has_glyph (last_name) && font.has_glyph (name)) {- kern = font.get_kerning (last_name, name);+ kern = font.get_kerning_by_name (last_name, name); } else { kern = 0; }@@ -1672,7 +1672,7 @@ public class Glyph : FontDisplay { cr.restore (); } - x += juxtaposed.get_width () + font.get_kerning (glyph.name, name) + kern;+ x += juxtaposed.get_width () + font.get_kerning_by_name (glyph.name, name) + kern; last_name = name; } @@ -1684,7 +1684,7 @@ public class Glyph : FontDisplay { juxtaposed = (font.has_glyph (name)) ? (!) font.get_glyph (name) : font.get_space (); if (font.has_glyph (last_name) && font.has_glyph (name)) {- kern = font.get_kerning (name, last_name);+ kern = font.get_kerning_by_name (name, last_name); } else { kern = 0; }