Exemplo n.º 1
0
static void apply_actions(ViewInfo* v,int x,int y)
{
    int a;
    gdouble seconds;
    a=get_mode(v);
    if((a==MM_PAN) && (view->guiMode==GUI_FULLSCREEN) &&((v->active_camera >= 0)))
	a=MM_ROTATE;	
    switch (a) {
    case MM_ROTATE :
	seconds = g_timer_elapsed(view->timer3, NULL);
	if (seconds > 0.1) {
	    g_timer_stop(view->timer3);
		view->arcball->MousePt.s.X = (GLfloat) x;
		view->arcball->MousePt.s.Y = (GLfloat) y;
		if (!view->arcball->isDragging) {
		    arcmouseClick(view);
		    view->arcball->isDragging = 1;
		}
		else 
		    arcmouseDrag(view);
	    g_timer_start(view->timer3);
	}
	return;
	break;
    case MM_PAN :
	glmotion_pan(v);
	break;
    case MM_MOVE :
        /* move_TVnodes(); */
	break;
    case MM_RECTANGULAR_SELECT :
	if (!view->mouse.down) {
//	    rectangle_select(v);
	    pick_objects_rect(view->g[view->activeGraph]) ;
	}
	break;
    case MM_POLYGON_SELECT :
	add_selpoly(view->g[view->activeGraph],&view->Topview->sel.selPoly,view->mouse.GLfinalPos);
	break;
    case MM_SINGLE_SELECT :
	pick_object_xyz(view->g[view->activeGraph],view->Topview,view->mouse.GLfinalPos.x,view->mouse.GLfinalPos.y,view->mouse.GLfinalPos.z);
	break;
    case MM_FISHEYE_PICK :
	if (view->activeGraph >= 0) {
	    if (view->Topview->fisheyeParams.active) 
		changetopfishfocus(view->Topview,&view->mouse.GLpos.x,&view->mouse.GLpos.y,  0, 1);
#if 0
	    else    //single right click
		pick_node_from_coords(view->mouse.GLpos.x, view->mouse.GLpos.y,view->mouse.GLpos.z);
#endif

	}
	break;
    }
    lastAction=a;
}
Exemplo n.º 2
0
/*
	when a mouse button is released(always after click) this function is called
	params:gtk opgn gl canvas , GdkEventButton object and custom data
	return value:true or false, fails (false) if cannot init gl
*/
static gboolean button_release_event(GtkWidget * widget,
				     GdkEventButton * event, gpointer data)
{
    if (event->button == 1)	//left click release
    {
		if (glCompSetRelease
	    (view->Topview->topviewmenu, (int) event->x_root,
	     (int) event->y_root))		{
			 expose_event(view->drawing_area, NULL, NULL);	}
	view->mouse.mouse_down = 0;
	if ((view->mouse.mouse_mode == MM_RECTANGULAR_SELECT)
	    || (view->mouse.mouse_mode == MM_RECTANGULAR_X_SELECT)) {
	    if (view->GLx <= view->GLx2)
		view->Selection.X = view->GLx;
	    else
		view->Selection.X = view->GLx2;
	    if (view->GLy <= view->GLy2)
		view->Selection.Y = view->GLy;
	    else
		view->Selection.Y = view->GLy2;
	    view->Selection.W = view->GLx2 - view->GLx;
	    if (view->Selection.W < 0)
		view->Selection.W = view->Selection.W * -1;
	    view->Selection.H = view->GLy2 - view->GLy;
	    if (view->Selection.H < 0)
		view->Selection.H = view->Selection.H * -1;
	    if (view->mouse.mouse_mode == 4)
		view->Selection.Type = 1;
	    else
		view->Selection.Type = 2;
	    view->Selection.Active = 1;
	    expose_event(view->drawing_area, NULL, NULL);
	}
	if (view->mouse.mouse_mode == MM_MOVE) {
	    if (GD_TopView(view->g[view->activeGraph]) == 0)
		move_nodes(view->g[view->activeGraph]);
	    else
		move_TVnodes();
	}

	if ((view->mouse.mouse_mode == MM_FISHEYE_MAGNIFIER) || (view->mouse.mouse_mode == MM_MAGNIFIER))	//fisheye mag mouse release, stop distortion
	{
	    originate_distorded_coordinates(view->Topview);
	    expose_event(view->drawing_area, NULL, NULL);
	}
	if (view->mouse.mouse_mode==MM_PAN)
		{
			view->mouse.pick=1;
			expose_event(view->drawing_area, NULL, NULL);

		}

	}
    if (event->button == 3)	//right click
	{
	if (view->Topview->is_top_fisheye) {
	    GetFixedOGLPoslocal((int) event->x, (int) event->y,
				view->GLDepth, &(view->GLx2),
				&(view->GLy2), &(view->GLz2));
	    changetopfishfocus(view->Topview, &view->GLx2, &view->GLy2, 0,
			       1);
	    expose_event(view->drawing_area, NULL, NULL);
	}
    }

    dx = 0.0;
    dy = 0.0;
    return FALSE;
}