diff options
Diffstat (limited to 'indra/newview/lljoystickbutton.cpp')
-rw-r--r-- | indra/newview/lljoystickbutton.cpp | 964 |
1 files changed, 482 insertions, 482 deletions
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp index 79fafade2d..70a8020d78 100644 --- a/indra/newview/lljoystickbutton.cpp +++ b/indra/newview/lljoystickbutton.cpp @@ -1,25 +1,25 @@ -/** +/** * @file lljoystickbutton.cpp * @brief LLJoystick class implementation * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -52,7 +52,7 @@ static LLDefaultChildRegistry::Register<LLJoystickCameraTrack> r5("joystick_trac static LLDefaultChildRegistry::Register<LLJoystickQuaternion> r6("joystick_quat"); -const F32 NUDGE_TIME = 0.25f; // in seconds +const F32 NUDGE_TIME = 0.25f; // in seconds const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed const S32 CENTER_DOT_RADIUS = 7; @@ -62,222 +62,222 @@ const S32 CENTER_DOT_RADIUS = 7; // void QuadrantNames::declareValues() { - declare("origin", JQ_ORIGIN); - declare("up", JQ_UP); - declare("down", JQ_DOWN); - declare("left", JQ_LEFT); - declare("right", JQ_RIGHT); + declare("origin", JQ_ORIGIN); + declare("up", JQ_UP); + declare("down", JQ_DOWN); + declare("left", JQ_LEFT); + declare("right", JQ_RIGHT); } LLJoystick::LLJoystick(const LLJoystick::Params& p) -: LLButton(p), - mInitialOffset(0, 0), - mLastMouse(0, 0), - mFirstMouse(0, 0), - mVertSlopNear(0), - mVertSlopFar(0), - mHorizSlopNear(0), - mHorizSlopFar(0), - mHeldDown(FALSE), - mHeldDownTimer(), - mInitialQuadrant(p.quadrant) +: LLButton(p), + mInitialOffset(0, 0), + mLastMouse(0, 0), + mFirstMouse(0, 0), + mVertSlopNear(0), + mVertSlopFar(0), + mHorizSlopNear(0), + mHorizSlopFar(0), + mHeldDown(FALSE), + mHeldDownTimer(), + mInitialQuadrant(p.quadrant) { - setHeldDownCallback(&LLJoystick::onBtnHeldDown, this); + setHeldDownCallback(&LLJoystick::onBtnHeldDown, this); } void LLJoystick::updateSlop() { - mVertSlopNear = getRect().getHeight(); - mVertSlopFar = getRect().getHeight() * 2; - - mHorizSlopNear = getRect().getWidth(); - mHorizSlopFar = getRect().getWidth() * 2; - - // Compute initial mouse offset based on initial quadrant. - // Place the mouse evenly between the near and far zones. - switch (mInitialQuadrant) - { - case JQ_ORIGIN: - mInitialOffset.set(0, 0); - break; - - case JQ_UP: - mInitialOffset.mX = 0; - mInitialOffset.mY = (mVertSlopNear + mVertSlopFar) / 2; - break; - - case JQ_DOWN: - mInitialOffset.mX = 0; - mInitialOffset.mY = - (mVertSlopNear + mVertSlopFar) / 2; - break; - - case JQ_LEFT: - mInitialOffset.mX = - (mHorizSlopNear + mHorizSlopFar) / 2; - mInitialOffset.mY = 0; - break; - - case JQ_RIGHT: - mInitialOffset.mX = (mHorizSlopNear + mHorizSlopFar) / 2; - mInitialOffset.mY = 0; - break; - - default: - LL_ERRS() << "LLJoystick::LLJoystick() - bad switch case" << LL_ENDL; - break; - } - - return; -} - -bool LLJoystick::pointInCircle(S32 x, S32 y) const -{ - if(this->getLocalRect().getHeight() != this->getLocalRect().getWidth()) - { - LL_WARNS() << "Joystick shape is not square"<<LL_ENDL; - return true; - } - //center is x and y coordinates of center of joystick circle, and also its radius - int center = this->getLocalRect().getHeight()/2; - bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center; - - return in_circle; + mVertSlopNear = getRect().getHeight(); + mVertSlopFar = getRect().getHeight() * 2; + + mHorizSlopNear = getRect().getWidth(); + mHorizSlopFar = getRect().getWidth() * 2; + + // Compute initial mouse offset based on initial quadrant. + // Place the mouse evenly between the near and far zones. + switch (mInitialQuadrant) + { + case JQ_ORIGIN: + mInitialOffset.set(0, 0); + break; + + case JQ_UP: + mInitialOffset.mX = 0; + mInitialOffset.mY = (mVertSlopNear + mVertSlopFar) / 2; + break; + + case JQ_DOWN: + mInitialOffset.mX = 0; + mInitialOffset.mY = - (mVertSlopNear + mVertSlopFar) / 2; + break; + + case JQ_LEFT: + mInitialOffset.mX = - (mHorizSlopNear + mHorizSlopFar) / 2; + mInitialOffset.mY = 0; + break; + + case JQ_RIGHT: + mInitialOffset.mX = (mHorizSlopNear + mHorizSlopFar) / 2; + mInitialOffset.mY = 0; + break; + + default: + LL_ERRS() << "LLJoystick::LLJoystick() - bad switch case" << LL_ENDL; + break; + } + + return; +} + +bool LLJoystick::pointInCircle(S32 x, S32 y) const +{ + if(this->getLocalRect().getHeight() != this->getLocalRect().getWidth()) + { + LL_WARNS() << "Joystick shape is not square"<<LL_ENDL; + return true; + } + //center is x and y coordinates of center of joystick circle, and also its radius + int center = this->getLocalRect().getHeight()/2; + bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center; + + return in_circle; } bool LLJoystick::pointInCenterDot(S32 x, S32 y, S32 radius) const { - if (this->getLocalRect().getHeight() != this->getLocalRect().getWidth()) - { - LL_WARNS() << "Joystick shape is not square" << LL_ENDL; - return true; - } + if (this->getLocalRect().getHeight() != this->getLocalRect().getWidth()) + { + LL_WARNS() << "Joystick shape is not square" << LL_ENDL; + return true; + } - S32 center = this->getLocalRect().getHeight() / 2; + S32 center = this->getLocalRect().getHeight() / 2; - bool in_center_circle = (x - center) * (x - center) + (y - center) * (y - center) <= radius * radius; + bool in_center_circle = (x - center) * (x - center) + (y - center) * (y - center) <= radius * radius; - return in_center_circle; + return in_center_circle; } BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask) { - //LL_INFOS() << "joystick mouse down " << x << ", " << y << LL_ENDL; - bool handles = false; + //LL_INFOS() << "joystick mouse down " << x << ", " << y << LL_ENDL; + bool handles = false; - if(pointInCircle(x, y)) - { - mLastMouse.set(x, y); - mFirstMouse.set(x, y); - mMouseDownTimer.reset(); - handles = LLButton::handleMouseDown(x, y, mask); - } + if(pointInCircle(x, y)) + { + mLastMouse.set(x, y); + mFirstMouse.set(x, y); + mMouseDownTimer.reset(); + handles = LLButton::handleMouseDown(x, y, mask); + } - return handles; + return handles; } BOOL LLJoystick::handleMouseUp(S32 x, S32 y, MASK mask) { - // LL_INFOS() << "joystick mouse up " << x << ", " << y << LL_ENDL; + // LL_INFOS() << "joystick mouse up " << x << ", " << y << LL_ENDL; - if( hasMouseCapture() ) - { - mLastMouse.set(x, y); - mHeldDown = FALSE; - onMouseUp(); - } + if( hasMouseCapture() ) + { + mLastMouse.set(x, y); + mHeldDown = FALSE; + onMouseUp(); + } - return LLButton::handleMouseUp(x, y, mask); + return LLButton::handleMouseUp(x, y, mask); } BOOL LLJoystick::handleHover(S32 x, S32 y, MASK mask) { - if( hasMouseCapture() ) - { - mLastMouse.set(x, y); - } + if( hasMouseCapture() ) + { + mLastMouse.set(x, y); + } - return LLButton::handleHover(x, y, mask); + return LLButton::handleHover(x, y, mask); } F32 LLJoystick::getElapsedHeldDownTime() { - if( mHeldDown ) - { - return getHeldDownTime(); - } - else - { - return 0.f; - } + if( mHeldDown ) + { + return getHeldDownTime(); + } + else + { + return 0.f; + } } // static void LLJoystick::onBtnHeldDown(void *userdata) { - LLJoystick *self = (LLJoystick *)userdata; - if (self) - { - self->mHeldDown = TRUE; - self->onHeldDown(); - } + LLJoystick *self = (LLJoystick *)userdata; + if (self) + { + self->mHeldDown = TRUE; + self->onHeldDown(); + } } EJoystickQuadrant LLJoystick::selectQuadrant(LLXMLNodePtr node) { - - EJoystickQuadrant quadrant = JQ_RIGHT; - if (node->hasAttribute("quadrant")) - { - std::string quadrant_name; - node->getAttributeString("quadrant", quadrant_name); + EJoystickQuadrant quadrant = JQ_RIGHT; + + if (node->hasAttribute("quadrant")) + { + std::string quadrant_name; + node->getAttributeString("quadrant", quadrant_name); - quadrant = quadrantFromName(quadrant_name); - } - return quadrant; + quadrant = quadrantFromName(quadrant_name); + } + return quadrant; } -std::string LLJoystick::nameFromQuadrant(EJoystickQuadrant quadrant) +std::string LLJoystick::nameFromQuadrant(EJoystickQuadrant quadrant) { - if (quadrant == JQ_ORIGIN) return std::string("origin"); - else if (quadrant == JQ_UP) return std::string("up"); - else if (quadrant == JQ_DOWN) return std::string("down"); - else if (quadrant == JQ_LEFT) return std::string("left"); - else if (quadrant == JQ_RIGHT) return std::string("right"); - else return std::string(); + if (quadrant == JQ_ORIGIN) return std::string("origin"); + else if (quadrant == JQ_UP) return std::string("up"); + else if (quadrant == JQ_DOWN) return std::string("down"); + else if (quadrant == JQ_LEFT) return std::string("left"); + else if (quadrant == JQ_RIGHT) return std::string("right"); + else return std::string(); } EJoystickQuadrant LLJoystick::quadrantFromName(const std::string& sQuadrant) { - EJoystickQuadrant quadrant = JQ_RIGHT; - - if (sQuadrant == "origin") - { - quadrant = JQ_ORIGIN; - } - else if (sQuadrant == "up") - { - quadrant = JQ_UP; - } - else if (sQuadrant == "down") - { - quadrant = JQ_DOWN; - } - else if (sQuadrant == "left") - { - quadrant = JQ_LEFT; - } - else if (sQuadrant == "right") - { - quadrant = JQ_RIGHT; - } - - return quadrant; + EJoystickQuadrant quadrant = JQ_RIGHT; + + if (sQuadrant == "origin") + { + quadrant = JQ_ORIGIN; + } + else if (sQuadrant == "up") + { + quadrant = JQ_UP; + } + else if (sQuadrant == "down") + { + quadrant = JQ_DOWN; + } + else if (sQuadrant == "left") + { + quadrant = JQ_LEFT; + } + else if (sQuadrant == "right") + { + quadrant = JQ_RIGHT; + } + + return quadrant; } @@ -287,62 +287,62 @@ EJoystickQuadrant LLJoystick::quadrantFromName(const std::string& sQuadrant) void LLJoystickAgentTurn::onHeldDown() { - F32 time = getElapsedHeldDownTime(); - updateSlop(); - - //LL_INFOS() << "move forward/backward (and/or turn)" << LL_ENDL; - - S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; - S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; - - float m = (float) (dx)/abs(dy); - - if (m > 1) { - m = 1; - } - else if (m < -1) { - m = -1; - } - gAgent.moveYaw(-LLFloaterMove::getYawRate(time)*m); - - - // handle forward/back movement - if (dy > mVertSlopFar) - { - // ...if mouse is forward of run region run forward - gAgent.moveAt(1); - } - else if (dy > mVertSlopNear) - { - if( time < NUDGE_TIME ) - { - gAgent.moveAtNudge(1); - } - else - { - // ...else if mouse is forward of walk region walk forward - // JC 9/5/2002 - Always run / move quickly. - gAgent.moveAt(1); - } - } - else if (dy < -mVertSlopFar) - { - // ...else if mouse is behind run region run backward - gAgent.moveAt(-1); - } - else if (dy < -mVertSlopNear) - { - if( time < NUDGE_TIME ) - { - gAgent.moveAtNudge(-1); - } - else - { - // ...else if mouse is behind walk region walk backward - // JC 9/5/2002 - Always run / move quickly. - gAgent.moveAt(-1); - } - } + F32 time = getElapsedHeldDownTime(); + updateSlop(); + + //LL_INFOS() << "move forward/backward (and/or turn)" << LL_ENDL; + + S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; + S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; + + float m = (float) (dx)/abs(dy); + + if (m > 1) { + m = 1; + } + else if (m < -1) { + m = -1; + } + gAgent.moveYaw(-LLFloaterMove::getYawRate(time)*m); + + + // handle forward/back movement + if (dy > mVertSlopFar) + { + // ...if mouse is forward of run region run forward + gAgent.moveAt(1); + } + else if (dy > mVertSlopNear) + { + if( time < NUDGE_TIME ) + { + gAgent.moveAtNudge(1); + } + else + { + // ...else if mouse is forward of walk region walk forward + // JC 9/5/2002 - Always run / move quickly. + gAgent.moveAt(1); + } + } + else if (dy < -mVertSlopFar) + { + // ...else if mouse is behind run region run backward + gAgent.moveAt(-1); + } + else if (dy < -mVertSlopNear) + { + if( time < NUDGE_TIME ) + { + gAgent.moveAtNudge(-1); + } + else + { + // ...else if mouse is behind walk region walk backward + // JC 9/5/2002 - Always run / move quickly. + gAgent.moveAt(-1); + } + } } //------------------------------------------------------------------------------- @@ -351,65 +351,65 @@ void LLJoystickAgentTurn::onHeldDown() void LLJoystickAgentSlide::onMouseUp() { - F32 time = getElapsedHeldDownTime(); - if( time < NUDGE_TIME ) - { - switch (mInitialQuadrant) - { - case JQ_LEFT: - gAgent.moveLeftNudge(1); - break; - - case JQ_RIGHT: - gAgent.moveLeftNudge(-1); - break; - - default: - break; - } - } + F32 time = getElapsedHeldDownTime(); + if( time < NUDGE_TIME ) + { + switch (mInitialQuadrant) + { + case JQ_LEFT: + gAgent.moveLeftNudge(1); + break; + + case JQ_RIGHT: + gAgent.moveLeftNudge(-1); + break; + + default: + break; + } + } } void LLJoystickAgentSlide::onHeldDown() { - //LL_INFOS() << "slide left/right (and/or move forward/backward)" << LL_ENDL; - - updateSlop(); - - S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; - S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; - - // handle left-right sliding - if (dx > mHorizSlopNear) - { - gAgent.moveLeft(-1); - } - else if (dx < -mHorizSlopNear) - { - gAgent.moveLeft(1); - } - - // handle forward/back movement - if (dy > mVertSlopFar) - { - // ...if mouse is forward of run region run forward - gAgent.moveAt(1); - } - else if (dy > mVertSlopNear) - { - // ...else if mouse is forward of walk region walk forward - gAgent.moveAtNudge(1); - } - else if (dy < -mVertSlopFar) - { - // ...else if mouse is behind run region run backward - gAgent.moveAt(-1); - } - else if (dy < -mVertSlopNear) - { - // ...else if mouse is behind walk region walk backward - gAgent.moveAtNudge(-1); - } + //LL_INFOS() << "slide left/right (and/or move forward/backward)" << LL_ENDL; + + updateSlop(); + + S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; + S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; + + // handle left-right sliding + if (dx > mHorizSlopNear) + { + gAgent.moveLeft(-1); + } + else if (dx < -mHorizSlopNear) + { + gAgent.moveLeft(1); + } + + // handle forward/back movement + if (dy > mVertSlopFar) + { + // ...if mouse is forward of run region run forward + gAgent.moveAt(1); + } + else if (dy > mVertSlopNear) + { + // ...else if mouse is forward of walk region walk forward + gAgent.moveAtNudge(1); + } + else if (dy < -mVertSlopFar) + { + // ...else if mouse is behind run region run backward + gAgent.moveAt(-1); + } + else if (dy < -mVertSlopNear) + { + // ...else if mouse is behind walk region walk backward + gAgent.moveAtNudge(-1); + } } @@ -418,240 +418,240 @@ void LLJoystickAgentSlide::onHeldDown() //------------------------------------------------------------------------------- LLJoystickCameraRotate::LLJoystickCameraRotate(const LLJoystickCameraRotate::Params& p) -: LLJoystick(p), - mInLeft( FALSE ), - mInTop( FALSE ), - mInRight( FALSE ), - mInBottom( FALSE ), - mInCenter( FALSE ) -{ - mCenterImageName = "Cam_Rotate_Center"; +: LLJoystick(p), + mInLeft( FALSE ), + mInTop( FALSE ), + mInRight( FALSE ), + mInBottom( FALSE ), + mInCenter( FALSE ) +{ + mCenterImageName = "Cam_Rotate_Center"; } void LLJoystickCameraRotate::updateSlop() { - // do the initial offset calculation based on mousedown location + // do the initial offset calculation based on mousedown location - // small fixed slop region - mVertSlopNear = 16; - mVertSlopFar = 32; + // small fixed slop region + mVertSlopNear = 16; + mVertSlopFar = 32; - mHorizSlopNear = 16; - mHorizSlopFar = 32; + mHorizSlopNear = 16; + mHorizSlopFar = 32; - return; + return; } BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask) { - gAgent.setMovementLocked(TRUE); - updateSlop(); - - // Set initial offset based on initial click location - S32 horiz_center = getRect().getWidth() / 2; - S32 vert_center = getRect().getHeight() / 2; - - S32 dx = x - horiz_center; - S32 dy = y - vert_center; - - if (pointInCenterDot(x, y, CENTER_DOT_RADIUS)) - { - mInitialOffset.mX = 0; - mInitialOffset.mY = 0; - mInitialQuadrant = JQ_ORIGIN; - mInCenter = TRUE; - - resetJoystickCamera(); - } - else if (dy > dx && dy > -dx) - { - // top - mInitialOffset.mX = 0; - mInitialOffset.mY = (mVertSlopNear + mVertSlopFar) / 2; - mInitialQuadrant = JQ_UP; - } - else if (dy > dx && dy <= -dx) - { - // left - mInitialOffset.mX = - (mHorizSlopNear + mHorizSlopFar) / 2; - mInitialOffset.mY = 0; - mInitialQuadrant = JQ_LEFT; - } - else if (dy <= dx && dy <= -dx) - { - // bottom - mInitialOffset.mX = 0; - mInitialOffset.mY = - (mVertSlopNear + mVertSlopFar) / 2; - mInitialQuadrant = JQ_DOWN; - } - else - { - // right - mInitialOffset.mX = (mHorizSlopNear + mHorizSlopFar) / 2; - mInitialOffset.mY = 0; - mInitialQuadrant = JQ_RIGHT; - } - - return LLJoystick::handleMouseDown(x, y, mask); + gAgent.setMovementLocked(TRUE); + updateSlop(); + + // Set initial offset based on initial click location + S32 horiz_center = getRect().getWidth() / 2; + S32 vert_center = getRect().getHeight() / 2; + + S32 dx = x - horiz_center; + S32 dy = y - vert_center; + + if (pointInCenterDot(x, y, CENTER_DOT_RADIUS)) + { + mInitialOffset.mX = 0; + mInitialOffset.mY = 0; + mInitialQuadrant = JQ_ORIGIN; + mInCenter = TRUE; + + resetJoystickCamera(); + } + else if (dy > dx && dy > -dx) + { + // top + mInitialOffset.mX = 0; + mInitialOffset.mY = (mVertSlopNear + mVertSlopFar) / 2; + mInitialQuadrant = JQ_UP; + } + else if (dy > dx && dy <= -dx) + { + // left + mInitialOffset.mX = - (mHorizSlopNear + mHorizSlopFar) / 2; + mInitialOffset.mY = 0; + mInitialQuadrant = JQ_LEFT; + } + else if (dy <= dx && dy <= -dx) + { + // bottom + mInitialOffset.mX = 0; + mInitialOffset.mY = - (mVertSlopNear + mVertSlopFar) / 2; + mInitialQuadrant = JQ_DOWN; + } + else + { + // right + mInitialOffset.mX = (mHorizSlopNear + mHorizSlopFar) / 2; + mInitialOffset.mY = 0; + mInitialQuadrant = JQ_RIGHT; + } + + return LLJoystick::handleMouseDown(x, y, mask); } BOOL LLJoystickCameraRotate::handleMouseUp(S32 x, S32 y, MASK mask) { - gAgent.setMovementLocked(FALSE); - mInCenter = FALSE; - return LLJoystick::handleMouseUp(x, y, mask); + gAgent.setMovementLocked(FALSE); + mInCenter = FALSE; + return LLJoystick::handleMouseUp(x, y, mask); } BOOL LLJoystickCameraRotate::handleHover(S32 x, S32 y, MASK mask) { - if (!pointInCenterDot(x, y, CENTER_DOT_RADIUS)) - { - mInCenter = FALSE; - } + if (!pointInCenterDot(x, y, CENTER_DOT_RADIUS)) + { + mInCenter = FALSE; + } - return LLJoystick::handleHover(x, y, mask); + return LLJoystick::handleHover(x, y, mask); } void LLJoystickCameraRotate::onHeldDown() { - updateSlop(); - - S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; - S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; - - // left-right rotation - if (dx > mHorizSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setOrbitLeftKey(getOrbitRate()); - } - else if (dx < -mHorizSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setOrbitRightKey(getOrbitRate()); - } - - // over/under rotation - if (dy > mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setOrbitUpKey(getOrbitRate()); - } - else if (dy < -mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setOrbitDownKey(getOrbitRate()); - } + updateSlop(); + + S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; + S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; + + // left-right rotation + if (dx > mHorizSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setOrbitLeftKey(getOrbitRate()); + } + else if (dx < -mHorizSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setOrbitRightKey(getOrbitRate()); + } + + // over/under rotation + if (dy > mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setOrbitUpKey(getOrbitRate()); + } + else if (dy < -mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setOrbitDownKey(getOrbitRate()); + } } void LLJoystickCameraRotate::resetJoystickCamera() { - gAgentCamera.resetCameraOrbit(); + gAgentCamera.resetCameraOrbit(); } F32 LLJoystickCameraRotate::getOrbitRate() { - F32 time = getElapsedHeldDownTime(); - if( time < NUDGE_TIME ) - { - F32 rate = ORBIT_NUDGE_RATE + time * (1 - ORBIT_NUDGE_RATE)/ NUDGE_TIME; - //LL_INFOS() << rate << LL_ENDL; - return rate; - } - else - { - return 1; - } + F32 time = getElapsedHeldDownTime(); + if( time < NUDGE_TIME ) + { + F32 rate = ORBIT_NUDGE_RATE + time * (1 - ORBIT_NUDGE_RATE)/ NUDGE_TIME; + //LL_INFOS() << rate << LL_ENDL; + return rate; + } + else + { + return 1; + } } // Only used for drawing void LLJoystickCameraRotate::setToggleState( BOOL left, BOOL top, BOOL right, BOOL bottom ) { - mInLeft = left; - mInTop = top; - mInRight = right; - mInBottom = bottom; + mInLeft = left; + mInTop = top; + mInRight = right; + mInBottom = bottom; } void LLJoystickCameraRotate::draw() { - LLGLSUIDefault gls_ui; - - getImageUnselected()->draw( 0, 0 ); - LLPointer<LLUIImage> image = getImageSelected(); - - if (mInCenter) - { - drawRotatedImage(LLUI::getUIImage(mCenterImageName), 0); - } - else - { - if (mInTop) - { - drawRotatedImage(getImageSelected(), 0); - } - - if (mInRight) - { - drawRotatedImage(getImageSelected(), 1); - } + LLGLSUIDefault gls_ui; - if (mInBottom) - { - drawRotatedImage(getImageSelected(), 2); - } + getImageUnselected()->draw( 0, 0 ); + LLPointer<LLUIImage> image = getImageSelected(); - if (mInLeft) - { - drawRotatedImage(getImageSelected(), 3); - } - } + if (mInCenter) + { + drawRotatedImage(LLUI::getUIImage(mCenterImageName), 0); + } + else + { + if (mInTop) + { + drawRotatedImage(getImageSelected(), 0); + } + + if (mInRight) + { + drawRotatedImage(getImageSelected(), 1); + } + + if (mInBottom) + { + drawRotatedImage(getImageSelected(), 2); + } + + if (mInLeft) + { + drawRotatedImage(getImageSelected(), 3); + } + } } // Draws image rotated by multiples of 90 degrees void LLJoystickCameraRotate::drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations ) { - S32 width = image->getWidth(); - S32 height = image->getHeight(); - LLTexture* texture = image->getImage(); + S32 width = image->getWidth(); + S32 height = image->getHeight(); + LLTexture* texture = image->getImage(); + + /* + * Scale texture coordinate system + * to handle the different between image size and size of texture. + * If we will use default matrix, + * it may break texture mapping after rotation. + * see EXT-2023 Camera floater: arrows became shifted when pressed. + */ + F32 uv[][2] = + { + { (F32)width/texture->getWidth(), (F32)height/texture->getHeight() }, + { 0.f, (F32)height/texture->getHeight() }, + { 0.f, 0.f }, + { (F32)width/texture->getWidth(), 0.f } + }; - /* - * Scale texture coordinate system - * to handle the different between image size and size of texture. - * If we will use default matrix, - * it may break texture mapping after rotation. - * see EXT-2023 Camera floater: arrows became shifted when pressed. - */ - F32 uv[][2] = - { - { (F32)width/texture->getWidth(), (F32)height/texture->getHeight() }, - { 0.f, (F32)height/texture->getHeight() }, - { 0.f, 0.f }, - { (F32)width/texture->getWidth(), 0.f } - }; + gGL.getTexUnit(0)->bind(texture); - gGL.getTexUnit(0)->bind(texture); + gGL.color4fv(UI_VERTEX_COLOR.mV); - gGL.color4fv(UI_VERTEX_COLOR.mV); - - gGL.begin(LLRender::QUADS); - { - gGL.texCoord2fv( uv[ (rotations + 0) % 4]); - gGL.vertex2i(width, height ); + gGL.begin(LLRender::QUADS); + { + gGL.texCoord2fv( uv[ (rotations + 0) % 4]); + gGL.vertex2i(width, height ); - gGL.texCoord2fv( uv[ (rotations + 1) % 4]); - gGL.vertex2i(0, height ); + gGL.texCoord2fv( uv[ (rotations + 1) % 4]); + gGL.vertex2i(0, height ); - gGL.texCoord2fv( uv[ (rotations + 2) % 4]); - gGL.vertex2i(0, 0); + gGL.texCoord2fv( uv[ (rotations + 2) % 4]); + gGL.vertex2i(0, 0); - gGL.texCoord2fv( uv[ (rotations + 3) % 4]); - gGL.vertex2i(width, 0); - } - gGL.end(); + gGL.texCoord2fv( uv[ (rotations + 3) % 4]); + gGL.vertex2i(width, 0); + } + gGL.end(); } @@ -662,50 +662,50 @@ void LLJoystickCameraRotate::drawRotatedImage( LLPointer<LLUIImage> image, S32 r LLJoystickCameraTrack::Params::Params() { - held_down_delay.seconds(0.0); + held_down_delay.seconds(0.0); } LLJoystickCameraTrack::LLJoystickCameraTrack(const LLJoystickCameraTrack::Params& p) -: LLJoystickCameraRotate(p) +: LLJoystickCameraRotate(p) { - mCenterImageName = "Cam_Tracking_Center"; + mCenterImageName = "Cam_Tracking_Center"; } void LLJoystickCameraTrack::onHeldDown() { - updateSlop(); - - S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; - S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; - - if (dx > mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setPanRightKey(getOrbitRate()); - } - else if (dx < -mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setPanLeftKey(getOrbitRate()); - } - - // over/under rotation - if (dy > mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setPanUpKey(getOrbitRate()); - } - else if (dy < -mVertSlopNear) - { - gAgentCamera.unlockView(); - gAgentCamera.setPanDownKey(getOrbitRate()); - } + updateSlop(); + + S32 dx = mLastMouse.mX - mFirstMouse.mX + mInitialOffset.mX; + S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY; + + if (dx > mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setPanRightKey(getOrbitRate()); + } + else if (dx < -mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setPanLeftKey(getOrbitRate()); + } + + // over/under rotation + if (dy > mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setPanUpKey(getOrbitRate()); + } + else if (dy < -mVertSlopNear) + { + gAgentCamera.unlockView(); + gAgentCamera.setPanDownKey(getOrbitRate()); + } } void LLJoystickCameraTrack::resetJoystickCamera() { - gAgentCamera.resetCameraPan(); + gAgentCamera.resetCameraPan(); } //------------------------------------------------------------------------------- @@ -827,7 +827,7 @@ void LLJoystickQuaternion::onHeldDown() axis.normalize(); LLQuaternion delta; - delta.setAngleAxis(0.0523599f, axis); // about 3deg + delta.setAngleAxis(0.0523599f, axis); // about 3deg mRotation *= delta; setValue(mRotation.getValue()); |