示例#1
0
static gboolean on_scroll(GritsViewer *viewer, GdkEventScroll *event, gpointer _)
{
	switch (event->direction) {
	case GDK_SCROLL_DOWN: grits_viewer_zoom(viewer, 10./9); break;
	case GDK_SCROLL_UP:   grits_viewer_zoom(viewer, 9./10); break;
	default: break;
	}
	return FALSE;
}
示例#2
0
/*************
 * Callbacks *
 *************/
static gboolean on_key_press(GritsViewer *viewer, GdkEventKey *event, gpointer _)
{
	g_debug("GritsViewer: on_key_press - key=%x, state=%x, plus=%x",
			event->keyval, event->state, GDK_plus);

	double lat, lon, elev, pan;
	grits_viewer_get_location(viewer, &lat, &lon, &elev);
	pan = MIN(elev/(EARTH_R/2), 30);
	switch (event->keyval) {
	case GDK_Left:  case GDK_h: grits_viewer_pan(viewer,  0,  -pan, 0); break;
	case GDK_Down:  case GDK_j: grits_viewer_pan(viewer, -pan, 0,   0); break;
	case GDK_Up:    case GDK_k: grits_viewer_pan(viewer,  pan, 0,   0); break;
	case GDK_Right: case GDK_l: grits_viewer_pan(viewer,  0,   pan, 0); break;
	case GDK_minus: case GDK_o: grits_viewer_zoom(viewer, 10./9); break;
	case GDK_plus:  case GDK_i: grits_viewer_zoom(viewer, 9./10); break;
	case GDK_H: grits_viewer_rotate(viewer,  0, 0, -2); break;
	case GDK_J: grits_viewer_rotate(viewer,  2, 0,  0); break;
	case GDK_K: grits_viewer_rotate(viewer, -2, 0,  0); break;
	case GDK_L: grits_viewer_rotate(viewer,  0, 0,  2); break;
	}
	return FALSE;
}
示例#3
0
static gboolean on_motion_notify(GritsViewer *viewer, GdkEventMotion *event, gpointer _)
{
	gdouble x = viewer->drag_x - event->x;
	gdouble y = viewer->drag_y - event->y;
	gdouble lat, lon, elev, scale, rx, ry, rz;
	grits_viewer_get_location(GRITS_VIEWER(viewer), &lat, &lon, &elev);
	grits_viewer_get_rotation(GRITS_VIEWER(viewer), &rx,  &ry,  &rz);
	scale = (elev/EARTH_R/15) * (sin(deg2rad(ABS(rx)))*4+1);
	switch (viewer->drag_mode) {
	case GRITS_DRAG_PAN:  grits_viewer_pan(viewer, -y*scale, x*scale, 0); break;
	case GRITS_DRAG_ZOOM: grits_viewer_zoom(viewer, pow(2, -y/500)); break;
	case GRITS_DRAG_TILT: grits_viewer_rotate(viewer, y/10, 0, x/10); break;
	}
	viewer->drag_x = event->x;
	viewer->drag_y = event->y;
	return FALSE;
}
示例#4
0
G_MODULE_EXPORT void on_zoomout(GtkAction *action, AWeatherGui *self)
{
	grits_viewer_zoom(self->viewer, 4./3);
}
示例#5
0
G_MODULE_EXPORT void on_zoomin(GtkAction *action, AWeatherGui *self)
{
	grits_viewer_zoom(self->viewer, 3./4);
}