aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/sctp_byte_graph_dlg.c
diff options
context:
space:
mode:
authorMichael Tüxen <tuexen@fh-muenster.de>2006-03-30 22:17:42 +0000
committerMichael Tüxen <tuexen@fh-muenster.de>2006-03-30 22:17:42 +0000
commit3df55b78f68076637edbcf30cf5140560b2fc238 (patch)
tree567e7f591b7b2233049e96d2ff2ad5e5ffe342b6 /gtk/sctp_byte_graph_dlg.c
parentb3f862b7e5df2b5581ed2821244aecdbb3f904c3 (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.c67
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);