Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TVirtualX.h
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Fons Rademakers 3/12/95
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TVirtualX
13 #define ROOT_TVirtualX
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TVirtualX //
19 // //
20 // Semi-Abstract base class defining a generic interface to the //
21 // underlying, low level, graphics system (X11, Win32, MacOS). //
22 // An instance of TVirtualX itself defines a batch interface to the //
23 // graphics system. //
24 // //
25 //////////////////////////////////////////////////////////////////////////
26 
27 #include <utility>
28 #include <vector>
29 
30 #include "TNamed.h"
31 #include "TAttLine.h"
32 #include "TAttFill.h"
33 #include "TAttText.h"
34 #include "TAttMarker.h"
35 #include "GuiTypes.h"
36 
37 
38 // WM Atoms are initialized in TGClient
39 R__EXTERN Atom_t gWM_DELETE_WINDOW;
40 R__EXTERN Atom_t gMOTIF_WM_HINTS;
41 R__EXTERN Atom_t gROOT_MESSAGE;
42 
43 const int kNumCursors = 19;
44 enum ECursor { kBottomLeft, kBottomRight, kTopLeft, kTopRight,
45  kBottomSide, kLeftSide, kTopSide, kRightSide,
46  kMove, kCross, kArrowHor, kArrowVer, kHand, kRotate,
47  kPointer, kArrowRight, kCaret, kWatch, kNoDrop };
48 
49 class TPoint;
50 class TString;
51 class TGWin32Command;
52 
53 class TVirtualX : public TNamed, public TAttLine, public TAttFill, public TAttText, public TAttMarker {
54 
55 public:
56  enum EDrawMode { kCopy = 1, kXor, kInvert };
57  enum EBoxMode { kHollow, kFilled };
58  enum ETextMode { kClear, kOpaque };
59  enum ETextSetMode { kCheck, kLoad };
60 
61 protected:
62  EDrawMode fDrawMode; //Drawing mode
63 
64 public:
65  TVirtualX(): fDrawMode() { }
66  TVirtualX(const char *name, const char *title);
67  virtual ~TVirtualX() { }
68 
69  virtual Bool_t Init(void *display=0);
70  virtual void ClearWindow();
71  virtual void ClosePixmap();
72  virtual void CloseWindow();
73  virtual void CopyPixmap(Int_t wid, Int_t xpos, Int_t ypos);
74  virtual void CreateOpenGLContext(Int_t wid=0);
75  virtual void DeleteOpenGLContext(Int_t wid=0);
76 
77  //---- OpenGL related stuff, required only with R__HAS_COCOA ----
78  virtual Double_t GetOpenGLScalingFactor();
79  virtual Window_t CreateOpenGLWindow(Window_t parentID, UInt_t width, UInt_t height, const std::vector<std::pair<UInt_t, Int_t> > &format);
80  virtual Handle_t CreateOpenGLContext(Window_t windowID, Handle_t sharedContext);
81  virtual Bool_t MakeOpenGLContextCurrent(Handle_t ctx, Window_t windowID);
82  virtual Handle_t GetCurrentOpenGLContext();
83  virtual void FlushOpenGLBuffer(Handle_t ctx);
84 
85  virtual void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode);
86  virtual void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2,
87  Int_t nx, Int_t ny, Int_t *ic);
88  virtual void DrawFillArea(Int_t n, TPoint *xy);
89  virtual void DrawLine(Int_t x1, Int_t y1, Int_t x2, Int_t y2);
90  virtual void DrawPolyLine(Int_t n, TPoint *xy);
91  virtual void DrawPolyMarker(Int_t n, TPoint *xy);
92  virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text,
93  ETextMode mode);
94  virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const wchar_t *text,
95  ETextMode mode);
96  virtual UInt_t ExecCommand(TGWin32Command *code);
97  virtual void GetCharacterUp(Float_t &chupx, Float_t &chupy);
98  EDrawMode GetDrawMode() { return fDrawMode; }
99  virtual Int_t GetDoubleBuffer(Int_t wid);
100  virtual void GetGeometry(Int_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h);
101  virtual const char *DisplayName(const char * = 0);
102  virtual Handle_t GetNativeEvent() const;
103  virtual ULong_t GetPixel(Color_t cindex);
104  virtual void GetPlanes(Int_t &nplanes);
105  virtual void GetRGB(Int_t index, Float_t &r, Float_t &g, Float_t &b);
106  virtual void GetTextExtent(UInt_t &w, UInt_t &h, char *mess);
107  virtual void GetTextExtent(UInt_t &w, UInt_t &h, wchar_t *mess);
108  virtual Int_t GetFontAscent() const;
109  virtual Int_t GetFontAscent(const char *mess) const;
110  virtual Int_t GetFontDescent() const;
111  virtual Int_t GetFontDescent(const char *mess) const;
112  virtual Float_t GetTextMagnitude();
113  virtual Window_t GetWindowID(Int_t wid);
114  virtual Bool_t HasTTFonts() const;
115  virtual Int_t InitWindow(ULong_t window);
116  virtual Int_t AddWindow(ULong_t qwid, UInt_t w, UInt_t h);
117  virtual Int_t AddPixmap(ULong_t pixid, UInt_t w, UInt_t h);
118  virtual void RemoveWindow(ULong_t qwid);
119  virtual void MoveWindow(Int_t wid, Int_t x, Int_t y);
120  virtual Int_t OpenPixmap(UInt_t w, UInt_t h);
121  virtual void QueryPointer(Int_t &ix, Int_t &iy);
122  virtual Pixmap_t ReadGIF(Int_t x0, Int_t y0, const char *file, Window_t id=0);
123  virtual Int_t RequestLocator(Int_t mode, Int_t ctyp, Int_t &x, Int_t &y);
124  virtual Int_t RequestString(Int_t x, Int_t y, char *text);
125  virtual void RescaleWindow(Int_t wid, UInt_t w, UInt_t h);
126  virtual Int_t ResizePixmap(Int_t wid, UInt_t w, UInt_t h);
127  virtual void ResizeWindow(Int_t wid);
128  virtual void SelectWindow(Int_t wid);
129  virtual void SelectPixmap(Int_t qpixid);
130  virtual void SetCharacterUp(Float_t chupx, Float_t chupy);
131  virtual void SetClipOFF(Int_t wid);
132  virtual void SetClipRegion(Int_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h);
133  virtual void SetCursor(Int_t win, ECursor cursor);
134  virtual void SetDoubleBuffer(Int_t wid, Int_t mode);
135  virtual void SetDoubleBufferOFF();
136  virtual void SetDoubleBufferON();
137  virtual void SetDrawMode(EDrawMode mode);
138  virtual void SetFillColor(Color_t cindex);
139  virtual void SetFillStyle(Style_t style);
140  virtual void SetLineColor(Color_t cindex);
141  virtual void SetLineType(Int_t n, Int_t *dash);
142  virtual void SetLineStyle(Style_t linestyle);
143  virtual void SetLineWidth(Width_t width);
144  virtual void SetMarkerColor(Color_t cindex);
145  virtual void SetMarkerSize(Float_t markersize);
146  virtual void SetMarkerStyle(Style_t markerstyle);
147  virtual void SetOpacity(Int_t percent);
148  virtual void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b);
149  virtual void SetTextAlign(Short_t talign=11);
150  virtual void SetTextColor(Color_t cindex);
151  virtual Int_t SetTextFont(char *fontname, ETextSetMode mode);
152  virtual void SetTextFont(Font_t fontnumber);
153  virtual void SetTextMagnitude(Float_t mgn);
154  virtual void SetTextSize(Float_t textsize);
155  virtual void Sync(Int_t mode);
156  virtual void UpdateWindow(Int_t mode);
157  virtual void Warp(Int_t ix, Int_t iy, Window_t id = 0);
158  virtual Int_t WriteGIF(char *name);
159  virtual void WritePixmap(Int_t wid, UInt_t w, UInt_t h, char *pxname);
160  virtual Window_t GetCurrentWindow() const;
161  virtual Int_t SupportsExtension(const char *ext) const;
162 
163  //---- Methods used for GUI -----
164  virtual void GetWindowAttributes(Window_t id, WindowAttributes_t &attr);
165  virtual void MapWindow(Window_t id);
166  virtual void MapSubwindows(Window_t id);
167  virtual void MapRaised(Window_t id);
168  virtual void UnmapWindow(Window_t id);
169  virtual void DestroyWindow(Window_t id);
170  virtual void DestroySubwindows(Window_t id);
171  virtual void RaiseWindow(Window_t id);
172  virtual void LowerWindow(Window_t id);
173  virtual void MoveWindow(Window_t id, Int_t x, Int_t y);
174  virtual void MoveResizeWindow(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h);
175  virtual void ResizeWindow(Window_t id, UInt_t w, UInt_t h);
176  virtual void IconifyWindow(Window_t id);
177  virtual Bool_t NeedRedraw(ULong_t tgwindow, Bool_t force);
178  virtual void ReparentWindow(Window_t id, Window_t pid, Int_t x, Int_t y);
179  virtual void SetWindowBackground(Window_t id, ULong_t color);
180  virtual void SetWindowBackgroundPixmap(Window_t id, Pixmap_t pxm);
181  virtual Window_t CreateWindow(Window_t parent, Int_t x, Int_t y,
182  UInt_t w, UInt_t h, UInt_t border,
183  Int_t depth, UInt_t clss,
184  void *visual, SetWindowAttributes_t *attr,
185  UInt_t wtype);
186  virtual Int_t OpenDisplay(const char *dpyName);
187  virtual void CloseDisplay();
188  virtual Display_t GetDisplay() const;
189  virtual Visual_t GetVisual() const;
190  virtual Int_t GetScreen() const;
191  virtual Int_t GetDepth() const;
192  virtual UInt_t ScreenWidthMM() const;
193  virtual Colormap_t GetColormap() const;
194  virtual Atom_t InternAtom(const char *atom_name, Bool_t only_if_exist);
195  virtual Window_t GetDefaultRootWindow() const;
196  virtual Window_t GetParent(Window_t id) const;
197  virtual FontStruct_t LoadQueryFont(const char *font_name);
198  virtual FontH_t GetFontHandle(FontStruct_t fs);
199  virtual void DeleteFont(FontStruct_t fs);
200  virtual GContext_t CreateGC(Drawable_t id, GCValues_t *gval);
201  virtual void ChangeGC(GContext_t gc, GCValues_t *gval);
202  virtual void CopyGC(GContext_t org, GContext_t dest, Mask_t mask);
203  virtual void DeleteGC(GContext_t gc);
204  virtual Cursor_t CreateCursor(ECursor cursor);
205  virtual void SetCursor(Window_t id, Cursor_t curid);
206  virtual Pixmap_t CreatePixmap(Drawable_t id, UInt_t w, UInt_t h);
207  virtual Pixmap_t CreatePixmap(Drawable_t id, const char *bitmap, UInt_t width,
208  UInt_t height, ULong_t forecolor, ULong_t backcolor,
209  Int_t depth);
210  virtual Pixmap_t CreateBitmap(Drawable_t id, const char *bitmap,
211  UInt_t width, UInt_t height);
212  virtual void DeletePixmap(Pixmap_t pmap);
213  virtual Bool_t CreatePictureFromFile(Drawable_t id, const char *filename,
214  Pixmap_t &pict, Pixmap_t &pict_mask,
215  PictureAttributes_t &attr);
216  virtual Bool_t CreatePictureFromData(Drawable_t id, char **data,
217  Pixmap_t &pict, Pixmap_t &pict_mask,
218  PictureAttributes_t &attr);
219  virtual Pixmap_t CreatePixmapFromData(unsigned char *bits, UInt_t width, UInt_t height);
220  virtual Bool_t ReadPictureDataFromFile(const char *filename, char ***ret_data);
221  virtual void DeletePictureData(void *data);
222  virtual void SetDashes(GContext_t gc, Int_t offset, const char *dash_list,
223  Int_t n);
224  virtual Bool_t ParseColor(Colormap_t cmap, const char *cname, ColorStruct_t &color);
225  virtual Bool_t AllocColor(Colormap_t cmap, ColorStruct_t &color);
226  virtual void QueryColor(Colormap_t cmap, ColorStruct_t &color);
227  virtual void FreeColor(Colormap_t cmap, ULong_t pixel);
228  virtual Int_t EventsPending();
229  virtual void NextEvent(Event_t &event);
230  virtual void Bell(Int_t percent);
231  virtual void CopyArea(Drawable_t src, Drawable_t dest, GContext_t gc,
232  Int_t src_x, Int_t src_y, UInt_t width,
233  UInt_t height, Int_t dest_x, Int_t dest_y);
234  virtual void ChangeWindowAttributes(Window_t id, SetWindowAttributes_t *attr);
235  virtual void ChangeProperty(Window_t id, Atom_t property, Atom_t type,
236  UChar_t *data, Int_t len);
237  virtual void DrawLine(Drawable_t id, GContext_t gc, Int_t x1, Int_t y1, Int_t x2, Int_t y2);
238  virtual void ClearArea(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h);
239  virtual Bool_t CheckEvent(Window_t id, EGEventType type, Event_t &ev);
240  virtual void SendEvent(Window_t id, Event_t *ev);
241  virtual void DispatchClientMessage(UInt_t messageID);
242  virtual void WMDeleteNotify(Window_t id);
243  virtual void SetKeyAutoRepeat(Bool_t on = kTRUE);
244  virtual void GrabKey(Window_t id, Int_t keycode, UInt_t modifier, Bool_t grab = kTRUE);
245  virtual void GrabButton(Window_t id, EMouseButton button, UInt_t modifier,
246  UInt_t evmask, Window_t confine, Cursor_t cursor,
247  Bool_t grab = kTRUE);
248  virtual void GrabPointer(Window_t id, UInt_t evmask, Window_t confine,
249  Cursor_t cursor, Bool_t grab = kTRUE,
250  Bool_t owner_events = kTRUE);
251  virtual void SetWindowName(Window_t id, char *name);
252  virtual void SetIconName(Window_t id, char *name);
253  virtual void SetIconPixmap(Window_t id, Pixmap_t pix);
254  virtual void SetClassHints(Window_t id, char *className, char *resourceName);
255  virtual void SetMWMHints(Window_t id, UInt_t value, UInt_t funcs, UInt_t input);
256  virtual void SetWMPosition(Window_t id, Int_t x, Int_t y);
257  virtual void SetWMSize(Window_t id, UInt_t w, UInt_t h);
258  virtual void SetWMSizeHints(Window_t id, UInt_t wmin, UInt_t hmin,
259  UInt_t wmax, UInt_t hmax, UInt_t winc, UInt_t hinc);
260  virtual void SetWMState(Window_t id, EInitialState state);
261  virtual void SetWMTransientHint(Window_t id, Window_t main_id);
262  virtual void DrawString(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
263  const char *s, Int_t len);
264  virtual Int_t TextWidth(FontStruct_t font, const char *s, Int_t len);
265  virtual void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent);
266  virtual void GetGCValues(GContext_t gc, GCValues_t &gval);
267  virtual FontStruct_t GetGCFont(GContext_t gc);
268  virtual FontStruct_t GetFontStruct(FontH_t fh);
269  virtual void FreeFontStruct(FontStruct_t fs);
270  virtual void ClearWindow(Window_t id);
271  virtual Int_t KeysymToKeycode(UInt_t keysym);
272  virtual void FillRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
273  UInt_t w, UInt_t h);
274  virtual void DrawRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y,
275  UInt_t w, UInt_t h);
276  virtual void DrawSegments(Drawable_t id, GContext_t gc, Segment_t *seg, Int_t nseg);
277  virtual void SelectInput(Window_t id, UInt_t evmask);
278  virtual Window_t GetInputFocus();
279  virtual void SetInputFocus(Window_t id);
280  virtual Window_t GetPrimarySelectionOwner();
281  virtual void SetPrimarySelectionOwner(Window_t id);
282  virtual void ConvertPrimarySelection(Window_t id, Atom_t clipboard, Time_t when);
283  virtual void LookupString(Event_t *event, char *buf, Int_t buflen, UInt_t &keysym);
284  virtual void GetPasteBuffer(Window_t id, Atom_t atom, TString &text, Int_t &nchar,
285  Bool_t del);
286  virtual void TranslateCoordinates(Window_t src, Window_t dest, Int_t src_x,Int_t src_y,
287  Int_t &dest_x, Int_t &dest_y, Window_t &child);
288  virtual void GetWindowSize(Drawable_t id, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h);
289  virtual void FillPolygon(Window_t id, GContext_t gc, Point_t *points, Int_t npnt);
290  virtual void QueryPointer(Window_t id, Window_t &rootw, Window_t &childw,
291  Int_t &root_x, Int_t &root_y, Int_t &win_x,
292  Int_t &win_y, UInt_t &mask);
293  virtual void SetForeground(GContext_t gc, ULong_t foreground);
294  virtual void SetClipRectangles(GContext_t gc, Int_t x, Int_t y, Rectangle_t *recs, Int_t n);
295  virtual void Update(Int_t mode = 0);
296  virtual Region_t CreateRegion();
297  virtual void DestroyRegion(Region_t reg);
298  virtual void UnionRectWithRegion(Rectangle_t *rect, Region_t src, Region_t dest);
299  virtual Region_t PolygonRegion(Point_t *points, Int_t np, Bool_t winding);
300  virtual void UnionRegion(Region_t rega, Region_t regb, Region_t result);
301  virtual void IntersectRegion(Region_t rega, Region_t regb, Region_t result);
302  virtual void SubtractRegion(Region_t rega, Region_t regb, Region_t result);
303  virtual void XorRegion(Region_t rega, Region_t regb, Region_t result);
304  virtual Bool_t EmptyRegion(Region_t reg);
305  virtual Bool_t PointInRegion(Int_t x, Int_t y, Region_t reg);
306  virtual Bool_t EqualRegion(Region_t rega, Region_t regb);
307  virtual void GetRegionBox(Region_t reg, Rectangle_t *rect);
308  virtual char **ListFonts(const char *fontname, Int_t max, Int_t &count);
309  virtual void FreeFontNames(char **fontlist);
310  virtual Drawable_t CreateImage(UInt_t width, UInt_t height);
311  virtual void GetImageSize(Drawable_t id, UInt_t &width, UInt_t &height);
312  virtual void PutPixel(Drawable_t id, Int_t x, Int_t y, ULong_t pixel);
313  virtual void PutImage(Drawable_t id, GContext_t gc, Drawable_t img, Int_t dx, Int_t dy,
314  Int_t x, Int_t y, UInt_t w, UInt_t h);
315  virtual void DeleteImage(Drawable_t img);
316  virtual unsigned char *GetColorBits(Drawable_t wid, Int_t x = 0, Int_t y = 0, UInt_t w = 0, UInt_t h = 0);
317  virtual void ShapeCombineMask(Window_t id, Int_t x, Int_t y, Pixmap_t mask);
318 
319  //---- Drag and Drop -----
320  virtual void DeleteProperty(Window_t, Atom_t&);
321  virtual Int_t GetProperty(Window_t, Atom_t, Long_t, Long_t, Bool_t, Atom_t,
322  Atom_t*, Int_t*, ULong_t*, ULong_t*, unsigned char**);
323  virtual void ChangeActivePointerGrab(Window_t, UInt_t, Cursor_t);
324  virtual void ConvertSelection(Window_t, Atom_t&, Atom_t&, Atom_t&, Time_t&);
325  virtual Bool_t SetSelectionOwner(Window_t, Atom_t&);
326  virtual void ChangeProperties(Window_t id, Atom_t property, Atom_t type,
327  Int_t format, UChar_t *data, Int_t len);
328  virtual void SetDNDAware(Window_t, Atom_t *);
329  virtual void SetTypeList(Window_t win, Atom_t prop, Atom_t *typelist);
330  virtual Window_t FindRWindow(Window_t win, Window_t dragwin, Window_t input, int x, int y, int maxd);
331  virtual Bool_t IsDNDAware(Window_t win, Atom_t *typelist);
332 
333  virtual void BeginModalSessionFor(Window_t window);
334 
335  virtual Bool_t IsCmdThread() const { return kTRUE; }
336 
337  virtual void MapGCFont(GContext_t, FontStruct_t);
338 
339  static TVirtualX *&Instance();
340 
341  ClassDef(TVirtualX,0) //ABC defining a generic interface to graphics system
342 };
343 
344 #ifndef __CINT__
345 #define gVirtualX (TVirtualX::Instance())
346 R__EXTERN TVirtualX *(*gPtr2VirtualX)();
347 #endif
348 R__EXTERN TVirtualX *gGXBatch;
349 
350 #endif