From 1e0500f9e3abb6ac431a8b69e4d97b5c17775155 Mon Sep 17 00:00:00 2001 From: Werner Hoch Date: Thu, 17 Apr 2008 22:12:23 +0200 Subject: [PATCH] switched buffer insertion mode to world coords --- gschem/src/i_callbacks.c | 10 +++++----- gschem/src/o_basic.c | 3 ++- gschem/src/o_buffer.c | 37 +++++++++++-------------------------- gschem/src/o_find.c | 5 ++--- gschem/src/x_event.c | 16 ++++------------ 5 files changed, 24 insertions(+), 47 deletions(-) diff --git a/gschem/src/i_callbacks.c b/gschem/src/i_callbacks.c index d3b925ff1..0578285d8 100644 --- a/gschem/src/i_callbacks.c +++ b/gschem/src/i_callbacks.c @@ -2173,7 +2173,7 @@ DEFINE_I_CALLBACK(buffer_paste1_hotkey) return; } - o_buffer_paste_start(w_current, mouse_x, mouse_y, 0); + o_buffer_paste_start(w_current, mouse_wx, mouse_wy, 0); } /*! \todo Finish function documentation!!! @@ -2191,7 +2191,7 @@ DEFINE_I_CALLBACK(buffer_paste2_hotkey) return; } - o_buffer_paste_start(w_current, mouse_x, mouse_y, 1); + o_buffer_paste_start(w_current, mouse_wx, mouse_wy, 1); } /*! \todo Finish function documentation!!! @@ -2209,7 +2209,7 @@ DEFINE_I_CALLBACK(buffer_paste3_hotkey) return; } - o_buffer_paste_start(w_current, mouse_x, mouse_y, 2); + o_buffer_paste_start(w_current, mouse_wx, mouse_wy, 2); } /*! \todo Finish function documentation!!! @@ -2227,7 +2227,7 @@ DEFINE_I_CALLBACK(buffer_paste4_hotkey) return; } - o_buffer_paste_start(w_current, mouse_x, mouse_y, 3); + o_buffer_paste_start(w_current, mouse_wx, mouse_wy, 3); } /*! \todo Finish function documentation!!! @@ -2245,7 +2245,7 @@ DEFINE_I_CALLBACK(buffer_paste5_hotkey) return; } - o_buffer_paste_start(w_current, mouse_x, mouse_y, 4); + o_buffer_paste_start(w_current, mouse_wx, mouse_wy, 4); } /*! \section add-menu Add Menu Callback Functions */ diff --git a/gschem/src/o_basic.c b/gschem/src/o_basic.c index 4f9cd0a3c..ecca6cff6 100644 --- a/gschem/src/o_basic.c +++ b/gschem/src/o_basic.c @@ -370,7 +370,8 @@ void o_drawbounding(GSCHEM_TOPLEVEL *w_current, GList *o_glist, if (!(w_current->event_state == MOVE) && !(w_current->event_state == ENDMOVE) && !(w_current->event_state == DRAWTEXT) - && !(w_current->event_state == ENDTEXT)) { + && !(w_current->event_state == ENDTEXT) + && !(w_current->event_state == ENDPASTE)) { SCREENtoWORLD(toplevel, w_current->start_x, w_current->start_y, &(w_current->first_wx), &(w_current->first_wy)); SCREENtoWORLD(toplevel, w_current->last_x, w_current->last_y, diff --git a/gschem/src/o_buffer.c b/gschem/src/o_buffer.c index e7d228590..c0b9be124 100644 --- a/gschem/src/o_buffer.c +++ b/gschem/src/o_buffer.c @@ -94,7 +94,7 @@ void o_buffer_cut(GSCHEM_TOPLEVEL *w_current, int buf_num) * \par Function Description * */ -void o_buffer_paste_start(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y, +void o_buffer_paste_start(GSCHEM_TOPLEVEL *w_current, int w_x, int w_y, int buf_num) { TOPLEVEL *toplevel = w_current->toplevel; @@ -114,6 +114,11 @@ void o_buffer_paste_start(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y return; } + w_current->first_wx = w_current->second_wx = w_x; + w_current->first_wy = w_current->second_wy = w_y; + /* store the buffer number for future use */ + w_current->buffer_number = buf_num; + /* snap x and y to the grid, pointed out by Martin Benes */ x = snap_grid(toplevel, rleft); y = snap_grid(toplevel, rtop); @@ -122,22 +127,12 @@ void o_buffer_paste_start(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y o_glist_translate_world(toplevel, -x, -y, object_buffer[buf_num]); toplevel->ADDING_SEL = 0; - /* now translate selection to current position */ - SCREENtoWORLD(toplevel, screen_x, screen_y, &x, &y); - x = snap_grid(toplevel, x); - y = snap_grid(toplevel, y); - toplevel->ADDING_SEL = 1; - o_glist_translate_world(toplevel, x, y, object_buffer[buf_num]); + o_glist_translate_world(toplevel, w_x, w_y, object_buffer[buf_num]); toplevel->ADDING_SEL = 0; - w_current->last_x = w_current->start_x = fix_x(toplevel, screen_x); - w_current->last_y = w_current->start_y = fix_y(toplevel, screen_y); w_current->event_state = ENDPASTE; - /* store the buffer number for future use */ - w_current->buffer_number = buf_num; - o_drawbounding(w_current, object_buffer[buf_num], x_get_darkcolor(w_current->bb_color), TRUE); } @@ -147,12 +142,10 @@ void o_buffer_paste_start(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y * \par Function Description * */ -void o_buffer_paste_end(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y, +void o_buffer_paste_end(GSCHEM_TOPLEVEL *w_current, int w_x, int w_y, int buf_num) { TOPLEVEL *toplevel = w_current->toplevel; - int w_x, w_y; - int w_start_x, w_start_y; int w_diff_x, w_diff_y; OBJECT *o_current; OBJECT *o_saved; @@ -169,21 +162,13 @@ void o_buffer_paste_end(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y, o_drawbounding(w_current, object_buffer[buf_num], x_get_darkcolor(w_current->bb_color), FALSE); - /* get the location where we ended */ - SCREENtoWORLD(toplevel, screen_x, screen_y, &w_x, &w_y); - SCREENtoWORLD(toplevel, w_current->start_x, w_current->start_y, - &w_start_x, &w_start_y); - w_x = snap_grid(toplevel, w_x); - w_y = snap_grid(toplevel, w_y); - w_start_x = snap_grid(toplevel, w_start_x); - w_start_y = snap_grid(toplevel, w_start_y); - #if DEBUG printf("%d %d\n", w_x - w_start_x, w_y - w_start_y); #endif /* calc and translate objects to their final position */ - w_diff_x = w_x - w_start_x; - w_diff_y = w_y - w_start_y; + w_diff_x = w_current->second_wx - w_current->first_wx; + w_diff_y = w_current->second_wy - w_current->first_wy; + toplevel->ADDING_SEL = 1; o_glist_translate_world(toplevel, w_diff_x, w_diff_y, object_buffer[buf_num]); diff --git a/gschem/src/o_find.c b/gschem/src/o_find.c index 192843df8..b0d1941e9 100644 --- a/gschem/src/o_find.c +++ b/gschem/src/o_find.c @@ -131,14 +131,13 @@ gboolean o_find_object(GSCHEM_TOPLEVEL *w_current, int screen_x, int screen_y, * */ gboolean o_find_selected_object(GSCHEM_TOPLEVEL *w_current, - int screen_x, int screen_y) + int w_x, int w_y) { TOPLEVEL *toplevel = w_current->toplevel; OBJECT *o_current=NULL; GList *s_current; - int w_x, w_y, w_slack; + int w_slack; - SCREENtoWORLD( toplevel, screen_x, screen_y, &w_x, &w_y ); w_slack = WORLDabs( toplevel, w_current->select_slack_pixels ); s_current = geda_list_get_glist( toplevel->page_current->selection_list ); diff --git a/gschem/src/x_event.c b/gschem/src/x_event.c index 2da10ea2a..bd903a3ce 100644 --- a/gschem/src/x_event.c +++ b/gschem/src/x_event.c @@ -179,9 +179,7 @@ gint x_event_button_pressed(GtkWidget *widget, GdkEventButton *event, break; case(STARTPASTE): - o_buffer_paste_start(w_current, - (int) event->x, - (int) event->y, + o_buffer_paste_start(w_current, w_x, w_y, w_current->buffer_number); w_current->event_state = ENDPASTE; w_current->inside_action = 1; @@ -318,9 +316,7 @@ gint x_event_button_pressed(GtkWidget *widget, GdkEventButton *event, break; case(ENDPASTE): - o_buffer_paste_end(w_current, - fix_x(toplevel, (int) event->x), - fix_y(toplevel, (int) event->y), + o_buffer_paste_end(w_current, w_x, w_y, w_current->buffer_number); w_current->inside_action = 0; i_set_state(w_current, SELECT); @@ -835,12 +831,8 @@ gint x_event_motion(GtkWidget *widget, GdkEventMotion *event, GSCHEM_TOPLEVEL *w_current) { TOPLEVEL *toplevel = w_current->toplevel; - int temp_x, temp_y; int pdiff_x, pdiff_y; int w_x, w_y; - - int zoom_scale; - int diff_x; int skip_event=0; GdkEvent *test_event; @@ -1044,8 +1036,8 @@ gint x_event_motion(GtkWidget *widget, GdkEventMotion *event, case(ENDPASTE): o_buffer_paste_rubberpaste(w_current, w_current->buffer_number); - w_current->last_x = fix_x(toplevel, (int) event->x); - w_current->last_y = fix_y(toplevel, (int) event->y); + w_current->second_wx = w_x; + w_current->second_wy = w_y; o_buffer_paste_rubberpaste(w_current, w_current->buffer_number); break; -- 2.11.4.GIT