1
0
mirror of git://projects.qi-hardware.com/fped.git synced 2024-11-05 16:46:15 +02:00

A bit of cleanup.

- gui_frame_drag.c (FOR_UNORDERED, drag_var_motion, drag_value_motion, 
  drag_frame_motion): moved hard to read loop into helper macro
- capitalized SWAP, to make it clear it's a macro and can multiply side-effects
- TODO: updated discussion of open issues



git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5971 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
werner 2010-05-31 05:53:56 +00:00
parent d4c4031b9a
commit b2b3a46119
6 changed files with 30 additions and 28 deletions

6
TODO
View File

@ -53,11 +53,13 @@ Open decisions:
A1: no: would cause confusion in GUI (vectors could become orphaned) A1: no: would cause confusion in GUI (vectors could become orphaned)
A2: yes. but we don't change the linkage. A2: yes. but we don't change the linkage.
- Q: how do we handle stacks of objects ? - Q: how do we handle stacks of objects ?
A: we don't but we make it easy to avoid them, by giving a good zoom, A1: we don't but we make it easy to avoid them, by giving a good zoom,
flexible selection, and by disallowing stacks of identical objects in the flexible selection, and by disallowing stacks of identical objects in the
first place. first place.
A2: the current mechanism of selecting the next eligible object when clicking
on the same position repeatedly lets one cycle through stacks.
- Q: add frame arguments ? (e.g., .frame pad(pin_num_offset) ...) - Q: add frame arguments ? (e.g., .frame pad(pin_num_offset) ...)
we can already approximate this by introducing an intermediate table that A: we can already approximate this by introducing an intermediate table that
sets up the arguments (provided that we don't consider vectors as well) sets up the arguments (provided that we don't consider vectors as well)
- Q: should we make it a requirement to generate objects only once ? - Q: should we make it a requirement to generate objects only once ?
A: yes. A: yes.

View File

@ -157,9 +157,9 @@ double theta(struct coord c, struct coord p)
void sort_coord(struct coord *min, struct coord *max) void sort_coord(struct coord *min, struct coord *max)
{ {
if (min->x > max->x) if (min->x > max->x)
swap(min->x, max->x); SWAP(min->x, max->x);
if (min->y > max->y) if (min->y > max->y)
swap(min->y, max->y); SWAP(min->y, max->y);
} }

View File

@ -93,6 +93,10 @@ int is_dragging_anything(void)
NTH_walk = &(*NTH_walk)->next; \ NTH_walk = &(*NTH_walk)->next; \
NTH_walk; }) NTH_walk; })
#define FOR_UNORDERED(var, a, b) \
for (var = (a) < (b) ? (a) : (b); var != ((a) < (b) ? (b) : (a)); \
var++)
/* ----- generic helper functions. maybe move to gui_util later ------------ */ /* ----- generic helper functions. maybe move to gui_util later ------------ */
@ -203,8 +207,8 @@ static void swap_vars(struct table *table, int a, int b)
swap_table_cells(box_of_label((*var_a)->widget), swap_table_cells(box_of_label((*var_a)->widget),
box_of_label((*var_b)->widget)); box_of_label((*var_b)->widget));
swap(*var_a, *var_b); SWAP(*var_a, *var_b);
swap((*var_a)->next, (*var_b)->next); SWAP((*var_a)->next, (*var_b)->next);
} }
@ -218,12 +222,11 @@ static void swap_values(struct row *row, int a, int b)
swap_table_cells(box_of_label((*value_a)->widget), swap_table_cells(box_of_label((*value_a)->widget),
box_of_label((*value_b)->widget)); box_of_label((*value_b)->widget));
swap(*value_a, *value_b); SWAP(*value_a, *value_b);
swap((*value_a)->next, (*value_b)->next); SWAP((*value_a)->next, (*value_b)->next);
} }
static void swap_cols(struct table *table, int a, int b) static void swap_cols(struct table *table, int a, int b)
{ {
struct row *row; struct row *row;
@ -246,8 +249,8 @@ static void swap_rows(struct row **a, struct row **b)
value_a = value_a->next; value_a = value_a->next;
value_b = value_b->next; value_b = value_b->next;
} }
swap(*a, *b); SWAP(*a, *b);
swap((*a)->next, (*b)->next); SWAP((*a)->next, (*b)->next);
} }
@ -262,8 +265,8 @@ static void swap_frames(GtkWidget *table, int a, int b)
swap_table_rows(table, 2*a+1, 2*b+1); swap_table_rows(table, 2*a+1, 2*b+1);
swap_table_rows(table, 2*a+2, 2*b+2); swap_table_rows(table, 2*a+2, 2*b+2);
swap(*frame_a, *frame_b); SWAP(*frame_a, *frame_b);
swap((*frame_a)->next, (*frame_b)->next); SWAP((*frame_a)->next, (*frame_b)->next);
} }
@ -341,8 +344,7 @@ static gboolean drag_var_motion(GtkWidget *widget,
return FALSE; return FALSE;
from_n = NDX(from->table->vars, from); from_n = NDX(from->table->vars, from);
to_n = NDX(to->table->vars, to); to_n = NDX(to->table->vars, to);
for (i = from_n < to_n ? from_n : to_n; FOR_UNORDERED(i, from_n, to_n)
i != (from_n < to_n ? to_n : from_n); i++)
swap_cols(from->table, i, i+1); swap_cols(from->table, i, i+1);
return FALSE; return FALSE;
} }
@ -386,8 +388,7 @@ static gboolean drag_value_motion(GtkWidget *widget,
from_n = NDX(from->row->values, from); from_n = NDX(from->row->values, from);
to_n = NDX(to->row->values, to); to_n = NDX(to->row->values, to);
for (i = from_n < to_n ? from_n : to_n; FOR_UNORDERED(i, from_n, to_n)
i != (from_n < to_n ? to_n : from_n); i++)
swap_cols(table, i, i+1); swap_cols(table, i, i+1);
/* rows */ /* rows */
@ -490,8 +491,7 @@ static gboolean drag_frame_motion(GtkWidget *widget,
assert(to != frames); assert(to != frames);
from_n = NDX(frames, from); from_n = NDX(frames, from);
to_n = NDX(frames, to); to_n = NDX(frames, to);
for (i = from_n < to_n ? from_n : to_n; FOR_UNORDERED(i, from_n, to_n)
i != (from_n < to_n ? to_n : from_n); i++)
swap_frames(gtk_widget_get_ancestor(widget, GTK_TYPE_TABLE), swap_frames(gtk_widget_get_ancestor(widget, GTK_TYPE_TABLE),
i, i+1); i, i+1);
return FALSE; return FALSE;

View File

@ -378,7 +378,7 @@ void begin_drag_move_meas(struct inst *inst, int i)
a = inst->base; a = inst->base;
b = inst->u.meas.end; b = inst->u.meas.end;
if (inst->obj->u.meas.inverted) if (inst->obj->u.meas.inverted)
swap(a, b); SWAP(a, b);
switch (i) { switch (i) {
case 0: case 0:
mode = meas->type < 3 ? next_to_min : max_to_min; mode = meas->type < 3 ? next_to_min : max_to_min;

View File

@ -68,9 +68,9 @@ struct pix_buf *save_pix_buf(GdkDrawable *da, int xa, int ya, int xb, int yb,
int w, h; int w, h;
if (xa > xb) if (xa > xb)
swap(xa, xb); SWAP(xa, xb);
if (ya > yb) if (ya > yb)
swap(ya, yb); SWAP(ya, yb);
buf = alloc_type(struct pix_buf); buf = alloc_type(struct pix_buf);
buf->da = da; buf->da = da;
buf->x = xa-border; buf->x = xa-border;

6
util.h
View File

@ -51,10 +51,10 @@
strnalloc_tmp[n] = 0; \ strnalloc_tmp[n] = 0; \
strnalloc_tmp; }) strnalloc_tmp; })
#define swap(a, b) \ #define SWAP(a, b) \
({ typeof(a) swap_tmp = (a); \ ({ typeof(a) SWAP_tmp = (a); \
(a) = (b); \ (a) = (b); \
(b) = swap_tmp; }) (b) = SWAP_tmp; })
char *stralloc_vprintf(const char *fmt, va_list ap); char *stralloc_vprintf(const char *fmt, va_list ap);