mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-25 21:38:26 +02:00
- replaced awkward FOR_GLOBAL_INSTS / FOR_PKG_INSTS sequence with single
FOR_ALL_INSTS - several functions only walked the active package instances, so we couldn't access the origin of the root frame git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5482 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
f368014b3c
commit
4920bb96fa
80
inst.c
80
inst.c
@ -158,7 +158,7 @@ int inst_select(struct coord pos)
|
|||||||
enum inst_prio prio;
|
enum inst_prio prio;
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
int best_dist = 0; /* keep gcc happy */
|
int best_dist = 0; /* keep gcc happy */
|
||||||
int dist;
|
int dist, i;
|
||||||
|
|
||||||
deselect_outside();
|
deselect_outside();
|
||||||
edit_nothing();
|
edit_nothing();
|
||||||
@ -170,7 +170,7 @@ int inst_select(struct coord pos)
|
|||||||
FOR_INST_PRIOS_DOWN(prio) {
|
FOR_INST_PRIOS_DOWN(prio) {
|
||||||
if (!show(prio))
|
if (!show(prio))
|
||||||
continue;
|
continue;
|
||||||
for (inst = active_pkg->insts[prio]; inst; inst = inst->next) {
|
FOR_ALL_INSTS(i, prio, inst) {
|
||||||
if (!inst->active || !inst->ops->distance)
|
if (!inst->active || !inst->ops->distance)
|
||||||
continue;
|
continue;
|
||||||
if (!inst_connected(inst))
|
if (!inst_connected(inst))
|
||||||
@ -190,7 +190,7 @@ int inst_select(struct coord pos)
|
|||||||
|
|
||||||
/* give vectors a second chance */
|
/* give vectors a second chance */
|
||||||
|
|
||||||
for (inst = active_pkg->insts[ip_vec]; inst; inst = inst->next) {
|
FOR_ALL_INSTS(i, ip_vec, inst) {
|
||||||
if (!inst->active)
|
if (!inst->active)
|
||||||
continue;
|
continue;
|
||||||
if (!inst_connected(inst))
|
if (!inst_connected(inst))
|
||||||
@ -215,10 +215,10 @@ struct inst *inst_find_point(struct coord pos)
|
|||||||
{
|
{
|
||||||
struct inst *inst, *found;
|
struct inst *inst, *found;
|
||||||
int best_dist = 0; /* keep gcc happy */
|
int best_dist = 0; /* keep gcc happy */
|
||||||
int dist;
|
int dist, i;
|
||||||
|
|
||||||
found = NULL;
|
found = NULL;
|
||||||
for (inst = active_pkg->insts[ip_frame]; inst; inst = inst->next) {
|
FOR_ALL_INSTS(i, ip_frame, inst) {
|
||||||
if (!inst->u.frame.active)
|
if (!inst->u.frame.active)
|
||||||
continue;
|
continue;
|
||||||
dist = gui_dist_frame_eye(inst, pos, draw_ctx.scale);
|
dist = gui_dist_frame_eye(inst, pos, draw_ctx.scale);
|
||||||
@ -230,7 +230,7 @@ struct inst *inst_find_point(struct coord pos)
|
|||||||
if (found)
|
if (found)
|
||||||
return found;
|
return found;
|
||||||
|
|
||||||
for (inst = active_pkg->insts[ip_vec]; inst; inst = inst->next) {
|
FOR_ALL_INSTS(i, ip_vec, inst) {
|
||||||
if (!inst->active || !inst->ops->distance)
|
if (!inst->active || !inst->ops->distance)
|
||||||
continue;
|
continue;
|
||||||
dist = inst->ops->distance(inst, pos, draw_ctx.scale);
|
dist = inst->ops->distance(inst, pos, draw_ctx.scale);
|
||||||
@ -249,14 +249,13 @@ int inst_find_point_selected(struct coord pos, struct inst **res)
|
|||||||
int n, best_i, i;
|
int n, best_i, i;
|
||||||
struct inst *best = NULL;
|
struct inst *best = NULL;
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
int d_min, d;
|
int d_min, d, j;
|
||||||
|
|
||||||
assert(selected_inst);
|
assert(selected_inst);
|
||||||
n = inst_anchors(selected_inst, anchors);
|
n = inst_anchors(selected_inst, anchors);
|
||||||
for (i = 0; i != n; i++) {
|
for (i = 0; i != n; i++) {
|
||||||
if (*anchors[i]) {
|
if (*anchors[i]) {
|
||||||
for (inst = active_pkg->insts[ip_vec]; inst;
|
FOR_ALL_INSTS(j, ip_vec, inst) {
|
||||||
inst = inst->next) {
|
|
||||||
if (inst->vec != *anchors[i])
|
if (inst->vec != *anchors[i])
|
||||||
continue;
|
continue;
|
||||||
d = gui_dist_vec(inst, pos, draw_ctx.scale);
|
d = gui_dist_vec(inst, pos, draw_ctx.scale);
|
||||||
@ -267,8 +266,7 @@ int inst_find_point_selected(struct coord pos, struct inst **res)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (inst = active_pkg->insts[ip_frame]; inst;
|
FOR_ALL_INSTS(j, ip_vec, inst) {
|
||||||
inst = inst->next) {
|
|
||||||
if (inst != selected_inst->outer)
|
if (inst != selected_inst->outer)
|
||||||
continue;
|
continue;
|
||||||
d = gui_dist_frame(inst, pos, draw_ctx.scale);
|
d = gui_dist_frame(inst, pos, draw_ctx.scale);
|
||||||
@ -345,10 +343,11 @@ static void obj_edit(struct obj *obj);
|
|||||||
void inst_select_vec(struct vec *vec)
|
void inst_select_vec(struct vec *vec)
|
||||||
{
|
{
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (vec->frame != active_frame)
|
if (vec->frame != active_frame)
|
||||||
select_frame(vec->frame);
|
select_frame(vec->frame);
|
||||||
for (inst = active_pkg->insts[ip_vec]; inst; inst = inst->next)
|
FOR_ALL_INSTS(i, ip_vec, inst)
|
||||||
if (inst->vec == vec && inst->active) {
|
if (inst->vec == vec && inst->active) {
|
||||||
inst_deselect();
|
inst_deselect();
|
||||||
inst_select_inst(inst);
|
inst_select_inst(inst);
|
||||||
@ -362,17 +361,14 @@ void inst_select_obj(struct obj *obj)
|
|||||||
{
|
{
|
||||||
enum inst_prio prio;
|
enum inst_prio prio;
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (obj->frame != active_frame)
|
if (obj->frame != active_frame)
|
||||||
select_frame(obj->frame);
|
select_frame(obj->frame);
|
||||||
FOR_INST_PRIOS_DOWN(prio) {
|
FOR_INST_PRIOS_DOWN(prio)
|
||||||
FOR_GLOBAL_INSTS(prio, inst)
|
FOR_ALL_INSTS(i, prio, inst)
|
||||||
if (inst->obj && inst->obj == obj && inst->active)
|
if (inst->obj && inst->obj == obj && inst->active)
|
||||||
goto found;
|
goto found;
|
||||||
FOR_PKG_INSTS(prio, inst)
|
|
||||||
if (inst->obj && inst->obj == obj && inst->active)
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
obj_edit(obj);
|
obj_edit(obj);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1037,35 +1033,22 @@ void inst_draw(void)
|
|||||||
{
|
{
|
||||||
enum inst_prio prio;
|
enum inst_prio prio;
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
|
int i;
|
||||||
|
|
||||||
FOR_INST_PRIOS_UP(prio) {
|
FOR_INST_PRIOS_UP(prio)
|
||||||
FOR_GLOBAL_INSTS(prio, inst)
|
FOR_ALL_INSTS(i, prio, inst)
|
||||||
if (show(prio) && !inst->active && inst->ops->draw)
|
if (show(prio) && !inst->active && inst->ops->draw)
|
||||||
inst->ops->draw(inst);
|
inst->ops->draw(inst);
|
||||||
FOR_PKG_INSTS(prio, inst)
|
FOR_INST_PRIOS_UP(prio)
|
||||||
if (show(prio) && !inst->active && inst->ops->draw)
|
FOR_ALL_INSTS(i, prio, inst)
|
||||||
inst->ops->draw(inst);
|
|
||||||
}
|
|
||||||
FOR_INST_PRIOS_UP(prio) {
|
|
||||||
FOR_GLOBAL_INSTS(prio, inst)
|
|
||||||
if (show(prio) && prio != ip_frame && inst->active &&
|
if (show(prio) && prio != ip_frame && inst->active &&
|
||||||
inst != selected_inst && inst->ops->draw)
|
inst != selected_inst && inst->ops->draw)
|
||||||
inst->ops->draw(inst);
|
inst->ops->draw(inst);
|
||||||
FOR_PKG_INSTS(prio, inst)
|
if (show_stuff)
|
||||||
if (show(prio) && prio != ip_frame && inst->active &&
|
FOR_ALL_INSTS(i, ip_frame, inst)
|
||||||
inst != selected_inst && inst->ops->draw)
|
|
||||||
inst->ops->draw(inst);
|
|
||||||
}
|
|
||||||
if (show_stuff) {
|
|
||||||
FOR_GLOBAL_INSTS(ip_frame, inst)
|
|
||||||
if (inst->active && inst != selected_inst &&
|
if (inst->active && inst != selected_inst &&
|
||||||
inst->ops->draw)
|
inst->ops->draw)
|
||||||
inst->ops->draw(inst);
|
inst->ops->draw(inst);
|
||||||
FOR_PKG_INSTS(ip_frame, inst)
|
|
||||||
if (inst->active && inst != selected_inst &&
|
|
||||||
inst->ops->draw)
|
|
||||||
inst->ops->draw(inst);
|
|
||||||
}
|
|
||||||
if (selected_inst && selected_inst->ops->draw)
|
if (selected_inst && selected_inst->ops->draw)
|
||||||
selected_inst->ops->draw(selected_inst);
|
selected_inst->ops->draw(selected_inst);
|
||||||
}
|
}
|
||||||
@ -1074,11 +1057,9 @@ void inst_draw(void)
|
|||||||
void inst_highlight_vecs(int (*pick)(struct inst *inst, void *user), void *user)
|
void inst_highlight_vecs(int (*pick)(struct inst *inst, void *user), void *user)
|
||||||
{
|
{
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
|
int i;
|
||||||
|
|
||||||
FOR_GLOBAL_INSTS(ip_vec, inst)
|
FOR_ALL_INSTS(i, ip_vec, inst)
|
||||||
if (pick(inst, user))
|
|
||||||
gui_highlight_vec(inst);
|
|
||||||
FOR_PKG_INSTS(ip_vec, inst)
|
|
||||||
if (pick(inst, user))
|
if (pick(inst, user))
|
||||||
gui_highlight_vec(inst);
|
gui_highlight_vec(inst);
|
||||||
}
|
}
|
||||||
@ -1089,21 +1070,10 @@ struct inst *inst_find_vec(struct coord pos,
|
|||||||
{
|
{
|
||||||
struct inst *inst, *found;
|
struct inst *inst, *found;
|
||||||
int best_dist = 0; /* keep gcc happy */
|
int best_dist = 0; /* keep gcc happy */
|
||||||
int dist;
|
int dist, i;
|
||||||
|
|
||||||
found = NULL;
|
found = NULL;
|
||||||
FOR_GLOBAL_INSTS(ip_vec, inst) {
|
FOR_ALL_INSTS(i, ip_vec, inst) {
|
||||||
if (!inst->ops->distance)
|
|
||||||
continue;
|
|
||||||
dist = inst->ops->distance(inst, pos, draw_ctx.scale);
|
|
||||||
if (dist < 0 || (found && best_dist <= dist))
|
|
||||||
continue;
|
|
||||||
if (!pick(inst, user))
|
|
||||||
continue;
|
|
||||||
found = inst;
|
|
||||||
best_dist = dist;
|
|
||||||
}
|
|
||||||
FOR_PKG_INSTS(ip_vec, inst) {
|
|
||||||
if (!inst->ops->distance)
|
if (!inst->ops->distance)
|
||||||
continue;
|
continue;
|
||||||
dist = inst->ops->distance(inst, pos, draw_ctx.scale);
|
dist = inst->ops->distance(inst, pos, draw_ctx.scale);
|
||||||
|
13
inst.h
13
inst.h
@ -137,17 +137,16 @@ extern struct inst *curr_frame;
|
|||||||
* allow other items shared by all packages be there as well.
|
* allow other items shared by all packages be there as well.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FOR_INST_PRIOS_UP(prio) \
|
#define FOR_INST_PRIOS_UP(prio) \
|
||||||
for (prio = 0; prio != ip_n; prio++)
|
for (prio = 0; prio != ip_n; prio++)
|
||||||
|
|
||||||
#define FOR_INST_PRIOS_DOWN(prio) \
|
#define FOR_INST_PRIOS_DOWN(prio) \
|
||||||
for (prio = ip_n-1; prio != (enum inst_prio) -1; prio--)
|
for (prio = ip_n-1; prio != (enum inst_prio) -1; prio--)
|
||||||
|
|
||||||
#define FOR_GLOBAL_INSTS(prio, inst) \
|
#define FOR_ALL_INSTS(i, prio, inst) \
|
||||||
for (inst = pkgs->insts[prio]; inst; inst = inst->next)
|
for (i = 0; i != 2; i++) \
|
||||||
|
for (inst = (i ? active_pkg : pkgs)->insts[prio]; inst; \
|
||||||
#define FOR_PKG_INSTS(prio, inst) \
|
inst = inst->next)
|
||||||
for (inst = active_pkg->insts[prio]; inst; inst = inst->next)
|
|
||||||
|
|
||||||
|
|
||||||
void inst_select_outside(void *item, void (*deselect)(void *item));
|
void inst_select_outside(void *item, void (*deselect)(void *item));
|
||||||
|
15
postscript.c
15
postscript.c
@ -278,6 +278,7 @@ int postscript(FILE *file)
|
|||||||
{
|
{
|
||||||
enum inst_prio prio;
|
enum inst_prio prio;
|
||||||
const struct inst *inst;
|
const struct inst *inst;
|
||||||
|
int i;
|
||||||
|
|
||||||
fprintf(file, "%%!PS\n");
|
fprintf(file, "%%!PS\n");
|
||||||
|
|
||||||
@ -373,18 +374,12 @@ fprintf(file,
|
|||||||
" dup false charpath stroke grestore\n"
|
" dup false charpath stroke grestore\n"
|
||||||
" show } def\n");
|
" show } def\n");
|
||||||
|
|
||||||
FOR_INST_PRIOS_UP(prio) {
|
FOR_INST_PRIOS_UP(prio)
|
||||||
FOR_GLOBAL_INSTS(prio, inst)
|
FOR_ALL_INSTS(i, prio, inst)
|
||||||
ps_background(file, prio, inst);
|
ps_background(file, prio, inst);
|
||||||
FOR_PKG_INSTS(prio, inst)
|
FOR_INST_PRIOS_UP(prio)
|
||||||
ps_background(file, prio, inst);
|
FOR_ALL_INSTS(i, prio, inst)
|
||||||
}
|
|
||||||
FOR_INST_PRIOS_UP(prio) {
|
|
||||||
FOR_GLOBAL_INSTS(prio, inst)
|
|
||||||
ps_foreground(file, prio, inst);
|
ps_foreground(file, prio, inst);
|
||||||
FOR_PKG_INSTS(prio, inst)
|
|
||||||
ps_foreground(file, prio, inst);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(file, "showpage\n");
|
fprintf(file, "showpage\n");
|
||||||
fprintf(file, "%%%%EOF\n");
|
fprintf(file, "%%%%EOF\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user