/* * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * */ #include "OE_interfaceDisplay.h" #include "OE_utils.h" #include "OE_controller.h" #include #include #include #include #include #include #include OE_interfaceDisplay::OE_interfaceDisplay() { editDisplay = new OE_editDisplay(); commandDisplay = new OE_commandDisplay(); curDisplay = editDisplay; } OE_interfaceDisplay::OE_interfaceDisplay(OE_document document) { editDisplay = new OE_editDisplay(); editDisplay->setDocument(&document); commandDisplay = new OE_commandDisplay(); commandDisplay->setDocument(&document); curDisplay = editDisplay; } OE_interfaceDisplay::~OE_interfaceDisplay() { delete editDisplay; delete commandDisplay; } bool OE_interfaceDisplay::setDocument(OE_document * document) { this->document = document; if(document) { editDisplay->setDocument(document); commandDisplay->setDocument(document); } return true; } bool OE_interfaceDisplay::setController(OE_controller* controller) { this->controller = controller; if(controller) { if (editDisplay) editDisplay->setController(controller); if (commandDisplay) commandDisplay->setController(controller); } return true; } void OE_interfaceDisplay::showAll() { if (curDisplay) curDisplay->showAll(); } void OE_interfaceDisplay::mouse_Pos(double x, double y) { if (curDisplay) curDisplay->mouse_Pos(x, y); } void OE_interfaceDisplay::mouse_Button(int button, int action, int mods) { if (curDisplay) curDisplay->mouse_Button(button, action, mods); } void OE_interfaceDisplay::scroll(double xoffset, double yoffset) { if (curDisplay) curDisplay->scroll(xoffset, yoffset); } void OE_interfaceDisplay::resize(int width, int height) { if (curDisplay) curDisplay->resize(width, height); } void OE_interfaceDisplay::key(int key, int scancode, int action, int mods) { if((action == GLFW_PRESS)&&(curDisplay == editDisplay)) { if ((key == GLFW_KEY_Z)&&(mods == GLFW_MOD_CONTROL)) { if (controller) controller->undoAction(); } if ((key == GLFW_KEY_Z)&&(mods == GLFW_MOD_CONTROL+GLFW_MOD_SHIFT)) { if (controller) controller->redoAction(); } } if((action == GLFW_RELEASE)&&(key == GLFW_KEY_F5)) { if(curDisplay == editDisplay) { if (controller) controller->generateInstructions(); curDisplay = commandDisplay; } else curDisplay = editDisplay; } std::cout<"coin1"; curDisplay->key( key, scancode, action, mods); } /** \brief draw the document on screen * * \return true if all is ok * */ bool OE_interfaceDisplay::draw() { draw(false); } /** \brief draw the document on screen * * \return true if all is ok * */ bool OE_interfaceDisplay::draw(bool select) { float wzoom, hzoom; glViewport(0, 0, width, height); glClearColor(220.0f/255.0f, 220.0f/255.0f, 220.0f/255.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); wzoom = (float)width*zoom; hzoom = (float)height*zoom; glEnd(); glOrtho(cx-wzoom, cx+wzoom, cy+hzoom, cy-hzoom, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_DEPTH_TEST); glColor4ub(255,255,255,255); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); if (document) { if (curDisplay) curDisplay->draw(); } return true; }