Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-12 09:27:28

0001 // @(#)root/base:$Id$
0002 // Author: Fons Rademakers   3/12/95
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TVirtualX
0013 #define ROOT_TVirtualX
0014 
0015 
0016 //////////////////////////////////////////////////////////////////////////
0017 //                                                                      //
0018 // TVirtualX                                                            //
0019 //                                                                      //
0020 // Semi-Abstract base class defining a generic interface to the         //
0021 // underlying, low level, graphics system (X11, Win32, MacOS).          //
0022 // An instance of TVirtualX itself defines a batch interface to the     //
0023 // graphics system.                                                     //
0024 //                                                                      //
0025 //////////////////////////////////////////////////////////////////////////
0026 
0027 #include "TNamed.h"
0028 #include "TAttLine.h"
0029 #include "TAttFill.h"
0030 #include "TAttText.h"
0031 #include "TAttMarker.h"
0032 #include "GuiTypes.h"
0033 
0034 #include <vector>
0035 #include <utility>
0036 
0037 // WM Atoms are initialized in TGClient
0038 R__EXTERN Atom_t gWM_DELETE_WINDOW;
0039 R__EXTERN Atom_t gMOTIF_WM_HINTS;
0040 R__EXTERN Atom_t gROOT_MESSAGE;
0041 
0042 class TPoint;
0043 class TString;
0044 class TGWin32Command;
0045 
0046 class TVirtualX : public TNamed, public TAttLine, public TAttFill, public TAttText, public TAttMarker {
0047 
0048 public:
0049    enum EDrawMode    { kCopy = 1, kXor, kInvert };
0050    enum EBoxMode     { kHollow, kFilled };
0051    enum ETextMode    { kClear, kOpaque };
0052    enum ETextSetMode { kCheck, kLoad };
0053    enum EWindowHint  { kHintCombo, kHintPopup, kHintTooltip };
0054 
0055 protected:
0056    EDrawMode fDrawMode;           //Drawing mode
0057 
0058 public:
0059    TVirtualX(): fDrawMode() {}
0060    TVirtualX(const char *name, const char *title);
0061    virtual ~TVirtualX() {}
0062 
0063    virtual Bool_t    Init(void *display = nullptr);
0064    virtual void      ClearWindow();
0065    virtual void      ClosePixmap();
0066    virtual void      CloseWindow();
0067    virtual void      CopyPixmap(Int_t wid, Int_t xpos, Int_t ypos);
0068    virtual void      CreateOpenGLContext(Int_t wid=0);
0069    virtual void      DeleteOpenGLContext(Int_t wid=0);
0070 
0071 
0072    //---- Old graphics interface -----
0073 
0074            void      SetFillColor(Color_t cindex) override;
0075            void      SetFillStyle(Style_t style) override;
0076            void      SetLineColor(Color_t cindex) override;
0077    virtual void      SetLineType(Int_t n, Int_t *dash);
0078            void      SetLineStyle(Style_t linestyle) override;
0079            void      SetLineWidth(Width_t width) override;
0080            void      SetMarkerColor(Color_t cindex) override;
0081            void      SetMarkerSize(Float_t markersize) override;
0082            void      SetMarkerStyle(Style_t markerstyle) override;
0083    virtual void      SetOpacity(Int_t percent);
0084    virtual void      SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b);
0085            void      SetTextAlign(Short_t talign=11) override;
0086            void      SetTextColor(Color_t cindex) override;
0087    virtual Int_t     SetTextFont(char *fontname, ETextSetMode mode);
0088            void      SetTextFont(Font_t fontnumber) override;
0089    virtual void      SetTextMagnitude(Float_t mgn);
0090            void      SetTextSize(Float_t textsize) override;
0091 
0092    virtual void      DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode);
0093    virtual void      DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2,
0094                                    Int_t nx, Int_t ny, Int_t *ic);
0095    virtual void      DrawFillArea(Int_t n, TPoint *xy);
0096    virtual void      DrawLine(Int_t x1, Int_t y1, Int_t x2, Int_t y2);
0097    virtual void      DrawPolyLine(Int_t n, TPoint *xy);
0098    virtual void      DrawLinesSegments(Int_t n, TPoint *xy);
0099    virtual void      DrawPolyMarker(Int_t n, TPoint *xy);
0100    virtual void      DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text,
0101                               ETextMode mode);
0102    virtual void      DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const wchar_t *text,
0103                               ETextMode mode);
0104 
0105    //---- New graphics interface -----
0106 
0107    virtual WinContext_t GetWindowContext(Int_t wid);
0108    virtual void      SetAttFill(WinContext_t wctxt, const TAttFill &att);
0109    virtual void      SetAttLine(WinContext_t wctxt, const TAttLine &att);
0110    virtual void      SetAttMarker(WinContext_t wctxt, const TAttMarker &att);
0111    virtual void      SetAttText(WinContext_t wctxt, const TAttText &att);
0112    virtual void      SetDrawModeW(WinContext_t wctxt, EDrawMode mode);
0113    virtual EDrawMode GetDrawModeW(WinContext_t wctxt);
0114    virtual void      ClearWindowW(WinContext_t wctxt);
0115    virtual void      UpdateWindowW(WinContext_t wctxt, Int_t mode);
0116    virtual void      SetOpacityW(WinContext_t wctxt, Int_t percent);
0117    virtual void      CopyPixmapW(WinContext_t wctxt, Int_t wid, Int_t xpos, Int_t ypos);
0118 
0119    virtual void      DrawBoxW(WinContext_t wctxt, Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode);
0120    virtual void      DrawFillAreaW(WinContext_t wctxt, Int_t n, TPoint *xy);
0121    virtual void      DrawLineW(WinContext_t wctxt, Int_t x1, Int_t y1, Int_t x2, Int_t y2);
0122    virtual void      DrawPolyLineW(WinContext_t wctxt, Int_t n, TPoint *xy);
0123    virtual void      DrawLinesSegmentsW(WinContext_t wctxt, Int_t n, TPoint *xy);
0124    virtual void      DrawPolyMarkerW(WinContext_t wctxt, Int_t n, TPoint *xy);
0125    virtual void      DrawTextW(WinContext_t wctxt, Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode);
0126    virtual void      DrawTextW(WinContext_t wctxt, Int_t x, Int_t y, Float_t angle, Float_t mgn, const wchar_t *text, ETextMode mode);
0127 
0128 
0129    //---- OpenGL related stuff, required only with R__HAS_COCOA ----
0130    virtual Double_t  GetOpenGLScalingFactor();
0131    virtual Window_t  CreateOpenGLWindow(Window_t parentID, UInt_t width, UInt_t height, const std::vector<std::pair<UInt_t, Int_t> > &format);
0132    virtual Handle_t  CreateOpenGLContext(Window_t windowID, Handle_t sharedContext);
0133    virtual Bool_t    MakeOpenGLContextCurrent(Handle_t ctx, Window_t windowID);
0134    virtual Handle_t  GetCurrentOpenGLContext();
0135    virtual void      FlushOpenGLBuffer(Handle_t ctx);
0136 
0137    virtual UInt_t    ExecCommand(TGWin32Command *code);
0138    virtual void      GetCharacterUp(Float_t &chupx, Float_t &chupy);
0139    EDrawMode         GetDrawMode() { return fDrawMode; }
0140    virtual Int_t     GetDoubleBuffer(Int_t wid);
0141    virtual void      GetGeometry(Int_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h);
0142    virtual const char *DisplayName(const char * = nullptr);
0143    virtual Handle_t  GetNativeEvent() const;
0144    virtual ULong_t   GetPixel(Color_t cindex);
0145    virtual void      GetPlanes(Int_t &nplanes);
0146    virtual void      GetRGB(Int_t index, Float_t &r, Float_t &g, Float_t &b);
0147    virtual void      GetTextExtent(UInt_t &w, UInt_t &h, char *mess);
0148    virtual void      GetTextExtent(UInt_t &w, UInt_t &h, wchar_t *mess);
0149    virtual Int_t     GetFontAscent() const;
0150    virtual Int_t     GetFontAscent(const char *mess) const;
0151    virtual Int_t     GetFontDescent() const;
0152    virtual Int_t     GetFontDescent(const char *mess) const;
0153    virtual Float_t   GetTextMagnitude();
0154    virtual Window_t  GetWindowID(Int_t wid);
0155    virtual Bool_t    HasTTFonts() const;
0156    virtual Int_t     InitWindow(ULongptr_t window);
0157    virtual Int_t     AddWindow(ULongptr_t qwid, UInt_t w, UInt_t h);
0158    virtual Int_t     AddPixmap(ULongptr_t pixid, UInt_t w, UInt_t h);
0159    virtual void      RemoveWindow(ULongptr_t qwid);
0160    virtual void      MoveWindow(Int_t wid, Int_t x, Int_t y);
0161    virtual Int_t     OpenPixmap(UInt_t w, UInt_t h);
0162    virtual void      QueryPointer(Int_t &ix, Int_t &iy);
0163    virtual Pixmap_t  ReadGIF(Int_t x0, Int_t y0, const char *file, Window_t id=0);
0164    virtual Int_t     RequestLocator(Int_t mode, Int_t ctyp, Int_t &x, Int_t &y);
0165    virtual Int_t     RequestString(Int_t x, Int_t y, char *text);
0166    virtual void      RescaleWindow(Int_t wid, UInt_t w, UInt_t h);
0167    virtual Int_t     ResizePixmap(Int_t wid, UInt_t w, UInt_t h);
0168    virtual void      ResizeWindow(Int_t wid);
0169    virtual void      SelectWindow(Int_t wid);
0170    virtual void      SelectPixmap(Int_t qpixid);
0171    virtual void      SetCharacterUp(Float_t chupx, Float_t chupy);
0172    virtual void      SetClipOFF(Int_t wid);
0173    virtual void      SetClipRegion(Int_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h);
0174    virtual void      SetCursor(Int_t win, ECursor cursor);
0175    virtual void      SetDoubleBuffer(Int_t wid, Int_t mode);
0176    virtual void      SetDoubleBufferOFF();
0177    virtual void      SetDoubleBufferON();
0178    virtual void      SetDrawMode(EDrawMode mode);
0179    virtual void      Sync(Int_t mode);
0180    virtual void      UpdateWindow(Int_t mode);
0181    virtual void      Warp(Int_t ix, Int_t iy, Window_t id = 0);
0182    virtual Int_t     WriteGIF(char *name);
0183    virtual void      WritePixmap(Int_t wid, UInt_t w, UInt_t h, char *pxname);
0184    virtual Window_t  GetCurrentWindow() const;
0185    virtual Int_t     SupportsExtension(const char *ext) const;
0186 
0187    //---- Methods used for GUI -----
0188    virtual void         GetWindowAttributes(Window_t id, WindowAttributes_t &attr);
0189    virtual void         MapWindow(Window_t id);
0190    virtual void         MapSubwindows(Window_t id);
0191    virtual void         MapRaised(Window_t id);
0192    virtual void         UnmapWindow(Window_t id);
0193    virtual void         DestroyWindow(Window_t id);
0194    virtual void         DestroySubwindows(Window_t id);
0195    virtual void         RaiseWindow(Window_t id);
0196    virtual void         LowerWindow(Window_t id);
0197    virtual void         MoveWindow(Window_t id, Int_t x, Int_t y);
0198    virtual void         MoveResizeWindow(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h);
0199    virtual void         ResizeWindow(Window_t id, UInt_t w, UInt_t h);
0200    virtual void         IconifyWindow(Window_t id);
0201    virtual Bool_t       NeedRedraw(ULongptr_t tgwindow, Bool_t force);
0202    virtual void         ReparentWindow(Window_t id, Window_t pid, Int_t x, Int_t y);
0203    virtual void         SetWindowBackground(Window_t id, ULong_t color);
0204    virtual void         SetWindowBackgroundPixmap(Window_t id, Pixmap_t pxm);
0205    virtual Window_t     CreateWindow(Window_t parent, Int_t x, Int_t y,
0206                                      UInt_t w, UInt_t h, UInt_t border,
0207                                      Int_t depth, UInt_t clss,
0208                                      void *visual, SetWindowAttributes_t *attr,
0209                                      UInt_t wtype);
0210    virtual Int_t        OpenDisplay(const char *dpyName);
0211    virtual void         CloseDisplay();
0212    virtual Display_t    GetDisplay() const;
0213    virtual Visual_t     GetVisual() const;
0214    virtual Int_t        GetScreen() const;
0215    virtual Int_t        GetDepth() const;
0216    virtual UInt_t       ScreenWidthMM() const;
0217    virtual Colormap_t   GetColormap() const;
0218    virtual Atom_t       InternAtom(const char *atom_name, Bool_t only_if_exist);
0219    virtual Window_t     GetDefaultRootWindow() const;
0220    virtual Window_t     GetParent(Window_t id) const;
0221    virtual FontStruct_t LoadQueryFont(const char *font_name);
0222    virtual FontH_t      GetFontHandle(FontStruct_t fs);
0223    virtual void         DeleteFont(FontStruct_t fs);
0224    virtual GContext_t   CreateGC(Drawable_t id, GCValues_t *gval);
0225    virtual void         ChangeGC(GContext_t gc, GCValues_t *gval);
0226    virtual void         CopyGC(GContext_t org, GContext_t dest, Mask_t mask);
0227    virtual void         DeleteGC(GContext_t gc);
0228    virtual Cursor_t     CreateCursor(ECursor cursor);
0229    virtual void         SetCursor(Window_t id, Cursor_t curid);
0230    virtual Pixmap_t     CreatePixmap(Drawable_t id, UInt_t w, UInt_t h);
0231    virtual Pixmap_t     CreatePixmap(Drawable_t id, const char *bitmap, UInt_t width,
0232                                      UInt_t height, ULong_t forecolor, ULong_t backcolor,
0233                                      Int_t depth);
0234    virtual Pixmap_t     CreateBitmap(Drawable_t id, const char *bitmap,
0235                                      UInt_t width, UInt_t height);
0236    virtual void         DeletePixmap(Pixmap_t pmap);
0237    virtual Bool_t       CreatePictureFromFile(Drawable_t id, const char *filename,
0238                                               Pixmap_t &pict, Pixmap_t &pict_mask,
0239                                               PictureAttributes_t &attr);
0240    virtual Bool_t       CreatePictureFromData(Drawable_t id, char **data,
0241                                               Pixmap_t &pict, Pixmap_t &pict_mask,
0242                                               PictureAttributes_t &attr);
0243    virtual Pixmap_t     CreatePixmapFromData(unsigned char *bits, UInt_t width, UInt_t height);
0244    virtual Bool_t       ReadPictureDataFromFile(const char *filename, char ***ret_data);
0245    virtual void         DeletePictureData(void *data);
0246    virtual void         SetDashes(GContext_t gc, Int_t offset, const char *dash_list,
0247                                   Int_t n);
0248    virtual Bool_t       ParseColor(Colormap_t cmap, const char *cname, ColorStruct_t &color);
0249    virtual Bool_t       AllocColor(Colormap_t cmap, ColorStruct_t &color);
0250    virtual void         QueryColor(Colormap_t cmap, ColorStruct_t &color);
0251    virtual void         FreeColor(Colormap_t cmap, ULong_t pixel);
0252    virtual Int_t        EventsPending();
0253    virtual void         NextEvent(Event_t &event);
0254    virtual void         Bell(Int_t percent);
0255    virtual void         CopyArea(Drawable_t src, Drawable_t dest, GContext_t gc,
0256                                  Int_t src_x, Int_t src_y, UInt_t width,
0257                                  UInt_t height, Int_t dest_x, Int_t dest_y);
0258    virtual void         ChangeWindowAttributes(Window_t id, SetWindowAttributes_t *attr);
0259    virtual void         ChangeProperty(Window_t id, Atom_t property, Atom_t type,
0260                                        UChar_t *data, Int_t len);
0261    virtual void         SetWindowHint(Window_t id, EWindowHint hint);
0262    virtual void         DrawLine(Drawable_t id, GContext_t gc, Int_t x1, Int_t y1, Int_t x2, Int_t y2);
0263    virtual void         ClearArea(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h);
0264    virtual Bool_t       CheckEvent(Window_t id, EGEventType type, Event_t &ev);
0265    virtual void         SendEvent(Window_t id, Event_t *ev);
0266    virtual void         DispatchClientMessage(UInt_t messageID);
0267    virtual void         WMDeleteNotify(Window_t id);
0268    virtual void         SetKeyAutoRepeat(Bool_t on = kTRUE);
0269    virtual void         GrabKey(Window_t id, Int_t keycode, UInt_t modifier, Bool_t grab = kTRUE);
0270    virtual void         GrabButton(Window_t id, EMouseButton button, UInt_t modifier,
0271                                    UInt_t evmask, Window_t confine, Cursor_t cursor,
0272                                    Bool_t grab = kTRUE);
0273    virtual void         GrabPointer(Window_t id, UInt_t evmask, Window_t confine,
0274                                     Cursor_t cursor, Bool_t grab = kTRUE,
0275                                     Bool_t owner_events = kTRUE);
0276    virtual void         SetWindowName(Window_t id, char *name);
0277    virtual void         SetIconName(Window_t id, char *name);
0278    virtual void         SetIconPixmap(Window_t id, Pixmap_t pix);
0279    virtual void         SetClassHints(Window_t id, char *className, char *resourceName);
0280    virtual void         SetMWMHints(Window_t id, UInt_t value, UInt_t funcs, UInt_t input);
0281    virtual void         SetWMPosition(Window_t id, Int_t x, Int_t y);
0282    virtual void         SetWMSize(Window_t id, UInt_t w, UInt_t h);
0283    virtual void         SetWMSizeHints(Window_t id, UInt_t wmin, UInt_t hmin,
0284                                        UInt_t wmax, UInt_t hmax, UInt_t winc, UInt_t hinc);
0285    virtual void         SetWMState(Window_t id, EInitialState state);
0286    virtual void         SetWMTransientHint(Window_t id, Window_t main_id);
0287    virtual void         DrawString(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
0288                                    const char *s, Int_t len);
0289    virtual Int_t        TextWidth(FontStruct_t font, const char *s, Int_t len);
0290    virtual void         GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent);
0291    virtual void         GetGCValues(GContext_t gc, GCValues_t &gval);
0292    virtual FontStruct_t GetGCFont(GContext_t gc);
0293    virtual FontStruct_t GetFontStruct(FontH_t fh);
0294    virtual void         FreeFontStruct(FontStruct_t fs);
0295    virtual void         ClearWindow(Window_t id);
0296    virtual Int_t        KeysymToKeycode(UInt_t keysym);
0297    virtual void         FillRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
0298                                       UInt_t w, UInt_t h);
0299    virtual void         DrawRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
0300                                       UInt_t w, UInt_t h);
0301    virtual void         DrawSegments(Drawable_t id, GContext_t gc, Segment_t *seg, Int_t nseg);
0302    virtual void         SelectInput(Window_t id, UInt_t evmask);
0303    virtual Window_t     GetInputFocus();
0304    virtual void         SetInputFocus(Window_t id);
0305    virtual Window_t     GetPrimarySelectionOwner();
0306    virtual void         SetPrimarySelectionOwner(Window_t id);
0307    virtual void         ConvertPrimarySelection(Window_t id, Atom_t clipboard, Time_t when);
0308    virtual void         LookupString(Event_t *event, char *buf, Int_t buflen, UInt_t &keysym);
0309    virtual void         GetPasteBuffer(Window_t id, Atom_t atom, TString &text, Int_t &nchar,
0310                                        Bool_t del);
0311    virtual void         TranslateCoordinates(Window_t src, Window_t dest, Int_t src_x,Int_t src_y,
0312                                              Int_t &dest_x, Int_t &dest_y, Window_t &child);
0313    virtual void         GetWindowSize(Drawable_t id, Int_t &x, Int_t & overridey, UInt_t &w, UInt_t &h);
0314    virtual void         FillPolygon(Window_t id, GContext_t gc, Point_t *points, Int_t npnt);
0315    virtual void         QueryPointer(Window_t id, Window_t &rootw, Window_t &childw,
0316                                      Int_t &root_x, Int_t &root_y, Int_t &win_x,
0317                                      Int_t &win_y, UInt_t &mask);
0318    virtual void         SetForeground(GContext_t gc, ULong_t foreground);
0319    virtual void         SetClipRectangles(GContext_t gc, Int_t x, Int_t y, Rectangle_t *recs, Int_t n);
0320    virtual void         Update(Int_t mode = 0);
0321    virtual Region_t     CreateRegion();
0322    virtual void         DestroyRegion(Region_t reg);
0323    virtual void         UnionRectWithRegion(Rectangle_t *rect, Region_t src, Region_t dest);
0324    virtual Region_t     PolygonRegion(Point_t *points, Int_t np, Bool_t winding);
0325    virtual void         UnionRegion(Region_t rega, Region_t regb, Region_t result);
0326    virtual void         IntersectRegion(Region_t rega, Region_t regb, Region_t result);
0327    virtual void         SubtractRegion(Region_t rega, Region_t regb, Region_t result);
0328    virtual void         XorRegion(Region_t rega, Region_t regb, Region_t result);
0329    virtual Bool_t       EmptyRegion(Region_t reg);
0330    virtual Bool_t       PointInRegion(Int_t x, Int_t y, Region_t reg);
0331    virtual Bool_t       EqualRegion(Region_t rega, Region_t regb);
0332    virtual void         GetRegionBox(Region_t reg, Rectangle_t *rect);
0333    virtual char       **ListFonts(const char *fontname, Int_t max, Int_t &count);
0334    virtual void         FreeFontNames(char **fontlist);
0335    virtual Drawable_t   CreateImage(UInt_t width, UInt_t height);
0336    virtual void         GetImageSize(Drawable_t id, UInt_t &width, UInt_t &height);
0337    virtual void         PutPixel(Drawable_t id, Int_t x, Int_t y, ULong_t pixel);
0338    virtual void         PutImage(Drawable_t id, GContext_t gc, Drawable_t img, Int_t dx, Int_t dy,
0339                                  Int_t x, Int_t y, UInt_t w, UInt_t h);
0340    virtual void         DeleteImage(Drawable_t img);
0341    virtual unsigned char *GetColorBits(Drawable_t wid, Int_t x = 0, Int_t y = 0, UInt_t w = 0, UInt_t h = 0);
0342    virtual void         ShapeCombineMask(Window_t id, Int_t x, Int_t y, Pixmap_t mask);
0343 
0344    //---- Drag and Drop -----
0345    virtual void         DeleteProperty(Window_t, Atom_t&);
0346    virtual Int_t        GetProperty(Window_t, Atom_t, Long_t, Long_t, Bool_t, Atom_t,
0347                                     Atom_t*, Int_t*, ULong_t*, ULong_t*, unsigned char**);
0348    virtual void         ChangeActivePointerGrab(Window_t, UInt_t, Cursor_t);
0349    virtual void         ConvertSelection(Window_t, Atom_t&, Atom_t&, Atom_t&, Time_t&);
0350    virtual Bool_t       SetSelectionOwner(Window_t, Atom_t&);
0351    virtual void         ChangeProperties(Window_t id, Atom_t property, Atom_t type,
0352                                          Int_t format, UChar_t *data, Int_t len);
0353    virtual void         SetDNDAware(Window_t, Atom_t *);
0354    virtual void         SetTypeList(Window_t win, Atom_t prop, Atom_t *typelist);
0355    virtual Window_t     FindRWindow(Window_t win, Window_t dragwin, Window_t input, int x, int y, int maxd);
0356    virtual Bool_t       IsDNDAware(Window_t win, Atom_t *typelist);
0357 
0358    virtual void         BeginModalSessionFor(Window_t window);
0359 
0360    virtual Bool_t       IsCmdThread() const { return kTRUE; }
0361 
0362    virtual void         MapGCFont(GContext_t, FontStruct_t);
0363 
0364    static TVirtualX    *&Instance();
0365 
0366    ClassDefOverride(TVirtualX,0)  //ABC defining a generic interface to graphics system
0367 };
0368 
0369 #define gVirtualX (TVirtualX::Instance())
0370 R__EXTERN TVirtualX *(*gPtr2VirtualX)();
0371 R__EXTERN TVirtualX  *gGXBatch;
0372 
0373 #endif