Exemplo n.º 1
0
/*
	when a mouse button is clicked 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_press_event(GtkWidget * widget,
				   GdkEventButton * event, gpointer data)
{
    if (view->graphCount) {
	if (glCompSetClick
	    (view->Topview->topviewmenu, (int) event->x, (int) event->y))
	    expose_event(view->drawing_area, NULL, NULL);
    }

    begin_x = (float) event->x;
    begin_y = (float) event->y;

    if (event->button == 3)	//right click
	view->mouse.button = rightmousebutton;


    if (event->button == 1)	//left click
    {
	view->prevpanx = view->panx;
	view->prevpany = view->pany;
	view->mouse.mouse_down = 1;
	view->mouse.button = leftmousebutton;
	if (GetOGLPosRef
	    ((int) begin_x, (int) begin_y, &(view->GLx), &(view->GLy),
	     &(view->GLz))) {
	    if (view->mouse.mouse_mode == MM_SINGLE_SELECT)	//single select
	    {
		view->Selection.Active = 1;
		view->Selection.Type = 0;
		view->Selection.AlreadySelected = 0;
		view->Selection.X = view->GLx - SINGLE_SELECTION_WIDTH / 2;
		view->Selection.Y = view->GLy - SINGLE_SELECTION_WIDTH / 2;
		view->Selection.W = SINGLE_SELECTION_WIDTH;
		view->Selection.H = SINGLE_SELECTION_WIDTH;
		expose_event(view->drawing_area, NULL, NULL);
	    }
	}
    }
    return FALSE;
}
Exemplo n.º 2
0
int				key_hook(int keycode, t_env *e)
{
	double		diviseur;

	diviseur = e->zoom / 100;
	if (keycode == 53)
		exit(0);
	else if (keycode == KEY_LEFT || keycode == KEY_RIGHT ||
		keycode == KEY_DOWN || keycode == KEY_UP)
		direction_keys(keycode, e, diviseur);
	else if (keycode == KEY_Q || keycode == KEY_W)
		zoom_keys(keycode, e, diviseur);
	else if (keycode == KEY_E)
	{
		e->fractal_y[0] = e->fractal_y[0] - 0.1;
		e->fractal_y[1] = e->fractal_y[1] - 0.1;
	}
	else if (keycode == KEY_C)
		switch_key(e);
	else if (keycode == KEY_P)
		e->motion_enabled ^= 1;
	expose_event(e);
	return (0);
}
Exemplo n.º 3
0
static void *
x_thread_main (void *closure)
{
    x_global_t	    *xg = closure;
    XEvent	    event;
    struct pollfd   fds[2];
    int		    timeout;
    sigset_t	    mask;

    sigemptyset (&mask);
    sigaddset (&mask, SIGALRM);
    sigaddset (&mask, SIGIO);
    sigaddset (&mask, SIGCHLD);
    sigaddset (&mask, SIGINT);
    pthread_sigmask (SIG_BLOCK, &mask, NULL);
    
    fds[0].fd = ConnectionNumber (xg->dpy);
    fds[0].events = POLLIN;
    fds[1].fd = xg->pipe[0];
    fds[1].events = POLLIN;
    while (xg->running) {
	while (XPending (xg->dpy))
	{
	    XNextEvent (xg->dpy, &event);
	    switch (event.type) {
	    case ConfigureNotify:
		configure_event (xg, &event.xconfigure);
		break;
	    case Expose:
		expose_event (xg, &event.xexpose);
		break;
	    case MotionNotify:
		motion_notify_event (xg, &event.xmotion);
		break;
	    case ButtonPress:
	    case ButtonRelease:
		button_event (xg, &event.xbutton);
		break;
	    case KeyPress:
	    case KeyRelease:
		key_event (xg, &event.xkey);
		break;
	    case ClientMessage:
		client_message_event (xg, &event.xclient);
		break;
	    case FocusIn:
	    case FocusOut:
		focus_change_event (xg, &event.xfocus);
		break;
	    }
	}
	timeout = -1;
	while (xg->repaint)
	{
	    int when = now ();
	    timeout = xg->repaint->when - when;
	    if (timeout > 0)
		break;
	    timeout = -1;
	    repaint_timeout (xg, when);
	}
	poll (fds, 2, timeout);
	if (fds[1].revents & POLLIN) {
	    char    stuffed[128];
	    read (fds[1].fd, stuffed, sizeof (stuffed));
	}
    }
    close (xg->pipe[0]);
    close (xg->pipe[1]);
    XCloseDisplay (xg->dpy);
    free (xg);
    return 0;
}
Exemplo n.º 4
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;
}