Clone in a terminal:
Commit 5d75c21
Johan Mattsson - 2015-03-22T14:56:11+00:00
5d75c210b9c31ad1fc27b4f9f198d6311bff8180johan.mattsson.m@gmail.com

Kerning strings This commit adds code that lets the user load a list of strings for kerning. The list and the position in the list is specific for each font.

Changed files (15)

Diff

diff --git a/libbirdfont/BackgroundTools.vala b/libbirdfont/BackgroundTools.valaindex e1ab786..4b64567 100644--- a/libbirdfont/BackgroundTools.vala+++ b/libbirdfont/BackgroundTools.vala@@ -28,7 +28,6 @@ public class BackgroundTools : ToolCollection  { 		 		Expander font_name = new Expander (); 		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;  		select_background = new BackgroundSelectionTool (); diff --git a/libbirdfont/DrawingTools.vala b/libbirdfont/DrawingTools.valaindex 1af17f4..75e4e82 100644--- a/libbirdfont/DrawingTools.vala+++ b/libbirdfont/DrawingTools.vala@@ -115,7 +115,6 @@ public class DrawingTools : ToolCollection  {  		// font name  		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;  		// Draw tools 		foresight_tool = new ForesightTool ("foresight");@@ -973,8 +972,6 @@ public class DrawingTools : ToolCollection  {  		shape_tools.set_persistent (true); 		shape_tools.set_unique (true);--		view_tools.draw_separator = false; 				 		// let these tools progagate events even when other tools are selected			 		foreach (Tool t in draw_tools.tool) {diff --git a/libbirdfont/Expander.vala b/libbirdfont/Expander.valaindex 82b1e0c..9f88315 100644--- a/libbirdfont/Expander.vala+++ b/libbirdfont/Expander.vala@@ -20,9 +20,7 @@ namespace BirdFont { public class Expander : GLib.Object {  	private static const double HEADLINE_MARGIN = 6;-	-	public bool draw_separator { get; set; }-	+		 	public double x = 7; 	public double y = 5; 	public double scroll = 0;@@ -48,7 +46,6 @@ public class Expander : GLib.Object { 	public Expander (string? headline = null) { 		this.headline = headline; 		tool = new Gee.ArrayList<Tool> ();-		draw_separator = true; 	}  	public void set_headline (string? h) {@@ -236,29 +233,6 @@ public class Expander : GLib.Object { 				Theme.text_color (title, "Foreground 2"); 				title.set_font_size (17 * Toolbox.get_scale ()); 				title.draw_at_baseline (cr, x, yt + HEADLINE_MARGIN + 13  * Toolbox.get_scale ());-			} else if (draw_separator) {	-				cr.save ();-				cr.set_line_width (0.5);-				Theme.color (cr, "Foreground 2");-				cr.move_to (x, yt);-				cr.line_to (wd - w - x + 6, yt);	-				cr.stroke ();-				cr.restore ();-				-				// arrow-				cr.save ();-				cr.new_path ();-				cr.set_line_width (1);-				-				Theme.color_opacity (cr, "Foreground 2", opacity);-				-				cr.move_to (x - iw2 + 3, yt - ih2 - 0.7 + 1);-				cr.line_to (x + iw2 + 3, yt - ih2 - 0.7 + 1);-				cr.line_to (x + iw2, yt + 2 + 1);	--				cr.close_path();-				cr.stroke ();-				cr.restore (); 			} 		} 	}diff --git a/libbirdfont/Font.vala b/libbirdfont/Font.valaindex 67a0e24..aaec547 100644--- a/libbirdfont/Font.vala+++ b/libbirdfont/Font.vala@@ -141,7 +141,6 @@ public class Font : GLib.Object { 		 		settings = new FontSettings (); 		kerning_strings = new KerningStrings ();-		kerning_strings.load (this); 	}  	public static void set_default_license (string license) {@@ -772,7 +771,10 @@ public class Font : GLib.Object { 			font_file = null; 		} 		-		settings.load (get_file_name ());+		if (loaded) {+			settings.load (get_file_name ());+			kerning_strings.load (this);+		} 		 		return loaded; 	}diff --git a/libbirdfont/FontSettings.vala b/libbirdfont/FontSettings.valaindex 6f17832..b6a1b75 100644--- a/libbirdfont/FontSettings.vala+++ b/libbirdfont/FontSettings.vala@@ -61,19 +61,19 @@ public class FontSettings : GLib.Object { 			 			sb = new StringBuilder (); 			-			sb.append ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>");-			sb.append ("<settings>");+			sb.append ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n");+			sb.append ("<settings>\n"); 			 			foreach (var k in settings.keys) { 				sb.append ("\t<setting key=\""); 				sb.append (k);-				sb.append (" \" ");+				sb.append ("\" "); 				sb.append ("value=\""); 				sb.append (XmlParser.encode (settings.get (k)));-				sb.append ("\" />");+				sb.append ("\" />\n"); 			} 			-			sb.append ("</settings>");+			sb.append ("</settings>\n"); 			 			FileUtils.set_contents ((!) f.get_path (), sb.str); 			@@ -118,6 +118,8 @@ public class FontSettings : GLib.Object { 				v = XmlParser.decode (a.get_content ()); 			} 		}+		+		settings.set (key, v); 	}  }diff --git a/libbirdfont/KerningStrings.vala b/libbirdfont/KerningStrings.valaindex dd7780c..7d9360e 100644--- a/libbirdfont/KerningStrings.vala+++ b/libbirdfont/KerningStrings.vala@@ -22,54 +22,81 @@ public class KerningStrings : GLib.Object { 	public KerningStrings () { 	} 	+	public bool is_empty () {+		return kerning_strings.size == 0;+	}+	 	public string next () { 		string w = "";+		Font font = BirdFont.get_current_font (); 		 		if (0 <= current_position < kerning_strings.size) { 			w = kerning_strings.get (current_position);+			current_position++;+			font.settings.set_setting ("kerning_string_position", @"$current_position"); 		} 		-		current_position++;-		 		return w; 	}  	public string previous () { 		string w = "";--		current_position--;+		Font font = BirdFont.get_current_font (); 		-		if (0 <= current_position < kerning_strings.size) {+		if (0 <= current_position - 1 < kerning_strings.size) {+			current_position--; 			w = kerning_strings.get (current_position);+			font.settings.set_setting ("kerning_string_position", @"$current_position"); 		}  		return w; 		 	} 	+	public void load_file ()  {+		FileChooser fc = new FileChooser ();+		fc.file_selected.connect ((f) => {+			Font font = BirdFont.get_current_font (); +			if (f != null) {+				load_new_string (font, (!) f);+			}+		});+		+		MainWindow.file_chooser (t_("Load kerning strings"), fc, FileChooser.LOAD);+	}+	 	public void load (Font font) { 		string path; 	 		path = font.settings.get_setting ("kerning_string_file");-		load_new_string (font, path);++		if (path != "") {+			load_new_string (font, path);+			current_position = int.parse (font.settings.get_setting ("kerning_string_position"));+		} 	} 	 	public void load_new_string (Font font, string kerning_strings_file) { 		File f; 		string data; 		string[] strings;+		string w; 		 		try { 			kerning_strings.clear ();  			FileUtils.get_contents(kerning_strings_file, out data);-			strings = data.split ("\n");+			strings = data.replace ("\n", " ").split (" "); 			 			foreach (string s in strings) {-				kerning_strings.add (s.replace ("\r", ""));+				w = s.replace ("\r", "");+				if (w != "") {+					kerning_strings.add (s);+					print (s + " Added");+				} 			} 			-			current_position = int.parse (font.settings.get_setting ("kerning_string_position"));		+			current_position = 0; 			 			font.settings.set_setting ("kerning_string_file", kerning_strings_file); 		} catch (GLib.Error e) {diff --git a/libbirdfont/KerningStringsTab.vala b/libbirdfont/KerningStringsTab.valadeleted file mode 100644index f98bdd5..0000000--- a/libbirdfont/KerningStringsTab.vala+++ /dev/null@@ -1,197 +0,0 @@-/*-    Copyright (C) 2015 Johan Mattsson--    This library is free software; you can redistribute it and/or modify -    it under the terms of the GNU Lesser General Public License as -    published by the Free Software Foundation; either version 3 of the -    License, or (at your option) any later version.--    This library is distributed in the hope that it will be useful, but -    WITHOUT ANY WARRANTY; without even the implied warranty of -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -    Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {--public class KerningStringsTab : FontDisplay {-	-	double scroll = 0;-	double content_height = 1;-	WidgetAllocation allocation;-	-	TextArea kerning_text;-	Button load_text;-	-	Gee.ArrayList<Widget> widgets;-	-	public KerningStringsTab () {-		double margin = 12 * MainWindow.units;-		double label_size = 20 * MainWindow.units;-		double label_margin = 4 * MainWindow.units;-		Headline headline;-		Font font = BirdFont.get_current_font ();-		-		allocation = new WidgetAllocation ();-		widgets = new Gee.ArrayList<Widget> ();--		headline = new Headline (t_("Kerning Strings"));-		headline.margin_bottom = 20 * MainWindow.units;-		widgets.add (headline);--		kerning_text = new TextArea (label_size);-		kerning_text.margin_bottom = margin;-		kerning_text.set_text (""); // FIXME:-		widgets.add (kerning_text);-	}-	-	public override void draw (WidgetAllocation allocation, Context cr) {-		this.allocation = allocation;-		-		layout ();-		-		// background-		cr.save ();-		cr.rectangle (0, 0, allocation.width, allocation.height);-		cr.set_line_width (0);-		-		Theme.color (cr, "Background 4");--		cr.fill ();-		cr.stroke ();-		cr.restore ();--		foreach (Widget w in widgets) {-			if (w.is_on_screen ()) {			-				if (w is Text) {-					cr.save ();-					Theme.color (cr, "Foreground 1");-					w.draw (cr);-					cr.restore ();-				} else {-					w.draw (cr);-				}-			}-		}-	}	--	void layout () {-		double y = -scroll;-		-		foreach (Widget w in widgets) {-			w.widget_x = 17 * MainWindow.units;-			w.widget_y = y;-			w.allocation = allocation;-			-			if (w is TextArea) {-				((TextArea) w).layout ();-			}-			-			y += w.get_height () + w.margin_bottom;-		}-		-		content_height = y + scroll;-		update_scrollbar ();-	}--	public void scroll_event (double p) {-		scroll += p;-		layout ();-		GlyphCanvas.redraw ();-	}--	public override void key_press (uint keyval) {-		kerning_text.key_press (keyval);-	}-	-	public override void button_press (uint button, double x, double y) {-		TextArea t;-		TextArea old;-		-		foreach (Widget w in widgets) {-			if (w.is_over (x, y)) {-				if (w is TextArea) {-					t = (TextArea) w;-					if (kerning_text != t) {-						old = (!) kerning_text;-						old.draw_carret = false;-					}-					-					t.draw_carret = true;-					t.button_press (button, x, y);-					kerning_text = t;-				}-			}-		}--		GlyphCanvas.redraw ();-	}-	-	public override void button_release (int button, double x, double y) {-		TextArea t;-		-		kerning_text.button_release (button, x, y);-					-		GlyphCanvas.redraw ();-	}--	public override void motion_notify (double x, double y) {-		kerning_text.motion (x, y);-	}--	public override string get_label () {-		return t_("Name and Description");-	}--	public override string get_name () {-		return "Description";-	}--	public override bool has_scrollbar () {-		return true;-	}-	-	public override void scroll_wheel_down (double x, double y) {-		scroll += 25 * MainWindow.units;--		if (scroll + allocation.height >=  content_height) {-			scroll = content_height - allocation.height;-		}-		-		update_scrollbar ();-		GlyphCanvas.redraw ();-	}-	-	public override void scroll_wheel_up (double x, double y) {-		scroll -= 25 * MainWindow.units;-		-		if (scroll < 0) {-			scroll = 0;-		}-		-		update_scrollbar ();-		GlyphCanvas.redraw ();-	}--	public override void selected_canvas () {-		update_scrollbar ();-		GlyphCanvas.redraw ();-	}-	-	public override void update_scrollbar () {-		double h = content_height - allocation.height;-		MainWindow.set_scrollbar_size (allocation.height / content_height);-		MainWindow.set_scrollbar_position (scroll /  h);-	}--	public override void scroll_to (double percent) {-		double h = content_height - allocation.height;-		scroll = percent * h;-		GlyphCanvas.redraw ();-	}-}--}diff --git a/libbirdfont/KerningTools.vala b/libbirdfont/KerningTools.valaindex 7871a69..c43d1c0 100644--- a/libbirdfont/KerningTools.vala+++ b/libbirdfont/KerningTools.vala@@ -25,6 +25,9 @@ public class KerningTools : ToolCollection  { 	public static double font_size = 1; 	public static ZoomBar zoom_bar; 	+	public static Tool previous_kerning_string;+	public static Tool next_kerning_string;+	 	public KerningTools () { 		init (); 	}@@ -36,7 +39,6 @@ public class KerningTools : ToolCollection  {  		Expander font_name = new Expander (); 		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;  		Expander zoom_expander = new Expander (t_("Font Size")); @@ -90,22 +92,44 @@ public class KerningTools : ToolCollection  { 		}); 		kerning_tools.add_tool (insert_unicode); -		Tool previous_kerning_string = new Tool ("previous_kerning_string", t_("Previous kerning string"));+		string empty_kerning_text = t_("Open a text file with kerning strings first.");+		+		previous_kerning_string = new Tool ("previous_kerning_string", t_("Previous kerning string")); 		previous_kerning_string.select_action.connect ((self) => {-			KerningDisplay d = MainWindow.get_kerning_display ();+			FontDisplay fd = MainWindow.get_current_display ();+			KerningDisplay d = (KerningDisplay) fd; 			Font f = BirdFont.get_current_font ();-			d.add_text (f.kerning_strings.next ());+			string w = f.kerning_strings.previous ();+			+			if (f.kerning_strings.is_empty ()) {+				MainWindow.show_message (empty_kerning_text);+			} else if (w == "") {+				MainWindow.show_message (t_("You have reached the beginning of the list."));+			} else {+				d.new_line ();+				d.add_text (w);+			} 		}); 		kerning_tools.add_tool (previous_kerning_string); -		Tool next_kerning_string = new Tool ("next_kerning_string", t_("Next kerning string"));+		next_kerning_string = new Tool ("next_kerning_string", t_("Next kerning string")); 		next_kerning_string.select_action.connect ((self) => {-			KerningDisplay d = MainWindow.get_kerning_display ();+			FontDisplay fd = MainWindow.get_current_display ();+			KerningDisplay d = (KerningDisplay) fd; 			Font f = BirdFont.get_current_font ();-			d.add_text (f.kerning_strings.previous ());			+			string w = f.kerning_strings.next ();+			+			if (f.kerning_strings.is_empty ()) {+				MainWindow.show_message (empty_kerning_text);+			} else if (w == "") {+				MainWindow.show_message (t_("You have reached the end of the list."));+			} else {+				d.new_line ();+				d.add_text (w);+			}	 		}); 		kerning_tools.add_tool (next_kerning_string);-		+				 		kerning_tools.set_persistent (false); 		kerning_tools.set_unique (false); diff --git a/libbirdfont/Menu.vala b/libbirdfont/Menu.valaindex d23473a..5dccb1c 100644--- a/libbirdfont/Menu.vala+++ b/libbirdfont/Menu.vala@@ -382,6 +382,19 @@ public class Menu : GLib.Object { 		previous_kerning_pair.display = "Kerning"; 		kerning_menu.items.add (previous_kerning_pair); +		MenuItem load_kerning_strings = add_menu_item (t_("Load Kerning Strings"), "load kerning strings");+		load_kerning_strings.action.connect (() => {+			BirdFont.get_current_font ().kerning_strings.load_file ();+		});+		kerning_menu.items.add (load_kerning_strings);++		MenuItem reload_kerning_strings = add_menu_item (t_("Reload Kerning Strings"), "reloadload kerning strings");+		reload_kerning_strings.action.connect (() => {+			Font f = BirdFont.get_current_font ();+			f.kerning_strings.load (f);+		});+		kerning_menu.items.add (reload_kerning_strings);+				 		// ligature menu 		MenuItem ligature = add_menu_item (t_("Ligatures")); 		ligature.action.connect (() => {diff --git a/libbirdfont/OverviewTools.vala b/libbirdfont/OverviewTools.valaindex 6a680c6..6d52c49 100644--- a/libbirdfont/OverviewTools.vala+++ b/libbirdfont/OverviewTools.vala@@ -36,7 +36,6 @@ public class OverviewTools : ToolCollection  { 		custom_character_sets = new Gee.ArrayList<LabelTool> (); 		 		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;  		zoom_bar = new ZoomBar (); 		zoom_bar.new_zoom.connect ((z) => {diff --git a/libbirdfont/PreviewTools.vala b/libbirdfont/PreviewTools.valaindex 8726f61..75b4148 100644--- a/libbirdfont/PreviewTools.vala+++ b/libbirdfont/PreviewTools.vala@@ -23,8 +23,7 @@ public class PreviewTools : ToolCollection  {  		Expander font_name = new Expander (); 		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;-				+			 		Tool update_webview_button = new Tool ("update_webview", t_("Reload webview")); 		update_webview_button.select_action.connect ((self) => { 			update_preview ();diff --git a/libbirdfont/SpacingTab.vala b/libbirdfont/SpacingTab.valaindex f723b4b..bb47d34 100644--- a/libbirdfont/SpacingTab.vala+++ b/libbirdfont/SpacingTab.vala@@ -28,6 +28,7 @@ public class SpacingTab : KerningDisplay { 	Glyph text_input_glyph; 	 	public SpacingTab () {+		allocation = new WidgetAllocation (); 		adjust_side_bearings = true; 	} @@ -172,11 +173,11 @@ public class SpacingTab : KerningDisplay { 			p = 0; 			foreach (Glyph? g in row.glyph) { 				if (p < ex < p + box_size / 2.0) {-					update_lsb(g);+					update_lsb (g); 				}   				if (p + box_size / 2.0 < ex < p + box_size) {-					update_rsb(g);+					update_rsb (g); 				} 				 				p += box_size;diff --git a/libbirdfont/SpacingTools.vala b/libbirdfont/SpacingTools.valaindex 0da04a1..b5786c9 100644--- a/libbirdfont/SpacingTools.vala+++ b/libbirdfont/SpacingTools.vala@@ -27,7 +27,6 @@ public class SpacingTools : ToolCollection  {  		Expander font_name = new Expander (); 		font_name.add_tool (new FontName ());-		font_name.draw_separator = false;  		Expander zoom_expander = new Expander (t_("Font Size")); @@ -43,8 +42,13 @@ public class SpacingTools : ToolCollection  { 		}); 		zoom_expander.add_tool (zoom_bar); 		+		Expander spacing_tools_expander = new Expander ();+		spacing_tools_expander.add_tool (KerningTools.previous_kerning_string);+		spacing_tools_expander.add_tool (KerningTools.next_kerning_string);+		 		expanders.add (font_name); 		expanders.add (zoom_expander);+		expanders.add (spacing_tools_expander); 	} 	 	public override Gee.ArrayList<Expander> get_expanders () {diff --git a/resources/icons.bf b/resources/icons.bfindex a01a1a3..de18acc 100644--- a/resources/icons.bf+++ b/resources/icons.bf@@ -560,7 +560,15 @@ GNU Lesser General Public License</copyright> <collection name="next"> 	<selected id="1"/> 	<glyph id="1" left="-28" right="28">-		<path stroke="0" skew="0" data="B -5.3275867473,42.4403840207 M 10.0050640172,27.2399083884 M 9.7405137527,27.3721835207 M -5.6040667473,15.0689835207 M -5.3275867473,42.4403840207" />+		<path stroke="0" skew="0" data="B -5.3275867473,43.6698922174 M 10.0050640172,28.4694165851 M 9.7405137527,28.6016917174 M -5.6040667473,16.2984917174 M -5.3275867473,43.6698922174" />+	</glyph>+</collection>+<collection name="next_kerning_string">+	<selected id="2"/>+	<glyph id="1" left="-28" right="28">+	</glyph>+	<glyph id="2" left="-28" right="28">+		<path stroke="0" skew="0" data="B -5.3275867473,43.6698922174 M 10.0050640172,28.4694165851 M 9.7405137527,28.6016917174 M -5.6040667473,16.2984917174 M -5.3275867473,43.6698922174" /> 	</glyph> </collection> <collection unicode="U+6f">@@ -592,7 +600,15 @@ GNU Lesser General Public License</copyright> <collection name="prev"> 	<selected id="1"/> 	<glyph id="1" left="-28" right="28">-		<path stroke="0" skew="0" data="B 7.2272862394,15.0689835207 M -8.1172942606,27.3721835207 M 6.9508062394,42.4403840207 M 7.2272862394,15.0689835207" />+		<path stroke="0" skew="0" data="B 7.2272862394,16.2984917174 M -8.1172942606,28.6016917174 M 6.9508062394,43.6698922174 M 7.2272862394,16.2984917174" />+	</glyph>+</collection>+<collection name="previous_kerning_string">+	<selected id="2"/>+	<glyph id="1" left="-28" right="28">+	</glyph>+	<glyph id="2" left="-28" right="28">+		<path stroke="0" skew="0" data="B 7.2272862394,16.2984917174 M -8.1172942606,28.6016917174 M 6.9508062394,43.6698922174 M 7.2272862394,16.2984917174" /> 	</glyph> </collection> <collection name="progress">@@ -944,78 +960,80 @@ GNU Lesser General Public License</copyright>  <ligature sequence="i n s e r t _ g l y p h _ f r o m _ o v e r v i e w" replacement="insert_glyph_from_overview"/> <ligature sequence="h i g h _ c o n t r a s t _ b a c k g r o u n d" replacement="high_contrast_background"/>-<ligature sequence="g e n e r a t e _ h t m l _ d o c u m e n t" replacement="generate_html_document"/>+<ligature sequence="p r e v i o u s _ k e r n i n g _ s t r i n g" replacement="previous_kerning_string"/> <ligature sequence="s h o w _ x h e i g h t _ h e l p l i n e s" replacement="show_xheight_helplines"/>-<ligature sequence="z o o m _ b a c k g r o u n d _ i m a g e" replacement="zoom_background_image"/>-<ligature sequence="a u t o _ t r a c e _ r e s o l u t i o n" replacement="auto_trace_resolution"/>-<ligature sequence="b a c k g r o u n d _ h e l p _ l i n e s" replacement="background_help_lines"/>+<ligature sequence="g e n e r a t e _ h t m l _ d o c u m e n t" replacement="generate_html_document"/> <ligature sequence="s h o w _ a l l _ l i n e _ h a n d l e s" replacement="show_all_line_handles"/>+<ligature sequence="b a c k g r o u n d _ h e l p _ l i n e s" replacement="background_help_lines"/>+<ligature sequence="a u t o _ t r a c e _ r e s o l u t i o n" replacement="auto_trace_resolution"/>+<ligature sequence="z o o m _ b a c k g r o u n d _ i m a g e" replacement="zoom_background_image"/> <ligature sequence="a u t o _ t r a c e _ s i m p l i f y" replacement="auto_trace_simplify"/>-<ligature sequence="c o n t r a s t _ t h r e s h o l d" replacement="contrast_threshold"/>+<ligature sequence="n e x t _ k e r n i n g _ s t r i n g" replacement="next_kerning_string"/> <ligature sequence="k e r n i n g _ t e x t _ i n p u t" replacement="kerning_text_input"/>-<ligature sequence="s e l e c t _ b a c k g r o u n d" replacement="select_background"/>-<ligature sequence="i n s e r t _ b a c k g r o u n d" replacement="insert_background"/>-<ligature sequence="n e w _ p o i n t _ o n _ p a t h" replacement="new_point_on_path"/>+<ligature sequence="c o n t r a s t _ t h r e s h o l d" replacement="contrast_threshold"/> <ligature sequence="d e l e t e _ b a c k g r o u n d" replacement="delete_background"/>-<ligature sequence="q u a d r a t i c _ p o i n t s" replacement="quadratic_points"/>+<ligature sequence="n e w _ p o i n t _ o n _ p a t h" replacement="new_point_on_path"/>+<ligature sequence="i n s e r t _ b a c k g r o u n d" replacement="insert_background"/>+<ligature sequence="s e l e c t _ b a c k g r o u n d" replacement="select_background"/> <ligature sequence="s c a l e _ b a c k g r o u n d" replacement="scale_background"/>-<ligature sequence="z o o m _ b o u n d a r i e s" replacement="zoom_boundaries"/>-<ligature sequence="s h o w _ b a c k g r o u n d" replacement="show_background"/>-<ligature sequence="f l i p _ h o r i z o n t a l" replacement="flip_horizontal"/>+<ligature sequence="q u a d r a t i c _ p o i n t s" replacement="quadratic_points"/> <ligature sequence="m o v e _ b a c k g r o u n d" replacement="move_background"/>-<ligature sequence="f i l l _ o p e n _ p a t h" replacement="fill_open_path"/>-<ligature sequence="u p d a t e _ w e b v i e w" replacement="update_webview"/>-<ligature sequence="c u t _ b a c k g r o u n d" replacement="cut_background"/>+<ligature sequence="f l i p _ h o r i z o n t a l" replacement="flip_horizontal"/>+<ligature sequence="s h o w _ b a c k g r o u n d" replacement="show_background"/>+<ligature sequence="z o o m _ b o u n d a r i e s" replacement="zoom_boundaries"/> <ligature sequence="i n s e r t _ u n i c h a r" replacement="insert_unichar"/>-<ligature sequence="a d d _ n e w _ t h e m e" replacement="add_new_theme"/>-<ligature sequence="k e r n i n g _ c l a s s" replacement="kerning_class"/>-<ligature sequence="d o u b l e _ p o i n t s" replacement="double_points"/>-<ligature sequence="c o n v e r t _ p o i n t" replacement="convert_point"/>-<ligature sequence="d e l e t e _ b u t t o n" replacement="delete_button"/>-<ligature sequence="f l i p _ v e r t i c a l" replacement="flip_vertical"/>+<ligature sequence="c u t _ b a c k g r o u n d" replacement="cut_background"/>+<ligature sequence="u p d a t e _ w e b v i e w" replacement="update_webview"/>+<ligature sequence="f i l l _ o p e n _ p a t h" replacement="fill_open_path"/> <ligature sequence="d r o p d o w n _ m e n u" replacement="dropdown_menu"/>-<ligature sequence="e x p o r t _ f o n t s" replacement="export_fonts"/>-<ligature sequence="r e v e r s e _ p a t h" replacement="reverse_path"/>-<ligature sequence="c u b i c _ p o i n t s" replacement="cubic_points"/>-<ligature sequence="x _ c o o r d i n a t e" replacement="x_coordinate"/>+<ligature sequence="f l i p _ v e r t i c a l" replacement="flip_vertical"/>+<ligature sequence="d e l e t e _ b u t t o n" replacement="delete_button"/>+<ligature sequence="c o n v e r t _ p o i n t" replacement="convert_point"/>+<ligature sequence="d o u b l e _ p o i n t s" replacement="double_points"/>+<ligature sequence="k e r n i n g _ c l a s s" replacement="kerning_class"/>+<ligature sequence="a d d _ n e w _ t h e m e" replacement="add_new_theme"/> <ligature sequence="y _ c o o r d i n a t e" replacement="y_coordinate"/>-<ligature sequence="m o v e _ c a n v a s" replacement="move_canvas"/>-<ligature sequence="s p i n _ b u t t o n" replacement="spin_button"/>-<ligature sequence="c r e a t e _ l i n e" replacement="create_line"/>-<ligature sequence="b e z i e r _ l i n e" replacement="bezier_line"/>+<ligature sequence="x _ c o o r d i n a t e" replacement="x_coordinate"/>+<ligature sequence="c u b i c _ p o i n t s" replacement="cubic_points"/>+<ligature sequence="r e v e r s e _ p a t h" replacement="reverse_path"/>+<ligature sequence="e x p o r t _ f o n t s" replacement="export_fonts"/> <ligature sequence="r i g h t _ a r r o w" replacement="right_arrow"/>-<ligature sequence="f u l l _ g l y p h" replacement="full_glyph"/>-<ligature sequence="p o i n t _ t o o l" replacement="point_tool"/>-<ligature sequence="s e l e c t _ a l l" replacement="select_all"/>-<ligature sequence="m o v e _ l a y e r" replacement="move_layer"/>-<ligature sequence="h e l p _ l i n e s" replacement="help_lines"/>+<ligature sequence="b e z i e r _ l i n e" replacement="bezier_line"/>+<ligature sequence="c r e a t e _ l i n e" replacement="create_line"/>+<ligature sequence="s p i n _ b u t t o n" replacement="spin_button"/>+<ligature sequence="m o v e _ c a n v a s" replacement="move_canvas"/> <ligature sequence="l e f t _ a r r o w" replacement="left_arrow"/>-<ligature sequence="m e n u _ i c o n" replacement="menu_icon"/>-<ligature sequence="t t f _ u n i t s" replacement="ttf_units"/>-<ligature sequence="r e c t a n g l e" replacement="rectangle"/>-<ligature sequence="z o o m _ t o o l" replacement="zoom_tool"/>-<ligature sequence="f o r e s i g h t" replacement="foresight"/>-<ligature sequence="s y m m e t r i c" replacement="symmetric"/>-<ligature sequence="t i e _ p o i n t" replacement="tie_point"/>-<ligature sequence="u n d o _ t o o l" replacement="undo_tool"/>-<ligature sequence="a u t o t r a c e" replacement="autotrace"/>-<ligature sequence="s h o w _ g r i d" replacement="show_grid"/>+<ligature sequence="h e l p _ l i n e s" replacement="help_lines"/>+<ligature sequence="m o v e _ l a y e r" replacement="move_layer"/>+<ligature sequence="s e l e c t _ a l l" replacement="select_all"/>+<ligature sequence="p o i n t _ t o o l" replacement="point_tool"/>+<ligature sequence="f u l l _ g l y p h" replacement="full_glyph"/> <ligature sequence="i n f o _ i c o n" replacement="info_icon"/>-<ligature sequence="p r o g r e s s" replacement="progress"/>-<ligature sequence="z o o m _ 1 _ 1" replacement="zoom_1_1"/>-<ligature sequence="p e n _ t o o l" replacement="pen_tool"/>-<ligature sequence="r o t a t i o n" replacement="rotation"/>+<ligature sequence="s h o w _ g r i d" replacement="show_grid"/>+<ligature sequence="a u t o t r a c e" replacement="autotrace"/>+<ligature sequence="u n d o _ t o o l" replacement="undo_tool"/>+<ligature sequence="t i e _ p o i n t" replacement="tie_point"/>+<ligature sequence="s y m m e t r i c" replacement="symmetric"/>+<ligature sequence="f o r e s i g h t" replacement="foresight"/>+<ligature sequence="z o o m _ t o o l" replacement="zoom_tool"/>+<ligature sequence="r e c t a n g l e" replacement="rectangle"/>+<ligature sequence="t t f _ u n i t s" replacement="ttf_units"/>+<ligature sequence="m e n u _ i c o n" replacement="menu_icon"/> <ligature sequence="z o o m _ o u t" replacement="zoom_out"/>+<ligature sequence="r o t a t i o n" replacement="rotation"/>+<ligature sequence="p e n _ t o o l" replacement="pen_tool"/>+<ligature sequence="z o o m _ 1 _ 1" replacement="zoom_1_1"/>+<ligature sequence="p r o g r e s s" replacement="progress"/> <ligature sequence="z o o m _ i n" replacement="zoom_in"/>-<ligature sequence="c i r c l e" replacement="circle"/>-<ligature sequence="r e s i z e" replacement="resize"/> <ligature sequence="h e i g h t" replacement="height"/>-<ligature sequence="t r a c k" replacement="track"/>-<ligature sequence="w i d t h" replacement="width"/>+<ligature sequence="r e s i z e" replacement="resize"/>+<ligature sequence="c i r c l e" replacement="circle"/> <ligature sequence="t h e m e" replacement="theme"/>-<ligature sequence="n e x t" replacement="next"/>-<ligature sequence="p r e v" replacement="prev"/>-<ligature sequence="m o v e" replacement="move"/>+<ligature sequence="w i d t h" replacement="width"/>+<ligature sequence="t r a c k" replacement="track"/> <ligature sequence="s k e w" replacement="skew"/>+<ligature sequence="m o v e" replacement="move"/>+<ligature sequence="p r e v" replacement="prev"/>+<ligature sequence="n e x t" replacement="next"/>  </font>diff --git a/resources/roboto.bf b/resources/roboto.bfindex abd0060..fb55963 100644--- a/resources/roboto.bf+++ b/resources/roboto.bf@@ -6191,4 +6191,5 @@   <kerning left="T" right="e" hadjustment="-11.3891448975" />+<kerning left="T" right="u" hadjustment="-7.0000000000" /> </font>

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112