mirror of
https://github.com/overte-org/overte.git
synced 2025-04-17 09:16:53 +02:00
click mirror behaviour
- shrink function - restore mirror window view and set forward fullscreen view
This commit is contained in:
parent
f675b198cb
commit
b09e657ecc
4 changed files with 87 additions and 70 deletions
|
@ -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;
|
||||
|
|
|
@ -200,6 +200,7 @@ private slots:
|
|||
|
||||
void closeMirrorView();
|
||||
void restoreMirrorView();
|
||||
void shrinkMirrorView();
|
||||
|
||||
private:
|
||||
void resetCamerasOnResizeGL(Camera& camera, int width, int height);
|
||||
|
|
|
@ -9,92 +9,88 @@
|
|||
#include <SharedUtil.h>
|
||||
#include <QMouseEvent>
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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__) */
|
||||
|
|
Loading…
Reference in a new issue