diff options
author | Michael Tüxen <tuexen@fh-muenster.de> | 2006-03-30 22:17:42 +0000 |
---|---|---|
committer | Michael Tüxen <tuexen@fh-muenster.de> | 2006-03-30 22:17:42 +0000 |
commit | 3df55b78f68076637edbcf30cf5140560b2fc238 (patch) | |
tree | 567e7f591b7b2233049e96d2ff2ad5e5ffe342b6 /gtk/sctp_byte_graph_dlg.c | |
parent | b3f862b7e5df2b5581ed2821244aecdbb3f904c3 (diff) |
From Irene: Fix problems with off screen drawings
Make rectangle clickable.
svn path=/trunk/; revision=17778
Diffstat (limited to 'gtk/sctp_byte_graph_dlg.c')
-rw-r--r-- | gtk/sctp_byte_graph_dlg.c | 67 |
1 files changed, 60 insertions, 7 deletions
diff --git a/gtk/sctp_byte_graph_dlg.c b/gtk/sctp_byte_graph_dlg.c index 7168696aa0..20ec911ef6 100644 --- a/gtk/sctp_byte_graph_dlg.c +++ b/gtk/sctp_byte_graph_dlg.c @@ -280,7 +280,8 @@ gint diff, width; static void sctp_graph_draw(struct sctp_udata *u_data) { int length, lwidth, j, b; - guint32 label_width, label_height, distance=5, i, e, sec, w, start, a; + guint32 distance=5, i, e, sec, w, start, a; + gint label_width, label_height; char label_string[15]; gfloat dis; @@ -747,6 +748,33 @@ on_zoomin_bt (GtkWidget *widget _U_, struct sctp_udata *u_data) } static void +zoomin_bt (struct sctp_udata *u_data) +{ + sctp_min_max_t *tmp_minmax; + + tmp_minmax = g_malloc(sizeof(sctp_min_max_t)); + + u_data->io->tmp_min_tsn1=u_data->io->y1_tmp+u_data->io->min_y; + u_data->io->tmp_max_tsn1=u_data->io->y2_tmp+1+u_data->io->min_y; + + u_data->io->tmp_min_tsn2=u_data->io->tmp_min_tsn1; + u_data->io->tmp_max_tsn2=u_data->io->tmp_max_tsn1; + tmp_minmax->tmp_min_secs=u_data->io->x1_tmp_sec; + tmp_minmax->tmp_min_usecs=u_data->io->x1_tmp_usec; + tmp_minmax->tmp_max_secs=u_data->io->x2_tmp_sec; + tmp_minmax->tmp_max_usecs=u_data->io->x2_tmp_usec; + tmp_minmax->tmp_min_tsn1=u_data->io->tmp_min_tsn1; + tmp_minmax->tmp_max_tsn1=u_data->io->tmp_max_tsn1; + tmp_minmax->tmp_min_tsn2=u_data->io->tmp_min_tsn2; + tmp_minmax->tmp_max_tsn2=u_data->io->tmp_max_tsn2; + u_data->assoc->min_max = g_slist_prepend(u_data->assoc->min_max, tmp_minmax); + u_data->io->length = g_slist_length(u_data->assoc->min_max); + u_data->io->tmp=TRUE; + u_data->io->rectangle=FALSE; + sctp_graph_redraw(u_data); +} + +static void on_zoomout_bt (GtkWidget *widget _U_, struct sctp_udata *u_data) { sctp_min_max_t *tmp_minmax, *mm; @@ -847,7 +875,8 @@ static gint on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_udata *u_data) { sctp_graph_t *ios; - guint32 helpx, helpy, x1_tmp, x2_tmp, label_width, label_height, y_value; + guint32 helpx, helpy, x1_tmp, x2_tmp, y_value; + gint label_width, label_height; gdouble x_value, position; gint lwidth; char label_string[30]; @@ -879,11 +908,15 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda if (abs((long)(event->x-u_data->io->x_old))>10 || abs((long)(event->y-u_data->io->y_old))>10) { + u_data->io->rect_x_min = (gint)floor(MIN(u_data->io->x_old,event->x)); + u_data->io->rect_x_max = (gint)ceil(MAX(u_data->io->x_old,event->x)); + u_data->io->rect_y_min = (gint)floor(MIN(u_data->io->y_old,event->y)); + u_data->io->rect_y_max = (gint)ceil(MAX(u_data->io->y_old,event->y)); gdk_draw_rectangle(u_data->io->pixmap,u_data->io->draw_area->style->black_gc, - FALSE, - (gint)floor(MIN(u_data->io->x_old,event->x)), (gint)floor(MIN(u_data->io->y_old,event->y)), - (gint)abs((long)(event->x-u_data->io->x_old)), - (gint)abs((long)(event->y-u_data->io->y_old))); + FALSE, + u_data->io->rect_x_min, u_data->io->rect_y_min, + u_data->io->rect_x_max - u_data->io->rect_x_min, + u_data->io->rect_y_max - u_data->io->rect_y_min); ios=(sctp_graph_t *)OBJECT_GET_DATA(u_data->io->draw_area, "sctp_graph_t"); if(!ios){ @@ -906,6 +939,10 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda x2_tmp=x1_tmp; x1_tmp=helpx; } + u_data->io->x1_akt_sec = u_data->io->x1_tmp_sec; + u_data->io->x1_akt_usec = u_data->io->x1_tmp_usec; + u_data->io->x2_akt_sec = u_data->io->x2_tmp_sec; + u_data->io->x2_akt_usec = u_data->io->x2_tmp_usec; u_data->io->x1_tmp_sec=(guint32)x1_tmp/1000000; u_data->io->x1_tmp_usec=x1_tmp%1000000; u_data->io->x2_tmp_sec=(guint32)x2_tmp/1000000; @@ -919,10 +956,26 @@ on_button_release (GtkWidget *widget _U_, GdkEventButton *event, struct sctp_uda u_data->io->x_new=event->x; u_data->io->y_new=event->y; u_data->io->rectangle=TRUE; + u_data->io->rectangle_present=TRUE; } else { - if (label_set) + if (u_data->io->rectangle_present==TRUE) + { + u_data->io->rectangle_present=FALSE; + if (event->x >= u_data->io->rect_x_min && event->x <= u_data->io->rect_x_max && + event->y >= u_data->io->rect_y_min && event->y <= u_data->io->rect_y_max) + zoomin_bt(u_data); + else + { + u_data->io->x1_tmp_sec = u_data->io->x1_akt_sec; + u_data->io->x1_tmp_usec = u_data->io->x1_akt_usec; + u_data->io->x2_tmp_sec = u_data->io->x2_akt_sec; + u_data->io->x2_tmp_usec = u_data->io->x2_akt_usec; + sctp_graph_redraw(u_data); + } + } + else if (label_set) { label_set = FALSE; sctp_graph_redraw(u_data); |