#ifndef ROOT_TGGC
#define ROOT_TGGC
#ifndef ROOT_TGObject
#include "TGObject.h"
#endif
#ifndef ROOT_TRefCnt
#include "TRefCnt.h"
#endif
class THashTable;
class TGGC : public TObject, public TRefCnt {
friend class TGGCPool;
protected:
GCValues_t fValues;
GContext_t fContext;
TGGC(GCValues_t *values, Bool_t calledByGCPool);
void UpdateValues(GCValues_t *v);
TString GetMaskString() const;
public:
TGGC(GCValues_t *values = 0);
TGGC(const TGGC &g);
virtual ~TGGC();
TGGC &operator=(const TGGC &rhs);
GContext_t GetGC() const { return fContext; }
GContext_t operator()() const;
void SetAttributes(GCValues_t *values);
void SetFunction(EGraphicsFunction v);
void SetPlaneMask(ULong_t v);
void SetForeground(Pixel_t v);
void SetBackground(Pixel_t v);
void SetLineWidth(Int_t v);
void SetLineStyle(Int_t v);
void SetCapStyle(Int_t v);
void SetJoinStyle(Int_t v);
void SetFillStyle(Int_t v);
void SetFillRule(Int_t v);
void SetTile(Pixmap_t v);
void SetStipple(Pixmap_t v);
void SetTileStipXOrigin(Int_t v);
void SetTileStipYOrigin(Int_t v);
void SetFont(FontH_t v);
void SetSubwindowMode(Int_t v);
void SetGraphicsExposures(Bool_t v);
void SetClipXOrigin(Int_t v);
void SetClipYOrigin(Int_t v);
void SetClipMask(Pixmap_t v);
void SetDashOffset(Int_t v);
void SetDashList(const char v[], Int_t len);
void SetArcMode(Int_t v);
const GCValues_t *GetAttributes() const { return &fValues; }
Mask_t GetMask() const { return fValues.fMask; }
EGraphicsFunction GetFunction() const { return fValues.fFunction; }
ULong_t GetPlaneMask() const { return fValues.fPlaneMask; }
Pixel_t GetForeground() const { return fValues.fForeground; }
Pixel_t GetBackground() const { return fValues.fBackground; }
Int_t GetLineWidth() const { return fValues.fLineWidth; }
Int_t GetLineStyle() const { return fValues.fLineStyle; }
Pixmap_t GetTile() const { return fValues.fTile; }
Pixmap_t GetStipple() const { return fValues.fStipple; }
Int_t GetTileStipXOrigin() const { return fValues.fTsXOrigin; }
Int_t GetTileStipYOrigin() const { return fValues.fTsYOrigin; }
Int_t GetSubwindowMode() const { return fValues.fSubwindowMode; }
FontH_t GetFont() const { return fValues.fFont; }
Bool_t GetGraphicsExposures() const { return fValues.fGraphicsExposures; }
Int_t GetClipXOrigin() const { return fValues.fClipXOrigin; }
Int_t GetClipYOrigin() const { return fValues.fClipYOrigin; }
Pixmap_t GetClipMask() const { return fValues.fClipMask; }
Int_t GetCapStyle() const { return fValues.fCapStyle; }
Int_t GetJoinStyle() const { return fValues.fJoinStyle; }
Int_t GetFillStyle() const { return fValues.fFillStyle; }
Int_t GetFillRule() const { return fValues.fFillRule; }
Int_t GetDashOffset() const { return fValues.fDashOffset; }
Int_t GetDashLen() const { return fValues.fDashLen; }
const char *GetDashes() const { return fValues.fDashes; }
Int_t GetArcMode() const { return fValues.fArcMode; }
void Print(Option_t *option="") const;
void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGGC,0)
};
class TGGCPool : public TGObject {
friend class TGGC;
private:
THashTable *fList;
void ForceFreeGC(const TGGC *gc);
Int_t MatchGC(const TGGC *gc, GCValues_t *values);
void UpdateGC(TGGC *gc, GCValues_t *values);
protected:
TGGCPool(const TGGCPool& gp) : TGObject(gp), fList(gp.fList) { }
TGGCPool& operator=(const TGGCPool& gp)
{if(this!=&gp) {TGObject::operator=(gp); fList=gp.fList;}
return *this;}
public:
TGGCPool(TGClient *client);
virtual ~TGGCPool();
TGGC *GetGC(GCValues_t *values, Bool_t rw = kFALSE);
TGGC *GetGC(GContext_t gct);
void FreeGC(const TGGC *gc);
void FreeGC(GContext_t gc);
TGGC *FindGC(const TGGC *gc);
TGGC *FindGC(GContext_t gc);
void Print(Option_t *option="") const;
ClassDef(TGGCPool,0)
};
#endif