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); }
/** * \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; }