51#include <X11/cursorfont.h>
52#include <X11/keysym.h>
61# include <sys/socket.h>
76 int,
int,
char*,
int);
141 EnterWindowMask | LeaveWindowMask |
142 PointerMotionMask | KeyPressMask |
145 EnterWindowMask | LeaveWindowMask;
1510x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1520x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1530x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
156struct RXGCValues:XGCValues{};
157struct RXColor:XColor{};
158struct RXImage:XImage{};
159struct RXPoint:XPoint{};
160struct RXVisualInfo:XVisualInfo{};
161struct RVisual:Visual{};
281 fWindows[i].fDoubleBuffer =
org.fWindows[i].fDoubleBuffer;
293 fWindows[i].fNewColors =
org.fWindows[i].fNewColors;
304 while (it.Next(key, value)) {
327 while (it.
Next(key, value)) {
364 if (XAllocColor((Display*)
fDisplay, cmap, color))
381 XQueryColors((Display*)
fDisplay, cmap, color, ncolors);
384 for (
Int_t i = 0; i < ncolors; i++) {
394 color[i].flags = DoRed | DoGreen | DoBlue;
406 unsigned int ww, hh, border, depth;
407 XGetGeometry((Display*)
fDisplay, *pix, &root, &xx, &yy, &ww, &hh, &border, &depth);
419 if (!
gCws->fIsPixmap && !
gCws->fDoubleBuffer) {
467 if (
gCws->fNewColors) {
470 delete []
gCws->fNewColors;
471 gCws->fNewColors = 0;
496 gTws->fHeight, xpos, ypos);
507 unsigned int ww, hh, border, depth;
509 XGetGeometry((Display*)
fDisplay, *pix, &root, &xx, &yy, &ww, &hh, &border, &depth);
556 int i, j, icol, ix, iy, w,
h, current_icol;
563 for (i = 0; i < nx; i++) {
565 for (j = 0; j < ny; j++) {
567 if (icol != current_icol) {
586 XPoint *
xy = (XPoint*)xyt;
593 xy,
n, Nonconvex, CoordModeOrigin);
621 XPoint *
xy = (XPoint*)xyt;
623 const Int_t kMaxPoints = 1000001;
625 if (
n > kMaxPoints) {
627 int iend = kMaxPoints - 1;
631 iend += kMaxPoints - 1;
647 for (i = 1; i <
n; i++) {
648 int dx =
xy[i].x -
xy[i-1].x;
649 int dy =
xy[i].y -
xy[i-1].y;
650 if (dx < 0) dx = - dx;
651 if (dy < 0) dy = - dy;
673 XPoint *
xy = (XPoint*)xyt;
676 const int kNMAX = 1000000;
678 for (
int it=0;it<=nt;it++) {
689 for (
m = 0;
m <
n;
m++) {
708 for (i = 0; i <
gMarker.n; i++) {
718 for (i = 0; i <
gMarker.n; i++) {
725 for (i = 0; i <
gMarker.n; i += 2)
780 if (((vis->c_class != TrueColor && vis->c_class != DirectColor) ||
784 static XVisualInfo templates[] = {
786 { 0 , 0 , 0 , 24 , TrueColor , 0 , 0 , 0 , 0 , 0 },
787 { 0 , 0 , 0 , 32 , TrueColor , 0 , 0 , 0 , 0 , 0 },
788 { 0 , 0 , 0 , 16 , TrueColor , 0 , 0 , 0 , 0 , 0 },
789 { 0 , 0 , 0 , 15 , TrueColor , 0 , 0 , 0 , 0 , 0 },
791 { 0 , 0 , 0 , 24 , DirectColor, 0 , 0 , 0 , 0 , 0 },
792 { 0 , 0 , 0 , 32 , DirectColor, 0 , 0 , 0 , 0 , 0 },
793 { 0 , 0 , 0 , 16 , DirectColor, 0 , 0 , 0 , 0 , 0 },
794 { 0 , 0 , 0 , 15 , DirectColor, 0 , 0 , 0 , 0 , 0 },
795 { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
799 XVisualInfo *vlist = 0;
800 for (
Int_t i = 0; templates[i].depth != 0; i++) {
801 Int_t mask = VisualScreenMask|VisualDepthMask|VisualClassMask;
803 if ((vlist = XGetVisualInfo((Display*)
fDisplay, mask, &(templates[i]), &nitems))) {
825 Printf(
"Selected visual 0x%lx: depth %d, class %d, colormap: %s",
845 Int_t (*oldErrorHandler)(Display *, XErrorEvent *) =
848 XSetWindowAttributes attr;
849 memset(&attr, 0,
sizeof(attr));
853 for (
Int_t i = 0; i < nitems; i++) {
862 attr.colormap = XCreateColormap((Display*)
fDisplay, root, vlist[i].visual, AllocNone);
865 static XColor black_xcol = { 0, 0x0000, 0x0000, 0x0000, DoRed|DoGreen|DoBlue, 0 };
866 static XColor white_xcol = { 0, 0xFFFF, 0xFFFF, 0xFFFF, DoRed|DoGreen|DoBlue, 0 };
867 XAllocColor((Display*)
fDisplay, attr.colormap, &black_xcol);
868 XAllocColor((Display*)
fDisplay, attr.colormap, &white_xcol);
869 attr.border_pixel = black_xcol.pixel;
870 attr.override_redirect =
True;
872 w = XCreateWindow((Display*)
fDisplay, root, -20, -20, 10, 10, 0, vlist[i].depth,
873 CopyFromParent, vlist[i].visual,
874 CWColormap|CWBorderPixel|CWOverrideRedirect, &attr);
875 if (w != None && XGetGeometry((Display*)
fDisplay, w, &wjunk, &junk, &junk,
876 &
width, &height, &ujunk, &ujunk)) {
877 fVisual = (RVisual*)vlist[i].visual;
886 XFreeColormap((Display*)
fDisplay, attr.colormap);
888 XSetErrorHandler(oldErrorHandler);
928 if (which >=
kMAXGC || which < 0) {
929 Error(
"GetGC",
"trying to get illegal GC (which = %d)", which);
944 return gTws->fDoubleBuffer;
967 unsigned int border, depth;
968 unsigned int width, height;
972 &
width, &height, &border, &depth);
974 0, 0, &
x, &
y, &junkwin);
979 if (
width > 0 && height > 0) {
981 gTws->fHeight = height;
993 return XDisplayName(dpyName);
1026 }
else if (index == 1) {
1046 if (strlen(mess)==0)
return;
1078 if (!
gTws->fOpen)
return;
1088 Pixmap pixmp1, pixmp2;
1108 strlcpy(vendor, XServerVendor((Display*)
fDisplay),132);
1111 for (i = 0; i <
kMAXGC; i++)
1115 if (XGetGCValues((Display*)
fDisplay, *
gGCtext, GCForeground|GCBackground, &values)) {
1119 Error(
"OpenDisplay",
"cannot get GC values");
1131 if (strstr(vendor,
"Hewlett"))
1132 echov.function = GXxor;
1134 echov.function = GXinvert;
1137 GCForeground | GCBackground | GCFunction,
1141 static int isdisp = 0;
1147 fontlist = XListFonts((Display*)
fDisplay,
"*courier*", 1, &fontcount);
1148 if (fontlist && fontcount != 0) {
1153 XFreeFontNames(fontlist);
1156 fontlist = XListFonts((Display*)
fDisplay,
"fixed", 1, &fontcount);
1157 if (fontlist && fontcount != 0) {
1162 XFreeFontNames(fontlist);
1164 Warning(
"OpenDisplay",
"no default font loaded");
1201 if (
fVisual->c_class == TrueColor) {
1205 if ((
fVisual->blue_mask >> i) == 1) {
1213 if ((
fVisual->green_mask >> i) == 1) {
1221 if ((
fVisual->red_mask >> i) == 1) {
1241 unsigned int wval, hval;
1243 unsigned int ww, hh, border, depth;
1268 XGetGeometry((Display*)
fDisplay,
gCws->fWindow, &root, &xx, &yy, &ww, &hh, &border, &depth);
1270 for (i = 0; i <
kMAXGC; i++)
1280 gCws->fDoubleBuffer = 0;
1281 gCws->fIsPixmap = 1;
1283 gCws->fWidth = wval;
1284 gCws->fHeight = hval;
1285 gCws->fNewColors = 0;
1298 XSetWindowAttributes attributes;
1302 unsigned int wval, hval, border, depth;
1307 XGetGeometry((Display*)
fDisplay, wind, &root, &xval, &yval, &wval, &hval, &border, &depth);
1333 attr_mask |= CWBackPixel;
1335 attr_mask |= CWBorderPixel;
1336 attributes.event_mask = NoEventMask;
1337 attr_mask |= CWEventMask;
1338 attributes.backing_store = Always;
1339 attr_mask |= CWBackingStore;
1340 attributes.bit_gravity = NorthWestGravity;
1341 attr_mask |= CWBitGravity;
1344 attr_mask |= CWColormap;
1347 gCws->fWindow = XCreateWindow((Display*)
fDisplay, wind,
1348 xval, yval, wval, hval, 0,
fDepth,
1350 attr_mask, &attributes);
1359 gCws->fDoubleBuffer = 0;
1360 gCws->fIsPixmap = 0;
1362 gCws->fWidth = wval;
1363 gCws->fHeight = hval;
1364 gCws->fNewColors = 0;
1398 gCws->fWindow = qwid;
1403 gCws->fDoubleBuffer = 0;
1404 gCws->fIsPixmap = 0;
1408 gCws->fNewColors = 0;
1423 if (
gCws->fNewColors) {
1426 delete []
gCws->fNewColors;
1427 gCws->fNewColors = 0;
1451 Window root_return, child_return;
1452 int win_x_return, win_y_return;
1453 int root_x_return, root_y_return;
1454 unsigned int mask_return;
1456 XQueryPointer((Display*)
fDisplay,
gCws->fWindow, &root_return,
1457 &child_return, &root_x_return, &root_y_return, &win_x_return,
1458 &win_y_return, &mask_return);
1469 XFreePixmap((Display*)
fDisplay,*pix);
1502 static int xloc = 0;
1503 static int yloc = 0;
1504 static int xlocp = 0;
1505 static int ylocp = 0;
1506 static Cursor cursor = 0;
1518 cursor = XCreateFontCursor((Display*)
fDisplay, XC_crosshair);
1519 XDefineCursor((Display*)
fDisplay,
gCws->fWindow, cursor);
1527 while (button_press == 0) {
1536 xloc, 0, xloc,
gCws->fHeight);
1538 0, yloc,
gCws->fWidth, yloc);
1542 radius = (int)
TMath::Sqrt((
double)((xloc-xlocp)*(xloc-xlocp) +
1543 (yloc-ylocp)*(yloc-ylocp)));
1545 xlocp-radius, ylocp-radius,
1546 2*radius, 2*radius, 0, 23040);
1551 xlocp, ylocp, xloc, yloc);
1564 while (XEventsQueued( (Display*)
fDisplay, QueuedAlready) > 1) {
1565 XNextEvent((Display*)
fDisplay, &event);
1576 xloc, 0, xloc,
gCws->fHeight);
1578 0, yloc,
gCws->fWidth, yloc);
1582 radius = (int)
TMath::Sqrt((
double)((xloc-xlocp)*(xloc-xlocp) +
1583 (yloc-ylocp)*(yloc-ylocp)));
1585 xlocp-radius, ylocp-radius,
1586 2*radius, 2*radius, 0, 23040);
1591 xlocp, ylocp, xloc, yloc);
1604 xloc =
event.xbutton.x;
1605 yloc =
event.xbutton.y;
1607 switch (event.type) {
1612 XNextEvent((Display*)
fDisplay, &event);
1613 if (event.type == EnterNotify)
break;
1621 button_press =
event.xbutton.button ;
1622 xlocp =
event.xbutton.x;
1623 ylocp =
event.xbutton.y;
1628 case ButtonRelease :
1630 button_press = 10+
event.xbutton.button ;
1631 xlocp =
event.xbutton.x;
1632 ylocp =
event.xbutton.y;
1638 button_press =
event.xkey.keycode;
1639 xlocp =
event.xbutton.x;
1640 ylocp =
event.xbutton.y;
1646 button_press = -
event.xkey.keycode;
1647 xlocp =
event.xbutton.x;
1648 ylocp =
event.xbutton.y;
1657 if (button_press == 0)
1662 x =
event.xbutton.x;
1663 y =
event.xbutton.y;
1665 return button_press;
1680 static Cursor cursor = 0;
1681 static int percent = 0;
1687 int len_text = strlen(
text);
1693 XKeyboardState kbstate;
1694 cursor = XCreateFontCursor((Display*)
fDisplay, XC_question_arrow);
1695 XGetKeyboardControl((Display*)
fDisplay, &kbstate);
1696 percent = kbstate.bell_percent;
1699 XDefineCursor((Display*)
fDisplay,
gCws->fWindow, cursor);
1700 for (nt = len_text; nt > 0 &&
text[nt-1] ==
' '; nt--) { }
1702 XGetInputFocus((Display*)
fDisplay, &focuswindow, &focusrevert);
1703 XSetInputFocus((Display*)
fDisplay,
gCws->fWindow, focusrevert, CurrentTime);
1714 x + dx,
y,
pt < len_text ? &
text[
pt] :
" ", 1);
1716 switch (event.type) {
1719 XSetInputFocus((Display*)
fDisplay,
gCws->fWindow, focusrevert, CurrentTime);
1722 XSetInputFocus((Display*)
fDisplay, focuswindow, focusrevert, CurrentTime);
1725 nbytes = XLookupString(&event.xkey, keybuf,
sizeof(keybuf),
1738 if (isascii(keybuf[0]) && isprint(keybuf[0])) {
1742 for (i = nt - 1; i >
pt; i--)
1744 if (
pt < len_text) {
1749 switch (keybuf[0]) {
1756 for (i =
pt; i < nt; i++)
1775 for (i =
pt; i < nt; i++)
1793 for (i =
pt; i < nt; i++)
1814 XBell((Display*)
fDisplay, percent);
1819 XSetInputFocus((Display*)
fDisplay, focuswindow, focusrevert, CurrentTime);
1841 if (!
gTws->fOpen)
return;
1844 if (
gTws->fWidth == w &&
gTws->fHeight ==
h)
return;
1848 if (
gTws->fBuffer) {
1850 if (
gTws->fWidth < w ||
gTws->fHeight <
h) {
1858 if (
gTws->fDoubleBuffer)
gTws->fDrawing =
gTws->fBuffer;
1873 unsigned int wval, hval;
1875 unsigned int ww, hh, border, depth;
1886 if (
gTws->fWidth >= wval-1 &&
gTws->fWidth <= wval+1 &&
1887 gTws->fHeight >= hval-1 &&
gTws->fHeight <= hval+1)
return 0;
1890 if (
gTws->fWidth < wval ||
gTws->fHeight < hval) {
1894 XGetGeometry((Display*)
fDisplay,
gTws->fWindow, &root, &xx, &yy, &ww, &hh, &border, &depth);
1896 for (i = 0; i <
kMAXGC; i++)
1905 gTws->fWidth = wval;
1906 gTws->fHeight = hval;
1919 unsigned int wval=0, hval=0, border=0, depth=0;
1923 win =
gTws->fWindow;
1925 XGetGeometry((Display*)
fDisplay, win, &root,
1926 &xval, &yval, &wval, &hval, &border, &depth);
1927 if (wval >= 65500) wval = 1;
1928 if (hval >= 65500) hval = 1;
1931 if (
gTws->fWidth == wval &&
gTws->fHeight == hval)
return;
1933 XResizeWindow((Display*)
fDisplay,
gTws->fWindow, wval, hval);
1935 if (
gTws->fBuffer) {
1936 if (
gTws->fWidth < wval ||
gTws->fHeight < hval) {
1944 if (
gTws->fDoubleBuffer)
gTws->fDrawing =
gTws->fBuffer;
1946 gTws->fWidth = wval;
1947 gTws->fHeight = hval;
1962 if (
gCws->fClip && !
gCws->fIsPixmap && !
gCws->fDoubleBuffer) {
1963 region.x =
gCws->fXclip;
1964 region.y =
gCws->fYclip;
1965 region.width =
gCws->fWclip;
1966 region.height =
gCws->fHclip;
1967 for (i = 0; i <
kMAXGC; i++)
1968 XSetClipRectangles((Display*)
fDisplay,
gGClist[i], 0, 0, ®ion, 1, YXBanded);
1970 for (i = 0; i <
kMAXGC; i++)
1982 if (chupx == 0 && chupy == 0)
fTextAngle = 0;
1983 else if (chupx == 0 && chupy == 1)
fTextAngle = 0;
1984 else if (chupx == -1 && chupy == 0)
fTextAngle = 90;
1985 else if (chupx == 0 && chupy == -1)
fTextAngle = 180;
1986 else if (chupx == 1 && chupy == 0)
fTextAngle = 270;
2004 for (
int i = 0; i <
kMAXGC; i++)
2024 if (
gTws->fClip && !
gTws->fIsPixmap && !
gTws->fDoubleBuffer) {
2026 region.x =
gTws->fXclip;
2027 region.y =
gTws->fYclip;
2028 region.width =
gTws->fWclip;
2029 region.height =
gTws->fHclip;
2030 for (
int i = 0; i <
kMAXGC; i++)
2031 XSetClipRectangles((Display*)
fDisplay,
gGClist[i], 0, 0, ®ion, 1, YXBanded);
2049 }
else if (!
fColormap && (ci < 0 || ci > 1)) {
2055 XGetGCValues((Display*)
fDisplay, gc, GCBackground, &values);
2056 XSetForeground((Display*)
fDisplay, gc, col.
fPixel ^ values.background);
2062 XGetGCValues((Display*)
fDisplay, gc, GCForeground | GCBackground, &values);
2063 if (values.foreground == values.background)
2104 if (!
gTws->fOpen)
return;
2121 if (!
gTws->fDoubleBuffer)
return;
2122 gTws->fDoubleBuffer = 0;
2131 if (
gTws->fDoubleBuffer ||
gTws->fIsPixmap)
return;
2132 if (!
gTws->fBuffer) {
2140 gTws->fDoubleBuffer = 1;
2202 Int_t fasi = fstyle%1000;
2211 static int current_fasi = 0;
2229 if (fasi != current_fasi) {
2234 int stn = (fasi >= 1 && fasi <=25) ? fasi : 2;
2240 current_fasi = fasi;
2254 XSetWindowAttributes attributes;
2259 attr_mask = CWEventMask;
2260 XChangeWindowAttributes((Display*)
fDisplay,
gCws->fWindow, attr_mask, &attributes);
2262 attributes.event_mask = NoEventMask;
2263 attr_mask = CWEventMask;
2264 XChangeWindowAttributes((Display*)
fDisplay,
gCws->fWindow, attr_mask, &attributes);
2273 if (cindex < 0)
return;
2320 static Int_t dashed[2] = {3,3};
2321 static Int_t dotted[2] = {1,2};
2322 static Int_t dasheddotted[4] = {3,4,1,4};
2328 }
else if (lstyle == 2 ) {
2330 }
else if (lstyle == 3 ) {
2332 }
else if (lstyle == 4 ) {
2340 for (
Int_t j = 0; j<nt; j++) {
2342 sscanf(((
TObjString*)tokens->
At(j))->GetName(),
"%d", &it);
2343 linestyle[j] = (
Int_t)(it/4);
2346 delete [] linestyle;
2378 if (cindex < 0)
return;
2395 if (msize < 0)
return;
2420 for (
int i = 0; i <
gMarker.n; i++) {
2433 static RXPoint shape[30];
2434 if (markerstyle >= 50)
return;
2438 if (markerstyle == 2) {
2440 shape[0].x = -im; shape[0].y = 0;
2441 shape[1].x = im; shape[1].y = 0;
2442 shape[2].x = 0 ; shape[2].y = -im;
2443 shape[3].x = 0 ; shape[3].y = im;
2445 }
else if (markerstyle == 3 || markerstyle == 31) {
2447 shape[0].x = -im; shape[0].y = 0;
2448 shape[1].x = im; shape[1].y = 0;
2449 shape[2].x = 0 ; shape[2].y = -im;
2450 shape[3].x = 0 ; shape[3].y = im;
2452 shape[4].x = -im; shape[4].y = -im;
2453 shape[5].x = im; shape[5].y = im;
2454 shape[6].x = -im; shape[6].y = im;
2455 shape[7].x = im; shape[7].y = -im;
2457 }
else if (markerstyle == 4 || markerstyle == 24) {
2460 }
else if (markerstyle == 5) {
2463 shape[0].x = -im; shape[0].y = -im;
2464 shape[1].x = im; shape[1].y = im;
2465 shape[2].x = -im; shape[2].y = im;
2466 shape[3].x = im; shape[3].y = -im;
2468 }
else if (markerstyle == 6) {
2470 shape[0].x = -1 ; shape[0].y = 0;
2471 shape[1].x = 1 ; shape[1].y = 0;
2472 shape[2].x = 0 ; shape[2].y = -1;
2473 shape[3].x = 0 ; shape[3].y = 1;
2475 }
else if (markerstyle == 7) {
2477 shape[0].x = -1 ; shape[0].y = 1;
2478 shape[1].x = 1 ; shape[1].y = 1;
2479 shape[2].x = -1 ; shape[2].y = 0;
2480 shape[3].x = 1 ; shape[3].y = 0;
2481 shape[4].x = -1 ; shape[4].y = -1;
2482 shape[5].x = 1 ; shape[5].y = -1;
2484 }
else if (markerstyle == 8 || markerstyle == 20) {
2487 }
else if (markerstyle == 21) {
2489 shape[0].x = -im; shape[0].y = -im;
2490 shape[1].x = im; shape[1].y = -im;
2491 shape[2].x = im; shape[2].y = im;
2492 shape[3].x = -im; shape[3].y = im;
2493 shape[4].x = -im; shape[4].y = -im;
2495 }
else if (markerstyle == 22) {
2497 shape[0].x = -im; shape[0].y = im;
2498 shape[1].x = im; shape[1].y = im;
2499 shape[2].x = 0; shape[2].y = -im;
2500 shape[3].x = -im; shape[3].y = im;
2502 }
else if (markerstyle == 23) {
2504 shape[0].x = 0; shape[0].y = im;
2505 shape[1].x = im; shape[1].y = -im;
2506 shape[2].x = -im; shape[2].y = -im;
2507 shape[3].x = 0; shape[3].y = im;
2509 }
else if (markerstyle == 25) {
2511 shape[0].x = -im; shape[0].y = -im;
2512 shape[1].x = im; shape[1].y = -im;
2513 shape[2].x = im; shape[2].y = im;
2514 shape[3].x = -im; shape[3].y = im;
2515 shape[4].x = -im; shape[4].y = -im;
2517 }
else if (markerstyle == 26) {
2519 shape[0].x = -im; shape[0].y = im;
2520 shape[1].x = im; shape[1].y = im;
2521 shape[2].x = 0; shape[2].y = -im;
2522 shape[3].x = -im; shape[3].y = im;
2524 }
else if (markerstyle == 27) {
2527 shape[0].x =-imx; shape[0].y = 0;
2528 shape[1].x = 0; shape[1].y = -im;
2529 shape[2].x = imx; shape[2].y = 0;
2530 shape[3].x = 0; shape[3].y = im;
2531 shape[4].x =-imx; shape[4].y = 0;
2533 }
else if (markerstyle == 28) {
2536 shape[0].x = -im; shape[0].y =-imx;
2537 shape[1].x =-imx; shape[1].y =-imx;
2538 shape[2].x =-imx; shape[2].y = -im;
2539 shape[3].x = imx; shape[3].y = -im;
2540 shape[4].x = imx; shape[4].y =-imx;
2541 shape[5].x = im; shape[5].y =-imx;
2542 shape[6].x = im; shape[6].y = imx;
2543 shape[7].x = imx; shape[7].y = imx;
2544 shape[8].x = imx; shape[8].y = im;
2545 shape[9].x =-imx; shape[9].y = im;
2546 shape[10].x=-imx; shape[10].y= imx;
2547 shape[11].x= -im; shape[11].y= imx;
2548 shape[12].x= -im; shape[12].y=-imx;
2550 }
else if (markerstyle == 29) {
2556 shape[0].x = -im; shape[0].y = im4;
2557 shape[1].x =-im2; shape[1].y =-im1;
2558 shape[2].x =-im3; shape[2].y = -im;
2559 shape[3].x = 0; shape[3].y =-im2;
2560 shape[4].x = im3; shape[4].y = -im;
2561 shape[5].x = im2; shape[5].y =-im1;
2562 shape[6].x = im; shape[6].y = im4;
2563 shape[7].x = im4; shape[7].y = im4;
2564 shape[8].x = 0; shape[8].y = im;
2565 shape[9].x =-im4; shape[9].y = im4;
2566 shape[10].x= -im; shape[10].y= im4;
2568 }
else if (markerstyle == 30) {
2574 shape[0].x = -im; shape[0].y = im4;
2575 shape[1].x =-im2; shape[1].y =-im1;
2576 shape[2].x =-im3; shape[2].y = -im;
2577 shape[3].x = 0; shape[3].y =-im2;
2578 shape[4].x = im3; shape[4].y = -im;
2579 shape[5].x = im2; shape[5].y =-im1;
2580 shape[6].x = im; shape[6].y = im4;
2581 shape[7].x = im4; shape[7].y = im4;
2582 shape[8].x = 0; shape[8].y = im;
2583 shape[9].x =-im4; shape[9].y = im4;
2584 shape[10].x= -im; shape[10].y= im4;
2586 }
else if (markerstyle == 32) {
2588 shape[0].x = 0; shape[0].y = im;
2589 shape[1].x = im; shape[1].y = -im;
2590 shape[2].x = -im; shape[2].y = -im;
2591 shape[3].x = 0; shape[3].y = im;
2593 }
else if (markerstyle == 33) {
2596 shape[0].x =-imx; shape[0].y = 0;
2597 shape[1].x = 0; shape[1].y = -im;
2598 shape[2].x = imx; shape[2].y = 0;
2599 shape[3].x = 0; shape[3].y = im;
2600 shape[4].x =-imx; shape[4].y = 0;
2602 }
else if (markerstyle == 34) {
2605 shape[0].x = -im; shape[0].y =-imx;
2606 shape[1].x =-imx; shape[1].y =-imx;
2607 shape[2].x =-imx; shape[2].y = -im;
2608 shape[3].x = imx; shape[3].y = -im;
2609 shape[4].x = imx; shape[4].y =-imx;
2610 shape[5].x = im; shape[5].y =-imx;
2611 shape[6].x = im; shape[6].y = imx;
2612 shape[7].x = imx; shape[7].y = imx;
2613 shape[8].x = imx; shape[8].y = im;
2614 shape[9].x =-imx; shape[9].y = im;
2615 shape[10].x=-imx; shape[10].y= imx;
2616 shape[11].x= -im; shape[11].y= imx;
2617 shape[12].x= -im; shape[12].y=-imx;
2619 }
else if (markerstyle == 35) {
2621 shape[0].x =-im; shape[0].y = 0;
2622 shape[1].x = 0; shape[1].y = -im;
2623 shape[2].x = im; shape[2].y = 0;
2624 shape[3].x = 0; shape[3].y = im;
2625 shape[4].x =-im; shape[4].y = 0;
2626 shape[5].x = im; shape[5].y = 0;
2627 shape[6].x = 0; shape[6].y = im;
2628 shape[7].x = 0; shape[7].y =-im;
2630 }
else if (markerstyle == 36) {
2632 shape[0].x = -im; shape[0].y = -im;
2633 shape[1].x = im; shape[1].y = -im;
2634 shape[2].x = im; shape[2].y = im;
2635 shape[3].x = -im; shape[3].y = im;
2636 shape[4].x = -im; shape[4].y = -im;
2637 shape[5].x = im; shape[5].y = im;
2638 shape[6].x = -im; shape[6].y = im;
2639 shape[7].x = im; shape[7].y = -im;
2641 }
else if (markerstyle == 37) {
2644 shape[0].x = 0; shape[0].y = 0;
2645 shape[1].x =-im2; shape[1].y = im;
2646 shape[2].x = im2; shape[2].y = im;
2647 shape[3].x = 0; shape[3].y = 0;
2648 shape[4].x =-im2; shape[4].y = -im;
2649 shape[5].x = -im; shape[5].y = 0;
2650 shape[6].x = 0; shape[6].y = 0;
2651 shape[7].x = im; shape[7].y = 0;
2652 shape[8].x = im2; shape[8].y = -im;
2653 shape[9].x = 0; shape[9].y = 0;
2655 }
else if (markerstyle == 38) {
2658 shape[0].x = -im; shape[0].y = 0;
2659 shape[1].x = -im; shape[1].y =-im2;
2660 shape[2].x =-im2; shape[2].y = -im;
2661 shape[3].x = im2; shape[3].y = -im;
2662 shape[4].x = im; shape[4].y =-im2;
2663 shape[5].x = im; shape[5].y = im2;
2664 shape[6].x = im2; shape[6].y = im;
2665 shape[7].x =-im2; shape[7].y = im;
2666 shape[8].x = -im; shape[8].y = im2;
2667 shape[9].x = -im; shape[9].y = 0;
2668 shape[10].x = im; shape[10].y = 0;
2669 shape[11].x = 0; shape[11].y = 0;
2670 shape[12].x = 0; shape[12].y = -im;
2671 shape[13].x = 0; shape[13].y = im;
2672 shape[14].x = 0; shape[14].y = 0;
2674 }
else if (markerstyle == 39) {
2677 shape[0].x = 0; shape[0].y = 0;
2678 shape[1].x =-im2; shape[1].y = im;
2679 shape[2].x = im2; shape[2].y = im;
2680 shape[3].x = 0; shape[3].y = 0;
2681 shape[4].x =-im2; shape[4].y = -im;
2682 shape[5].x = -im; shape[5].y = 0;
2683 shape[6].x = 0; shape[6].y = 0;
2684 shape[7].x = im; shape[7].y = 0;
2685 shape[8].x = im2; shape[8].y = -im;
2687 }
else if (markerstyle == 40) {
2690 shape[0].x = 0; shape[0].y = 0;
2691 shape[1].x = im2; shape[1].y = im;
2692 shape[2].x = im; shape[2].y = im2;
2693 shape[3].x = 0; shape[3].y = 0;
2694 shape[4].x = im; shape[4].y = -im2;
2695 shape[5].x = im2; shape[5].y = -im;
2696 shape[6].x = 0; shape[6].y = 0;
2697 shape[7].x = -im2; shape[7].y = -im;
2698 shape[8].x = -im; shape[8].y = -im2;
2699 shape[9].x = 0; shape[9].y = 0;
2700 shape[10].x = -im; shape[10].y = im2;
2701 shape[11].x = -im2; shape[11].y = im;
2702 shape[12].x = 0; shape[12].y = 0;
2704 }
else if (markerstyle == 41) {
2707 shape[0].x = 0; shape[0].y = 0;
2708 shape[1].x = im2; shape[1].y = im;
2709 shape[2].x = im; shape[2].y = im2;
2710 shape[3].x = 0; shape[3].y = 0;
2711 shape[4].x = im; shape[4].y = -im2;
2712 shape[5].x = im2; shape[5].y = -im;
2713 shape[6].x = 0; shape[6].y = 0;
2714 shape[7].x = -im2; shape[7].y = -im;
2715 shape[8].x = -im; shape[8].y = -im2;
2716 shape[9].x = 0; shape[9].y = 0;
2717 shape[10].x = -im; shape[10].y = im2;
2718 shape[11].x = -im2; shape[11].y = im;
2719 shape[12].x = 0; shape[12].y = 0;
2721 }
else if (markerstyle == 42) {
2724 shape[0].x= 0; shape[0].y= im;
2725 shape[1].x= -imx; shape[1].y= imx;
2726 shape[2].x = -im; shape[2].y = 0;
2727 shape[3].x = -imx; shape[3].y = -imx;
2728 shape[4].x = 0; shape[4].y = -im;
2729 shape[5].x = imx; shape[5].y = -imx;
2730 shape[6].x = im; shape[6].y = 0;
2731 shape[7].x= imx; shape[7].y= imx;
2732 shape[8].x= 0; shape[8].y= im;
2734 }
else if (markerstyle == 43) {
2737 shape[0].x = 0; shape[0].y = im;
2738 shape[1].x = -imx; shape[1].y = imx;
2739 shape[2].x = -im; shape[2].y = 0;
2740 shape[3].x = -imx; shape[3].y = -imx;
2741 shape[4].x = 0; shape[4].y = -im;
2742 shape[5].x = imx; shape[5].y = -imx;
2743 shape[6].x = im; shape[6].y = 0;
2744 shape[7].x = imx; shape[7].y = imx;
2745 shape[8].x = 0; shape[8].y = im;
2747 }
else if (markerstyle == 44) {
2750 shape[0].x = 0; shape[0].y = 0;
2751 shape[1].x = im2; shape[1].y = im;
2752 shape[2].x = -im2; shape[2].y = im;
2753 shape[3].x = im2; shape[3].y = -im;
2754 shape[4].x = -im2; shape[4].y = -im;
2755 shape[5].x = 0; shape[5].y = 0;
2756 shape[6].x = im; shape[6].y = im2;
2757 shape[7].x = im; shape[7].y = -im2;
2758 shape[8].x = -im; shape[8].y = im2;
2759 shape[9].x = -im; shape[9].y = -im2;
2760 shape[10].x = 0; shape[10].y = 0;
2762 }
else if (markerstyle == 45) {
2766 shape[0].x = im0; shape[0].y = im0;
2767 shape[1].x = im2; shape[1].y = im;
2768 shape[2].x = -im2; shape[2].y = im;
2769 shape[3].x = -im0; shape[3].y = im0;
2770 shape[4].x = -im; shape[4].y = im2;
2771 shape[5].x = -im; shape[5].y = -im2;
2772 shape[6].x = -im0; shape[6].y = -im0;
2773 shape[7].x = -im2; shape[7].y = -im;
2774 shape[8].x = im2; shape[8].y = -im;
2775 shape[9].x = im0; shape[9].y = -im0;
2776 shape[10].x = im; shape[10].y = -im2;
2777 shape[11].x = im; shape[11].y = im2;
2778 shape[12].x = im0; shape[12].y = im0;
2780 }
else if (markerstyle == 46) {
2783 shape[0].x = 0; shape[0].y = im2;
2784 shape[1].x = -im2; shape[1].y = im;
2785 shape[2].x = -im; shape[2].y = im2;
2786 shape[3].x = -im2; shape[3].y = 0;
2787 shape[4].x = -im; shape[4].y = -im2;
2788 shape[5].x = -im2; shape[5].y = -im;
2789 shape[6].x = 0; shape[6].y = -im2;
2790 shape[7].x = im2; shape[7].y = -im;
2791 shape[8].x = im; shape[8].y = -im2;
2792 shape[9].x = im2; shape[9].y = 0;
2793 shape[10].x = im; shape[10].y = im2;
2794 shape[11].x = im2; shape[11].y = im;
2795 shape[12].x = 0; shape[12].y = im2;
2797 }
else if (markerstyle == 47) {
2800 shape[0].x = 0; shape[0].y = im2;
2801 shape[1].x = -im2; shape[1].y = im;
2802 shape[2].x = -im; shape[2].y = im2;
2803 shape[3].x = -im2; shape[3].y = 0;
2804 shape[4].x = -im; shape[4].y = -im2;
2805 shape[5].x = -im2; shape[5].y = -im;
2806 shape[6].x = 0; shape[6].y = -im2;
2807 shape[7].x = im2; shape[7].y = -im;
2808 shape[8].x = im; shape[8].y = -im2;
2809 shape[9].x = im2; shape[9].y = 0;
2810 shape[10].x = im; shape[10].y = im2;
2811 shape[11].x = im2; shape[11].y = im;
2812 shape[12].x = 0; shape[12].y = im2;
2814 }
else if (markerstyle == 48) {
2817 shape[0].x = 0; shape[0].y = im2*1.005;
2818 shape[1].x = -im2; shape[1].y = im;
2819 shape[2].x = -im; shape[2].y = im2;
2820 shape[3].x = -im2; shape[3].y = 0;
2821 shape[4].x = -im; shape[4].y = -im2;
2822 shape[5].x = -im2; shape[5].y = -im;
2823 shape[6].x = 0; shape[6].y = -im2;
2824 shape[7].x = im2; shape[7].y = -im;
2825 shape[8].x = im; shape[8].y = -im2;
2826 shape[9].x = im2; shape[9].y = 0;
2827 shape[10].x = im; shape[10].y = im2;
2828 shape[11].x = im2; shape[11].y = im;
2829 shape[12].x = 0; shape[12].y = im2*0.995;
2830 shape[13].x = im2*0.995; shape[13].y = 0;
2831 shape[14].x = 0; shape[14].y = -im2*0.995;
2832 shape[15].x = -im2*0.995; shape[15].y = 0;
2833 shape[16].x = 0; shape[16].y = im2*0.995;
2835 }
else if (markerstyle == 49) {
2838 shape[0].x =-imx; shape[0].y =-imx*1.005;
2839 shape[1].x =-imx; shape[1].y = -im;
2840 shape[2].x = imx; shape[2].y = -im;
2841 shape[3].x = imx; shape[3].y =-imx;
2842 shape[4].x = im; shape[4].y =-imx;
2843 shape[5].x = im; shape[5].y = imx;
2844 shape[6].x = imx; shape[6].y = imx;
2845 shape[7].x = imx; shape[7].y = im;
2846 shape[8].x =-imx; shape[8].y = im;
2847 shape[9].x =-imx; shape[9].y = imx;
2848 shape[10].x = -im; shape[10].y = imx;
2849 shape[11].x = -im; shape[11].y =-imx;
2850 shape[12].x =-imx; shape[12].y =-imx*0.995;
2851 shape[13].x =-imx; shape[13].y = imx;
2852 shape[14].x = imx; shape[14].y = imx;
2853 shape[15].x = imx; shape[15].y =-imx;
2854 shape[16].x =-imx; shape[16].y =-imx*1.005;
2872 if (percent == 0)
return;
2875 ULong_t *orgcolors = 0, *tmpc = 0;
2876 Int_t maxcolors = 0, ncolors = 0, ntmpc = 0;
2879 if (
gCws->fNewColors) {
2880 tmpc =
gCws->fNewColors;
2881 ntmpc =
gCws->fNcolors;
2885 XImage *image = XGetImage((Display*)
fDisplay,
gCws->fDrawing, 0, 0,
gCws->fWidth,
2886 gCws->fHeight, AllPlanes, ZPixmap);
2890 for (
y = 0;
y < (int)
gCws->fHeight;
y++) {
2891 for (
x = 0;
x < (int)
gCws->fWidth;
x++) {
2897 XDestroyImage(image);
2898 ::operator
delete(orgcolors);
2905 if (
gCws->fNewColors) {
2907 for (
y = 0;
y < (int)
gCws->fHeight;
y++) {
2908 for (
x = 0;
x < (int)
gCws->fWidth;
x++) {
2911 XPutPixel(image,
x,
y,
gCws->fNewColors[idx]);
2927 XDestroyImage(image);
2928 ::operator
delete(orgcolors);
2937 if (maxcolors == 0) {
2940 orgcolors = (
ULong_t*) ::
operator new(maxcolors*
sizeof(
ULong_t));
2943 for (
int i = 0; i < ncolors; i++)
2944 if (pixel == orgcolors[i])
return;
2946 if (ncolors >= maxcolors) {
2952 orgcolors[ncolors++] = pixel;
2961 if (ncolors == 0)
return;
2963 RXColor *xcol =
new RXColor[ncolors];
2966 for (i = 0; i < ncolors; i++) {
2967 xcol[i].pixel = orgcolors[i];
2968 xcol[i].red = xcol[i].green = xcol[i].blue = 0;
2969 xcol[i].flags = DoRed | DoGreen | DoBlue;
2976 for (i = 0; i < ncolors; i++) {
2977 val = xcol[i].red + add;
2980 val = xcol[i].green + add;
2983 val = xcol[i].blue + add;
2987 Warning(
"MakeOpaqueColors",
"failed to allocate color %hd, %hd, %hd",
2988 xcol[i].red, xcol[i].green, xcol[i].blue);
2993 gCws->fNcolors = ncolors;
2995 for (i = 0; i < ncolors; i++)
2996 gCws->fNewColors[i] = xcol[i].pixel;
3006 for (
int i = 0; i < ncolors; i++)
3007 if (pixel == orgcolors[i])
return i;
3009 Error(
"FindColor",
"did not find color, should never happen!");
3027 xcol.flags = DoRed | DoGreen | DoBlue;
3031 if (col.
fRed == xcol.red && col.
fGreen == xcol.green &&
3032 col.
fBlue == xcol.blue)
3041 col.
fRed = xcol.red;
3043 col.
fBlue = xcol.blue;
3055 Int_t txalh = talign/10;
3056 Int_t txalv = talign%10;
3112 if (cindex < 0)
return;
3119 if (XGetGCValues((Display*)
fDisplay, *
gGCtext, GCForeground | GCBackground, &values)) {
3123 Error(
"SetTextColor",
"cannot get GC values");
3145 if (mode ==
kLoad) {
3147 if (strcmp(fontname,
gFont[i].
name) == 0) {
3156 fontlist = XListFonts((Display*)
fDisplay, fontname, 1, &fontcount);
3158 if (fontlist && fontcount != 0) {
3159 if (mode ==
kLoad) {
3170 XFreeFontNames(fontlist);
3205 XSynchronize((Display*)
fDisplay,1);
3209 XSynchronize((Display*)
fDisplay,0);
3225 if (
gCws->fDoubleBuffer) {
3252 XWarpPointer((Display*)
fDisplay, None, (
Window)
id, 0, 0, 0, 0, ix, iy);
3265 unsigned int wval, hval;
3270 XWriteBitmapFile((Display*)
fDisplay, pxname,
gTws->fDrawing, wval, hval, -1, -1);
3285 void (*get_scline) (
int,
int,
Byte_t *),
void (*pb)(
Byte_t));
3287 int GIFinfo(
Byte_t *gifArr,
int *Width,
int *Height,
int *Ncols);
3295 for (
int i = 0; i <
width; i++)
3319 Int_t maxcolors = 0, ncolors = 0;
3323 for (
x = 0;
x < (int)
gCws->fWidth;
x++) {
3324 for (
y = 0;
y < (int)
gCws->fHeight;
y++) {
3331 RXColor *xcol =
new RXColor[ncolors];
3334 for (i = 0; i < ncolors; i++) {
3335 xcol[i].pixel = orgcolors[i];
3336 xcol[i].red = xcol[i].green = xcol[i].blue = 0;
3337 xcol[i].flags = DoRed | DoGreen | DoBlue;
3347 for (i = 0; i < ncolors; i++) {
3349 G[i] = xcol[i].green;
3350 B[i] = xcol[i].blue;
3355 for (
x = 0;
x < (int)
gCws->fWidth;
x++) {
3356 for (
y = 0;
y < (int)
gCws->fHeight;
y++) {
3359 XPutPixel(image,
x,
y, idx);
3365 ::operator
delete(orgcolors);
3374 Byte_t scline[2000],
r[256],
b[256],
g[256];
3375 Int_t *red, *green, *blue;
3376 Int_t ncol, maxcol, i;
3385 AllPlanes, ZPixmap);
3391 Error(
"WriteGIF",
"Cannot create GIF of image containing more than 256 colors. Try in batch mode.");
3399 for (i = 0; i < ncol; i++) {
3400 if (maxcol < red[i] ) maxcol = red[i];
3401 if (maxcol < green[i] ) maxcol = green[i];
3402 if (maxcol < blue[i] ) maxcol = blue[i];
3408 for (i = 0; i < ncol; i++) {
3409 r[i] = red[i] * 255/maxcol;
3410 g[i] = green[i] * 255/maxcol;
3411 b[i] = blue[i] * 255/maxcol;
3423 Error(
"WriteGIF",
"cannot write file: %s",
name);
3438 const int maxSegment = 20;
3439 int i,
n,
x,
y, xcur,
x1,
x2, y1, y2;
3440 unsigned char *jimg, *jbase, icol;
3442 XSegment lines[256][maxSegment];
3448 id =
gCws->fDrawing;
3451 for (i = 0; i < 256; i++) nlines[i] = 0;
3455 jbase = image + (
ymin-1)*nx +
xmin;
3457 for (
y = y2;
y >= y1;
y--) {
3458 xcur =
x1; jbase += nx;
3459 for (jimg = jbase, icol = *jimg++,
x =
x1+1;
x <=
x2; jimg++,
x++) {
3460 if (icol != *jimg) {
3461 if (icol != itran) {
3463 lines[icol][
n].x1 = xcur; lines[icol][
n].y1 =
y;
3464 lines[icol][
n].x2 =
x-1; lines[icol][
n].y2 =
y;
3465 if (nlines[icol] == maxSegment) {
3472 icol = *jimg; xcur =
x;
3475 if (icol != itran) {
3477 lines[icol][
n].x1 = xcur; lines[icol][
n].y1 =
y;
3478 lines[icol][
n].x2 =
x-1; lines[icol][
n].y2 =
y;
3479 if (nlines[icol] == maxSegment) {
3488 for (i = 0; i < 256; i++) {
3489 if (nlines[i] != 0) {
3504 unsigned char *gifArr, *pixArr, red[256], green[256], blue[256], *j1, *j2, icol;
3505 int i, j, k,
width, height, ncolor, irep, offset;
3509 fd = fopen(
file,
"r");
3511 Error(
"ReadGIF",
"unable to open GIF file");
3516 long ft = ftell(fd);
3518 Error(
"ReadGIF",
"unable to open GIF file");
3526 if (!(gifArr = (
unsigned char *)
calloc(filesize+256,1))) {
3527 Error(
"ReadGIF",
"unable to allocate array for gif");
3532 if (fread(gifArr, filesize, 1, fd) != 1) {
3533 Error(
"ReadGIF",
"GIF file read failed");
3546 if (!(pixArr = (
unsigned char *)
calloc((
width*height),1))) {
3547 Error(
"ReadGIF",
"unable to allocate array for image");
3552 irep =
GIFdecode(gifArr, pixArr, &
width, &height, &ncolor, red, green, blue);
3563 for (i = 0; i < ncolor; i++) {
3573 for (i = 1; i <= height/2; i++) {
3574 j1 = pixArr + (i-1)*
width;
3575 j2 = pixArr + (height-i)*
width;
3576 for (k = 0; k <
width; k++) {
3577 icol = *j1; *j1++ = *j2; *j2++ = icol;
3581 PutImage(offset,-1,x0,y0,
width,height,0,0,
width-1,height-1,pixArr,pic);
3588 else if (
gCws->fDrawing)
3642 fWindows, newsize *
sizeof(XWindow_t),
3654 gCws->fWindow = pixid;
3657 gCws->fDoubleBuffer = 0;
3658 gCws->fIsPixmap = 1;
3662 gCws->fNewColors = 0;
3679 Int_t major_opcode, first_event, first_error;
3682 return XQueryExtension((Display*)
fDisplay, ext, &major_opcode, &first_event, &first_error);
#define R(a, b, c, d, e, f, g, h, i)
const unsigned char gStipples[26][32]
static const double x2[5]
static const double x1[5]
const size_t kBitsPerByte
include TDocParser_001 C image html pict1_TDocParser_001 png width
XPoint * XRotTextExtents(Display *, XFontStruct *, float, int, int, char *, int)
Calculate the bounding box some text will have when painted.
float XRotVersion(char *, int)
Return version/copyright information.
int GIFquantize(UInt_t width, UInt_t height, Int_t *ncol, Byte_t *red, Byte_t *green, Byte_t *blue, Byte_t *outputBuf, Byte_t *outputCmap)
static ULong_t gKeybdMask
void XRotSetMagnification(float)
Set the font magnification factor for all subsequent operations.
static void GetPixel(int y, int width, Byte_t *scline)
Get pixels in line y and put in array scline.
static Pixmap gFillPattern
static Cursor gNullCursor
static struct @48 gFont[kMAXFONT]
int GIFdecode(Byte_t *gifArr, Byte_t *pixArr, int *Width, int *Height, int *Ncols, Byte_t *R, Byte_t *G, Byte_t *B)
const char null_cursor_bits[]
int XRotDrawString(Display *, XFontStruct *, float, Drawable, GC, int, int, char *)
A front end to XRotPaintAlignedString: -no alignment, no background.
static char gDashList[10]
const Int_t kBIGGEST_RGB_VALUE
static void PutByte(Byte_t b)
Put byte b in output stream.
long GIFencode(int Width, int Height, Int_t Ncol, Byte_t R[], Byte_t G[], Byte_t B[], Byte_t ScLine[], void(*get_scline)(int, int, Byte_t *), void(*pb)(Byte_t))
int XRotDrawAlignedImageString(Display *, XFontStruct *, float, Drawable, GC, int, int, char *, int)
A front end to XRotPaintAlignedString: -does alignment, paints background.
static ULong_t gMouseMask
static Int_t gCurrentFontNumber
static GC gGClist[kMAXGC]
int XRotDrawAlignedString(Display *, XFontStruct *, float, Drawable, GC, int, int, char *, int)
A front end to XRotPaintAlignedString: -does alignment, no background.
int XRotDrawImageString(Display *, XFontStruct *, float, Drawable, GC, int, int, char *)
A front end to XRotPaintAlignedString: -no alignment, paints background.
static XFontStruct * gTextFont
void XRotSetBoundingBoxPad(int)
Set the padding used when calculating bounding boxes.
static Int_t DummyX11ErrorHandler(Display *, XErrorEvent *)
Dummy error handler for X11. Used by FindUsableVisual().
int GIFinfo(Byte_t *gifArr, int *Width, int *Height, int *Ncols)
static struct @49 gMarker
R__EXTERN TStyle * gStyle
virtual Color_t GetFillColor() const
Return the fill area color.
Style_t fFillStyle
Fill area style.
Color_t fFillColor
Fill area color.
Width_t fLineWidth
Line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Style_t fLineStyle
Line style.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Size_t fMarkerSize
Marker size.
Style_t fMarkerStyle
Marker style.
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
Float_t fTextAngle
Text angle.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Font_t fTextFont
Text font.
Float_t fTextSize
Text size.
The color creation and management class.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Bool_t Next(ULong64_t &hash, Long64_t &key, Long64_t &value)
Get next entry from TExMap. Returns kFALSE at end of map.
This class stores a (key,value) pair using an external hash.
void Add(ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table. The key should be unique.
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
This class is the basic interface to the X11 (Xlib) graphics system.
void * fDisplay
Pointer to display.
void QueryPointer(Int_t &ix, Int_t &iy)
Query pointer position.
void MakeOpaqueColors(Int_t percent, ULong_t *orgcolors, Int_t ncolors)
Get RGB values for orgcolors, add percent neutral to the RGB and allocate fNewColors.
Colormap fColormap
Default colormap, 0 if b/w.
virtual void GetTextExtent(UInt_t &w, UInt_t &h, char *mess)
Return the size of a character string.
Int_t fScreenNumber
Screen number.
void SetDoubleBufferOFF()
Turn double buffer mode off.
void SetTextColor(Color_t cindex)
Set color index for text.
void SelectWindow(Int_t wid)
Select window to which subsequent output is directed.
void DrawPolyLine(Int_t n, TPoint *xy)
Draw a line through all points.
void SetLineType(Int_t n, Int_t *dash)
Set line type.
void CollectImageColors(ULong_t pixel, ULong_t *&orgcolors, Int_t &ncolors, Int_t &maxcolors)
Collect in orgcolors all different original image colors.
Pixmap_t CreatePixmap(Drawable_t id, UInt_t w, UInt_t h)
Creates a pixmap of the width and height you specified and returns a pixmap ID that identifies it.
ULong_t fWhitePixel
Value of white pixel in colormap.
Cursor fCursors[kNumCursors]
List of cursors.
Bool_t AllocColor(Colormap cmap, RXColor *color)
Allocate color in colormap.
Int_t fTextAlignV
Text Alignment Vertical.
void QueryColors(Colormap cmap, RXColor *colors, Int_t ncolors)
Returns the current RGB value for the pixel in the XColor structure.
Int_t fBlueShift
Bits to left shift blue.
void ClosePixmap()
Delete current pixmap.
void SetDoubleBufferON()
Turn double buffer mode on.
void GetCharacterUp(Float_t &chupx, Float_t &chupy)
Return character up vector.
void Warp(Int_t ix, Int_t iy, Window_t id=0)
Set pointer position.
void SetTextAlign(Short_t talign=11)
Set text alignment.
void RescaleWindow(Int_t wid, UInt_t w, UInt_t h)
Rescale the window wid.
Window_t GetWindowID(Int_t wid)
Return the X11 window identifier.
Int_t AddWindow(ULong_t qwid, UInt_t w, UInt_t h)
Register a window created by Qt as a ROOT window (like InitWindow()).
void SetCursor(Int_t win, ECursor cursor)
Set the cursor.
void Sync(Int_t mode)
Set synchronisation on or off.
void * GetGC(Int_t which) const
Return desired Graphics Context ("which" maps directly on gGCList[]).
void MoveWindow(Int_t wid, Int_t x, Int_t y)
Move the window wid.
unsigned char * GetColorBits(Drawable_t wid, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Returns an array of pixels created from a part of drawable (defined by x, y, w, h) in format: b1,...
void SetMarkerSize(Float_t markersize)
Set marker size index.
void SetDrawMode(EDrawMode mode)
Set the drawing mode.
Int_t AddPixmap(ULong_t pixid, UInt_t w, UInt_t h)
Register pixmap created by gVirtualGL.
Bool_t fHasXft
True when XftFonts are used.
void WritePixmap(Int_t wid, UInt_t w, UInt_t h, char *pxname)
Write the pixmap wid in the bitmap file pxname.
void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode)
Draw a box.
void ClearPixmap(Drawable *pix)
Clear the pixmap pix.
Float_t fTextMagnitude
Text Magnitude.
void SetCharacterUp(Float_t chupx, Float_t chupy)
Set character up vector.
Drawable fRootWin
Root window used as parent of all windows.
void SetMarkerStyle(Style_t markerstyle)
Set marker style.
virtual ~TGX11()
Destructor.
void DrawFillArea(Int_t n, TPoint *xy)
Fill area described by polygon.
void SetInput(Int_t inp)
Set input on or off.
void RemoveWindow(ULong_t qwid)
Remove a window created by Qt (like CloseWindow1()).
void SetClipRegion(Int_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h)
Set clipping region for the window wid.
Int_t fTextAlignH
Text Alignment Horizontal.
void * fXEvent
Current native (X11) event.
ULong_t GetPixel(Color_t cindex)
Return pixel value associated to specified ROOT color number.
Int_t fGreenShift
Bits to left shift green.
void GetGeometry(Int_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h)
Return position and size of window wid.
void SetOpacity(Int_t percent)
Set opacity of a window.
void SetFillColor(Color_t cindex)
Set color index for fill areas.
Pixmap_t CreatePixmapFromData(unsigned char *bits, UInt_t width, UInt_t height)
create pixmap from RGB data.
Int_t InitWindow(ULong_t window)
Open window and return window number.
void ClearWindow()
Clear current window.
Int_t WriteGIF(char *name)
Writes the current window into GIF file.
XColor_t & GetColor(Int_t cid)
Return reference to internal color structure associated to color index cid.
Int_t fBlueDiv
Blue value divider.
void CopyWindowtoPixmap(Drawable *pix, Int_t xpos, Int_t ypos)
Copy area of current window in the pixmap pix.
void SetLineStyle(Style_t linestyle)
Set line style.
Drawable fVisRootWin
Root window with fVisual to be used to create GC's and XImages.
void GetPlanes(Int_t &nplanes)
Get maximum number of planes.
void SetMarkerColor(Color_t cindex)
Set color index for markers.
TExMap * fColors
Hash list of colors.
Int_t fTextAlign
Text alignment (set in SetTextAlign)
Window_t GetCurrentWindow() const
Return current window pointer. Protected method used by TGX11TTF.
void SetMarkerType(Int_t type, Int_t n, RXPoint *xy)
Set marker type.
Int_t fRedDiv
Red value divider, -1 if no TrueColor visual.
Int_t fDepth
Number of color planes.
void ResizeWindow(Int_t wid)
Resize the current window if necessary.
void CloseWindow()
Delete current window.
void CloseWindow1()
Delete current window.
Int_t SupportsExtension(const char *ext) const
Returns 1 if window system server supports extension given by the argument, returns 0 in case extensi...
ULong_t fBlackPixel
Value of black pixel in colormap.
const char * DisplayName(const char *dpyName=0)
Return hostname on which the display is opened.
Float_t fCharacterUpX
Character Up vector along X.
Int_t fGreenDiv
Green value divider.
Int_t RequestLocator(Int_t mode, Int_t ctyp, Int_t &x, Int_t &y)
Request Locator position.
void UpdateWindow(Int_t mode)
Update display.
virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode)
Draw a text string using current font.
TGX11()
Default constructor.
Bool_t Init(void *display)
Initialize X11 system. Returns kFALSE in case of failure.
void DrawLine(Int_t x1, Int_t y1, Int_t x2, Int_t y2)
Draw a line.
Int_t OpenPixmap(UInt_t w, UInt_t h)
Open a new pixmap.
Int_t fRedShift
Bits to left shift red, -1 if no TrueColor visual.
virtual void SetTextSize(Float_t textsize)
Set current text size.
Int_t OpenDisplay(void *display)
Open the display. Return -1 if the opening fails, 0 when ok.
Int_t ResizePixmap(Int_t wid, UInt_t w, UInt_t h)
Resize a pixmap.
void CopyPixmap(Int_t wid, Int_t xpos, Int_t ypos)
Copy the pixmap wid at the position xpos, ypos in the current window.
void RemovePixmap(Drawable *pix)
Remove the pixmap pix.
void FindUsableVisual(RXVisualInfo *vlist, Int_t nitems)
Check if visual is usable, if so set fVisual, fDepth, fColormap, fBlackPixel and fWhitePixel.
Pixmap_t ReadGIF(Int_t x0, Int_t y0, const char *file, Window_t id=0)
If id is NULL - loads the specified gif file at position [x0,y0] in the current window.
Int_t fMaxNumberOfWindows
Maximum number of windows.
void ImgPickPalette(RXImage *image, Int_t &ncol, Int_t *&R, Int_t *&G, Int_t *&B)
Returns in R G B the ncol colors of the palette used by the image.
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, Int_t *ic)
Draw a cell array.
Int_t FindColor(ULong_t pixel, ULong_t *orgcolors, Int_t ncolors)
Returns index in orgcolors (and fNewColors) for pixel.
void SetFillStyleIndex(Int_t style, Int_t fasi)
Set fill area style index.
RVisual * fVisual
Pointer to visual used by all windows.
void SetClipOFF(Int_t wid)
Turn off the clipping for the window wid.
virtual Int_t SetTextFont(char *fontname, ETextSetMode mode)
Set text font to specified name.
void SetFillStyle(Style_t style)
Set fill area style.
void SetLineWidth(Width_t width)
Set line width.
XWindow_t * fWindows
List of windows.
void PutImage(Int_t offset, Int_t itran, Int_t x0, Int_t y0, Int_t nx, Int_t ny, Int_t xmin, Int_t ymin, Int_t xmax, Int_t ymax, UChar_t *image, Drawable_t id)
Draw image.
void FindBestVisual()
Find best visual, i.e.
void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b)
Set color intensities for given color index.
void SetColor(void *gc, Int_t ci)
Set the foreground color in GC.
void SetDoubleBuffer(Int_t wid, Int_t mode)
Set the double buffer on/off on window wid.
void SetLineColor(Color_t cindex)
Set color index for lines.
void GetRGB(Int_t index, Float_t &r, Float_t &g, Float_t &b)
Get rgb values for color "index".
Int_t GetDoubleBuffer(Int_t wid)
Query the double buffer value for the window wid.
Float_t fCharacterUpY
Character Up vector along Y.
Bool_t fHasTTFonts
True when TrueType fonts are used.
void DrawPolyMarker(Int_t n, TPoint *xy)
Draw n markers with the current attributes at position x, y.
Int_t RequestString(Int_t x, Int_t y, char *text)
Request a string.
Int_t GetEntries() const
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const
Collectable string class.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static void * Alloc(size_t size)
Allocate a block of memory, that later can be resized using TStorage::ReAlloc().
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
static void Dealloc(void *ptr)
De-allocate block of memory, that was allocated via TStorage::Alloc().
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
const char * GetLineStyleString(Int_t i=1) const
Return line style string (used by PostScript).
Semi-Abstract base class defining a generic interface to the underlying, low level,...
static constexpr double L
Short_t Max(Short_t a, Short_t b)
Double_t Sqrt(Double_t x)
Short_t Min(Short_t a, Short_t b)
Description of a X11 color.
Bool_t fDefined
true if pixel value is defined
UShort_t fRed
red value in range [0,kBIGGEST_RGB_VALUE]
UShort_t fGreen
green value
ULong_t fPixel
color pixel value
#define org(otri, vertexptr)