Esempio n. 1
0
void DSKY::ResetCallback(PanelSwitchItem* s)
{
	if (s->GetState() == 1)
	{
		KeyDown_Reset = true;
		ResetPressed();
	}
	else
	{
		ResetKeyDown();
	}
}
Esempio n. 2
0
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. */
}
Esempio n. 3
0
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();
		}
	}

}