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