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 ){ } } }
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; } } }