File indexing completed on 2026-09-12 09:27:28
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TVirtualX
0013 #define ROOT_TVirtualX
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
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
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;
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
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
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
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
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
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)
0367 };
0368
0369 #define gVirtualX (TVirtualX::Instance())
0370 R__EXTERN TVirtualX *(*gPtr2VirtualX)();
0371 R__EXTERN TVirtualX *gGXBatch;
0372
0373 #endif