// This callback function gets called by the Glut // system whenever it decides things need to be redrawn. void display(void) { glClear(GL_COLOR_BUFFER_BIT); // Test lines that draw all three shapes and some text. // Delete these when you get your code working. drawShapes(); drawPoints(); drawButtons(); drawSliders(); glColor3d(1, 1, 1); drawText(300, 10, "CS-3005 - Illustrator"); glutSwapBuffers(); }
void NoiseGen::mainLoop() { bool quit = false; bool refresh = true; //int cursor = 0; //bool viewcontrol = false; // int viewcontrolunits = 12; // how many units moved when in view control bool mapDrag = false; sf::Vector2i mapDragOffset; //debug //std::cout << "SCREEN :" << IMAGE_SIZE*IMAGE_SCALE+RIGHT_MARGIN_WIDTH << "," << IMAGE_SIZE*IMAGE_SCALE+BOTTOM_MARGIN_HEIGHT << std::endl; while(!quit) { sf::Event event; screen->clear(); //check for right mouse button release if dragging if(mapDrag && !sf::Mouse::isButtonPressed(sf::Mouse::Right)) { mapDrag = false; xpos = xpos - (sf::Mouse::getPosition(*screen).x - mapDragOffset.x); ypos = ypos - (sf::Mouse::getPosition(*screen).y - mapDragOffset.y); refresh = true; } else if(mapDrag) refresh = true; //create, populate, and display map image if(refresh) { if(sf::Mouse::isButtonPressed(sf::Mouse::Right) && mapDrag) { int x_off = sf::Mouse::getPosition(*screen).x - mapDragOffset.x; int y_off = sf::Mouse::getPosition(*screen).y - mapDragOffset.y; createMapImage(xpos - x_off, ypos - y_off); } else createMapImage(xpos, ypos); refresh = false; } //DRAW OBJECTS drawMap(); drawSliders(); drawButtons(); drawCoordinates( sf::Vector2i(IMAGE_SCALE*IMAGE_SIZE + 12, 300)); //debug draw mouse coordinates /* std::stringstream mpos; mpos << "(" << sf::Mouse::getPosition(*screen).x << "," << sf::Mouse::getPosition(*screen).y << ")"; sf::Text mposTXT(mpos.str(), font, 12); mposTXT.setColor(sf::Color(200,0,0)); screen->draw(mposTXT); */ //handle input while(screen->pollEvent(event)) { //if resize event happened if(event.type == sf::Event::Resized) { screen->setSize( sf::Vector2u(IMAGE_SCALE*IMAGE_SIZE + RIGHT_MARGIN_WIDTH, IMAGE_SCALE*IMAGE_SIZE + BOTTOM_MARGIN_HEIGHT)); continue; } //pass event to sliders if(updateSliders(&event)) refresh = true; //WINDOW CLOSE EVENT if(event.type == sf::Event::Closed) quit = true; // MOUSE EVENTS if(event.type == sf::Event::MouseButtonPressed) { //LEFT MOUSE BUTTON if(event.mouseButton.button == sf::Mouse::Left) { for(int i = 0; i < int(buttons.size()); i++) { if(buttons[i]->mouseIn()) { switch(i) { case 0: N_MODE = SIMPLEX; break; case 1: N_MODE = PERLIN; break; case 2: if(terrainmode) terrainmode = false; else terrainmode = true; break; case 3: exportToTXT(); break; case 4: exportToIMAGE(); break; case 5: randomPosition(); break; case 6: /* defaultSettings(); updateSliders(NULL); refresh = true; */ reloadDefaultSettings(); break; default: break; } refresh = true; } } } else if(event.mouseButton.button == sf::Mouse::Right) { sf::Vector2i m_pos = sf::Mouse::getPosition(*screen); if(m_pos.x >= 0 && m_pos.x <= mapTexture->getSize().x && m_pos.y >= 0 && m_pos.y <= mapTexture->getSize().y) { mapDrag = true; mapDragOffset = m_pos; refresh = true; } } } // KEYBOARD EVENTS if(event.type == sf::Event::KeyPressed) { //escape to quit if(event.key.code == sf::Keyboard::Escape) { quit = true; } else if(event.key.code == sf::Keyboard::Q) { /* defaultSettings(); std::cout << "loaded default settings\n"; initTerrainSlider(); // memory leak? std::cout << "initialized terrain slider\n"; updateSliders(NULL); std::cout << "updated sliders\n"; */ reloadDefaultSettings(); refresh = true; } else if(event.key.code == sf::Keyboard::F1) { segment newseg; newseg.value = 254; newseg.red = rand()%256; newseg.green = rand()%256; newseg.blue = rand()%256; terSlider->addSegment(&newseg); } else if(event.key.code == sf::Keyboard::F5) { xpos = 10; ypos = 10; refresh = true; } else if(event.key.code == sf::Keyboard::W) {ypos = ypos - IMAGE_SIZE/2; refresh = true;} else if(event.key.code == sf::Keyboard::S) {ypos = ypos + IMAGE_SIZE/2; refresh = true;} else if(event.key.code == sf::Keyboard::A) {xpos = xpos - IMAGE_SIZE/2; refresh = true;} else if(event.key.code == sf::Keyboard::D) {xpos = xpos + IMAGE_SIZE/2; refresh = true;} } } //draw screen screen->display(); } //save settings after mainloop quit saveSettings(); }