12 #ifndef ROOT_TGImageMap 
   13 #define ROOT_TGImageMap 
   35 class TGRegion : 
public TObject {
 
   41    TGRegion CopyRegion() 
const;
 
   44    enum ERegionType { kRectangle, kEllipse };
 
   47    TGRegion(Int_t x, Int_t y, UInt_t w, UInt_t h, ERegionType = kRectangle);
 
   48    TGRegion(Int_t n, TPoint *points, Bool_t winding = kFALSE);
 
   49    TGRegion(Int_t n, Int_t *x, Int_t *y, Bool_t winding = kFALSE);
 
   50    TGRegion(
const TArrayS &x, 
const TArrayS &y, Bool_t winding = kFALSE);
 
   51    TGRegion(
const TGRegion ®);
 
   54    Bool_t      Contains(
const TPoint &p) 
const;
 
   55    Bool_t      Contains(Int_t x, Int_t y) 
const;
 
   56    TGRegion    Unite(
const TGRegion &r) 
const;
 
   57    TGRegion    Intersect(
const TGRegion &r) 
const;
 
   58    TGRegion    Subtract(
const TGRegion &r) 
const;
 
   59    TGRegion    Eor(
const TGRegion &r) 
const;
 
   60    TGDimension GetDimension() 
const;
 
   61    TGPosition  GetPosition() 
const;
 
   62    Bool_t      IsNull() 
const;
 
   63    Bool_t      IsEmpty() 
const;
 
   65    TGRegion operator|(
const TGRegion &r)
 const { 
return Unite(r); }
 
   66    TGRegion operator+(
const TGRegion &r)
 const { 
return Unite(r); }
 
   67    TGRegion operator&(
const TGRegion &r)
 const { 
return Intersect(r); }
 
   68    TGRegion operator-(
const TGRegion &r)
 const { 
return Subtract(r); }
 
   69    TGRegion operator^(
const TGRegion &r)
 const { 
return Eor(r); }
 
   70    TGRegion& operator|=(
const TGRegion &r) { 
return *
this = *
this | r; }
 
   71    TGRegion& operator+=(
const TGRegion &r) { 
return *
this = *
this + r; }
 
   72    TGRegion& operator&=(
const TGRegion &r) { 
return *
this = *
this & r; }
 
   73    TGRegion& operator-=(
const TGRegion &r) { 
return *
this = *
this - r; }
 
   74    TGRegion& operator^=(
const TGRegion &r) { 
return *
this = *
this ^ r; }
 
   75    Bool_t operator==(
const TGRegion &r)  
const;
 
   76    Bool_t operator!=(
const TGRegion &r)
 const { 
return !(operator==(r)); }
 
   77    TGRegion &operator=(
const TGRegion &r);
 
   83 class TGRegionWithId : 
public TGRegion {
 
   87    TGRegionWithId& operator=(
const TGRegionWithId&); 
 
   96    TGRegionWithId(Int_t 
id, Int_t x, Int_t y, UInt_t w, UInt_t h,
 
   97                   ERegionType = kRectangle);
 
   98    TGRegionWithId(Int_t 
id, Int_t n, TPoint *points, Bool_t winding = kFALSE);
 
   99    TGRegionWithId(
const TGRegionWithId ®);
 
  100    TGRegionWithId(
const TGRegion ®, Int_t 
id);
 
  101    virtual ~TGRegionWithId();
 
  103    Int_t        GetId()
 const { 
return fId; }
 
  104    TGToolTip   *GetToolTipText()
 const { 
return fTip; }
 
  105    void         SetToolTipText(
const char *text, Long_t delayms,
 
  106                                const TGFrame *frame);
 
  107    TGPopupMenu *GetPopup()
 const { 
return fPopup; }
 
  108    void         SetPopup(TGPopupMenu *popup) { fPopup = popup; }
 
  111    ClassDef(TGRegionWithId,0) 
 
  115 class TGImageMap : 
public TGPictureButton {
 
  119    TGImageMap(
const TGImageMap&); 
 
  120    TGImageMap& operator=(
const TGImageMap&); 
 
  123    enum ENavMode { kNavRegions, kNavGrid };
 
  126    TList      *fListOfRegions;   
 
  128    ECursor     fCursorMouseOver; 
 
  129    ECursor     fCursorMouseOut;  
 
  135    TGImageMap(
const TGWindow *p = 0, 
const TGPicture *pic = 0);
 
  136    TGImageMap(
const TGWindow *p, 
const TString &pic);
 
  137    virtual ~TGImageMap();
 
  139    virtual Bool_t HandleButton(Event_t *event);
 
  140    virtual Bool_t HandleDoubleClick(Event_t *event);
 
  141    virtual Bool_t HandleMotion(Event_t *event);
 
  143    ENavMode       GetNavMode() { 
return fNavMode; }
 
  144    void           AddRegion(
const TGRegion ®ion, Int_t 
id);
 
  145    TGPopupMenu   *CreatePopup(Int_t 
id);
 
  146    TGPopupMenu   *GetPopup(Int_t 
id);
 
  148    void SetToolTipText(
const char *text, Long_t delayms = 300);
 
  149    void SetToolTipText(Int_t 
id, 
const char *text, Long_t delayms = 300);
 
  150    void SetCursor(ECursor cursor = kHand) { fCursorMouseOver = cursor; }
 
  151    void SetPicture(
const TGPicture * ) { } 
 
  153    virtual void RegionClicked(Int_t 
id); 
 
  154    virtual void DoubleClicked(Int_t 
id); 
 
  155    virtual void DoubleClicked();         
 
  156    virtual void OnMouseOver(Int_t 
id);   
 
  157    virtual void OnMouseOut(Int_t 
id);    
 
  159    ClassDef(TGImageMap,0)  
 
  162 R__EXTERN TGRegionWithId *gCurrentRegion;