// @(#)root/gl:$Id$
// Author:  Richard Maunder  16/09/2005

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGLManip
#define ROOT_TGLManip

#ifndef ROOT_TVirtualGL
#include "TVirtualGL.h"
#endif
#ifndef ROOT_TPoint
#include "TPoint.h"
#endif
#ifndef ROOT_GuiTypes
#include "GuiTypes.h"
#endif
#ifndef ROOT_TGLUtil
#include "TGLUtil.h"
#endif

class TGLPhysicalShape;
class TGLVertex3;
class TGLVector3;
class TGLCamera;
class TGLRect;
class TGLBoundingBox;


class TGLManip : public TVirtualGLManip
{
protected:
   TGLPhysicalShape  *fShape;             //! manipulated shape
   UInt_t             fSelectedWidget;    //! active width (axis) component
   Bool_t             fActive;            //! manipulator is active?

   // Mouse tracking - in WINDOW coords
   TPoint             fFirstMouse;        //! first (start) mouse position (in WINDOW coords)
   TPoint             fLastMouse;         //! last (latest) mouse position (in WINDOW coords)

   TGLManip(const TGLManip&);
   TGLManip& operator=(const TGLManip&);

   void CalcDrawScale(const TGLBoundingBox& box, const TGLCamera& camera,
                      Double_t& base, TGLVector3 axis[3]) const;

   const UChar_t* ColorFor(UInt_t widget) const;

public:
   TGLManip();
   TGLManip(TGLPhysicalShape* shape);
   virtual ~TGLManip();

   UInt_t GetSelectedWidget()   const { return fSelectedWidget; }
   void   SetSelectedWidget(UInt_t s) { fSelectedWidget = s; }

   Bool_t GetActive()   const { return fActive; }
   void   SetActive(Bool_t a) { fActive = a; }

   void               Attach(TGLPhysicalShape* shape) { fShape = shape; }
   TGLPhysicalShape * GetAttached() const { return fShape; }

   virtual void   Draw(const TGLCamera& camera) const = 0;
   // CRAPPY TVirtualGLManip TTTT, just override it here
   virtual Bool_t Select(const TGLCamera&, const TGLRect&, const TGLBoundingBox&) { return kFALSE; }

   virtual Bool_t HandleButton(const Event_t& event, const TGLCamera& camera);
   virtual Bool_t HandleMotion(const Event_t& event, const TGLCamera& camera);

   ClassDef(TGLManip, 0); // abstract base GL manipulator widget
};

#endif
 TGLManip.h:1
 TGLManip.h:2
 TGLManip.h:3
 TGLManip.h:4
 TGLManip.h:5
 TGLManip.h:6
 TGLManip.h:7
 TGLManip.h:8
 TGLManip.h:9
 TGLManip.h:10
 TGLManip.h:11
 TGLManip.h:12
 TGLManip.h:13
 TGLManip.h:14
 TGLManip.h:15
 TGLManip.h:16
 TGLManip.h:17
 TGLManip.h:18
 TGLManip.h:19
 TGLManip.h:20
 TGLManip.h:21
 TGLManip.h:22
 TGLManip.h:23
 TGLManip.h:24
 TGLManip.h:25
 TGLManip.h:26
 TGLManip.h:27
 TGLManip.h:28
 TGLManip.h:29
 TGLManip.h:30
 TGLManip.h:31
 TGLManip.h:32
 TGLManip.h:33
 TGLManip.h:34
 TGLManip.h:35
 TGLManip.h:36
 TGLManip.h:37
 TGLManip.h:38
 TGLManip.h:39
 TGLManip.h:40
 TGLManip.h:41
 TGLManip.h:42
 TGLManip.h:43
 TGLManip.h:44
 TGLManip.h:45
 TGLManip.h:46
 TGLManip.h:47
 TGLManip.h:48
 TGLManip.h:49
 TGLManip.h:50
 TGLManip.h:51
 TGLManip.h:52
 TGLManip.h:53
 TGLManip.h:54
 TGLManip.h:55
 TGLManip.h:56
 TGLManip.h:57
 TGLManip.h:58
 TGLManip.h:59
 TGLManip.h:60
 TGLManip.h:61
 TGLManip.h:62
 TGLManip.h:63
 TGLManip.h:64
 TGLManip.h:65
 TGLManip.h:66
 TGLManip.h:67
 TGLManip.h:68
 TGLManip.h:69
 TGLManip.h:70
 TGLManip.h:71
 TGLManip.h:72
 TGLManip.h:73
 TGLManip.h:74
 TGLManip.h:75
 TGLManip.h:76
 TGLManip.h:77
 TGLManip.h:78
 TGLManip.h:79