Clone in a terminal:
Commit aa13474
Johan Mattsson - 2014-07-13T14:12:04+00:00
aa13474131aec34b38d2a9d768d7d19de5727549johan.mattsson.m@gmail.com

Select all control points or paths in the current glyph

Changed files (5)

Diff

diff --git a/graphics/tools_and_buttons.svg b/graphics/tools_and_buttons.svgindex d738078..4bd3c24 100644--- a/graphics/tools_and_buttons.svg+++ b/graphics/tools_and_buttons.svg@@ -662,14 +662,97 @@          id="stop3765-1-1-94" />     </linearGradient>     <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient3761-1-3-75"+       id="linearGradient4027-42"+       gradientUnits="userSpaceOnUse"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-656.63464,-283.00582)"+       x1="608.99573"+       y1="316.79437"+       x2="608.64221"+       y2="290.27783" />+    <linearGradient+       id="linearGradient3761-1-3-75">+      <stop+         style="stop-color:#eeeded;stop-opacity:1"+         offset="0"+         id="stop3763-4-4-12" />+      <stop+         style="stop-color:#ffffff;stop-opacity:1;"+         offset="1"+         id="stop3765-1-1-92" />+    </linearGradient>+    <linearGradient        y2="290.27783"        x2="608.64221"        y1="316.79437"        x1="608.99573"-       gradientTransform="matrix(1.1095097,0,0,0.99800197,-693.71844,-244.23002)"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-721.74057,-213.43868)"        gradientUnits="userSpaceOnUse"-       id="linearGradient3354"-       xlink:href="#linearGradient3761-1-3-87"+       id="linearGradient3396"+       xlink:href="#linearGradient3761-1-3-75"+       inkscape:collect="always" />+    <linearGradient+       y2="290.27783"+       x2="608.64221"+       y1="316.79437"+       x1="608.99573"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-721.74057,-213.43868)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient3396-6"+       xlink:href="#linearGradient3761-1-3-75-4"+       inkscape:collect="always" />+    <linearGradient+       id="linearGradient3761-1-3-75-4">+      <stop+         style="stop-color:#eeeded;stop-opacity:1"+         offset="0"+         id="stop3763-4-4-12-3" />+      <stop+         style="stop-color:#ffffff;stop-opacity:1;"+         offset="1"+         id="stop3765-1-1-92-3" />+    </linearGradient>+    <linearGradient+       y2="290.27783"+       x2="608.64221"+       y1="316.79437"+       x1="608.99573"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-721.98026,-180.8)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4243"+       xlink:href="#linearGradient3761-1-3-75-4"+       inkscape:collect="always" />+    <linearGradient+       y2="290.27783"+       x2="608.64221"+       y1="316.79437"+       x1="608.99573"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-721.98026,-180.8)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4243-0"+       xlink:href="#linearGradient3761-1-3-75-4-3"+       inkscape:collect="always" />+    <linearGradient+       id="linearGradient3761-1-3-75-4-3">+      <stop+         style="stop-color:#eeeded;stop-opacity:1"+         offset="0"+         id="stop3763-4-4-12-3-4" />+      <stop+         style="stop-color:#ffffff;stop-opacity:1;"+         offset="1"+         id="stop3765-1-1-92-3-1" />+    </linearGradient>+    <linearGradient+       y2="290.27783"+       x2="608.64221"+       y1="316.79437"+       x1="608.99573"+       gradientTransform="matrix(1.1095097,0,0,0.99800197,-721.39663,-104.43612)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4369"+       xlink:href="#linearGradient3761-1-3-75-4-3"        inkscape:collect="always" />   </defs>   <sodipodi:namedview@@ -679,9 +762,9 @@      borderopacity="1.0"      inkscape:pageopacity="0.0"      inkscape:pageshadow="2"-     inkscape:zoom="3.7691312"-     inkscape:cx="77.599735"-     inkscape:cy="700.53532"+     inkscape:zoom="5.6568542"+     inkscape:cx="43.153308"+     inkscape:cy="678.92897"      inkscape:current-layer="layer1"      inkscape:document-units="px"      showgrid="false"@@ -1115,62 +1198,65 @@          id="path4296"          inkscape:connector-curvature="0" />     </g>-    <path-       sodipodi:type="arc"-       style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"-       id="path4300"-       sodipodi:cx="12.791882"-       sodipodi:cy="118.45668"-       sodipodi:rx="3.4111683"-       sodipodi:ry="3.4111683"-       d="m 16.20305,118.45668 a 3.4111683,3.4111683 0 1 1 -6.8223368,0 3.4111683,3.4111683 0 1 1 6.8223368,0 z"-       transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.60183,58.200946)"-       inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"-       inkscape:export-xdpi="321.42578"-       inkscape:export-ydpi="321.42578" />-    <path-       sodipodi:type="arc"-       style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"-       id="path4302"-       sodipodi:cx="19.329954"-       sodipodi:cy="113.62419"-       sodipodi:rx="1.7055842"-       sodipodi:ry="1.7055842"-       d="m 21.035538,113.62419 a 1.7055842,1.7055842 0 1 1 -3.411168,0 1.7055842,1.7055842 0 1 1 3.411168,0 z"-       transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.94438,48.501384)"-       inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"-       inkscape:export-xdpi="321.42578"-       inkscape:export-ydpi="321.42578" />-    <path-       transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,169.07746,57.876328)"-       d="m 16.20305,118.45668 a 3.4111683,3.4111683 0 1 1 -6.8223368,0 3.4111683,3.4111683 0 1 1 6.8223368,0 z"-       sodipodi:ry="3.4111683"-       sodipodi:rx="3.4111683"-       sodipodi:cy="118.45668"-       sodipodi:cx="12.791882"-       id="path4304"-       style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"-       sodipodi:type="arc"-       inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"-       inkscape:export-xdpi="321.42578"-       inkscape:export-ydpi="321.42578" />-    <path-       style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"-       d="m 88.140705,142.3417 4.874372,-4.87437"-       id="path4315"-       inkscape:connector-curvature="0"-       inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"-       inkscape:export-xdpi="321.42578"-       inkscape:export-ydpi="321.42578" />-    <path-       style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"-       d="m 95.276383,137.61808 4.597997,4.49749"-       id="path4323"-       inkscape:connector-curvature="0"-       sodipodi:nodetypes="cc"-       inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"-       inkscape:export-xdpi="321.42578"-       inkscape:export-ydpi="321.42578" />+    <g+       id="g4307">+      <path+         inkscape:export-ydpi="321.42578"+         inkscape:export-xdpi="321.42578"+         inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+         transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.60183,58.200946)"+         d="m 16.20305,118.45668 a 3.4111683,3.4111683 0 1 1 -6.8223368,0 3.4111683,3.4111683 0 1 1 6.8223368,0 z"+         sodipodi:ry="3.4111683"+         sodipodi:rx="3.4111683"+         sodipodi:cy="118.45668"+         sodipodi:cx="12.791882"+         id="path4300"+         style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+         sodipodi:type="arc" />+      <path+         inkscape:export-ydpi="321.42578"+         inkscape:export-xdpi="321.42578"+         inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+         transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.94438,48.501384)"+         d="m 21.035538,113.62419 a 1.7055842,1.7055842 0 1 1 -3.411168,0 1.7055842,1.7055842 0 1 1 3.411168,0 z"+         sodipodi:ry="1.7055842"+         sodipodi:rx="1.7055842"+         sodipodi:cy="113.62419"+         sodipodi:cx="19.329954"+         id="path4302"+         style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+         sodipodi:type="arc" />+      <path+         inkscape:export-ydpi="321.42578"+         inkscape:export-xdpi="321.42578"+         inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+         sodipodi:type="arc"+         style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+         id="path4304"+         sodipodi:cx="12.791882"+         sodipodi:cy="118.45668"+         sodipodi:rx="3.4111683"+         sodipodi:ry="3.4111683"+         d="m 16.20305,118.45668 a 3.4111683,3.4111683 0 1 1 -6.8223368,0 3.4111683,3.4111683 0 1 1 6.8223368,0 z"+         transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,169.07746,57.876328)" />+      <path+         inkscape:export-ydpi="321.42578"+         inkscape:export-xdpi="321.42578"+         inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+         inkscape:connector-curvature="0"+         id="path4315"+         d="m 88.140705,142.3417 4.874372,-4.87437"+         style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+      <path+         inkscape:export-ydpi="321.42578"+         inkscape:export-xdpi="321.42578"+         inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+         sodipodi:nodetypes="cc"+         inkscape:connector-curvature="0"+         id="path4323"+         d="m 95.276383,137.61808 4.597997,4.49749"+         style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+    </g>     <g        id="g4386"        transform="translate(-2.0100503,27.20603)"@@ -2422,12 +2508,83 @@          inkscape:connector-curvature="0" />     </g>     <path-       style="fill:#ffffff;fill-opacity:1;stroke:#9b9b9b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+       style="fill:#f8f7f7;fill-opacity:1;stroke:#9b9b9b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"        d="m 14.550712,80.622568 -2.15625,2.25 4.1875,3.96875 -4.1875,3.96875 2.15625,2.25 4.28125,-4.0625 4.3125,4.0625 2.125,-2.25 -4.1875,-3.96875 4.1875,-3.96875 -2.125,-2.25 -4.3125,4.0625 -4.28125,-4.0625 z"        id="rect3375"        inkscape:connector-curvature="0"        inkscape:export-filename="/home/johan/birdfont/icons/delete_button.png"        inkscape:export-xdpi="319"        inkscape:export-ydpi="319" />+    <g+       id="g4402"+       transform="translate(100.93935,-111.82322)">+      <rect+         y="189.68132"+         x="-56.372547"+         height="17.293356"+         width="21.528343"+         id="rect3415-4-2"+         style="fill:none;stroke:#9b9b9b;stroke-width:1.03754234;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.03754229, 3.11262687;stroke-dashoffset:0" />+      <g+         id="g4307-9"+         transform="matrix(0.73281687,0,0,0.73281687,-114.29482,94.386759)">+        <path+           sodipodi:type="arc"+           style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+           id="path4300-0"+           sodipodi:cx="12.791882"+           sodipodi:cy="118.45668"+           sodipodi:rx="3.4111683"+           sodipodi:ry="3.4111683"+           d="m 16.20305,118.45668 c 0,1.88394 -1.527232,3.41117 -3.411168,3.41117 -1.883937,0 -3.4111688,-1.52723 -3.4111688,-3.41117 0,-1.88394 1.5272318,-3.41117 3.4111688,-3.41117 1.883936,0 3.411168,1.52723 3.411168,3.41117 z"+           transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.60183,58.200946)"+           inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+           inkscape:export-xdpi="321.42578"+           inkscape:export-ydpi="321.42578" />+        <path+           sodipodi:type="arc"+           style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+           id="path4302-3"+           sodipodi:cx="19.329954"+           sodipodi:cy="113.62419"+           sodipodi:rx="1.7055842"+           sodipodi:ry="1.7055842"+           d="m 21.035538,113.62419 c 0,0.94197 -0.763616,1.70559 -1.705584,1.70559 -0.941968,0 -1.705584,-0.76362 -1.705584,-1.70559 0,-0.94197 0.763616,-1.70558 1.705584,-1.70558 0.941968,0 1.705584,0.76361 1.705584,1.70558 z"+           transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,153.94438,48.501384)"+           inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+           inkscape:export-xdpi="321.42578"+           inkscape:export-ydpi="321.42578" />+        <path+           transform="matrix(0.66380748,0.63837005,-0.63837005,0.66380748,169.07746,57.876328)"+           d="m 16.20305,118.45668 c 0,1.88394 -1.527232,3.41117 -3.411168,3.41117 -1.883937,0 -3.4111688,-1.52723 -3.4111688,-3.41117 0,-1.88394 1.5272318,-3.41117 3.4111688,-3.41117 1.883936,0 3.411168,1.52723 3.411168,3.41117 z"+           sodipodi:ry="3.4111683"+           sodipodi:rx="3.4111683"+           sodipodi:cy="118.45668"+           sodipodi:cx="12.791882"+           id="path4304-5"+           style="fill:#e6e6e6;fill-opacity:1;stroke:#858585;stroke-width:0.80000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+           sodipodi:type="arc"+           inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+           inkscape:export-xdpi="321.42578"+           inkscape:export-ydpi="321.42578" />+        <path+           style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+           d="m 88.140705,142.3417 4.874372,-4.87437"+           id="path4315-2"+           inkscape:connector-curvature="0"+           inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+           inkscape:export-xdpi="321.42578"+           inkscape:export-ydpi="321.42578" />+        <path+           style="fill:none;stroke:#858585;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+           d="m 95.276383,137.61808 4.597997,4.49749"+           id="path4323-0"+           inkscape:connector-curvature="0"+           sodipodi:nodetypes="cc"+           inkscape:export-filename="/home/johan/birdfont/icons/create_line.png"+           inkscape:export-xdpi="321.42578"+           inkscape:export-ydpi="321.42578" />+      </g>+    </g>   </g> </svg>diff --git a/icons/select_all.png b/icons/select_all.pngnew file mode 100644index 0000000..106343bBinary files /dev/null and b/icons/select_all.png differdiff --git a/libbirdfont/DrawingTools.vala b/libbirdfont/DrawingTools.valaindex 92d96e7..78eefd8 100644--- a/libbirdfont/DrawingTools.vala+++ b/libbirdfont/DrawingTools.vala@@ -129,12 +129,26 @@ public class DrawingTools : ToolCollection  { 		 		// Keyboard commands on android 		// Delete key-		Tool delete_button = new Tool ("delete_button", t_("Delete"), 'r');+		Tool delete_button = new Tool ("delete_button", t_("Delete")); 		delete_button.select_action.connect ((self) => { 			TabContent.key_press (Key.DEL); 		}); 		key_tools.add_tool (delete_button);		 +		// Select all points or paths+		Tool select_all_button = new Tool ("select_all", t_("Select all points or paths"));+		select_all_button.select_action.connect ((self) => {+			Glyph g = MainWindow.get_current_glyph ();+			+			if (point_tool.is_selected () || pen_tool.is_selected ()) {+				pen_tool.select_all_points ();+				g.open_path ();+			} else {+				g.select_all_paths ();+			}+		});+		key_tools.add_tool (select_all_button);			+		 		// quadratic Bézier points 		quadratic_points = new Tool ("quadratic_points", t_("Create quadratic Bézier curves")); 		quadratic_points.select_action.connect ((self) => {@@ -236,8 +250,8 @@ public class DrawingTools : ToolCollection  { 		reflect_handle.select_action.connect ((self) => { 			bool symmetrical; 			PointSelection ep;-			if (PenTool.selected_points.length () > 0) {-				ep = PenTool.selected_points.first ().data;+			if (PenTool.selected_points.size > 0) {+				ep = PenTool.selected_points.get (0); 				symmetrical = ep.point.reflective_handles; 				foreach (PointSelection p in PenTool.selected_points) { 					p.point.set_reflective_handles (!symmetrical);diff --git a/libbirdfont/Glyph.vala b/libbirdfont/Glyph.valaindex 0463ea2..11cdffd 100644--- a/libbirdfont/Glyph.vala+++ b/libbirdfont/Glyph.vala@@ -1870,13 +1870,13 @@ public class Glyph : FontDisplay { 		double px, py; 		double cx, cy; 		-		px = Glyph.path_coordinate_x (x);-		py = Glyph.path_coordinate_y (y);+		px = x / view_zoom;+		py = y / view_zoom; 		-		cx = Glyph.path_coordinate_x (allocation.width / 2.0);-		cy = Glyph.path_coordinate_y (allocation.height / 2.0);		+		cx = (allocation.width / 2.0) / view_zoom;+		cy = (allocation.height / 2.0) / view_zoom;		 		-		view_offset_x += px - cx;+		view_offset_x += px - cy; 		view_offset_y += py - cy; 	} }diff --git a/libbirdfont/PenTool.vala b/libbirdfont/PenTool.valaindex b0f9600..e5e292e 100644--- a/libbirdfont/PenTool.vala+++ b/libbirdfont/PenTool.vala@@ -29,7 +29,7 @@ public class PenTool : Tool {  	public static bool edit_active_corner = false; 	-	public static List<PointSelection> selected_points; +	public static Gee.ArrayList<PointSelection> selected_points;   	public static EditPointHandle active_handle; 	public static EditPointHandle selected_handle;@@ -76,7 +76,7 @@ public class PenTool : Tool { 	public PenTool (string name) {	 		base (name, t_("Add new points")); 		-		selected_points = new List<PointSelection> (); +		selected_points = new Gee.ArrayList<PointSelection> ();   		active_handle = new EditPointHandle.empty (); 		selected_handle = new EditPointHandle.empty ();@@ -294,10 +294,8 @@ public class PenTool : Tool { 								 		g.update_view (); -		while (selected_points.length () > 0) {-			selected_points.remove_link (selected_points.first ());-		}-		+		selected_points.clear ();+ 		selected_handle.selected = false; 		 		active_handle = new EditPointHandle.empty ();@@ -311,14 +309,12 @@ public class PenTool : Tool { 	public static void update_selection () { 		Glyph g = MainWindow.get_current_glyph (); 		-		while (selected_points.length () > 0) {-			selected_points.remove_link (selected_points.first ());-		}+		selected_points.clear ();  		foreach (Path p in g.path_list) { 			foreach (EditPoint e in p.points) { 				if (e.is_selected ()) {-					selected_points.append (new PointSelection (e, p));+					selected_points.add (new PointSelection (e, p)); 				} 			} 		}@@ -509,7 +505,7 @@ public class PenTool : Tool { 			last_selected_is_handle = false; 		} -		if (selected_points.length () == 0 && !active_handle.active) {+		if (selected_points.size == 0 && !active_handle.active) { 			show_selection_box = true; 			selection_box_x = x; 			selection_box_y = y;@@ -572,14 +568,19 @@ public class PenTool : Tool { 	} 	 	public void remove_from_selected (EditPoint ep) -		requires (selected_points.length () > 0) {-		for (unowned List<PointSelection> e = selected_points.first (); !is_null (e.next); e = e.next) {-			if (e.data.point.equals (e.data.point)) {-				e.data.point.set_selected (false);-				selected_points.remove_link (e);-				return;+		requires (selected_points.size > 0) {+		+		Gee.ArrayList<PointSelection> remove = new Gee.ArrayList<PointSelection>  ();+					+		foreach (PointSelection e in selected_points) {+			if (e.point.equals (e.point)) {+				remove.add (e); 			} 		}++		foreach (PointSelection e in remove) {+			selected_points.remove (e);+		} 	} 	 	public void select_active_point (double x, double y) {@@ -1338,23 +1339,19 @@ public class PenTool : Tool { 			} 		} 		-		selected_points.append (new PointSelection (p, path));+		selected_points.add (new PointSelection (p, path)); 	} 	 	public static void remove_all_selected_points () { 		Glyph g = MainWindow.get_current_glyph (); 		-		selected_point.set_selected (false);-		selected_point.set_active (false);-		selected_point = new EditPoint ();-			-		while (selected_points.length () > 0) {-			PointSelection ep = selected_points.first ().data;+		foreach (PointSelection ep in selected_points) { 			ep.point.set_active (false); 			ep.point.set_selected (false);-			selected_points.remove_link (selected_points.first ()); 		} 		+		selected_points.clear ();+		 		foreach (Path p in g.path_list) { 			foreach (EditPoint e in p.points) { 				e.set_active (false);@@ -1367,7 +1364,7 @@ public class PenTool : Tool { 		PointSelection next = new PointSelection.empty (); 		Glyph g = MainWindow.get_current_glyph(); 		-		if (selected_points.length () == 0) {+		if (selected_points.size == 0) { 			return; 		} @@ -1393,8 +1390,8 @@ public class PenTool : Tool { 	}  	private static PointSelection get_next_point (double angle) -		requires (selected_points.length () != 0) {-		PointSelection e = selected_points.last ().data;		+		requires (selected_points.size != 0) {+		PointSelection e = selected_points.get (selected_points.size - 1);	 		double right_angle = e.point.right_handle.angle; 		double left_angle = e.point.left_handle.angle; 		double min_right, min_left;@@ -1607,12 +1604,12 @@ public class PenTool : Tool { 	} 	 	public static void convert_segment_to_line () {-		if (selected_points.length () == 0) {+		if (selected_points.size == 0) { 			return; 		} 		-		if (selected_points.length () == 1) {-			convert_point_to_line (selected_points.first ().data.point, true);+		if (selected_points.size == 1) {+			convert_point_to_line (selected_points.get (0).point, true); 		} else { 			foreach (PointSelection p in selected_points) { 				convert_point_to_line (p.point, false);@@ -1698,15 +1695,15 @@ public class PenTool : Tool { 		bool reset_selected = false; 		EditPoint e; 		-		if (selected_points.length () == 1) {-			selected = selected_points.first ().data;+		if (selected_points.size == 1) {+			selected = selected_points.get (0); 			if (selected.point.next != null) {-				selected_points.append (new PointSelection (selected.point.get_next (), selected.path));+				selected_points.add (new PointSelection (selected.point.get_next (), selected.path)); 				selected.point.get_next ().set_selected (true); 			} 			 			if (selected.point.prev != null) {-				selected_points.append (new PointSelection (selected.point.get_prev (), selected.path));+				selected_points.add (new PointSelection (selected.point.get_prev (), selected.path)); 				selected.point.get_next ().set_selected (true); 			} 			@@ -1748,25 +1745,34 @@ public class PenTool : Tool { 		 		if (reset_selected) { 			remove_all_selected_points ();-			selected_points.append (selected);+			selected_points.add (selected); 			selected.point.set_selected (true); 		} 	} 	 	public static void update_selected_points () { 		Glyph g = MainWindow.get_current_glyph ();-		while (selected_points.length () > 0) {-			selected_points.remove_link (selected_points.first ());-		}+		selected_points.clear (); 		 		foreach (Path p in g.path_list) { 			foreach (EditPoint ep in p.points) { 				if (ep.is_selected ()) {-					selected_points.append (new PointSelection (ep, p));+					selected_points.add (new PointSelection (ep, p)); 				} 			} 		} 	}+	+	public void select_all_points () {+		Glyph g = MainWindow.get_current_glyph ();+		+		foreach (Path p in g.path_list) {+			foreach (EditPoint ep in p.points) {+				ep.set_selected (true);+				add_selected_point (ep, p);+			}+		}+	} }  }

Contact

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