示例#1
0
void
WallScreen::handleEvent (XEvent *event)
{
    switch (event->type) {
    case ClientMessage:
	if (event->xclient.message_type == Atoms::desktopViewport)
	{
	    int dx, dy;

	    if (screen->otherGrabExist ("switcher", "wall", 0))
		break;

	    dx  = event->xclient.data.l[0] / screen->width();
	    dx -= screen->vp ().x ();
	    dy  = event->xclient.data.l[1] / screen->height();
	    dy -= screen->vp ().y ();

	    if (!dx && !dy)
		break;

	    moveViewport (-dx, -dy, None);
	}
	if (event->xclient.message_type == Atoms::xdndEnter)
	{
	    toggleEdges (true);
	    edgeDrag = true;
	}
	else if (event->xclient.message_type == Atoms::xdndLeave)
	    edgeDrag = false;

	break;

	case FocusIn:
	case FocusOut:
	    if (event->xfocus.mode == NotifyGrab)
		poller.start ();
	    else if (event->xfocus.mode == NotifyUngrab)
		poller.stop ();
	break;

	case ConfigureNotify:

	     if (event->xconfigure.window == screen->root ())
		updateScreenEdgeRegions ();

	break;
    }

    screen->handleEvent (event);
}
示例#2
0
/**
 * \fn bool manageEvent(SDL_Event event, Viewport* viewport)
 * \brief Manage an event.
 *
 * \param event The event to manage.
 * \param viewport The viewport that can be moved.
 * \return False if the the game ends, true if not.
 */
bool manageEvent(SDL_Event event, Viewport* viewport, Events *flags) {
	bool isInPlay = true;
	
	switch(event.type) {
		// Quit game
		case SDL_QUIT:
			isInPlay = false;
			break;
			
		// Key pressed
		case SDL_KEYDOWN:
			switch(event.key.keysym.sym) {
				// Quit game
				case SDLK_ESCAPE:
					isInPlay = false;
					break;
					
				// Move view
				case SDLK_UP:
					moveViewport(viewport, UP);
					break;
					
				case SDLK_DOWN:
					moveViewport(viewport, DOWN);
					break;
					
				case SDLK_LEFT:
					moveViewport(viewport, LEFT);
					break;
					
				case SDLK_RIGHT:
					moveViewport(viewport, RIGHT);
					break;
					
				default:
					break;
			}
		   break;

      // Mouse left click
      case SDL_MOUSEBUTTONDOWN:
         if(event.button.button == SDL_BUTTON_LEFT) {
            Case* caseClicked = whichCase(event.button.x, event.button.y);
            TypeTo* simpleTowerType = flags->selectedTower;
            Case *viewportOffset = whichCase(viewport->mapsurface.x,viewport->mapsurface.y);
            int mapPositionX = caseClicked->xx + viewportOffset->xx;
            int mapPositionY = caseClicked->yy + viewportOffset->yy;
            Tower *tower = createTower(mapPositionX, mapPositionY, simpleTowerType);
            if(tower){
               flags->enemy_Path_Calculation = true;
               pushList((void*)flags->towerList,tower);
               drawTower(tower);
            }
         }
         break;
			
		default:
			break;
	}
	
	return isInPlay;
}