mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-26 01:59:44 +02:00
- adjust measurement bbox for projection (still not perfect, but better)
- we can now scroll-wheel through table rows - added menu branch "View" with zoom and var/code display controls - commented out is_min_of_next until its fate is decided, so that we don't get a warning git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5462 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
5a86125002
commit
be86e276b8
21
gui.c
21
gui.c
@ -39,18 +39,37 @@ static GtkWidget *ev_stuff, *ev_meas;
|
|||||||
static GtkWidget *stuff_image[2], *meas_image[2];
|
static GtkWidget *stuff_image[2], *meas_image[2];
|
||||||
|
|
||||||
|
|
||||||
|
/* ----- view callbacks ---------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
static void swap_var_code(void)
|
||||||
|
{
|
||||||
|
extern int show_vars;
|
||||||
|
|
||||||
|
show_vars = !show_vars;
|
||||||
|
change_world();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----- menu bar ---------------------------------------------------------- */
|
/* ----- menu bar ---------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static GtkItemFactoryEntry menu_entries[] = {
|
static GtkItemFactoryEntry menu_entries[] = {
|
||||||
{ "/File", NULL, NULL, 0, "<Branch>" },
|
{ "/File", NULL, NULL, 0, "<Branch>" },
|
||||||
{ "/File/Save", NULL, save_fpd, 0, "<Item>" },
|
{ "/File/Save", NULL, save_fpd, 0, "<Item>" },
|
||||||
{ "/File/sep0", NULL, NULL, 0, "<Separator>" },
|
{ "/File/sep1", NULL, NULL, 0, "<Separator>" },
|
||||||
{ "/File/Write KiCad", NULL, write_kicad, 0, "<Item>" },
|
{ "/File/Write KiCad", NULL, write_kicad, 0, "<Item>" },
|
||||||
{ "/File/Write Postscript",
|
{ "/File/Write Postscript",
|
||||||
NULL, write_ps, 0, "<Item>" },
|
NULL, write_ps, 0, "<Item>" },
|
||||||
{ "/File/sep2", NULL, NULL, 0, "<Separator>" },
|
{ "/File/sep2", NULL, NULL, 0, "<Separator>" },
|
||||||
{ "/File/Quit", NULL, gtk_main_quit, 0, "<Item>" },
|
{ "/File/Quit", NULL, gtk_main_quit, 0, "<Item>" },
|
||||||
|
{ "/View", NULL, NULL, 0, "<Branch>" },
|
||||||
|
{ "/View/Zoom in", NULL, zoom_in_center, 0, "<Item>" },
|
||||||
|
{ "/View/Zoom out", NULL, zoom_out_center,0, "<Item>" },
|
||||||
|
{ "/View/Zoom all", NULL, zoom_to_extents,0, "<Item>" },
|
||||||
|
{ "/View/Zoom frame", NULL, zoom_to_frame, 0, "<Item>" },
|
||||||
|
{ "/View/sep1", NULL, NULL, 0, "<Separator>" },
|
||||||
|
{ "/View/Swap var&code",NULL, swap_var_code, 0, "<Item>" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
44
gui_canvas.c
44
gui_canvas.c
@ -279,6 +279,38 @@ static void zoom_out(struct coord pos)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void zoom_in_center(void)
|
||||||
|
{
|
||||||
|
zoom_in(draw_ctx.center);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void zoom_out_center(void)
|
||||||
|
{
|
||||||
|
zoom_out(draw_ctx.center);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void zoom_to_frame(void)
|
||||||
|
{
|
||||||
|
tool_dehover();
|
||||||
|
center(&active_frame_bbox);
|
||||||
|
auto_scale(&active_frame_bbox);
|
||||||
|
redraw();
|
||||||
|
tool_hover(canvas_to_coord(curr_pos.x, curr_pos.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void zoom_to_extents(void)
|
||||||
|
{
|
||||||
|
tool_dehover();
|
||||||
|
center(NULL);
|
||||||
|
auto_scale(NULL);
|
||||||
|
redraw();
|
||||||
|
tool_hover(canvas_to_coord(curr_pos.x, curr_pos.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event,
|
static gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
@ -321,18 +353,10 @@ static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event,
|
|||||||
zoom_out(pos);
|
zoom_out(pos);
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '*':
|
||||||
tool_dehover();
|
zoom_to_extents();
|
||||||
center(NULL);
|
|
||||||
auto_scale(NULL);
|
|
||||||
redraw();
|
|
||||||
tool_hover(canvas_to_coord(curr_pos.x, curr_pos.y));
|
|
||||||
break;
|
break;
|
||||||
case '#':
|
case '#':
|
||||||
tool_dehover();
|
zoom_to_frame();
|
||||||
center(&active_frame_bbox);
|
|
||||||
auto_scale(&active_frame_bbox);
|
|
||||||
redraw();
|
|
||||||
tool_hover(canvas_to_coord(curr_pos.x, curr_pos.y));
|
|
||||||
break;
|
break;
|
||||||
case '.':
|
case '.':
|
||||||
tool_dehover();
|
tool_dehover();
|
||||||
|
@ -29,6 +29,11 @@ void refresh_pos(void);
|
|||||||
|
|
||||||
void redraw(void);
|
void redraw(void);
|
||||||
|
|
||||||
|
void zoom_in_center(void);
|
||||||
|
void zoom_out_center(void);
|
||||||
|
void zoom_to_frame(void);
|
||||||
|
void zoom_to_extents(void);
|
||||||
|
|
||||||
GtkWidget *make_canvas(void);
|
GtkWidget *make_canvas(void);
|
||||||
void init_canvas(void);
|
void init_canvas(void);
|
||||||
|
|
||||||
|
34
gui_frame.c
34
gui_frame.c
@ -743,6 +743,34 @@ static gboolean table_value_select_event(GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean table_scroll_event(GtkWidget *widget, GdkEventScroll *event,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
struct table *table = data;
|
||||||
|
struct row *row, *last;
|
||||||
|
|
||||||
|
switch (event->direction) {
|
||||||
|
case GDK_SCROLL_UP:
|
||||||
|
last = NULL;
|
||||||
|
for (row = table->rows;
|
||||||
|
row && (!last || row != table->active_row); row = row->next)
|
||||||
|
last = row;
|
||||||
|
table->active_row = last;
|
||||||
|
change_world();
|
||||||
|
break;
|
||||||
|
case GDK_SCROLL_DOWN:
|
||||||
|
table->active_row = table->active_row->next;
|
||||||
|
if (!table->active_row)
|
||||||
|
table->active_row = table->rows;
|
||||||
|
change_world();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* ignore */;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void build_table(GtkWidget *vbox, struct frame *frame,
|
static void build_table(GtkWidget *vbox, struct frame *frame,
|
||||||
struct table *table)
|
struct table *table)
|
||||||
{
|
{
|
||||||
@ -786,6 +814,9 @@ static void build_table(GtkWidget *vbox, struct frame *frame,
|
|||||||
g_signal_connect(G_OBJECT(box_of_label(field)),
|
g_signal_connect(G_OBJECT(box_of_label(field)),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
G_CALLBACK(table_var_select_event), var);
|
G_CALLBACK(table_var_select_event), var);
|
||||||
|
g_signal_connect(G_OBJECT(box_of_label(field)),
|
||||||
|
"scroll_event",
|
||||||
|
G_CALLBACK(table_scroll_event), table);
|
||||||
var->widget = field;
|
var->widget = field;
|
||||||
n_vars++;
|
n_vars++;
|
||||||
}
|
}
|
||||||
@ -805,6 +836,9 @@ static void build_table(GtkWidget *vbox, struct frame *frame,
|
|||||||
g_signal_connect(G_OBJECT(box_of_label(field)),
|
g_signal_connect(G_OBJECT(box_of_label(field)),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
G_CALLBACK(table_value_select_event), value);
|
G_CALLBACK(table_value_select_event), value);
|
||||||
|
g_signal_connect(G_OBJECT(box_of_label(field)),
|
||||||
|
"scroll_event",
|
||||||
|
G_CALLBACK(table_scroll_event), table);
|
||||||
value->widget = field;
|
value->widget = field;
|
||||||
n_vars++;
|
n_vars++;
|
||||||
}
|
}
|
||||||
|
@ -102,6 +102,7 @@ static int is_a_next(lt_op_type lt, struct inst *inst)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
static int is_min_of_next(lt_op_type lt,
|
static int is_min_of_next(lt_op_type lt,
|
||||||
const struct inst *inst, const struct inst *ref)
|
const struct inst *inst, const struct inst *ref)
|
||||||
{
|
{
|
||||||
@ -111,6 +112,7 @@ static int is_min_of_next(lt_op_type lt,
|
|||||||
next = meas_find_next(lt, ref->vec->samples, min);
|
next = meas_find_next(lt, ref->vec->samples, min);
|
||||||
return coord_eq(next, ref->u.rect.end);
|
return coord_eq(next, ref->u.rect.end);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* ----- picker functions -------------------------------------------------- */
|
/* ----- picker functions -------------------------------------------------- */
|
||||||
|
6
inst.c
6
inst.c
@ -879,14 +879,18 @@ int inst_meas(struct obj *obj,
|
|||||||
struct coord from, struct coord to, unit_type offset)
|
struct coord from, struct coord to, unit_type offset)
|
||||||
{
|
{
|
||||||
struct inst *inst;
|
struct inst *inst;
|
||||||
|
struct coord a1, b1;
|
||||||
|
|
||||||
inst = add_inst(&meas_ops, ip_meas, from);
|
inst = add_inst(&meas_ops, ip_meas, from);
|
||||||
inst->obj = obj;
|
inst->obj = obj;
|
||||||
inst->u.meas.end = to;
|
inst->u.meas.end = to;
|
||||||
inst->u.meas.offset = offset;
|
inst->u.meas.offset = offset;
|
||||||
inst->active = 1; /* measurements are always active */
|
inst->active = 1; /* measurements are always active */
|
||||||
/* @@@ our bbox is actually a bit more complex than this */
|
/* @@@ we still need to consider the text size as well */
|
||||||
update_bbox(&inst->bbox, to);
|
update_bbox(&inst->bbox, to);
|
||||||
|
project_meas(inst, &a1, &b1);
|
||||||
|
update_bbox(&inst->bbox, a1);
|
||||||
|
update_bbox(&inst->bbox, b1);
|
||||||
propagate_bbox(inst);
|
propagate_bbox(inst);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user