r5395 - trunk/eda/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Thu Aug 6 14:07:24 CEST 2009


Author: werner
Date: 2009-08-06 14:07:24 +0200 (Thu, 06 Aug 2009)
New Revision: 5395

Modified:
   trunk/eda/fped/TODO
   trunk/eda/fped/dump.c
   trunk/eda/fped/gui_canvas.c
   trunk/eda/fped/gui_inst.c
   trunk/eda/fped/gui_util.c
Log:
Various bugfixes.

- also dump the part name
- if given a zero-length vector, draw_arrow now draws a vertical arrow instead 
  of overflowing
- fixed angle calculation when drawing and selecting arcs
- redraw the screen after deselecting when we begin dragging



Modified: trunk/eda/fped/TODO
===================================================================
--- trunk/eda/fped/TODO	2009-08-06 09:57:29 UTC (rev 5394)
+++ trunk/eda/fped/TODO	2009-08-06 12:07:24 UTC (rev 5395)
@@ -19,7 +19,6 @@
 
 Bugs:
 - default silk width has no business being hard-coded in obj.c
-- after moving, arc sometimes wrap the wrong way
 - undelete only works if not much has changed since the deletion
 
 Code cleanup:

Modified: trunk/eda/fped/dump.c
===================================================================
--- trunk/eda/fped/dump.c	2009-08-06 09:57:29 UTC (rev 5394)
+++ trunk/eda/fped/dump.c	2009-08-06 12:07:24 UTC (rev 5395)
@@ -355,9 +355,10 @@
 
 	fprintf(file, "/* MACHINE-GENERATED ! */\n\n");
 	for (frame = frames; frame; frame = frame->next) {
-		if (!frame->name)
+		if (!frame->name) {
+			fprintf(file, "part \"%s\"\n", part_name);
 			dump_frame(file, frame, "");
-		else {
+		} else {
 			fprintf(file, "frame %s {\n", frame->name);
 			dump_frame(file, frame, "\t");
 			fprintf(file, "}\n\n");

Modified: trunk/eda/fped/gui_canvas.c
===================================================================
--- trunk/eda/fped/gui_canvas.c	2009-08-06 09:57:29 UTC (rev 5394)
+++ trunk/eda/fped/gui_canvas.c	2009-08-06 12:07:24 UTC (rev 5395)
@@ -172,6 +172,7 @@
 		}
 		if (res) {
 			inst_deselect();
+			redraw();
 			dragging = 1;
 			drag_escaped = 0;
 			drag_start = pos;

Modified: trunk/eda/fped/gui_inst.c
===================================================================
--- trunk/eda/fped/gui_inst.c	2009-08-06 09:57:29 UTC (rev 5394)
+++ trunk/eda/fped/gui_inst.c	2009-08-06 12:07:24 UTC (rev 5395)
@@ -97,7 +97,12 @@
 	struct coord p[3];
 	struct coord side;
 
-	side = normalize(sub_vec(to, from), len);
+	if (from.x == to.x && from.y == to.y) {
+		side.x = 0;
+		side.y = -len;
+	} else {
+		side = normalize(sub_vec(to, from), len);
+	}
 	p[0] = add_vec(to, rotate(side, 180-angle));
 	p[1] = to;
 	p[2] = add_vec(to, rotate(side, 180+angle));
@@ -267,7 +272,7 @@
 	struct coord c = self->base;
 	struct coord p;
 	unit_type r, d_min, d;
-	double angle, a2;
+	double angle, a1, a2;
 
 	r = self->u.arc.width/scale/2;
 	if (r < SELECT_R)
@@ -297,10 +302,15 @@
 	/* see if we're close to the part that's actually drawn */
 
 	angle = theta(c, pos);
+	a1 = self->u.arc.a1;
 	a2 = self->u.arc.a2;
-	if (a2 < self->u.arc.a1)
-		a2 += 180;
-	return angle >= self->u.arc.a1 && angle <= a2 ? d : -1;
+	if (angle < 0)
+		angle += 360;
+	if (a2 < a1)
+		a2 += 360;
+	if (angle < a1)
+		angle += 360;
+	return angle >= a1 && angle <= a2 ? d : -1;
 }
 
 

Modified: trunk/eda/fped/gui_util.c
===================================================================
--- trunk/eda/fped/gui_util.c	2009-08-06 09:57:29 UTC (rev 5394)
+++ trunk/eda/fped/gui_util.c	2009-08-06 12:07:24 UTC (rev 5395)
@@ -103,8 +103,13 @@
 void draw_arc(GdkDrawable *da, GdkGC *gc, int fill,
     int x, int y, int r, double a1, double a2)
 {
-        if (a1 == a2)
-                a2 = a1+360;
+	/*
+	 * This adjustment handles two distinct cases:
+	 * - if a1 == a2, we make sure we draw a full circle
+	 * - the end angle a2 must always be greater than the start angle a1
+	 */
+	if (a2 <= a1)
+		a2 += 360;
         gdk_draw_arc(da, gc, fill, x-r, y-r, 2*r, 2*r, a1*64, (a2-a1)*64);
 }
 




More information about the commitlog mailing list