Пример #1
0
static void onKeyboardKey(unsigned char key, int, int)
//
// handle a keyboard press (of a normal ASCII character)
//
{
    switch (key) {

    case 'b':
        onMenuSelection(MENU_TOGGLE_BACK_FACE_CULLING);
        break;

    case 'c':
        onMenuSelection(MENU_TOGGLE_COORDINATE_AXES);
        break;

    case 'F':
        onMenuSelection(MENU_TOGGLE_FULL_SCREEN);
        break;

    case 'h':
        onMenuSelection(MENU_TOGGLE_VIEW_HELP);
        break;

    case 'f':
        onMenuSelection(MENU_USE_FACE_NORMALS);
        break;

    case 'N':
        onMenuSelection(MENU_TOGGLE_NORMAL_HEDGEHOG);
        break;

    case 'q':
    case '\027': // ESC: common alternative (was '\e', MSVC++ doesn't like that)
        onMenuSelection(MENU_QUIT);
        break;

    case 'r':
        onMenuSelection(MENU_RESET_VIEW);
        break;

    case 's':
        onMenuSelection(MENU_TOGGLE_STATS);
        break;

    case 'v':
        onMenuSelection(MENU_USE_VERTEX_NORMALS);
        break;

    case '-':
        onMouseButton(FRAMEWORK_WHEEL_DOWN_BUTTON, FRAMEWORK_UP, 0, 0);
        break;

    case '+':
        onMouseButton(FRAMEWORK_WHEEL_UP_BUTTON, FRAMEWORK_UP, 0, 0);
        break;

    }
    // ignore unknown keyboard keys
}
Пример #2
0
void
COSXScreen::handleSystemEvent(const CEvent& event, void*)
{
	EventRef* carbonEvent = reinterpret_cast<EventRef*>(event.getData());
	assert(carbonEvent != NULL);

	UInt32 eventClass = GetEventClass(*carbonEvent);

	switch (eventClass) {
	case kEventClassMouse:
		switch (GetEventKind(*carbonEvent)) {
		case kEventMouseDown:
		{
			UInt16 myButton;
			GetEventParameter(*carbonEvent,
					kEventParamMouseButton,
					typeMouseButton,
					NULL,
					sizeof(myButton),
					NULL,
					&myButton);
			onMouseButton(true, myButton);
			break;
		}

		case kEventMouseUp:
		{
			UInt16 myButton;
			GetEventParameter(*carbonEvent,
					kEventParamMouseButton,
					typeMouseButton,
					NULL,
					sizeof(myButton),
					NULL,
					&myButton);
			onMouseButton(false, myButton);
			break;
		}

		case kEventMouseDragged:
		case kEventMouseMoved:
		{
			HIPoint point;
			GetEventParameter(*carbonEvent,
					kEventParamMouseLocation,
					typeHIPoint,
					NULL,
					sizeof(point),
					NULL,
					&point);
			onMouseMove((SInt32)point.x, (SInt32)point.y);
			break;
		}

		case kEventMouseWheelMoved:
		{
			EventMouseWheelAxis axis;
			SInt32 delta;
			GetEventParameter(*carbonEvent,
					kEventParamMouseWheelAxis,
					typeMouseWheelAxis,
					NULL,
					sizeof(axis),
					NULL,
					&axis);
			if (axis == kEventMouseWheelAxisX ||
				axis == kEventMouseWheelAxisY) {
				GetEventParameter(*carbonEvent,
					kEventParamMouseWheelDelta,
					typeLongInteger,
					NULL,
					sizeof(delta),
					NULL,
					&delta);
				if (axis == kEventMouseWheelAxisX) {
					onMouseWheel(-mapScrollWheelToSynergy((SInt32)delta), 0);
				}
				else {
					onMouseWheel(0, mapScrollWheelToSynergy((SInt32)delta));
				}
			}
			break;
		}

		case kSynergyEventMouseScroll:
		{
			OSStatus r;
			long xScroll;
			long yScroll;

			// get scroll amount
			r = GetEventParameter(*carbonEvent,
					kSynergyMouseScrollAxisX,
					typeLongInteger,
					NULL,
					sizeof(xScroll),
					NULL,
					&xScroll);
			if (r != noErr) {
				xScroll = 0;
			}
			r = GetEventParameter(*carbonEvent,
					kSynergyMouseScrollAxisY,
					typeLongInteger,
					NULL,
					sizeof(yScroll),
					NULL,
					&yScroll);
			if (r != noErr) {
				yScroll = 0;
			}

			if (xScroll != 0 || yScroll != 0) {
				onMouseWheel(-mapScrollWheelToSynergy(xScroll),
								mapScrollWheelToSynergy(yScroll));
			}
		}
		}
		break;

	case kEventClassKeyboard: 
		switch (GetEventKind(*carbonEvent)) {
		case kEventRawKeyUp:
		case kEventRawKeyDown:
		case kEventRawKeyRepeat:
		case kEventRawKeyModifiersChanged:
			onKey(*carbonEvent);
			break;

		case kEventHotKeyPressed:
		case kEventHotKeyReleased:
			onHotKey(*carbonEvent);
			break;
		}

		break;

	case kEventClassWindow:
		SendEventToWindow(*carbonEvent, m_userInputWindow);
		switch (GetEventKind(*carbonEvent)) {
		case kEventWindowActivated:
			LOG((CLOG_DEBUG1 "window activated"));
			break;

		case kEventWindowDeactivated:
			LOG((CLOG_DEBUG1 "window deactivated"));
			break;

		case kEventWindowFocusAcquired:
			LOG((CLOG_DEBUG1 "focus acquired"));
			break;

		case kEventWindowFocusRelinquish:
			LOG((CLOG_DEBUG1 "focus released"));
			break;
		}
		break;

	default:
		SendEventToEventTarget(*carbonEvent, GetEventDispatcherTarget());
		break;
	}
}
Пример #3
0
static void onKeyboardKey(unsigned char key, int, int)
//
// handle a keyboard press (of a normal ASCII character)
//
{
    switch (key) {

    case '1':
        onMenuSelection(MENU_TOGGLE_FIRST_PERSON);
        break;

    case ' ':
        onMenuSelection(MENU_STEP);
        break;

    case 'A':
        onMenuSelection(MENU_TOGGLE_AMBIENT_REFLECTION);
        break;

    case 'a': // no conflict, as PA ranges are disjoint
        onMenuSelection(MENU_TOGGLE_ANIMATION);
        break;

    case 'b':
        onMenuSelection(MENU_TOGGLE_BACK_FACE_CULLING);
        break;

    case 'c':
        onMenuSelection(MENU_TOGGLE_COORDINATE_AXES);
        break;

    case 'D':
        onMenuSelection(MENU_TOGGLE_DIFFUSE_REFLECTION);
        break;

    case 'F':
        onMenuSelection(MENU_TOGGLE_FULL_SCREEN);
        break;

    case 'h':
        onMenuSelection(MENU_TOGGLE_VIEW_HELP);
        break;

    case 'f':
        onMenuSelection(MENU_USE_FACE_NORMALS);
        break;

    case 'L':
        onMenuSelection(MENU_CYCLE_LIGHT_HEDGEHOG);
        break;

    case 'N':
        onMenuSelection(MENU_TOGGLE_NORMAL_HEDGEHOG);
        break;

    case 'P':
        onMenuSelection(MENU_TOGGLE_PERSPECTIVE);
        break;

    case 'p':
        onMenuSelection(MENU_TOGGLE_POLYGON_FILL);
        break;

    case 'q':
    case '\027': // ESC: common alternative (was '\e', MSVC++ doesn't like that)
        onMenuSelection(MENU_QUIT);
        break;

    case 'r':
        onMenuSelection(MENU_RESET_VIEW);
        break;

    case 'S':
        onMenuSelection(MENU_TOGGLE_SPECULAR_REFLECTION);
        break;

    case 's':
        onMenuSelection(MENU_TOGGLE_STATS);
        break;

    case 'v':
        onMenuSelection(MENU_USE_VERTEX_NORMALS);
        break;

    case '-':
        onMouseButton(FRAMEWORK_WHEEL_DOWN_BUTTON, FRAMEWORK_UP, 0, 0);
        break;

    case '+':
        onMouseButton(FRAMEWORK_WHEEL_UP_BUTTON, FRAMEWORK_UP, 0, 0);
        break;

    }
    // ignore unknown keyboard keys
}
Пример #4
0
int main(int argc, char *argv[])
{
    SDL_Event       event;
    SDL_TimerID     timer = 0;

    /* nacteni modelu */
    polymodel = modLoad((argc == 2) ? argv[1] : DEFAULT_MODEL);
    IZG_CHECK(polymodel, "Failed to read input model");

    /* vytvoreni default SW rendereru */
#ifdef USE_STUDENT_RENDERER
    renderer = studrenCreate();
#else
    renderer = renCreate();
#endif /* USE_STUDENT_RENDERER */

    /* pocatecni velikost bufferu */
    renderer->createBuffersFunc(renderer, DEFAULT_WIDTH, DEFAULT_HEIGHT);

    /* inicializace SDL knihovny */
    if( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
    {
        IZG_SDL_ERROR("Could not initialize SDL library");
    }

    /* nastaveni titulku okna */
#ifdef USE_STUDENT_RENDERER
    SDL_WM_SetCaption(PROGRAM_TITLE_STUDENT, 0);
#else
    SDL_WM_SetCaption(PROGRAM_TITLE, 0);
#endif // USE_STUDENT_RENDERER

    /* screen */
    screen = SDL_SetVideoMode(DEFAULT_WIDTH, DEFAULT_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE);

    /* enable Unicode translation */
    SDL_EnableUNICODE(1);

    /* dalsi inicializace */
    onInit(renderer, polymodel);

    /* nastavime timer, ktery bude volat zadanou callback fci */
    timer = SDL_AddTimer(TIMER_INTERVAL, timerCallback, NULL);

    /* kreslime dokud nenarazime na SDL_QUIT event */
    while( !quit )
    {
        /* vycteni udalosti */
        while( SDL_PollEvent(&event) )
        {
            switch( event.type )
            {
                /* udalost klavesnice */
                case SDL_KEYDOWN:
                    onKeyboard(&event.key);
                    break;

                /* zmena velikosti okna */
                case SDL_VIDEORESIZE:
                    onResize(&event.resize);
                    break;

                /* udalost mysi - pohyb */
                case SDL_MOUSEMOTION:
                    onMouseMotion(&event.motion);
                    break;

                /* udalost mysi - tlacitka */
                case SDL_MOUSEBUTTONDOWN:
                case SDL_MOUSEBUTTONUP:
                    onMouseButton(&event.button);
                    break;

                /* tiknuti timeru */
                case SDL_USEREVENT:
                    if( event.user.code == IZG_TIMER_EVENT )
                    {
                        onTimer((int)SDL_GetTicks());
                    }
                    break;

                /* SDL_QUIT event */
                case SDL_QUIT:
                    quit = 1;
                    break;

                default:
                    break;
            }
        }

        /* vykresleni pres SDL knihovnu */
        draw();
    }

    /* ukonceni timeru */
    SDL_RemoveTimer(timer);

    /* ukonceni SDL */
    SDL_FreeSurface(screen);

    /* shutdown all SDL subsystems */
    SDL_Quit();

    /* zrusime co jsme vytvorili a ukoncime program */
    modRelease(&polymodel);
    renderer->releaseFunc(&renderer);

    return 0;
}