예제 #1
0
파일: window.c 프로젝트: DimondTheCat/xray
static void handle_jump( LWControl *ectl, void *edata )
{
   char a[ 24 ];
   int i, jcontext;

   GET_STR( ectl, a, sizeof( a ));
   GET_INT( ctl[ 12 ], jcontext );
   i = atoi( a );

   switch ( jcontext ) {
      case 1:   change_pos( pos, i );  break;
      case 2:   change_pos( pos, -i ); break;
      default:  change_pos( 0, i );    break;
   }
}
예제 #2
0
t_map	*make_intra_lab(t_map *my_map, int larg, int haut)
{
  int	nb_rand;
  int	dir;
  int	cmp;

  cmp = 0;
  my_map->x = 1;
  my_map->y = 1;
  srand(time(NULL));
  my_map->seen[my_map->y][my_map->x] = 1;
  my_map->cmp_lab = (larg * haut);
  while (cmp != my_map->cmp_lab-1)
    {
      nb_rand = rand()%4+1;
      dir = check_pos(nb_rand, my_map);
      my_map = save(my_map);
      while (dir == 0)
	{
	  nb_rand = rand()%4+1;
	  dir = check_pos(nb_rand, my_map);
	}
      my_map = change_pos(my_map, dir);
      cmp++;
    }
  return(my_map);
}
void RubixCube::rotate_cube_plane()
{
	if(!rotating)
	{
		int i,j,k;
		if(plane.back()!=0 && plane.back()!=1 && plane.back()!=2)
			exit(2);
        
		switch(axis.back())
		{
            case 0:
                change_pos(dir,cubepos[plane.back()][0][0],cubepos[plane.back()][0][1],cubepos[plane.back()][0][2],cubepos[plane.back()][1][0],cubepos[plane.back()][1][1],cubepos[plane.back()][1][2],cubepos[plane.back()][2][0],cubepos[plane.back()][2][1],cubepos[plane.back()][2][2]);
                break;
            case 1:
                change_pos(dir,cubepos[2][plane.back()][0],cubepos[2][plane.back()][1],cubepos[2][plane.back()][2],cubepos[1][plane.back()][0],cubepos[1][plane.back()][1],cubepos[1][plane.back()][2],cubepos[0][plane.back()][0],cubepos[0][plane.back()][1],cubepos[0][plane.back()][2]);
                break;
            case 2:
                change_pos(dir,cubepos[0][0][plane.back()],cubepos[1][0][plane.back()],cubepos[2][0][plane.back()],cubepos[0][1][plane.back()],cubepos[1][1][plane.back()],cubepos[2][1][plane.back()],cubepos[0][2][plane.back()],cubepos[1][2][plane.back()],cubepos[2][2][plane.back()]);
                break;
            default:
                exit(2);
		}
		set_centre();
        
		switch(axis.back())
		{
            case 0:
                for(j=0;j<3;j++)
                    for(k=0;k<3;k++)
                        c[cubepos[plane.back()][j][k]].rotate(0,dir);
                break;
            case 1:
                for(i=0;i<3;i++)
                    for(k=0;k<3;k++)
                        c[cubepos[i][plane.back()][k]].rotate(1,dir);
                break;
            case 2:
                for(i=0;i<3;i++)
                    for(j=0;j<3;j++)
                        c[cubepos[i][j][plane.back()]].rotate(2,dir);
                break;
		}
    }
	else
		glutIdleFunc(NULL);
}
예제 #4
0
static int partition(elem_t *data, int s, int f)
{
	int i, j;
	j = s-1;
	for (i = s; i <= f; i++){
		if (SE(data[i].value, data[f].value)){
			j++;
			change_pos(&data[i], &data[j]);
		}	
	}
	return j; 
}
예제 #5
0
파일: window.c 프로젝트: DimondTheCat/xray
static void handle_scroll( LWControl *ectl, void *edata )
{
   int i, newpos;

   inscroll = 1;
   GET_INT( ectl, i );
   newpos = i * ( filesize / 1000 );
   if ( newpos > filesize - pagesize )
      newpos = filesize - pagesize;
   if ( newpos < 0 ) newpos = 0;
   change_pos( 0, newpos );
   inscroll = 0;
}
예제 #6
0
void nxtCanvasWidget::wheelEvent( QWheelEvent *event ){
	if( !is_moveable )
		return;
	
	//Set modifiers
	key_control = event->modifiers() & Qt::ControlModifier;
	key_shift = event->modifiers() & Qt::ShiftModifier;
	
	int amount = event->delta() / 8;
	
	if( key_control ){
		//Zoom
		if( amount > 0 )
			zoom_at( event->pos(), current_zoom+1 );
		else
			zoom_at( event->pos(), current_zoom-1 );
	}
	else if( key_shift )
		change_pos( amount, 0 );
	else
		change_pos( 0, -amount );
}
예제 #7
0
파일: window.c 프로젝트: DimondTheCat/xray
static void handle_search( LWControl *ectl, void *edata )
{
   char userstr[ 64 ];
   int newpos;

   if ( !fp ) return;

   GET_INT( ctl[ 14 ], searchtype );
   GET_STR( ctl[ 13 ], userstr, sizeof( userstr ));
   if ( strlen( userstr ) == 0 ) return;

   newpos = pos;
   if ( search( fp, &newpos, userstr, searchtype, datatype, unsign, byteorder ))
      change_pos( 0, newpos );
   else
      msgf->info( "Search string not found.", NULL );
}
예제 #8
0
t_bunny_response	mainloop(t_data *data)
{
  if (data->player->coef[0] == 0 && data->player->coef[1] == 0)
    if (to_next_node(data) == - 1)
      return (EXIT_ON_ERROR);
  if (data->player->coef[0] != 0 && data->player->coef[1] != 0)
    move_perso(data);
  if (data->id_plan == 0)
    {
      change_pos(data);
      change_pos_nuages(data);
      have_pos(data);
    }
  else if (data->id_plan == 1)
    move_poteau(data);
  envoi_to_copy(data);
  tektext(data->pix, data->text);
  change_pos_perso(data->player->mov[CUR]->calque[0]->pix, data->loop);
  bunny_blit(&data->win->buffer, &data->pix->clipable, data->pos);
  bunny_display(data->win);
  return (GO_ON);
}
예제 #9
0
파일: window.c 프로젝트: DimondTheCat/xray
static void handle_key( LWPanelID panel, void *pdata, LWDualKey key )
{
   if ( !fp ) return;

   switch ( key )
   {
      case LWDK_SC_UP:     change_pos( pos, -linesize );         break;
      case LWDK_SC_DOWN:   change_pos( pos, linesize );          break;
      case LWDK_SC_LEFT:   change_pos( pos, -1 );                break;
      case LWDK_SC_RIGHT:  change_pos( pos, 1 );                 break;

      case LWDK_PAGEUP:
      case LWDK_PAD_9:     change_pos( pos, -pagesize );         break;
      case LWDK_PAGEDOWN:
      case LWDK_PAD_3:     change_pos( pos, pagesize );          break;
      case LWDK_HOME:
      case LWDK_PAD_7:     change_pos( 0, 0 );                   break;
      case LWDK_END:
      case LWDK_PAD_1:     change_pos( 0, filesize - pagesize ); break;

      case 'p':  handle_print();                  break;
      case 'n':  handle_new( ctl[ 16 ], NULL );   break;
      case 'j':  handle_jump( ctl[ 7 ], NULL );   break;
      case 's':  handle_search( ctl[ 8 ], NULL ); break;
      case '+':  SET_INT( ctl[ 12 ], 1 );         break;
      case '-':  SET_INT( ctl[ 12 ], 2 );         break;
      case '*':  SET_INT( ctl[ 12 ], 0 );         break;
      case 't':  SET_INT( ctl[ 14 ], 0 );         break;
      case 'h':  SET_INT( ctl[ 14 ], 1 );         break;
      case 'c':  SET_INT( ctl[ 14 ], 2 );         break;

      case 'b':
         SET_INT( ctl[ 3 ], 0 );
         handle_datatype( ctl[ 3 ], NULL );
         break;
      case 'w':
         SET_INT( ctl[ 3 ], 1 );
         handle_datatype( ctl[ 3 ], NULL );
         break;
      case 'l':
         SET_INT( ctl[ 3 ], 2 );
         handle_datatype( ctl[ 3 ], NULL );
         break;
      case 'f':
         SET_INT( ctl[ 3 ], 3 );
         handle_datatype( ctl[ 3 ], NULL );
         break;
      case 'd':
         SET_INT( ctl[ 3 ], 4 );
         handle_datatype( ctl[ 3 ], NULL );
         break;
      case 'u': {
         int i = !unsign;
         SET_INT( ctl[ 4 ], i );
         handle_unsigned( ctl[ 4 ], NULL );
         }
         break;
      case 'i':
         SET_INT( ctl[ 5 ], 0 );
         handle_byteorder( ctl[ 5 ], NULL );
         break;
      case 'm':
         SET_INT( ctl[ 5 ], 1 );
         handle_byteorder( ctl[ 5 ], NULL );
         break;
      case ',':
         if ( linesize > 1 ) {
            SET_INT( ctl[ 6 ], linesize - 1 );
            handle_rowsize( ctl[ 6 ], NULL );
         }
         break;
      case '.':
         if ( linesize < 16 ) {
            SET_INT( ctl[ 6 ], linesize + 1 );
            handle_rowsize( ctl[ 6 ], NULL );
         }
         break;
      default:
         break;
   }
}
예제 #10
0
void nxtCanvasWidget::action( action_event event ){
	static QPoint prev_last_mouse;
	
	if( active_tool == TOOL_NONE )
		return;
	
	//First handle the events that doesn't change the canvas
	if( active_tool == TOOL_SELECTION ){
		selection = get_qrect_from_points( mouse_start, mouse_current );
		if( selection.height() >= 0 )
			selection.setHeight( selection.height()+1 );
		if( selection.width() >= 0 )
			selection.setWidth( selection.width()+1 );
		update();
		//TODO: emit signal?
	}
	else if( active_tool == TOOL_MOVE ){
		if( is_moveable && event != EVENT_MOVE )	//Prevent infinitive loop
			change_pos( mouse_current.x() - mouse_last.x(), mouse_current.y() - mouse_last.y() );
	}
	else
		if( canvas ){
			//Create a fresh buffer, unless we are drawing in freehand
			if( active_tool != TOOL_PIXEL )
				new_buffer();
			
			//If this is the last action, enable auto-resize
			//if( event == EVENT_MOUSE_UP )
				canvas->set_auto_resize( true );
				//TODO: enable, then restore to previous state
			
			switch( active_tool ){
				case TOOL_PIXEL:
						//Draw a dot first time, then follow with lines
						if( event == EVENT_MOUSE_DOWN )
							canvas->PointOut( mouse_current.x(), mouse_current.y(), options );
						else
							canvas->connected_line_out( prev_last_mouse.x(), prev_last_mouse.y(), mouse_last.x(), mouse_last.y(), mouse_current.x(), mouse_current.y(), options );
						
						prev_last_mouse = mouse_last;
					break;
					
				case TOOL_LINE:
						if( key_control ){	//Limit to angles in steps of 15 degrees
							int dx = mouse_current.x() - mouse_start.x();
							int dy = mouse_current.y() - mouse_start.y();
							
							double angle = atan2( (double)( dy ), (double)( dx ) );
							double lenght = sqrt( (double)( dx*dx + dy*dy ) );
							double limiter = PI * 15 / 180;
							double new_angle = round_sym( angle / limiter ) * limiter;
							dy = round_sym( sin( new_angle ) * lenght );
							dx = round_sym( cos( new_angle ) * lenght );
							
							canvas->LineOut( mouse_start.x(), mouse_start.y(), mouse_start.x() + dx, mouse_start.y() + dy, options );
						}
						else
							canvas->LineOut( mouse_start.x(), mouse_start.y(), mouse_current.x(), mouse_current.y(), options );
					break;
				
				case TOOL_RECT:{
						QRect rect = get_qrect_from_points( mouse_start, mouse_current );
						
						//Make it a square if control is pressed
						if( key_control ){
							if( rect.width() > rect.height() ){
								if( mouse_current.y() < mouse_start.y() )
									rect.translate( 0, rect.height() - rect.width() );
								rect.setHeight( rect.width() );
							}
							else{
								if( mouse_current.x() < mouse_start.x() )
									rect.translate( rect.width() - rect.height(), 0 );
								rect.setWidth( rect.height() );
							}
						}
						
						canvas->RectOut( rect.x(), rect.y(), rect.width(), rect.height(), options );
					} break;
					
				case TOOL_ELLIPSE:
						if( key_control ){
							QPoint lenght = mouse_current - mouse_start;
							int radius = sqrt( (double)( lenght.x()*lenght.x() + lenght.y()*lenght.y() ) );
							canvas->CircleOut( mouse_start.x(), mouse_start.y(), radius, options );
						}
						else
							canvas->EllipseOut( mouse_start.x(), mouse_start.y(), abs( mouse_current.x() - mouse_start.x() ), abs( mouse_current.y() - mouse_start.y() ), options );
						break;
				
				case TOOL_BITMAP:{
						if( clipboard ){
							if( event == EVENT_MOUSE_DOWN ){
								selection.setWidth( clipboard->get_width() );
								selection.setHeight( clipboard->get_height() );
							}
							selection.moveTo( selection.topLeft() + mouse_current - mouse_last );
							canvas->copy_canvas( clipboard, 0, 0, selection.width(), selection.height(), selection.x(), selection.y(), options );
						}
					} break;
				
				case TOOL_FILL:	canvas->bucket_fill( mouse_current.x(), mouse_current.y(), options ); break;
				
				default: qDebug( "nxtCanvasWidget::action() unhandled tool: %d", active_tool );
			}
			
			//If this is the last action, make the buffer permanent
			if( event == EVENT_MOUSE_UP && active_tool != TOOL_BITMAP ){
			//	canvas->set_auto_resize( false );
				write_buffer();
			}
			
			update();
			emit value_changed();
		}
	
	
}