void DSKY::ResetCallback(PanelSwitchItem* s) { if (s->GetState() == 1) { KeyDown_Reset = true; ResetPressed(); } else { ResetKeyDown(); } }
int SDLShell::Run(int argc, char *argv[]) { printf("*** %s, V%s ***\n", GetAppName(), GetAppVersion()); int done; Uint8 *keys; if (SDL_Init(SDL_INIT_VIDEO)) { printf("Unable to initialize SDL: %s\n", SDL_GetError()); return 0; } ProcessCommandLine(argc, argv); if (!InitApp()) { Exit(EXIT_INIT_APP); } SDL_Surface *screen; if (Verbose(VerboseAll)) { printf("Setting width = %d, height = %d, bpp = %d\n", ShellGet(SDLShell::SHELL_WIDTH), ShellGet(SDLShell::SHELL_HEIGHT), ShellGet(SDLShell::SHELL_BPP)); } screen = SDL_SetVideoMode(ShellGet(SDLShell::SHELL_WIDTH), ShellGet(SDLShell::SHELL_HEIGHT), ShellGet(SDLShell::SHELL_BPP), Flags()); if (!screen) { fprintf(stderr, "Couldn't set %dx%d GL video mode: %s\n", ShellGet(SDLShell::SHELL_WIDTH), ShellGet(SDLShell::SHELL_HEIGHT), SDL_GetError()); Exit(EXIT_NO_SCREEN); } char tempString[100]; sprintf(tempString, "%s V%s", GetAppName(), GetAppVersion()); SDL_WM_SetCaption(tempString, GetAppName()); SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, ShellGet(SHELL_VSYNC)); if (RequiresOpenGL2()) { // Initialize GLEW and make sure OpenGL 2.0 is supported GLenum err = glewInit(); if(GLEW_OK != err) { fprintf(stderr, "[ Fail ] - Error: %s\n", glewGetErrorString(err)); Exit(EXIT_NO_GL2_SUPPORT); } if(!GLEW_VERSION_2_0 && !(GLEW_ARB_shading_language_100 && GLEW_ARB_shader_objects && GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader)) { fprintf(stderr, "[ Fail ] - Shaders not supported\n"); Exit(EXIT_NO_GL2_SUPPORT); } if(!GLEW_ARB_vertex_buffer_object) { fprintf(stderr, "[ Fail ] - VBO objects are not supported\n"); Exit(EXIT_NO_GL2_SUPPORT); } } if (RequiresTTF()) { if (TTF_Init() == -1) { printf("Unable to initialize SDL_ttf: %s \n", TTF_GetError()); Exit(EXIT_NO_FONT); } } CreatePointer(); if (!InitGL()) { Exit(EXIT_INIT_GL); } done = 0; while (!done) { pPointer->Input(); ResetPressed(); ResetMouse(); SDL_Event event; while ( SDL_PollEvent(&event) ) { switch(event.type) { case SDL_VIDEORESIZE: if (ShellGet(SDLShell::SHELL_RESIZABLE)) { screen = SDL_SetVideoMode(event.resize.w, event.resize.h, ShellGet(SDLShell::SHELL_BPP), Flags()); if (screen) { Reshape(screen->w, screen->h); } else { /* Uh oh, we couldn't set the new video mode?? */; } } break; case SDL_MOUSEMOTION: pPointer->UpdateMouseMotion(event.motion); /*if (Verbose(VerboseAll)) { printf("Mouse moved by %d,%d to (%d,%d)\n", event.motion.xrel, event.motion.yrel, event.motion.x, event.motion.y); }*/ break; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_WHEELDOWN) { scrollDown = true; } pPointer->UpdateMouseButton(event.button); /*if (Verbose(VerboseAll)) { printf("Mouse button %d pressed at (%d,%d)\n", event.button.button, event.button.x, event.button.y); }*/ break; case SDL_MOUSEBUTTONUP: if (event.button.button == SDL_BUTTON_WHEELUP) { scrollUp = true; } if (event.button.button == SDL_BUTTON_LEFT) { leftClick = true; } if (event.button.button == SDL_BUTTON_RIGHT) { rightClick = true; } pPointer->UpdateMouseButton(event.button); /*if (Verbose(VerboseAll)) { printf("Mouse button %d released at (%d,%d)\n", event.button.button, event.button.x, event.button.y); }*/ break; case SDL_KEYUP: SetPressed(event.key.keysym.scancode, false); SetPressing(event.key.keysym.scancode, false); break; case SDL_KEYDOWN: if (Verbose(VerboseInfo)) { printf("Pressed key %d\n", (int)event.key.keysym.scancode); } if (!KeyPressing(event.key.keysym.scancode)) { SetPressed(event.key.keysym.scancode, true); } SetPressing(event.key.keysym.scancode, true); break; case SDL_QUIT: done = 1; break; } } keys = SDL_GetKeyState(NULL); if (keys[SDLK_ESCAPE]) { done = 1; } if (!Render()) break; SDL_GL_SwapBuffers(); shellFrame++; } ReleaseGL(); ReleaseApp(); SDL_Quit(); return 0; /* ANSI C requires main to return int. */ }
void DSKY::ProcessKeyPress(int mx, int my) { if (mx > 2 && mx < 39) { if (my > 21 && my < 59) { KeyDown_Verb = true; VerbPressed(); } if (my > 61 && my < 99) { KeyDown_Noun = true; NounPressed(); } } if (mx > 2+1*41 && mx < 39+1*41) { if (my > 1 && my < 39) { KeyDown_Plus = true; PlusPressed(); } if (my > 41 && my < 79) { KeyDown_Minus = true; MinusPressed(); } if (my > 81 && my < 119) { KeyDown_0 = true; NumberPressed(0); } } if (mx > 2+2*41 && mx < 39+2*41) { if (my > 1 && my < 39) { KeyDown_7 = true; NumberPressed(7); } if (my > 41 && my < 79) { KeyDown_4 = true; NumberPressed(4); } if (my > 81 && my < 119) { KeyDown_1 = true; NumberPressed(1); } } if (mx > 2+3*41 && mx < 39+3*41) { if (my > 1 && my < 39) { KeyDown_8 = true; NumberPressed(8); } if (my > 41 && my < 79) { KeyDown_5 = true; NumberPressed(5); } if (my > 81 && my < 119) { KeyDown_2 = true; NumberPressed(2); } } if (mx > 2+4*41 && mx < 39+4*41) { if (my > 1 && my < 39) { KeyDown_9 = true; NumberPressed(9); } if (my > 41 && my < 79) { KeyDown_6 = true; NumberPressed(6); } if (my > 81 && my < 119) { KeyDown_3 = true; NumberPressed(3); } } if (mx > 2+5*41 && mx < 39+5*41) { if (my > 1 && my < 39) { KeyDown_Clear = true; ClearPressed(); } if (my > 41 && my < 79) { KeyDown_Prog = true; ProgPressed(); } if (my > 81 && my < 119) { KeyDown_KeyRel = true; KeyRel(); } } if (mx > 2+6*41 && mx < 39+6*41) { if (my > 21 && my < 59) { KeyDown_Enter= true; EnterPressed(); } if (my > 61 && my < 99) { KeyDown_Reset = true; ResetPressed(); } } }