Commit aa13474
Select all control points or paths in the current glyph
Changed files (5)
modifiedgraphics/tools_and_buttons.svgaddedicons/select_all.pngmodifiedlibbirdfont/DrawingTools.valamodifiedlibbirdfont/Glyph.valamodifiedlibbirdfont/PenTool.vala
Diff
@@ -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>new file mode 100644Binary files /dev/null and b/icons/select_all.png differ@@ -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);@@ -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; } }@@ -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);+ }+ }+ } } }