diff options
Diffstat (limited to 'indra/newview/lltoolgrab.h')
| -rw-r--r-- | indra/newview/lltoolgrab.h | 318 |
1 files changed, 159 insertions, 159 deletions
diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h index 99a67d45c8..36a8a0a3c5 100644 --- a/indra/newview/lltoolgrab.h +++ b/indra/newview/lltoolgrab.h @@ -1,159 +1,159 @@ -/** - * @file lltoolgrab.h - * @brief LLToolGrab class header file - * - * $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$ - */ - -#ifndef LL_TOOLGRAB_H -#define LL_TOOLGRAB_H - -#include "lltool.h" -#include "v3math.h" -#include "llquaternion.h" -#include "llsingleton.h" -#include "lluuid.h" -#include "llviewerwindow.h" // for LLPickInfo - -class LLView; -class LLTextBox; -class LLViewerObject; -class LLPickInfo; - - -// Message utilities -void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset); -void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick); - -const MASK DEFAULT_GRAB_MASK = MASK_CONTROL; - -/** - * LLToolGrabBase contains most of the semantics of LLToolGrab. It's just that - * LLToolGrab is an LLSingleton, but we also explicitly instantiate - * LLToolGrabBase as part of LLToolCompGun. You can't just make an extra - * instance of an LLSingleton! - */ -class LLToolGrabBase : public LLTool -{ -public: - LLToolGrabBase(LLToolComposite* composite=NULL); - ~LLToolGrabBase(); - - /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask); - /*virtual*/ bool handleMouseDown(S32 x, S32 y, MASK mask); - /*virtual*/ bool handleMouseUp(S32 x, S32 y, MASK mask); - /*virtual*/ bool handleDoubleClick(S32 x, S32 y, MASK mask); - /*virtual*/ void render(); // 3D elements - /*virtual*/ void draw(); // 2D elements - - virtual void handleSelect(); - virtual void handleDeselect(); - - virtual LLViewerObject* getEditingObject(); - virtual LLVector3d getEditingPointGlobal(); - virtual bool isEditing(); - virtual void stopEditing(); - - virtual void onMouseCaptureLost(); - - bool hasGrabOffset() { return true; } // HACK - LLVector3 getGrabOffset(S32 x, S32 y); // HACK - - // Capture the mouse and start grabbing. - bool handleObjectHit(const LLPickInfo& info); - - // Certain grabs should not highlight the "Build" toolbar button - bool getHideBuildHighlight() { return mHideBuildHighlight; } - - void setClickedInMouselook(bool is_clickedInMouselook) {mClickedInMouselook = is_clickedInMouselook;} - - static void pickCallback(const LLPickInfo& pick_info); -private: - LLVector3d getGrabPointGlobal(); - void startGrab(); - void stopGrab(); - - void startSpin(); - void stopSpin(); - - void handleHoverSpin(S32 x, S32 y, MASK mask); - void handleHoverActive(S32 x, S32 y, MASK mask); - void handleHoverNonPhysical(S32 x, S32 y, MASK mask); - void handleHoverInactive(S32 x, S32 y, MASK mask); - void handleHoverFailed(S32 x, S32 y, MASK mask); - -private: - enum EGrabMode { GRAB_INACTIVE, GRAB_ACTIVE_CENTER, GRAB_NONPHYSICAL, GRAB_LOCKED, GRAB_NOOBJECT }; - - EGrabMode mMode; - - bool mVerticalDragging; - - bool mHitLand; - - LLTimer mGrabTimer; // send simulator time between hover movements - - LLVector3 mGrabOffsetFromCenterInitial; // meters from CG of object - LLVector3d mGrabHiddenOffsetFromCamera; // in cursor hidden drag, how far is grab offset from camera - - LLVector3d mDragStartPointGlobal; // projected into world - LLVector3d mDragStartFromCamera; // drag start relative to camera - - LLPickInfo mGrabPick; - - S32 mLastMouseX; - S32 mLastMouseY; - S32 mAccumDeltaX; // since cursor hidden, how far have you moved? - S32 mAccumDeltaY; - bool mHasMoved; // has mouse moved off center at all? - bool mOutsideSlop; // has mouse moved outside center 5 pixels? - bool mDeselectedThisClick; - bool mValidSelection; - - S32 mLastFace; - LLVector2 mLastUVCoords; - LLVector2 mLastSTCoords; - LLVector3 mLastIntersection; - LLVector3 mLastNormal; - LLVector3 mLastBinormal; - LLVector3 mLastGrabPos; - - - bool mSpinGrabbing; - LLQuaternion mSpinRotation; - - bool mHideBuildHighlight; - - bool mClickedInMouselook; -}; - -/// This is the LLSingleton instance of LLToolGrab. -class LLToolGrab : public LLToolGrabBase, public LLSingleton<LLToolGrab> -{ - LLSINGLETON_EMPTY_CTOR(LLToolGrab); -}; - -extern bool gGrabBtnVertical; -extern bool gGrabBtnSpin; -extern LLTool* gGrabTransientTool; - -#endif // LL_TOOLGRAB_H +/**
+ * @file lltoolgrab.h
+ * @brief LLToolGrab class header file
+ *
+ * $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$
+ */
+
+#ifndef LL_TOOLGRAB_H
+#define LL_TOOLGRAB_H
+
+#include "lltool.h"
+#include "v3math.h"
+#include "llquaternion.h"
+#include "llsingleton.h"
+#include "lluuid.h"
+#include "llviewerwindow.h" // for LLPickInfo
+
+class LLView;
+class LLTextBox;
+class LLViewerObject;
+class LLPickInfo;
+
+
+// Message utilities
+void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset);
+void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick);
+
+const MASK DEFAULT_GRAB_MASK = MASK_CONTROL;
+
+/**
+ * LLToolGrabBase contains most of the semantics of LLToolGrab. It's just that
+ * LLToolGrab is an LLSingleton, but we also explicitly instantiate
+ * LLToolGrabBase as part of LLToolCompGun. You can't just make an extra
+ * instance of an LLSingleton!
+ */
+class LLToolGrabBase : public LLTool
+{
+public:
+ LLToolGrabBase(LLToolComposite* composite=NULL);
+ ~LLToolGrabBase();
+
+ /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask);
+ /*virtual*/ bool handleMouseDown(S32 x, S32 y, MASK mask);
+ /*virtual*/ bool handleMouseUp(S32 x, S32 y, MASK mask);
+ /*virtual*/ bool handleDoubleClick(S32 x, S32 y, MASK mask);
+ /*virtual*/ void render(); // 3D elements
+ /*virtual*/ void draw(); // 2D elements
+
+ virtual void handleSelect();
+ virtual void handleDeselect();
+
+ virtual LLViewerObject* getEditingObject();
+ virtual LLVector3d getEditingPointGlobal();
+ virtual bool isEditing();
+ virtual void stopEditing();
+
+ virtual void onMouseCaptureLost();
+
+ bool hasGrabOffset() { return true; } // HACK
+ LLVector3 getGrabOffset(S32 x, S32 y); // HACK
+
+ // Capture the mouse and start grabbing.
+ bool handleObjectHit(const LLPickInfo& info);
+
+ // Certain grabs should not highlight the "Build" toolbar button
+ bool getHideBuildHighlight() { return mHideBuildHighlight; }
+
+ void setClickedInMouselook(bool is_clickedInMouselook) {mClickedInMouselook = is_clickedInMouselook;}
+
+ static void pickCallback(const LLPickInfo& pick_info);
+private:
+ LLVector3d getGrabPointGlobal();
+ void startGrab();
+ void stopGrab();
+
+ void startSpin();
+ void stopSpin();
+
+ void handleHoverSpin(S32 x, S32 y, MASK mask);
+ void handleHoverActive(S32 x, S32 y, MASK mask);
+ void handleHoverNonPhysical(S32 x, S32 y, MASK mask);
+ void handleHoverInactive(S32 x, S32 y, MASK mask);
+ void handleHoverFailed(S32 x, S32 y, MASK mask);
+
+private:
+ enum EGrabMode { GRAB_INACTIVE, GRAB_ACTIVE_CENTER, GRAB_NONPHYSICAL, GRAB_LOCKED, GRAB_NOOBJECT };
+
+ EGrabMode mMode;
+
+ bool mVerticalDragging;
+
+ bool mHitLand;
+
+ LLTimer mGrabTimer; // send simulator time between hover movements
+
+ LLVector3 mGrabOffsetFromCenterInitial; // meters from CG of object
+ LLVector3d mGrabHiddenOffsetFromCamera; // in cursor hidden drag, how far is grab offset from camera
+
+ LLVector3d mDragStartPointGlobal; // projected into world
+ LLVector3d mDragStartFromCamera; // drag start relative to camera
+
+ LLPickInfo mGrabPick;
+
+ S32 mLastMouseX;
+ S32 mLastMouseY;
+ S32 mAccumDeltaX; // since cursor hidden, how far have you moved?
+ S32 mAccumDeltaY;
+ bool mHasMoved; // has mouse moved off center at all?
+ bool mOutsideSlop; // has mouse moved outside center 5 pixels?
+ bool mDeselectedThisClick;
+ bool mValidSelection;
+
+ S32 mLastFace;
+ LLVector2 mLastUVCoords;
+ LLVector2 mLastSTCoords;
+ LLVector3 mLastIntersection;
+ LLVector3 mLastNormal;
+ LLVector3 mLastBinormal;
+ LLVector3 mLastGrabPos;
+
+
+ bool mSpinGrabbing;
+ LLQuaternion mSpinRotation;
+
+ bool mHideBuildHighlight;
+
+ bool mClickedInMouselook;
+};
+
+/// This is the LLSingleton instance of LLToolGrab.
+class LLToolGrab : public LLToolGrabBase, public LLSingleton<LLToolGrab>
+{
+ LLSINGLETON_EMPTY_CTOR(LLToolGrab);
+};
+
+extern bool gGrabBtnVertical;
+extern bool gGrabBtnSpin;
+extern LLTool* gGrabTransientTool;
+
+#endif // LL_TOOLGRAB_H
|
