summaryrefslogtreecommitdiff
path: root/indra/newview/lljoystickbutton.h
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/lljoystickbutton.h
Print done when done.
Diffstat (limited to 'indra/newview/lljoystickbutton.h')
-rw-r--r--indra/newview/lljoystickbutton.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
new file mode 100644
index 0000000000..a9a8acdfaf
--- /dev/null
+++ b/indra/newview/lljoystickbutton.h
@@ -0,0 +1,168 @@
+/**
+ * @file lljoystickbutton.h
+ * @brief LLJoystick class definition
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLJOYSTICKBUTTON_H
+#define LL_LLJOYSTICKBUTTON_H
+
+#include "llbutton.h"
+#include "llcoord.h"
+
+typedef enum e_joystick_quadrant
+{
+ JQ_ORIGIN,
+ JQ_UP,
+ JQ_DOWN,
+ JQ_LEFT,
+ JQ_RIGHT
+} EJoystickQuadrant;
+
+class LLJoystick
+: public LLButton
+{
+public:
+ LLJoystick(const LLString& name, LLRect rect, const LLString &default_image, const LLString &selected_image, EJoystickQuadrant initial);
+
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask);
+
+ virtual void onMouseUp() {}
+ virtual void onHeldDown() = 0;
+ F32 getElapsedHeldDownTime();
+
+ static void onHeldDown(void *userdata); // called by llbutton callback handler
+ void setInitialQuadrant(EJoystickQuadrant initial) { mInitialQuadrant = initial; };
+
+ virtual LLXMLNodePtr getXML(bool save_children = true) const;
+ static LLString nameFromQuadrant(const EJoystickQuadrant quadrant);
+ static EJoystickQuadrant quadrantFromName(const LLString& name);
+ static EJoystickQuadrant selectQuadrant(LLXMLNodePtr node);
+
+
+protected:
+ virtual void updateSlop(); // recompute slop margins
+
+protected:
+ EJoystickQuadrant mInitialQuadrant; // mousedown = click in this quadrant
+ LLCoordGL mInitialOffset; // pretend mouse started here
+ LLCoordGL mLastMouse; // where was mouse on last hover event
+ LLCoordGL mFirstMouse; // when mouse clicked, where was it
+ S32 mVertSlopNear; // where the slop regions end
+ S32 mVertSlopFar; // where the slop regions end
+ S32 mHorizSlopNear; // where the slop regions end
+ S32 mHorizSlopFar; // where the slop regions end
+ BOOL mHeldDown;
+ LLFrameTimer mHeldDownTimer;
+};
+
+
+// Turn agent left and right, move forward and back
+class LLJoystickAgentTurn
+: public LLJoystick
+{
+public:
+ LLJoystickAgentTurn(const LLString& name, LLRect rect, const LLString &default_image, const LLString &selected_image, EJoystickQuadrant initial)
+ : LLJoystick(name, rect, default_image, selected_image, initial)
+ { }
+
+ virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_JOYSTICK_TURN; }
+ virtual LLString getWidgetTag() const { return LL_JOYSTICK_TURN; }
+
+ virtual void onHeldDown();
+
+ static LLView* LLJoystickAgentTurn::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
+
+};
+
+
+// Slide left and right, move forward and back
+class LLJoystickAgentSlide
+: public LLJoystick
+{
+public:
+ LLJoystickAgentSlide(const LLString& name, LLRect rect, const LLString &default_image, const LLString &selected_image, EJoystickQuadrant initial)
+ : LLJoystick(name, rect, default_image, selected_image, initial)
+ { }
+
+ virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_JOYSTICK_SLIDE; }
+ virtual LLString getWidgetTag() const { return LL_JOYSTICK_SLIDE; }
+
+
+ virtual void onHeldDown();
+ virtual void onMouseUp();
+
+ static LLView* LLJoystickAgentSlide::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
+};
+
+
+// Rotate camera around the focus point
+class LLJoystickCameraRotate
+: public LLJoystick
+{
+public:
+ LLJoystickCameraRotate(const LLString& name, LLRect rect, const LLString &out_img, const LLString &in_img);
+
+ virtual void setToggleState( BOOL left, BOOL top, BOOL right, BOOL bottom );
+
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual void onHeldDown();
+ virtual void draw();
+
+protected:
+ F32 getOrbitRate();
+ virtual void updateSlop();
+ void drawRotatedImage( LLImageGL* image, S32 rotations );
+
+protected:
+ BOOL mInLeft;
+ BOOL mInTop;
+ BOOL mInRight;
+ BOOL mInBottom;
+};
+
+
+// Track the camera focus point forward/backward and side to side
+class LLJoystickCameraTrack
+: public LLJoystickCameraRotate
+{
+public:
+ LLJoystickCameraTrack(const LLString& name, LLRect rect, const LLString &out_img, const LLString &in_img)
+ : LLJoystickCameraRotate(name, rect, out_img, in_img)
+ { }
+
+ virtual void onHeldDown();
+};
+
+
+// Zoom the camera in and out
+class LLJoystickCameraZoom
+: public LLJoystick
+{
+public:
+ LLJoystickCameraZoom(const LLString& name, LLRect rect, const LLString &out_img, const LLString &plus_in_img, const LLString &minus_in_img);
+
+ virtual void setToggleState( BOOL top, BOOL bottom );
+
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual void onHeldDown();
+ virtual void draw();
+
+protected:
+ virtual void updateSlop();
+ F32 getOrbitRate();
+
+protected:
+ BOOL mInTop;
+ BOOL mInBottom;
+ LLPointer<LLViewerImage> mPlusInImage;
+ LLPointer<LLViewerImage> mMinusInImage;
+};
+
+
+
+#endif // LL_LLJOYSTICKBUTTON_H