void handleEvents() { sf::Event Event; const sf::Input& Input = App->GetInput(); bool shiftDown = Input.IsKeyDown(sf::Key::LShift) || Input.IsKeyDown(sf::Key::RShift); while (App->GetEvent(Event)) { // Close window : exit if (Event.Type == sf::Event::Closed) App->Close(); // // Escape key : exit if (Event.Type == sf::Event::KeyPressed) { if(Event.Key.Code == sf::Key::Escape) App->Close(); else if(Event.Key.Code == sf::Key::Delete) deleteShape(); else if(Event.Key.Code == sf::Key::Up && selected != 0) { Shape* s = findShape(selected); switch(colorM) { case COLOR_R: s->color[0] = ffmin(1.0, s->color[0]+0.05); break; case COLOR_G: s->color[1] = ffmin(1.0, s->color[1]+0.05); break; case COLOR_B: s->color[2] = ffmin(1.0, s->color[2]+0.05); break; } } else if(Event.Key.Code == sf::Key::Down && selected != 0) { Shape* s = findShape(selected); switch(colorM) { case COLOR_R: s->color[0] = ffmax(0.0, s->color[0]-0.05); break; case COLOR_G: s->color[1] = ffmax(0.0, s->color[1]-0.05); break; case COLOR_B: s->color[2] = ffmax(0.0, s->color[2]-0.05); break; } } } // Resize event : adjust viewport if (Event.Type == sf::Event::Resized) { glViewport(0, 0, Event.Size.Width, Event.Size.Height); currentRes[0] = Event.Size.Width; currentRes[1] = Event.Size.Height; update_perspective(); } if (Event.Type == sf::Event::MouseButtonPressed) { lastPos[0] = Event.MouseButton.X; lastPos[1] = Event.MouseButton.Y; float x = Event.MouseButton.X; float y = currentRes[1]-Event.MouseButton.Y; if(Event.MouseButton.Button == sf::Mouse::Left) { if(!handleButtons(x,y)) { handleSelection(Event.MouseButton.X, Event.MouseButton.Y); } } if(Event.MouseButton.Button == sf::Mouse::Left && !shiftDown) { buttonDown[0] = 1; } if(Event.MouseButton.Button == sf::Mouse::Right) buttonDown[1] = 1; if(Event.MouseButton.Button == sf::Mouse::Middle) buttonDown[2] = 1; if(Event.MouseButton.Button == sf::Mouse::Left && shiftDown) buttonDown[2] = 1; } if (Event.Type == sf::Event::MouseButtonReleased) { if(Event.MouseButton.Button == sf::Mouse::Left && !shiftDown) buttonDown[0] = 0; if(Event.MouseButton.Button == sf::Mouse::Right) buttonDown[1] = 0; if(Event.MouseButton.Button == sf::Mouse::Middle) buttonDown[2] = 0; if(Event.MouseButton.Button == sf::Mouse::Left && shiftDown) buttonDown[2] = 0; } if (Event.Type == sf::Event::MouseMoved && (buttonDown[0] || buttonDown[1] || buttonDown[2]) ) { int x = Event.MouseMove.X; int y = Event.MouseMove.Y; if(selected == 0) { if(buttonDown[0]) camera.trackball_rotate(lastPos[0], lastPos[1], x, y, currentRes[0], currentRes[1]); if(buttonDown[1]) camera.trackball_translate(lastPos[0], lastPos[1], x, y); if(buttonDown[2]) camera.trackball_translate_z(lastPos[0], lastPos[1], x, y); } else { Shape* s = findShape(selected); float diff = (x-lastPos[0])-(y-lastPos[1]); vec3 v; switch(axisM) { case X_AXIS: v = vec3(diff,0.0,0.0); break; case Y_AXIS: v = vec3(0.0,diff,0.0); break; case Z_AXIS: v = vec3(0.0,0.0,diff); break; } switch(transM) { case TRANS_TRANSLATION: s->trans.trans += v*0.01; break; case TRANS_ROTATION: s->rot.trans += v*0.1; break; case TRANS_SCALE: s->scale.trans += v*0.01; break; } } lastPos[0] = x; lastPos[1] = y; } } }
void graphic_manager_context_force_update() { update_perspective(1); update_rendermode(1); update_settings(); }