/************************************************* * Windows callback *************************************************/ static LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // salvapantallas if( uMsg==WM_SYSCOMMAND && (wParam==SC_SCREENSAVE || wParam==SC_MONITORPOWER) ) return( 0 ); // boton x o pulsacion de escape //if( uMsg==WM_CLOSE || uMsg==WM_DESTROY || (uMsg==WM_KEYDOWN && wParam==VK_ESCAPE) ) if( uMsg==WM_CLOSE || uMsg==WM_DESTROY ) { PostQuitMessage(0); return( 0 ); } // Reaction to command keys if( uMsg==WM_KEYDOWN ) { switch (wParam) { #if 0 case VK_ESCAPE: PostQuitMessage(0); return 0; #endif case VK_LEFT: case VK_RIGHT: case VK_UP: case VK_DOWN: case VK_PRIOR: case VK_NEXT: case VK_END: case VK_HOME: editor.moveCursor(wParam); break; case VK_RETURN: case VK_DELETE: case VK_BACK: editor.controlCharacter(wParam); break; case 'k': case 'K': if (GetAsyncKeyState(VK_CONTROL) < 0) { editor.deleteLine(); } break; case 'z': case 'Z': if (GetAsyncKeyState(VK_CONTROL) < 0) { editor.undo(); char errorText[MAX_ERROR_LENGTH]; char *shaderText; shaderText = editor.getText(); if (shaderManager.updateShader(usedShader[usedIndex], shaderText, errorText)) { editor.setErrorText(errorText); } else editor.unshowError(); editor.showText(); } break; case 'y': case 'Y': if (GetAsyncKeyState(VK_CONTROL) < 0) { editor.redo(); char errorText[MAX_ERROR_LENGTH]; char *shaderText; shaderText = editor.getText(); if (shaderManager.updateShader(usedShader[usedIndex], shaderText, errorText)) { editor.setErrorText(errorText); } else editor.unshowError(); editor.showText(); } break; case 'm': case 'M': if (GetAsyncKeyState(VK_CONTROL) < 0) { // TODO: Minimization again. SetWindowLong(hWnd, GWL_STYLE, WS_POPUP|WS_VISIBLE); ShowWindow(hWnd, SW_MAXIMIZE); GetClientRect(hWnd, &windowRect); glViewport(0, 0, windowRect.right-windowRect.left, abs(windowRect.bottom - windowRect.top)); //NEW aspectRatio = (float)(windowRect.right-windowRect.left) / (float)(abs(windowRect.bottom - windowRect.top)); ShowCursor(false); } break; case 's': case 'S': // We want a new shader if (GetAsyncKeyState(VK_CONTROL) < 0) { char errorText[MAX_ERROR_LENGTH]; char *shaderText; shaderText = editor.getText(); if (shaderManager.updateShader(usedShader[usedIndex], shaderText, errorText)) { //MessageBox(wininfo.hWnd, errorText, "Shader change", MB_OK); editor.setErrorText(errorText); } else { // It worked, so save the shader shaderManager.saveProgress(usedShader[usedIndex], errorText, &editor); editor.unshowError(); editor.unshowText(); } // Save sprites to file textureManager.CreatePicture("TODO.tga"); } break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (GetAsyncKeyState(VK_CONTROL) < 0) { // I use the ordering of keys to be able to get to the shader... usedIndex = wParam - '1'; if (usedIndex >= NUM_USED_PROGRAMS) usedIndex = NUM_USED_PROGRAMS - 1; char errorText[MAX_ERROR_LENGTH+1]; char filename[SM_MAX_FILENAME_LENGTH+1]; sprintf_s(filename, SM_MAX_FILENAME_LENGTH, "shaders/%s", usedShader[usedIndex]); if (editor.loadText(filename, errorText)) { MessageBox(wininfo.hWnd, errorText, "Editor init", MB_OK); return -1; } } break; default: break; } } // Text entering if (uMsg==WM_CHAR && GetAsyncKeyState(VK_CONTROL) >= 0) { editor.putCharacter(wParam); } return( DefWindowProc(hWnd,uMsg,wParam,lParam) ); }