From b09e657ecc2f20e66e688d77075102434c2fb22e Mon Sep 17 00:00:00 2001 From: stojce Date: Sun, 27 Oct 2013 09:57:00 +0100 Subject: [PATCH] click mirror behaviour - shrink function - restore mirror window view and set forward fullscreen view --- interface/src/Application.cpp | 24 +++++- interface/src/Application.h | 1 + interface/src/ui/RearMirrorTools.cpp | 122 +++++++++++++-------------- interface/src/ui/RearMirrorTools.h | 10 ++- 4 files changed, 87 insertions(+), 70 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 850b7dbeaf..36ffa179bb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -453,12 +453,14 @@ void Application::paintGL() { displaySide(_mirrorCamera, selfAvatarOnly); glPopMatrix(); - _rearMirrorTools->render(); + _rearMirrorTools->render(false); // reset Viewport and projection matrix glViewport(0, 0, _glWidget->width(), _glWidget->height()); glDisable(GL_SCISSOR_TEST); updateProjectionMatrix(_myCamera, updateViewFrustum); + } else if (Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) { + _rearMirrorTools->render(true); } displayOverlay(); @@ -1721,19 +1723,35 @@ void Application::init() { _rearMirrorTools = new RearMirrorTools(_glWidget, _mirrorViewRect); connect(_rearMirrorTools, SIGNAL(closeView()), SLOT(closeMirrorView())); connect(_rearMirrorTools, SIGNAL(restoreView()), SLOT(restoreMirrorView())); + connect(_rearMirrorTools, SIGNAL(shrinkView()), SLOT(shrinkMirrorView())); } void Application::closeMirrorView() { - Menu::getInstance()->triggerOption(MenuOption::Mirror); + if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) { + Menu::getInstance()->triggerOption(MenuOption::Mirror);; + } } void Application::restoreMirrorView() { - Menu::getInstance()->triggerOption(MenuOption::Mirror); + if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) { + Menu::getInstance()->triggerOption(MenuOption::Mirror);; + } + if (!Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) { Menu::getInstance()->triggerOption(MenuOption::FullscreenMirror); } } +void Application::shrinkMirrorView() { + if (!Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) { + Menu::getInstance()->triggerOption(MenuOption::Mirror);; + } + + if (Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) { + Menu::getInstance()->triggerOption(MenuOption::FullscreenMirror); + } +} + const float MAX_AVATAR_EDIT_VELOCITY = 1.0f; const float MAX_VOXEL_EDIT_DISTANCE = 20.0f; const float HEAD_SPHERE_RADIUS = 0.07; diff --git a/interface/src/Application.h b/interface/src/Application.h index 8901ff02be..50ea7aa9e0 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -200,6 +200,7 @@ private slots: void closeMirrorView(); void restoreMirrorView(); + void shrinkMirrorView(); private: void resetCamerasOnResizeGL(Camera& camera, int width, int height); diff --git a/interface/src/ui/RearMirrorTools.cpp b/interface/src/ui/RearMirrorTools.cpp index a12eb25c54..cc18a40e12 100644 --- a/interface/src/ui/RearMirrorTools.cpp +++ b/interface/src/ui/RearMirrorTools.cpp @@ -9,92 +9,88 @@ #include #include -const int MIRROR_ICON_SIZE = 16; -const int MIRROR_ICON_PADDING = 5; +const int ICON_SIZE = 16; +const int ICON_PADDING = 5; -RearMirrorTools::RearMirrorTools(QGLWidget* parent, QRect& bounds) : _parent(parent), _bounds(bounds), _visible(false) { +RearMirrorTools::RearMirrorTools(QGLWidget* parent, QRect& bounds) : _parent(parent), _bounds(bounds), _windowed(false), _fullScreen(false) { switchToResourcesParentIfRequired(); _closeTextureId = _parent->bindTexture(QImage("./resources/images/close.png")); - _restoreTextureId = _parent->bindTexture(QImage("./resources/images/close.png")); + _shrinkTextureId = _parent->bindTexture(QImage("./resources/images/close.png")); }; -void RearMirrorTools::render() { - // render rear view tools if mouse is in the bounds - QPoint mousePosition = _parent->mapFromGlobal(QCursor::pos()); - _visible = _bounds.contains(mousePosition.x(), mousePosition.y()); - if (_visible) { - displayTools(); +void RearMirrorTools::render(bool fullScreen) { + if (fullScreen) { + _fullScreen = true; + displayIcon(_parent->geometry(), ICON_PADDING, ICON_PADDING, _shrinkTextureId); + } else { + // render rear view tools if mouse is in the bounds + QPoint mousePosition = _parent->mapFromGlobal(QCursor::pos()); + _windowed = _bounds.contains(mousePosition.x(), mousePosition.y()); + if (_windowed) { + displayIcon(_bounds, _bounds.left() + ICON_PADDING, ICON_PADDING, _closeTextureId); + } } } bool RearMirrorTools::mousePressEvent(int x, int y) { - QRect closeIconRect = QRect(MIRROR_ICON_PADDING + _bounds.left(), MIRROR_ICON_PADDING + _bounds.top(), MIRROR_ICON_SIZE, MIRROR_ICON_SIZE); - QRect restoreIconRect = QRect(_bounds.width() - _bounds.left() - MIRROR_ICON_PADDING, MIRROR_ICON_PADDING + _bounds.top(), MIRROR_ICON_SIZE, MIRROR_ICON_SIZE); - - if (closeIconRect.contains(x, y)) { - emit closeView(); - return true; + if (_windowed) { + QRect closeIconRect = QRect(ICON_PADDING + _bounds.left(), ICON_PADDING + _bounds.top(), ICON_SIZE, ICON_SIZE); + if (closeIconRect.contains(x, y)) { + _windowed = false; + emit closeView(); + return true; + } + + if (_bounds.contains(x, y)) { + _windowed = false; + emit restoreView(); + return true; + } } - if (restoreIconRect.contains(x, y)) { - emit restoreView(); - return true; + if (_fullScreen) { + QRect shrinkIconRect = QRect(ICON_PADDING, ICON_PADDING, ICON_SIZE, ICON_SIZE); + if (shrinkIconRect.contains(x, y)) { + _fullScreen = false; + emit shrinkView(); + return true; + } } - return false; } -void RearMirrorTools::displayTools() { - int closeLeft = MIRROR_ICON_PADDING + _bounds.left(); - int resoreLeft = _bounds.width() - _bounds.left() - MIRROR_ICON_PADDING; - - int iconTop = MIRROR_ICON_PADDING + _bounds.top(); - int twp = MIRROR_ICON_SIZE + iconTop; +void RearMirrorTools::displayIcon(QRect bounds, int left, int top, GLuint textureId) { + int twp = ICON_SIZE + top; + glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); - gluOrtho2D(_bounds.left(), _bounds.right(), _bounds.bottom(), _bounds.top()); + + gluOrtho2D(bounds.left(), bounds.right(), bounds.bottom(), bounds.top()); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); - - glColor3f(1, 1, 1); - - glBindTexture(GL_TEXTURE_2D, _closeTextureId); - glBegin(GL_QUADS); - { - glTexCoord2f(1, 1); - glVertex2f(closeLeft, iconTop); - - glTexCoord2f(0, 1); - glVertex2f(MIRROR_ICON_SIZE + closeLeft, iconTop); - - glTexCoord2f(0, 0); - glVertex2f(MIRROR_ICON_SIZE + closeLeft, twp); - - glTexCoord2f(1, 0); - glVertex2f(closeLeft, twp); - } - glEnd(); - - glBindTexture(GL_TEXTURE_2D, _restoreTextureId); - glBegin(GL_QUADS); - { - glTexCoord2f(1, 1); - glVertex2f(resoreLeft, iconTop); - - glTexCoord2f(0, 1); - glVertex2f(MIRROR_ICON_SIZE + resoreLeft, iconTop); - - glTexCoord2f(0, 0); - glVertex2f(MIRROR_ICON_SIZE + resoreLeft, twp); - - glTexCoord2f(1, 0); - glVertex2f(resoreLeft, twp); - } - glEnd(); + glColor3f(1, 1, 1); + + glBindTexture(GL_TEXTURE_2D, textureId); + glBegin(GL_QUADS); + { + glTexCoord2f(0, 0); + glVertex2f(left, top); + + glTexCoord2f(1, 0); + glVertex2f(ICON_SIZE + left, top); + + glTexCoord2f(1, 1); + glVertex2f(ICON_SIZE + left, twp); + + glTexCoord2f(0, 1); + glVertex2f(left, twp); + } + glEnd(); glPopMatrix(); + glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); } diff --git a/interface/src/ui/RearMirrorTools.h b/interface/src/ui/RearMirrorTools.h index a7e6cdc678..77c8b88f3a 100644 --- a/interface/src/ui/RearMirrorTools.h +++ b/interface/src/ui/RearMirrorTools.h @@ -17,21 +17,23 @@ class RearMirrorTools : public QObject { Q_OBJECT public: RearMirrorTools(QGLWidget* parent, QRect& bounds); - void render(); + void render(bool fullScreen); bool mousePressEvent(int x, int y); signals: void closeView(); + void shrinkView(); void restoreView(); private: QGLWidget* _parent; QRect _bounds; GLuint _closeTextureId; - GLuint _restoreTextureId; - bool _visible; + GLuint _shrinkTextureId; + bool _windowed; + bool _fullScreen; - void displayTools(); + void displayIcon(QRect bounds, int left, int top, GLuint textureId); }; #endif /* defined(__hifi__RearMirrorTools__) */