Пример #1
0
void DaoxCanvas_glutKeyboard( unsigned char key, int x, int y )
{
	if( daox_current_canvas == NULL ) return;
	if( DaoCstruct_CallKeyboardMethod( (DaoCstruct*) daox_current_canvas, "OnKeyboard", key, x, y ) ) return;

	if( key == '+' ){
		DaoxCanvas_Zoom( 1 );
	}else if( key == '-' ){
		DaoxCanvas_Zoom( 0 );
	}else if( key == GLUT_KEY_UP || key == GLUT_KEY_DOWN || key == GLUT_KEY_LEFT || key == GLUT_KEY_RIGHT ){
		if( daox_current_renderer && daox_current_scene ){
		}
	}
}
Пример #2
0
void DaoxWindow_KeyCallback( GLFWwindow *window, int key, int scode, int action, int mods )
{
	DaoxWindow *self = (DaoxWindow*) glfwGetWindowUserPointer( window );
	DaoxCanvas *canvas;
	DaoxScene *scene;

	if( self == NULL ) return;
	canvas = (DaoxCanvas*) DaoValue_CastCstruct( self->model, daox_type_canvas );
	scene = (DaoxScene*) DaoValue_CastCstruct( self->model, daox_type_scene );

	if( key == GLFW_KEY_ESCAPE && glfwGetKey( window, key ) == GLFW_RELEASE ){
		self->visible = 0;
		return;
	}
	if( canvas ){
		switch( key ){
		case GLFW_KEY_EQUAL :
			if( mods & GLFW_MOD_SHIFT ) DaoxCanvas_Zoom( canvas, 1 );
			break;
		case GLFW_KEY_MINUS :
			DaoxCanvas_Zoom( canvas, 0 );
			break;
		case GLFW_KEY_TAB :
			if( glfwGetKey( window, key ) == GLFW_PRESS ){
				self->painter->showMesh = ! self->painter->showMesh;
			}
			break;
		}
	}else if( scene && self->renderer->camera ){
		DaoxCamera *camera = self->renderer->camera;
		DaoxVector3D pos = DaoxCamera_GetPosition( camera );
		float dist = DaoxVector3D_Dist( & pos, & camera->viewTarget );
		float delta = dist / 8;
		float dx = 0.0;
		float dy = 0.0;
		float dz = 0.0;
		switch( key ){
		case GLFW_KEY_EQUAL :
			if( mods & GLFW_MOD_SHIFT ) DaoxCamera_Zoom( camera, 1 );
			break;
		case GLFW_KEY_MINUS :
			DaoxCamera_Zoom( camera, 0 );
			break;
		case GLFW_KEY_UP :
		case GLFW_KEY_DOWN :
		case GLFW_KEY_LEFT :
		case GLFW_KEY_RIGHT :
			switch( key ){
			case GLFW_KEY_UP    : dy = + delta; break;
			case GLFW_KEY_DOWN  : dy = - delta; break;
			case GLFW_KEY_LEFT  : dx = - delta; break;
			case GLFW_KEY_RIGHT : dx = + delta; break;
			}
			DaoxCamera_MoveByXYZ( camera, dx, dy, dz );
			break;
		case GLFW_KEY_TAB :
			if( glfwGetKey( window, key ) == GLFW_PRESS ){
				self->renderer->showMesh = ! self->renderer->showMesh;
				self->renderer->showAxis = ! self->renderer->showAxis;
			}
			break;
		}
	}
}