rem: screen.scale -= 10;
add: screen.scale -= screen.scale/10;
context: zoom(GtkWidget *widget, gpointer data){    double us_midx, us_midy;	/* unscaled translation for screen center */    int half_w, half_h;		/* cache for half window dimensions */    int mouse_delta_x = 0;	/* Delta for mouse to window center */    int mouse_delta_y = 0;    gerbv_zoom_data_t *z_data = (gerbv_zoom_data_t *) data;    if (screen.file[screen.curr_index] == NULL)	return;    half_w = screen.drawing_area->allocation.width / 2;    half_h = screen.drawing_area->allocation.height / 2;    if (z_data->z_dir == ZOOM_IN_CMOUSE ||	z_data->z_dir == ZOOM_OUT_CMOUSE) {	mouse_delta_x = half_w - z_data->z_event->x;	mouse_delta_y = half_h - z_data->z_event->y;	screen.trans_x -= mouse_delta_x;	screen.trans_y -= mouse_delta_y;    }    us_midx = (screen.trans_x + half_w)/(double) screen.scale;    us_midy = (screen.trans_y + half_h)/(double) screen.scale;    switch(z_data->z_dir) {    case ZOOM_IN : /* Zoom In */    case ZOOM_IN_CMOUSE : /* Zoom In Around Mouse Pointer */	screen.scale += 10;	screen.trans_x = screen.scale * us_midx - half_w;	screen.trans_y = screen.scale * us_midy - half_h;	break;    case ZOOM_OUT :  /* Zoom Out */    case ZOOM_OUT_CMOUSE : /* Zoom Out Around Mouse Pointer */	if (screen.scale > 10) {	    screen.scale -= 10;	    screen.trans_x = screen.scale * us_midx - half_w;	    screen.trans_y = screen.scale * us_midy - half_h;	}	break;    case ZOOM_FIT : /* Zoom Fit */	autoscale();	break;    default :	fprintf(stderr, "Illegal zoom direction %ld\n", (long int)data);    }    if (z_data->z_dir == ZOOM_IN_CMOUSE ||	z_data->z_dir == ZOOM_OUT_CMOUSE) {	screen.trans_x += mouse_delta_x;	screen.trans_y += mouse_delta_y;    }    /* 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);    }    return;} /* zoom */