add: if (event->state & GDK_CONTROL_MASK) {  x1 = screen.start_x - dx; y1 = screen.start_y - dy; dx *= 2; dy *= 2; }
context: zoom_outline(GtkWidget *widget, GdkEventButton *event){    int x1, y1, x2, y2;		/* Zoom outline (UR and LL corners) */    double us_x1, us_y1, us_x2, us_y2;    int half_w, half_h;		/* cache for half window dimensions */    if (screen.file[screen.curr_index] == NULL)	return;    half_w = screen.drawing_area->allocation.width / 2;    half_h = screen.drawing_area->allocation.height / 2;    x1 = MIN(screen.start_x, event->x);    y1 = MIN(screen.start_y, event->y);    x2 = MAX(screen.start_x, event->x);    y2 = MAX(screen.start_y, event->y);    if (x2 - x1 < 4 && y2 - y1 < 4) {	    fprintf(stderr, "Warning: Zoom area too small, bailing out!\n");	    goto zoom_outline_end;    }    us_x1 = (screen.trans_x + x1)/(double) screen.scale;    us_y1 = (screen.trans_y + y1)/(double) screen.scale;    us_x2 = (screen.trans_x + x2)/(double) screen.scale;    us_y2 = (screen.trans_y + y2)/(double) screen.scale;    screen.scale = MIN(screen.drawing_area->allocation.width/(double)(us_x2 - us_x1),		       screen.drawing_area->allocation.height/(double)(us_y2 - us_y1));    screen.trans_x = screen.scale * (us_x1 + (us_x2 - us_x1)/2) - half_w;    screen.trans_y = screen.scale * (us_y1 + (us_y2 - us_y1)/2) - half_h;;zoom_outline_end:    /* Redraw screen unless we have more events to process */    if (!g_main_pending()) {	stop_idle_redraw_pixmap(screen.drawing_area);	redraw_pixmap(screen.drawing_area);    } else {	/* Set idle function to ensure we wont miss to redraw */	start_idle_redraw_pixmap(screen.drawing_area);    }    } /* zoom_outline */