// @(#)root/gl:$Name:  $:$Id: TGLLogicalShape.h,v 1.4 2005/05/28 12:21:00 rdm Exp $
// Author:  Richard Maunder  25/05/2005

/*************************************************************************
 * Copyright (C) 1995-2004, 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_TGLLogicalShape
#define ROOT_TGLLogicalShape

#ifndef ROOT_TGLDrawable
#include "TGLDrawable.h"
#endif

class TContextMenu;

/*************************************************************************
 * TGLLogicalShape - TODO
 *
 *
 *
 *************************************************************************/
class TGLLogicalShape : public TGLDrawable { // Rename TGLLogicalObject?
private:
   // Fields
   mutable UInt_t fRef; //! physical instance ref counting

public:
   TGLLogicalShape(ULong_t ID);
   virtual ~TGLLogicalShape();

   virtual void Purge();

   virtual void InvokeContextMenu(TContextMenu & menu, UInt_t x, UInt_t y) const = 0;

   // Physical shape ref counting
   void   AddRef() const { ++fRef; }
   Bool_t SubRef() const { if (--fRef == 0) return kTRUE; return kFALSE; }
   UInt_t Ref()    const { return fRef; }

   ClassDef(TGLLogicalShape,0) // a logical (non-placed, local frame) drawable object
};

#endif // ROOT_TGLLogicalShape
