163 lines
4.5 KiB
C++
163 lines
4.5 KiB
C++
/**
|
|
* @file virtualtrackball.h
|
|
* @author Andrey Lihatskiy
|
|
* @brief Header file for LLVirtualTrackball
|
|
*
|
|
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2018, 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$
|
|
*/
|
|
|
|
// A control for positioning the sun and the moon in the celestial sphere.
|
|
|
|
#ifndef LL_LLVIRTUALTRACKBALL_H
|
|
#define LL_LLVIRTUALTRACKBALL_H
|
|
|
|
#include "lluictrl.h"
|
|
#include "llpanel.h"
|
|
#include "lltextbox.h"
|
|
#include "llbutton.h"
|
|
|
|
class LLVirtualTrackball
|
|
: public LLUICtrl
|
|
{
|
|
public:
|
|
enum ThumbMode
|
|
{
|
|
SUN,
|
|
MOON
|
|
};
|
|
enum DragMode
|
|
{
|
|
DRAG_SET,
|
|
DRAG_SCROLL
|
|
};
|
|
|
|
struct Params
|
|
: public LLInitParam::Block<Params, LLUICtrl::Params>
|
|
{
|
|
Optional<LLViewBorder::Params> border;
|
|
Optional<LLUIImage*> image_moon_back,
|
|
image_moon_front,
|
|
image_sphere,
|
|
image_sun_back,
|
|
image_sun_front;
|
|
|
|
Optional<std::string> thumb_mode;
|
|
Optional<F32> increment_angle_mouse,
|
|
increment_angle_btn;
|
|
|
|
Optional<LLTextBox::Params> lbl_N,
|
|
lbl_S,
|
|
lbl_W,
|
|
lbl_E;
|
|
|
|
Optional<LLButton::Params> btn_rotate_top,
|
|
btn_rotate_bottom,
|
|
btn_rotate_left,
|
|
btn_rotate_right;
|
|
|
|
Params();
|
|
};
|
|
|
|
|
|
~LLVirtualTrackball() override;
|
|
bool postBuild() override;
|
|
|
|
bool handleHover(S32 x, S32 y, MASK mask) override;
|
|
bool handleMouseUp(S32 x, S32 y, MASK mask) override;
|
|
bool handleMouseDown(S32 x, S32 y, MASK mask) override;
|
|
bool handleRightMouseDown(S32 x, S32 y, MASK mask) override;
|
|
bool handleKeyHere(KEY key, MASK mask) override;
|
|
|
|
void draw() override;
|
|
|
|
void setValue(const LLSD& value) override;
|
|
void setValue(F32 x, F32 y, F32 z, F32 w);
|
|
LLSD getValue() const override;
|
|
|
|
void setRotation(const LLQuaternion &value);
|
|
LLQuaternion getRotation() const;
|
|
|
|
static void getAzimuthAndElevation(const LLQuaternion &quat, F32 &azimuth, F32 &elevation);
|
|
static void getAzimuthAndElevationDeg(const LLQuaternion &quat, F32 &azimuth, F32 &elevation);
|
|
|
|
protected:
|
|
friend class LLUICtrlFactory;
|
|
LLVirtualTrackball(const Params&);
|
|
|
|
protected:
|
|
LLTextBox* mNLabel;
|
|
LLTextBox* mELabel;
|
|
LLTextBox* mSLabel;
|
|
LLTextBox* mWLabel;
|
|
|
|
LLButton* mBtnRotateTop;
|
|
LLButton* mBtnRotateBottom;
|
|
LLButton* mBtnRotateLeft;
|
|
LLButton* mBtnRotateRight;
|
|
|
|
LLTextBox* mLabelN;
|
|
LLTextBox* mLabelS;
|
|
LLTextBox* mLabelW;
|
|
LLTextBox* mLabelE;
|
|
|
|
LLPanel* mTouchArea;
|
|
LLViewBorder* mBorder;
|
|
|
|
private:
|
|
void setValueAndCommit(const LLQuaternion &value);
|
|
void drawThumb(S32 x, S32 y, ThumbMode mode, bool upperHemi = true);
|
|
bool pointInTouchCircle(S32 x, S32 y) const;
|
|
|
|
void onRotateTopClick();
|
|
void onRotateBottomClick();
|
|
void onRotateLeftClick();
|
|
void onRotateRightClick();
|
|
|
|
void onRotateTopMouseEnter();
|
|
void onRotateBottomMouseEnter();
|
|
void onRotateLeftMouseEnter();
|
|
void onRotateRightMouseEnter();
|
|
|
|
S32 mPrevX;
|
|
S32 mPrevY;
|
|
|
|
LLUIImage* mImgMoonBack;
|
|
LLUIImage* mImgMoonFront;
|
|
LLUIImage* mImgSunBack;
|
|
LLUIImage* mImgSunFront;
|
|
LLUIImage* mImgBtnRotTop;
|
|
LLUIImage* mImgBtnRotLeft;
|
|
LLUIImage* mImgBtnRotRight;
|
|
LLUIImage* mImgBtnRotBottom;
|
|
LLUIImage* mImgSphere;
|
|
|
|
LLQuaternion mValue;
|
|
ThumbMode mThumbMode;
|
|
DragMode mDragMode;
|
|
|
|
F32 mIncrementMouse;
|
|
F32 mIncrementBtn;
|
|
};
|
|
|
|
#endif
|
|
|