60#include "RConfigure.h"
98# include "Windows4root.h"
102# define X_DISPLAY_MISSING 1
104# include <afterbase.h>
106# define X_DISPLAY_MISSING 1
107# include <afterbase.h>
109# include <afterimage.h>
128static char *
gIconPaths[7] = {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr};
135#if defined(__GNUC__) && __GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)) && !__INTEL_COMPILER
136#pragma GCC diagnostic ignored "-Wstrict-aliasing"
157#define _alphaBlend(bot, top) {\
158 __argb32__ *T = (__argb32__*)(top);\
159 __argb32__ *B = (__argb32__*)(bot);\
164 B->a = ((B->a*aa)>>8) + T->a;\
165 B->r = (B->r*aa + T->r*T->a)>>8;\
166 B->g = (B->g*aa + T->g*T->a)>>8;\
167 B->b = (B->b*aa + T->b*T->a)>>8;\
243 fImage = create_asimage(
w ?
w : 20,
h ?
h : 20, 0);
310 if (img.
fImage->alt.vector) {
331 if (
this != &img && img.
IsValid()) {
341 if (img.
fImage->alt.vector) {
389 const char *delim =
":";
391 const char *delim =
";";
393 while (icon_path.
Tokenize(token, from, delim) && cnt < 6) {
409 FILE *fp = fopen(file,
"rb");
410 const char *ret =
"";
412 if (!fp)
return nullptr;
414 if (!fread(&magic, 1, 1, fp)) {
422 if (!fread(&magic, 1, 1, fp)) {
426 if (!fread(&magic, 1, 1, fp)) {
431 ret = (magic == 1) ?
"ico" :
"cur";
436 if (!fread(&magic, 1, 1, fp)) {
443 else if (magic == 0x50)
494 Warning(
"ReadImage",
"Visual not initiated");
511 set_output_threshold(0);
513 static ASImageImportParams iparams;
517 iparams.filter = SCL_DO_ALL;
518 iparams.gamma = SCREEN_GAMMA;
519 iparams.gamma_table = NULL;
521 iparams.format = ASA_ASImage;
523 iparams.subimage = 0;
524 iparams.return_animation_delay = -1;
530 ASImage *image =
nullptr;
541 iparams.subimage = ext.
Atoi();
543 ext = strrchr(fname.
Data(),
'.') + 1;
546 image = file2ASImage_extra(fname.
Data(), &iparams);
558 unsigned char *
bitmap =
nullptr;
564 if (!handler || ((handler->
LoadPlugin() == -1))) {
583 image = bitmap2asimage(
bitmap,
w,
h, 0,
nullptr);
662 Error(
"WriteImage",
"no image in memory. Draw something first");
666 if (!file || !*file) {
667 Error(
"WriteImage",
"no file name specified");
672 if ((s = strrchr(file,
'.'))) {
676 Error(
"WriteImage",
"cannot determine a valid file type");
684 Error(
"WriteImage",
"not a valid file type was specified");
690 ASImageFileTypes atype = (ASImageFileTypes)mytype;
698 static ASImageExportParams parms;
703 parms.xpm.type = atype;
704 parms.xpm.flags = EXPORT_ALPHA;
705 parms.xpm.dither = 4;
706 parms.xpm.opaque_threshold = 127;
707 parms.xpm.max_colors = 512;
710 ASImage2bmp(im, fname.
Data(),
nullptr);
713 ASImage2xcf(im, fname.
Data(),
nullptr);
716 parms.png.type = atype;
717 parms.png.flags = EXPORT_ALPHA;
721 parms.jpeg.type = atype;
722 parms.jpeg.flags = 0;
723 parms.jpeg.quality = aquality;
726 parms.gif.type = atype;
727 parms.gif.flags = EXPORT_ALPHA;
728 parms.gif.dither = 0;
729 parms.gif.opaque_threshold = 0;
733 parms.gif.type = atype;
734 parms.gif.flags = EXPORT_ALPHA | EXPORT_APPEND;
735 parms.gif.dither = 0;
736 parms.gif.opaque_threshold = 0;
737 parms.gif.animate_repeats = 0;
750 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
751 parms.gif.animate_repeats = 0;
752 }
else if(sufix==
"") {
769 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
770 parms.gif.animate_repeats = atoi(s);
779 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
780 parms.gif.animate_repeats = 0;
781 }
else if(sLength>3 && sufix.
CountChar(
'+')==2 &&
TString(sufix(1,sLength-2)).Contains(
"++")) {
787 delay = atoi(sDelay);
788 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
789 parms.gif.animate_repeats = atoi(sRepeats);
791 Error(
"WriteImage",
"gif suffix %s not yet supported", s);
795 parms.gif.animate_delay = delay;
797 int i1 = fname.
Index(
"gif+");
799 fname = fname(0, i1 + 3);
802 Error(
"WriteImage",
"unexpected gif extension structure %s", fname.
Data());
808 parms.tiff.type = atype;
809 parms.tiff.flags = EXPORT_ALPHA;
810 parms.tiff.rows_per_strip = 0;
811 parms.tiff.compression_type = aquality <= 50 ? TIFF_COMPRESSION_JPEG :
812 TIFF_COMPRESSION_NONE;
813 parms.tiff.jpeg_quality = 100;
814 parms.tiff.opaque_threshold = 0;
817 Error(
"WriteImage",
"file type %s not yet supported", s);
821 if (!ASImage2file(im,
nullptr, fname.
Data(), atype, &parms)) {
822 Error(
"WriteImage",
"error writing file %s", file);
840 if (s ==
"jpg" || s ==
"jpeg")
879 astype = ASIT_Xpm;
break;
881 astype = ASIT_ZCompressedXpm;
break;
883 astype = ASIT_GZCompressedXpm;
break;
885 astype = ASIT_Png;
break;
887 astype = ASIT_Jpeg;
break;
889 astype = ASIT_Xcf;
break;
891 astype = ASIT_Ppm;
break;
893 astype = ASIT_Pnm;
break;
895 astype = ASIT_Bmp;
break;
897 astype = ASIT_Ico;
break;
899 astype = ASIT_Cur;
break;
901 astype = ASIT_Gif;
break;
903 astype = ASIT_Gif;
break;
905 astype = ASIT_Tiff;
break;
907 astype = ASIT_Xbm;
break;
909 astype = ASIT_Targa;
break;
911 astype = ASIT_XMLScript;
break;
913 astype = ASIT_Unknown;
919 case ASIT_ZCompressedXpm:
921 case ASIT_GZCompressedXpm:
964 asquality = 25;
break;
966 asquality = 75;
break;
968 asquality = 50;
break;
970 asquality = 100;
break;
976 if (asquality > 0 && asquality <= 25)
978 if (asquality > 26 && asquality <= 50)
980 if (asquality > 51 && asquality <= 75)
982 if (asquality > 76 && asquality <= 100)
1002 Warning(
"SetImage",
"Visual not initiated");
1019 ASVectorPalette asPalette;
1023 for (col = 0; col < 4; col++)
1024 asPalette.channels[col] =
new UShort_t[asPalette.npoints];
1031 asPalette.points =
new Double_t[asPalette.npoints];
1032 for (
Int_t point = 0; point <
Int_t(asPalette.npoints); point++)
1036 height, &asPalette, ASA_ASImage,
1039 delete [] asPalette.points;
1040 for (col = 0; col < 4; col++)
1041 delete [] asPalette.channels[col];
1088 Warning(
"FromX11Window",
"Visual not initiated");
1102 Error(
"FromPad",
"pad cannot be 0");
1107 Warning(
"FromPad",
"Visual not initiated");
1124 if (itmp && itmp->
fImage) {
1133 if (itmp && itmp->
fImage && (itmp !=
this)) {
1135 if (itmp->
fImage->alt.argb32) {
1137 fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
1138 memcpy(
fImage->alt.argb32, itmp->
fImage->alt.argb32, sz*4);
1167 Error(
"Draw",
"no image set");
1195 gPad->Range(-left / (1.0 - left - right),
1196 -bottom / (1.0 - top - bottom),
1197 1 + right / (1.0 - left - right),
1198 1 + top / ( 1.0 - top - bottom));
1199 gPad->RangeAxis(0, 0, 1, 1);
1223 wsrc = wsrc ? wsrc : im->width;
1224 hsrc = hsrc ? hsrc : im->height;
1226 static int x11 =
gVirtualX->InheritsFrom(
"TGX11");
1233 UInt_t ww = wsrc - ow + (ow ? 8 : 0);
1237 std::vector<char> bits(ww*hh);
1239 ASImageDecoder *imdec = start_image_decoding(
fgVisual, im, SCL_DO_ALPHA,
1240 xsrc, ysrc, ww, 0,
nullptr);
1242 for (
UInt_t yy = 0; yy < hh; yy++) {
1243 imdec->decode_image_scanline(imdec);
1244 CARD32 *
a = imdec->buffer.alpha;
1246 for (
UInt_t xx = 0; xx < ww; xx++) {
1261 stop_image_decoding(&imdec);
1264 bits.data(), ww, hh);
1282 asimage2drawable(
fgVisual,
wid, im, (GC)
gc, xsrc, ysrc,
x,
y, wsrc, hsrc, 1);
1284 ASImage *img =
nullptr;
1285 unsigned char *bits = (
unsigned char *)im->alt.argb32;
1287 img = tile_asimage(
fgVisual, im, xsrc, ysrc, wsrc, hsrc,
1288 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
1290 bits = (
unsigned char *)img->alt.argb32;
1299 if (!
option.Contains(
"opaque")) {
1309 destroy_asimage(&img);
1336 xsrc, ysrc, wsrc, hsrc, opt);
1355 Error(
"Paint",
"no image set");
1360 Warning(
"Paint",
"Visual not initiated");
1364 Int_t tile_x = 0, tile_y = 0;
1365 CARD32 tile_tint = 0;
1374 if (sscanf(opt.
Data() + opt.
Index(
"t"),
"t%d,%d,%s", &tile_x, &tile_y,
1377 if (parse_argb_color(stint, (CARD32*)&tile_tint) == stint)
1380 Error(
"Paint",
"tile option error");
1388 if (!
fImage->alt.vector) {
1404 to_h = (
Int_t)(to_h * (1.0 -
gPad->GetBottomMargin() -
gPad->GetTopMargin() ) + 0.5);
1405 to_w = (
Int_t)(to_w * (1.0 -
gPad->GetLeftMargin() -
gPad->GetRightMargin() ) + 0.5);
1408 if ((to_w < 25 || to_h < 25) && !expand) {
1409 Error(
"Paint",
"pad too small to display an image");
1421 Int_t pal_Ax = to_w +
gPad->UtoAbsPixel(
gPad->GetLeftMargin()) +
1422 (
gPad->UtoAbsPixel(
gPad->GetRightMargin()) / 10);
1424 Int_t pal_x = to_w +
gPad->UtoPixel(
gPad->GetLeftMargin()) +
1425 (
gPad->UtoPixel(
gPad->GetRightMargin()) / 10);
1430 ASImage *grad_im =
nullptr;
1438 grad.type = GRADIENT_Top2Bottom;
1439 grad.color =
new ARGB32[grad.npoints];
1440 grad.offset =
new double[grad.npoints];
1443 Int_t oldPt = grad.npoints -
pt -1;
1444 grad.offset[
pt] = 1 - pal.
fPoints[oldPt];
1445 grad.color[
pt] = (((ARGB32)(pal.
fColorBlue[oldPt] & 0xff00)) >> 8) |
1447 (((ARGB32)(pal.
fColorRed[oldPt] & 0xff00)) << 8) |
1448 (((ARGB32)(pal.
fColorAlpha[oldPt] & 0xff00)) << 16);
1452 pal_h, SCL_DO_COLOR,
1455 delete [] grad.color;
1456 delete [] grad.offset;
1464 to_w, to_h, tile_tint, ASA_ASImage,
1499 destroy_asimage(&tmpImage);
1514 Error(
"Paint",
"image could not be rendered to display");
1518 int tox = expand ? 0 :
int(
gPad->UtoPixel(1.) *
gPad->GetLeftMargin());
1519 int toy = expand ? 0 :
int(
gPad->VtoPixel(0.) *
gPad->GetTopMargin());
1521 auto pp =
gPad->GetPainter();
1531 pp->DrawImage(&pimg, pal_x, pal_y, flags);
1542 axis.
PaintAxis(pal_Xpos,
gPad->PixeltoY(pal_Ay + pal_h - 1),
1543 pal_Xpos,
gPad->PixeltoY(pal_Ay),
1544 min, max, ndiv,
"+LU");
1551 pal_Xpos,
gPad->AbsPixeltoY(pal_Ay + 1),
1552 min, max, ndiv,
"+L");
1556 destroy_asimage(&grad_im);
1564 Int_t pxl, pyl, pxt, pyt;
1571 if (px1 < px2) {pxl = px1; pxt = px2;}
1572 else {pxl = px2; pxt = px1;}
1573 if (py1 < py2) {pyl = py1; pyt = py2;}
1574 else {pyl = py2; pyt = py1;}
1576 if ((px > pxl && px < pxt) && (py > pyl && py < pyt))
1627 auto &parent = *
gPad;
1630 parent.ExecuteEvent(
event, px, py);
1634 parent.SetCursor(
kCross);
1651 inter->PaintBox(parent);
1657 Int_t imgX1 = 0, imgY1 = 0, imgW = 0, imgH = 0;
1662 inter->PerformMove(px, py);
1664 imgX1 = inter->zx1 - parent.XtoAbsPixel(0);
1665 imgY1 = image->height - 1 - inter->
zy1 + parent.YtoAbsPixel(1);
1666 imgW = inter->
zx2 - inter->zx1;
1667 imgH = inter->zy1 - inter->zy2;
1669 parent.FreeInteractive(
this);
1672 if ((imgW >= 5) && (imgH >= 5)) {
1679 imgW = (
Int_t)(imgW / xfact);
1680 imgH = (
Int_t)(imgH / yfact);
1682 Zoom(imgX1, imgY1, imgW + 1, imgH + 1);
1698 static char info[64];
1704 px -=
gPad->XtoAbsPixel(0);
1705 py -=
gPad->YtoAbsPixel(1);
1708 if (px < 0 || py < 0)
return info;
1712 if (px >= (
int)image->width || py >= (
int)image->height)
1715 py = image->height - 1 - py;
1722 if (
fImage->alt.vector) {
1723 snprintf(info,64,
"x: %d y: %d %.5g",
1726 snprintf(info,64,
"x: %d y: %d", px, py);
1742 Warning(
"SetPalette",
"Visual not initiated");
1747 Warning(
"SetPalette",
"Image not valid");
1757 ASVectorPalette asPalette;
1759 asPalette.channels[0] =
new CARD16 [asPalette.npoints];
1760 asPalette.channels[1] =
new CARD16 [asPalette.npoints];
1761 asPalette.channels[2] =
new CARD16 [asPalette.npoints];
1762 asPalette.channels[3] =
new CARD16 [asPalette.npoints];
1768 asPalette.points =
new double[asPalette.npoints];
1769 for (
Int_t point = 0; point <
Int_t(asPalette.npoints); point++)
1775 delete [] asPalette.points;
1776 for (
Int_t col = 0; col < 4; col++)
1777 delete [] asPalette.channels[col];
1794 Warning(
"Scale",
"Image not initiated");
1799 Warning(
"Scale",
"Visual not initiated");
1807 if (toWidth > 30000)
1809 if (toHeight > 30000)
1812 ASImage *img = scale_asimage(
fgVisual,
fImage, toWidth, toHeight,
1829 Warning(
"Slice",
"Image not initiated");
1834 Warning(
"Slice",
"Visual not initiated");
1842 if (toWidth > 30000)
1844 if (toHeight > 30000)
1848 yStart, yEnd, toWidth, toHeight,
1864 Warning(
"Tile",
"Image not initiated");
1869 Warning(
"Tile",
"Visual not initiated");
1877 if (toWidth > 30000)
1879 if (toHeight > 30000)
1882 ASImage *img = tile_asimage(
fgVisual,
fImage, 0, 0, toWidth, toHeight, 0,
1904 Warning(
"Zoom",
"Image not valid");
1926 Warning(
"UnZoom",
"Image not valid");
1953 Warning(
"Flip",
"Image not valid");
1957 Warning(
"Flip",
"Visual not initiated");
1961 if (
fImage->alt.vector) {
1962 Warning(
"Flip",
"flip does not work for data images");
1966 Int_t rflip = flip/90;
2000 Warning(
"Mirror",
"Image not valid");
2005 Warning(
"Mirror",
"Visual not initiated");
2009 if (
fImage->alt.vector) {
2010 Warning(
"Mirror",
"mirror does not work for data images");
2086 Display *disp = (Display*)
gVirtualX->GetDisplay();
2092 static ASVisual *vis_x =
nullptr;
2094 if (vis &&
cmap && !noX) {
2096 vis_x = create_asvisual_for_id(disp, screen, depth,
2097 XVisualIDFromVisual(vis),
cmap,
nullptr);
2103 static ASVisual *vis_batch =
nullptr;
2108 vis_batch = create_asvisual(
nullptr, 0, 0,
nullptr);
2109 vis_batch->dpy =
nullptr;
2124 Warning(caller,
"Visual not initiated");
2133 if (!
fImage->alt.argb32) {
2137 if (!
fImage->alt.argb32) {
2138 Warning(caller,
"Failed to get argb32 pixel array");
2150 Warning(
"StartPaletteEditor",
"Image not valid");
2153 if (!
fImage->alt.vector) {
2154 Warning(
"StartPaletteEditor",
"palette can be modified only for data images");
2171 Warning(
"GetX11Pixmap",
"Visual not initiated");
2194 Error(
"GetPixmap",
"ARGB array is not exists");
2209 Warning(
"GetMaskBits",
"Visual not initiated");
2216 Warning(
"GetMaskBits",
"No image");
2221 UInt_t ow = img->width % 8;
2222 width = img->width - ow + (ow ? 8 : 0);
2224 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALPHA,
2225 0, 0,
width, 0,
nullptr);
2233 imdec->decode_image_scanline(imdec);
2234 CARD32 *
a = imdec->buffer.alpha;
2249 stop_image_decoding(&imdec);
2264 std::vector<char> bits;
2266 pixmap =
gVirtualX->CreateBitmap(
gVirtualX->GetDefaultRootWindow(), bits.data(), ww, hh);
2277 Warning(
"SetImage",
"Visual not initiated");
2290 static int x11 = -1;
2291 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2303 fImage = bitmap2asimage(bits,
w,
h, 0,
nullptr);
2308 fImage = bitmap2asimage(bits,
w,
h, 0, mask_bits);
2309 delete [] mask_bits;
2320 Warning(
"GetPixels",
"Wrong Image");
2325 ASImageDecoder *imdec;
2339 if ((
x >= (
int)img->width) || (
y >= (
int)img->height)) {
2343 if ((
int)(
x +
width) > (
int)img->width) {
2347 if ((
int)(
y +
height) > (
int)img->height) {
2351 if ((imdec = start_image_decoding(
nullptr,
fImage, SCL_DO_ALL, 0,
y,
2352 img->width,
height,
nullptr)) ==
nullptr) {
2353 Warning(
"GetPixels",
"Failed to create image decoder");
2362 imdec->decode_image_scanline(imdec);
2365 if ((
r == (
Int_t)imdec->buffer.red[i]) &&
2366 (
g == (
Int_t)imdec->buffer.green[i]) &&
2367 (
b == (
Int_t)imdec->buffer.blue[i])) {
2369 r = (
Int_t)imdec->buffer.red[i];
2370 g = (
Int_t)imdec->buffer.green[i];
2371 b = (
Int_t)imdec->buffer.blue[i];
2378 stop_image_decoding(&imdec);
2390 Warning(
"GetVecArray",
"Bad Image");
2393 if (
fImage->alt.vector) {
2394 return fImage->alt.vector;
2412 Warning(
"GetArray",
"Bad Image");
2418 if (
fImage->alt.vector) {
2423 ASImageDecoder *imdec;
2434 if ((imdec = start_image_decoding(
nullptr, img, SCL_DO_ALL, 0, 0,
2435 img->width, 0,
nullptr)) ==
nullptr) {
2436 Warning(
"GetArray",
"Failed to create image decoder");
2441 CARD32
r = 0,
g = 0,
b = 0;
2445 for (
UInt_t k = 0; k <
h; k++) {
2446 imdec->decode_image_scanline(imdec);
2448 for (
UInt_t i = 0; i <
w; ++i) {
2449 if ((
r == imdec->buffer.red[i]) &&
2450 (
g == imdec->buffer.green[i]) &&
2451 (
b == imdec->buffer.blue[i])) {
2453 r = imdec->buffer.red[i];
2454 g = imdec->buffer.green[i];
2455 b = imdec->buffer.blue[i];
2463 stop_image_decoding(&imdec);
2486 const char *color,
const char *font_name,
2490 ARGB32 text_color = ARGB32_Black;
2491 ASImage *fore_im =
nullptr;
2492 ASImage *text_im =
nullptr;
2503 if (fn.
Last(
'/') == 0)
2504 fn = fn(1, fn.
Length() - 1);
2516 parse_argb_color(color, &text_color);
2529 Warning(
"DrawText",
"cannot create Font Manager");
2538 Warning(
"DrawText",
"cannot find a font %s", font_name);
2550 text_im = draw_text(
text, font, (ASText3DType)
type, 0);
2555 ASImage *tmp = file2ASImage(fore_file, 0xFFFFFFFF, SCREEN_GAMMA, 0, 0);
2557 if ((tmp->width !=
width) || (tmp->height !=
height)) {
2561 destroy_asimage(&tmp);
2568 move_asimage_channel(fore_im, IC_ALPHA, text_im, IC_ALPHA);
2569 destroy_asimage(&text_im);
2577 ASImage *rendered_im;
2578 ASImageLayer layers[2];
2580 init_image_layers(&(layers[0]), 2);
2581 fore_im->back_color = text_color;
2582 layers[0].im = rimg;
2583 layers[0].dst_x = 0;
2584 layers[0].dst_y = 0;
2585 layers[0].clip_width = rimg->width;
2586 layers[0].clip_height = rimg->height;
2587 layers[0].bevel =
nullptr;
2588 layers[1].im = fore_im;
2589 layers[1].dst_x =
x;
2590 layers[1].dst_y =
y;
2591 layers[1].clip_width = fore_im->width;
2592 layers[1].clip_height = fore_im->height;
2594 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, rimg->width, rimg->height,
2597 destroy_asimage(&fore_im);
2630 Warning(
"Merge",
"Visual not initiated");
2634 ASImage *rendered_im;
2635 ASImageLayer layers[2];
2637 init_image_layers(&(layers[0]), 2);
2639 layers[0].dst_x = 0;
2640 layers[0].dst_y = 0;
2641 layers[0].clip_width =
fImage->width;
2642 layers[0].clip_height =
fImage->height;
2643 layers[0].bevel =
nullptr;
2644 layers[1].im = ((
TASImage*)im)->fImage;
2645 layers[1].dst_x =
x;
2646 layers[1].dst_y =
y;
2647 layers[1].clip_width = im->
GetWidth();
2648 layers[1].clip_height = im->
GetHeight();
2649 layers[1].merge_scanlines = blend_scanlines_name2func(op ? op :
"add");
2667 Warning(
"Blur",
"Visual not initiated");
2672 fImage = create_asimage(100, 100, 0);
2675 Warning(
"Blur",
"Failed to create image");
2682 ASImage *rendered_im = blur_asimage_gauss(
fgVisual,
fImage, hr > 0 ? hr : 3,
2683 vr > 0 ? vr : 3, SCL_DO_ALL,
2696 Warning(
"Clone",
"Image not initiated");
2703 Warning(
"Clone",
"Failed to create image");
2719 if (
fImage->alt.argb32) {
2721 im->
fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
2722 memcpy(im->
fImage->alt.argb32,
fImage->alt.argb32, sz *
sizeof(ARGB32));
2742 Warning(
"Vectorize",
"Visual not initiated");
2747 fImage = create_asimage(100, 100, 0);
2750 Warning(
"Vectorize",
"Failed to create image");
2761 dither = dither > 7 ? 7 : dither;
2763 res = colormap_asimage(
fImage, &
cmap, max_colors, dither, opaque_threshold);
2775 g = INDEX_SHIFT_GREEN(
cmap.entries[res[i]].green);
2776 b = INDEX_SHIFT_BLUE(
cmap.entries[res[i]].blue);
2777 r = INDEX_SHIFT_RED(
cmap.entries[res[i]].red);
2779 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2790 g = INDEX_SHIFT_GREEN(
cmap.entries[j].green);
2791 b = INDEX_SHIFT_BLUE(
cmap.entries[j].blue);
2792 r = INDEX_SHIFT_RED(
cmap.entries[j].red);
2793 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2795 v = (
v>>12) & 0x0FFF;
2807 fImage->alt.vector = vec;
2810 if (res) safefree(res);
2856 Warning(
"HSV",
"Visual not initiated");
2864 Warning(
"HSV",
"Failed to create image");
2876 ASImage *rendered_im =
nullptr;
2880 hue, radius, H, S, V, ASA_ASImage, 100,
2881 ASIMAGE_QUALITY_TOP);
2884 Warning(
"HSV",
"Failed to create rendered image");
2922 Warning(
"Gradient",
"Visual not initiated");
2926 ASImage *rendered_im =
nullptr;
2927 ASGradient gradient;
2929 int reverse = 0, npoints1 = 0, npoints2 = 0;
2936 if ((
angle > 2 * 180 * 15 / 16) || (
angle < 2 * 180 * 1 / 16)) {
2937 gradient.type = GRADIENT_Left2Right;
2938 }
else if (
angle < 2 * 180 * 3 / 16) {
2939 gradient.type = GRADIENT_TopLeft2BottomRight;
2940 }
else if (
angle < 2 * 180 * 5 / 16) {
2941 gradient.type = GRADIENT_Top2Bottom;
2942 }
else if (
angle < 2 * 180 * 7 / 16) {
2943 gradient.type = GRADIENT_BottomLeft2TopRight; reverse = 1;
2944 }
else if (
angle < 2 * 180 * 9 / 16) {
2945 gradient.type = GRADIENT_Left2Right; reverse = 1;
2946 }
else if (
angle < 2 * 180 * 11 / 16) {
2947 gradient.type = GRADIENT_TopLeft2BottomRight; reverse = 1;
2948 }
else if (
angle < 2 * 180 * 13 / 16) {
2949 gradient.type = GRADIENT_Top2Bottom; reverse = 1;
2951 gradient.type = GRADIENT_BottomLeft2TopRight;
2954 for (
p = (
char*)colors; isspace((
int)*
p);
p++) { }
2956 for (npoints1 = 0; *
p; npoints1++) {
2958 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2960 for ( ; isspace((
int)*
p);
p++) { }
2963 for (
p = (
char*)offsets; isspace((
int)*
p);
p++) { }
2965 for (npoints2 = 0; *
p; npoints2++) {
2967 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2969 for ( ; isspace((
int)*
p);
p++) { }
2974 if (offsets && (npoints1 > npoints2)) npoints1 = npoints2;
2983 gradient.color =
new ARGB32[npoints1];
2984 gradient.offset =
new double[npoints1];
2986 for (
p = (
char*)colors; isspace((
int)*
p);
p++) { }
2988 for (npoints1 = 0; *
p; ) {
2992 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2994 for ( ; isspace((
int)*
p);
p++) { }
2996 col = str(pb - colors,
p - pb);
2998 if (parse_argb_color(col.
Data(), gradient.color + npoints1) != col) {
3001 Warning(
"Gradient",
"Failed to parse color [%s] - defaulting to black", pb);
3006 for (
p = (
char*)offsets; isspace((
int)*
p);
p++) { }
3008 for (npoints2 = 0; *
p; ) {
3012 for ( ; *
p && !isspace((
int)*
p);
p++) { }
3015 gradient.offset[npoints2] = strtod(pb, &pb);
3017 if (pb ==
p) npoints2++;
3019 for ( ; isspace((
int)*
p);
p++) { }
3022 for (npoints2 = 0; npoints2 < npoints1; npoints2++) {
3023 gradient.offset[npoints2] = (
double)npoints2 / (npoints1 - 1);
3026 gradient.npoints = npoints1;
3028 if (npoints2 && (gradient.npoints > npoints2)) {
3029 gradient.npoints = npoints2;
3032 for (i = 0; i < gradient.npoints/2; i++) {
3033 int i2 = gradient.npoints - 1 - i;
3034 ARGB32
c = gradient.color[i];
3035 double o = gradient.offset[i];
3036 gradient.color[i] = gradient.color[i2];
3037 gradient.color[i2] =
c;
3038 gradient.offset[i] = gradient.offset[i2];
3039 gradient.offset[i2] = o;
3041 for (i = 0; i < gradient.npoints; i++) {
3042 gradient.offset[i] = 1.0 - gradient.offset[i];
3048 delete [] gradient.color;
3049 delete [] gradient.offset;
3053 Warning(
"Gradient",
"Failed to create gradient image");
3062 ASImageLayer layers[2];
3064 init_image_layers(&(layers[0]), 2);
3066 layers[0].dst_x = 0;
3067 layers[0].dst_y = 0;
3068 layers[0].clip_width =
fImage->width;
3069 layers[0].clip_height =
fImage->height;
3070 layers[0].bevel =
nullptr;
3071 layers[1].im = rendered_im;
3072 layers[1].dst_x =
x;
3073 layers[1].dst_y =
y;
3074 layers[1].clip_width =
width;
3075 layers[1].clip_height =
height;
3076 layers[1].merge_scanlines = alphablend_scanlines;
3081 Warning(
"Gradient",
"Failed to create merged image");
3085 destroy_asimage(&rendered_im);
3100 cmp = (cmp * 12) / 10;
3102 return (cmp > 255) ? 255 : cmp;
3123 return (background >> 1) & 0x7F7F7F7F;
3134 a = ARGB32_ALPHA8(
foreground) + ARGB32_ALPHA8(background);
3136 r = ARGB32_RED8(
foreground) + ARGB32_RED8(background);
3138 g = ARGB32_GREEN8(
foreground) + ARGB32_GREEN8(background);
3140 b = ARGB32_BLUE8(
foreground) + ARGB32_BLUE8(background);
3143 return MAKE_ARGB32(
a,
r,
g,
b);
3159 const char *hi_color,
const char *lo_color,
UShort_t thick,
3163 Warning(
"Bevel",
"Visual not initiated");
3170 ARGB32
hi=ARGB32_White, lo=ARGB32_White;
3171 parse_argb_color(hi_color, &
hi);
3172 parse_argb_color(lo_color, &lo);
3175 bevel.lo_color =
hi;
3177 bevel.hi_color = lo;
3180 bevel.hi_color =
hi;
3182 bevel.lo_color = lo;
3187 int extra_hilite = 2;
3188 bevel.left_outline = bevel.top_outline = bevel.right_outline = bevel.bottom_outline = thick;
3189 bevel.left_inline = bevel.top_inline = bevel.right_inline = bevel.bottom_inline = extra_hilite + 1;
3191 if (bevel.top_outline > 1) {
3192 bevel.top_inline += bevel.top_outline - 1;
3195 if (bevel.left_outline > 1) {
3196 bevel.left_inline += bevel.left_outline - 1;
3199 if (bevel.right_outline > 1) {
3200 bevel.right_inline += bevel.right_outline - 1;
3203 if (bevel.bottom_outline > 1) {
3204 bevel.bottom_inline += bevel.bottom_outline - 1;
3208 ARGB32 fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ? bevel.hilo_color : (bevel.hilo_color | 0xff000000);
3214 Warning(
"Bevel",
"Failed to create image");
3226 ASImageLayer layers[2];
3227 init_image_layers(&(layers[0]), 2);
3230 layers[0].dst_x = 0;
3231 layers[0].dst_y = 0;
3232 layers[0].clip_width =
fImage->width;
3233 layers[0].clip_height =
fImage->height;
3234 layers[0].bevel =
nullptr;
3236 UInt_t w =
width - (bevel.left_outline + bevel.right_outline);
3237 UInt_t h =
height - (bevel.top_outline + bevel.bottom_outline);
3238 ASImage *bevel_im = create_asimage(
w,
h, 0);
3241 Warning(
"Bevel",
"Failed to create bevel image");
3245 layers[1].im = bevel_im;
3246 fill_asimage(
fgVisual, bevel_im, 0, 0,
w,
h, fill);
3248 layers[1].dst_x =
x;
3249 layers[1].dst_y =
y;
3250 layers[1].clip_width =
width;
3251 layers[1].clip_height =
height;
3252 layers[1].bevel = &bevel;
3253 layers[1].merge_scanlines = alphablend_scanlines;
3257 destroy_asimage(&bevel_im);
3260 Warning(
"Bevel",
"Failed to image");
3280 Warning(
"Pad",
"Visual not initiated");
3285 fImage = create_asimage(100, 100, 0);
3288 Warning(
"Pad",
"Failed to create image");
3295 ARGB32 color = ARGB32_White;
3296 parse_argb_color(col, &color);
3307 Warning(
"Pad",
"Failed to create output image");
3324 Warning(
"Crop",
"Visual not initiated");
3340 Warning(
"Crop",
"input size larger than image");
3343 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
3347 Warning(
"Crop",
"Failed to start image decoding");
3355 Warning(
"Crop",
"Failed to create image");
3359 ASImageOutput *imout = start_image_output(
fgVisual, img, ASA_ASImage,
3363 Warning(
"Crop",
"Failed to start image output");
3364 destroy_asimage(&img);
3365 if (imdec)
delete [] imdec;
3374 imdec->decode_image_scanline(imdec);
3375 imout->output_image_scanline(imout, &(imdec->buffer), 1);
3378 stop_image_decoding(&imdec);
3379 stop_image_output(&imout);
3403 Warning(
"Append",
"Visual not initiated");
3421 }
else if (opt ==
"/") {
3442 Warning(
"BeginPaint",
"Visual not initiated");
3457 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
3460 Warning(
"BeginPaint",
"Failed to create image");
3474 Warning(
"EndPaint",
"no image");
3478 if (!
fImage->alt.argb32)
return;
3481 0, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);
3484 Warning(
"EndPaint",
"Failed to create image");
3501 Warning(
"GetArgbArray",
"no image");
3506 if (!img)
return nullptr;
3508 if (!img->alt.argb32) {
3518 return (
UInt_t *)img->alt.argb32;
3529 Warning(
"GetRgbaArray",
"no image");
3534 if (!img)
return nullptr;
3536 if (!img->alt.argb32) {
3553 for (i = 0; i < img->height; i++) {
3554 for (j = 0; j < img->width; j++) {
3556 argb = img->alt.argb32[idx];
3558 rgb = argb & 0x00ffffff;
3559 rgba = (rgb << 8) +
a;
3574 Warning(
"GetScanline",
"no image");
3579 CARD32 *ret =
new CARD32[img->width];
3581 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALL,
3582 0,
y, img->width, 1,
nullptr);
3586 Warning(
"GetScanline",
"Failed to start image decoding");
3594 imdec->decode_image_scanline(imdec);
3595 memcpy(imdec->buffer.buffer, ret, img->width*
sizeof(CARD32));
3596 stop_image_decoding(&imdec);
3611#if defined(R__GNU) && defined(__i386__) && !defined(__sun)
3612#define _MEMSET_(dst, lng, val) __asm__("movl %0,%%eax \n"\
3613 "movl %1,%%edi \n" \
3614 "movl %2,%%ecx \n" \
3619 :"g" (val), "g" (dst), "g" (lng) \
3620 :"eax","edi","ecx" \
3624 #define _MEMSET_(dst, lng, val) do {\
3625 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0)
3629#define FillSpansInternal(npt, ppt, widths, color) do {\
3630 UInt_t yy = ppt[0].fY*fImage->width;\
3631 for (UInt_t i = 0; i < npt; i++) {\
3632 _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\
3633 yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\
3644 if (!
InitImage(
"FillRectangleInternal")) {
3648 ARGB32 color = (ARGB32)col;
3662 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
3670 if (!
fImage->alt.argb32) {
3675 ARGB32 *p0 =
fImage->alt.argb32 + yyy +
x;
3707 Warning(
"FillRectangle",
"Visual not initiated");
3711 ARGB32 color = ARGB32_White;
3714 parse_argb_color(col, &color);
3736 ARGB32 color = (ARGB32)col;
3739 if (!thick) thick = 1;
3747 thick += (
x - half);
3758 if (
x + w < fImage->
width) {
3775 ARGB32 color = (ARGB32)col;
3778 if (!thick) thick = 1;
3786 thick += (
y - half);
3809 const char *col,
UInt_t thick)
3811 ARGB32 color = ARGB32_White;
3812 parse_argb_color(col, &color);
3824 int x,
y, xend, yend;
3834 ARGB32 color = (ARGB32)col;
3839 if (!dx && !dy)
return;
3861 i2 = i1 - (dx << 1);
3878 q = (
y2 -
y1) * ydir;
3911 i2 = i1 - (dy << 1);
3928 q = (
x2 -
x1) * xdir;
3966 const char *col,
UInt_t thick)
3969 Warning(
"DrawRectangle",
"Visual not initiated");
3981 if (!
fImage->alt.argb32) {
3985 if (!
fImage->alt.argb32) {
3986 Warning(
"DrawRectangle",
"Failed to get argb32 pixel array");
3990 ARGB32 color = ARGB32_White;
3991 parse_argb_color(col, &color);
4011 ARGB32 color = ARGB32_White;
4022 parse_argb_color(col, &color);
4028 parse_argb_color(col, &color);
4062 ARGB32 color = (ARGB32)col;
4072 thick += (
y - half);
4075 thick = thick <= 0 ? 1 : thick;
4084 x2 =
x2 < tmp ? tmp :
x2;
4096 if (i >= pDash[iDash]) {
4100 if (iDash >= nDash) {
4119 ARGB32 color = (ARGB32)col;
4129 thick += (
x - half);
4132 thick = thick <= 0 ? 1 : thick;
4140 y2 =
y2 < tmp ? tmp :
y2;
4147 if (
x + w < fImage->
width) {
4155 if (i >= pDash[iDash]) {
4159 if (iDash >= nDash) {
4178 int x,
y, xend, yend;
4188 char *pDash =
new char[nDash];
4193 for (i = 0; i < (
int)nDash; i++) {
4199 i2 = i1 - (dx << 1);
4217 q = (
y2 -
y1) * ydir;
4222 if ((iDash%2) == 0) {
4234 if (i >= pDash[iDash]) {
4238 if (iDash >= nDash) {
4246 if ((iDash%2) == 0) {
4258 if (i >= pDash[iDash]) {
4262 if (iDash >= nDash) {
4271 for (i = 0; i < (
int)nDash; i++) {
4277 i2 = i1 - (dy << 1);
4295 q = (
x2 -
x1) * xdir;
4300 if ((iDash%2) == 0) {
4314 if (i >= pDash[iDash]) {
4318 if (iDash >= nDash) {
4326 if ((iDash%2) == 0) {
4340 if (i >= pDash[iDash]) {
4344 if (iDash >= nDash) {
4365 double x,
y, xend=0, yend=0, x0, y0;
4373 double *xDash =
new double[nDash];
4374 double *yDash =
new double[nDash];
4379 for (i = 0; i < (
int)nDash; i++) {
4380 xDash[i] = tDash[i] * ac;
4381 yDash[i] = tDash[i] * as;
4385 xDash[i] = xDash[i]/2;
4386 yDash[i] = yDash[i]/2;
4388 xDash[i] = xDash[i]*2;
4389 yDash[i] = yDash[i]*2;
4406 q = (
y2 -
y1) * ydir;
4413 while ((
x < xend) && (
y < yend)) {
4417 if ((iDash%2) == 0) {
4427 if (iDash >= nDash) {
4432 while ((
x < xend) && (
y > yend)) {
4436 if ((iDash%2) == 0) {
4446 if (iDash >= nDash) {
4465 q = (
x2 -
x1) * xdir;
4472 while ((
x < xend) && (
y < yend)) {
4476 if ((iDash%2) == 0) {
4486 if (iDash >= nDash) {
4491 while ((
x > xend) && (
y < yend)) {
4495 if ((iDash%2) == 0) {
4505 if (iDash >= nDash) {
4519 const char *pDash,
const char *col,
UInt_t thick)
4526 if ((nDash < 2) || !pDash || (nDash%2)) {
4527 Warning(
"DrawDashLine",
"Wrong input parameters n=%d %ld", nDash, (
Long_t)
sizeof(pDash)-1);
4531 ARGB32 color = ARGB32_White;
4532 parse_argb_color(col, &color);
4536 }
else if (
y1 ==
y2) {
4550 ARGB32 color = ARGB32_White;
4551 parse_argb_color(col, &color);
4558 for (
UInt_t i = 1; i < nn; i++) {
4579 parse_argb_color(col, &color);
4581 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4582 Warning(
"PutPixel",
"Out of range width=%d x=%d, height=%d y=%d",
4599 Warning(
"PolyPoint",
"No points specified");
4606 parse_argb_color(col, &color);
4612 for (i = 0; i < npt; i++) {
4613 ipt[i].
fX += ppt[i].
fX;
4614 ipt[i].
fY += ppt[i].
fY;
4619 for (i = 0; i < npt; i++) {
4620 x = ipt ? ipt[i].
fX : ppt[i].
fX;
4621 y = ipt ? ipt[i].
fY : ppt[i].
fY;
4623 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4639 if (!nseg || !seg) {
4640 Warning(
"DrawSegments",
"Invalid data nseg=%d seg=0x%zx", nseg, (
size_t)seg);
4646 for (
UInt_t i = 0; i < nseg; i++) {
4647 pt[0].fX = seg->
fX1;
4648 pt[1].fX = seg->
fX2;
4649 pt[0].fY = seg->
fY1;
4650 pt[1].fY = seg->
fY2;
4667 if (!npt || !ppt || !widths || (stipple && (!
w || !
h))) {
4668 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx col=%s widths=0x%zx stipple=0x%zx w=%d h=%d",
4669 npt, (
size_t)ppt, col, (
size_t)widths, (
size_t)stipple,
w,
h);
4674 parse_argb_color(col, &color);
4679 for (
UInt_t i = 0; i < npt; i++) {
4681 for (
UInt_t j = 0; j < widths[i]; j++) {
4682 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4693 if (stipple[ii >> 3] & (1 << (ii%8))) {
4710 if (!npt || !ppt || !widths || !tile) {
4711 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx widths=0x%zx tile=0x%zx",
4712 npt, (
size_t)ppt, (
size_t)widths, (
size_t)tile);
4724 for (
UInt_t i = 0; i < npt; i++) {
4727 for (
UInt_t j = 0; j < widths[i]; j++) {
4728 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4749 if (!npt || !ppt || !widths) {
4750 Warning(
"CropSpans",
"No points specified npt=%d ppt=0x%zx widths=0x%zx", npt, (
size_t)ppt, (
size_t)widths);
4755 int y1 = ppt[npt-1].
fY;
4763 for (
y = 0; (
int)
y < y0;
y++) {
4766 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4771 for (i = 0; i < npt; i++) {
4772 for (
x = 0; (
int)
x < ppt[i].fX;
x++) {
4774 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4776 for (
x = ppt[i].fX + widths[i] + 1;
x <
fImage->width;
x++) {
4778 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4786 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4820 Warning(
"CopyArea",
"Visual not initiated");
4825 Warning(
"CopyArea",
"no image");
4836 xsrc = xsrc < 0 ? 0 : xsrc;
4837 ysrc = ysrc < 0 ? 0 : ysrc;
4839 if ((xsrc >= (
int)
fImage->width) || (ysrc >= (
int)
fImage->height))
return;
4845 if (!
fImage->alt.argb32) {
4848 if (!out->alt.argb32) {
4853 if (
fImage->alt.argb32 && out->alt.argb32) {
4854 for (
y = 0;
y < (
int)
h;
y++) {
4855 for (
x = 0;
x < (
int)
w;
x++) {
4856 idx =
Idx(yy +
x + xsrc);
4857 if ((
x + xdst < 0) || (ydst +
y < 0) ||
4858 (
x + xdst >= (
int)out->width) || (
y + ydst >= (
int)out->height) )
continue;
4860 idx2 =
Idx((ydst +
y)*out->width +
x + xdst);
4864 out->alt.argb32[idx2] = 0;
4867 out->alt.argb32[idx2] &=
fImage->alt.argb32[idx];
4870 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] & (~out->alt.argb32[idx2]);
4873 out->alt.argb32[idx2] &= ~fImage->alt.argb32[idx];
4878 out->alt.argb32[idx2] ^=
fImage->alt.argb32[idx];
4881 out->alt.argb32[idx2] |=
fImage->alt.argb32[idx];
4884 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) & (~out->alt.argb32[idx2]);
4887 out->alt.argb32[idx2] ^= ~fImage->alt.argb32[idx];
4890 out->alt.argb32[idx2] = ~out->alt.argb32[idx2];
4893 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] | (~out->alt.argb32[idx2]);
4896 out->alt.argb32[idx2] = ~fImage->alt.argb32[idx];
4899 out->alt.argb32[idx2] |= ~fImage->alt.argb32[idx];
4902 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) | (~out->alt.argb32[idx2]);
4905 out->alt.argb32[idx2] = 0xFFFFFFFF;
4909 out->alt.argb32[idx2] =
fImage->alt.argb32[idx];
4933 int i, j, ix, iy,
w,
h;
4935 ARGB32 color = 0xFFFFFFFF;
4942 for (i = 0; i < nx; i++) {
4944 for (j = 0; j < ny; j++) {
4945 icol = (ARGB32)ic[i + (nx*j)];
4946 if (icol != color) {
5000 return (ptMin - ptsStart);
5016 int mr = 0, m1r = 0;
5017 int incr1l = 0, incr2l = 0;
5018 int incr1r = 0, incr2r = 0;
5023 int nextleft, nextright;
5026 TPoint *firstPoint =
nullptr;
5027 UInt_t *firstWidth =
nullptr;
5039 if ((npt < 3) || !ppt) {
5040 Warning(
"GetPolygonSpans",
"No points specified npt=%d ppt=0x%zx", npt, (
size_t)ppt);
5049 if ((npt < 3) || (dy < 0))
return kFALSE;
5051 ptsOut = firstPoint =
new TPoint[dy];
5055 nextleft = nextright = imin;
5056 y = ppt[nextleft].
fY;
5061 if (ppt[nextleft].fY ==
y) {
5067 if (nextleft >= (
int)npt) {
5074 ppt[left].fX, ppt[nextleft].fX,
5075 xl, dl, ml, m1l, incr1l, incr2l);
5079 if (ppt[nextright].fY ==
y) {
5085 if (nextright < 0) {
5092 ppt[right].fX, ppt[nextright].fX,
5093 xr, dr, mr, m1r, incr1r, incr2r);
5098 i =
TMath::Min(ppt[nextleft].fY, ppt[nextright].fY) -
y;
5102 delete [] firstWidth;
5103 delete [] firstPoint;
5112 *(
width++) = xr - xl;
5113 (ptsOut++)->fX = xl;
5115 *(
width++) = xl - xr;
5116 (ptsOut++)->fX = xr;
5124 }
while (
y !=
ymax);
5126 *nspans =
UInt_t(ptsOut - firstPoint);
5127 *outPoint = firstPoint;
5128 *outWidth = firstWidth;
5141 TPoint *firstPoint =
nullptr;
5142 UInt_t *firstWidth =
nullptr;
5145 ARGB32 color = ARGB32_White;
5146 parse_argb_color(col, &color);
5149 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5152 FillSpans(nspans, firstPoint, firstWidth, col, stipple,
w,
h);
5156 delete [] firstWidth;
5157 delete [] firstPoint;
5160 if (firstWidth)
delete [] firstWidth;
5161 if (firstPoint)
delete [] firstPoint;
5172 TPoint *firstPoint =
nullptr;
5173 UInt_t *firstWidth =
nullptr;
5178 FillSpans(nspans, firstPoint, firstWidth, tile);
5181 delete [] firstWidth;
5182 delete [] firstPoint;
5185 if (firstWidth)
delete [] firstWidth;
5186 if (firstPoint)
delete [] firstPoint;
5196 TPoint *firstPoint =
nullptr;
5197 UInt_t *firstWidth =
nullptr;
5202 CropSpans(nspans, firstPoint, firstWidth);
5205 delete [] firstWidth;
5206 delete [] firstPoint;
5209 if (firstWidth)
delete [] firstWidth;
5210 if (firstPoint)
delete [] firstPoint;
5226 if ((count < 3) || !ptsIn) {
5227 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)ptsIn);
5236 ARGB32 color = ARGB32_White;
5237 parse_argb_color(col, &color);
5255 static const UInt_t gEdgeTableEntryCacheSize = 200;
5256 static EdgeTableEntry gEdgeTableEntryCache[gEdgeTableEntryCacheSize];
5258 if (count < gEdgeTableEntryCacheSize) {
5269 ptsOut = firstPoint;
5291 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5294 FillSpans(nPts, firstPoint, firstWidth, col, stipple,
w,
h);
5296 ptsOut = firstPoint;
5307 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5310 FillSpans(nPts, firstPoint, firstWidth, col, stipple,
w,
h);
5314 if (
del)
delete [] pETEs;
5327 if ((count < 3) || !ptsIn) {
5328 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)ptsIn);
5357 ptsOut = firstPoint;
5379 FillSpans(nPts, firstPoint, firstWidth, tile);
5380 ptsOut = firstPoint;
5389 FillSpans(nPts, firstPoint, firstWidth, tile);
5400 ASDrawContext *ctx =
new ASDrawContext;
5402 ctx->canvas_width = im->width;
5403 ctx->canvas_height = im->height;
5404 ctx->canvas = im->alt.argb32;
5405 ctx->scratch_canvas =
nullptr;
5407 ctx->flags = ASDrawCTX_CanvasIsARGB;
5408 asim_set_custom_brush_colored( ctx, brush);
5418 if (ctx->scratch_canvas)
free(ctx->scratch_canvas);
5435 Int_t sz = thick*thick;
5442 matrix =
new CARD32[sz];
5445 for (
int i = 0; i < sz; i++) {
5446 matrix[i] = (CARD32)color;
5450 brush.matrix = matrix;
5451 brush.width = thick;
5452 brush.height = thick;
5453 brush.center_y = brush.center_x = thick/2;
5462 if (xx1 ==
fImage->width) --xx1;
5463 if (yy1 ==
fImage->height) --yy1;
5464 if (xx2 ==
fImage->width) --xx2;
5465 if (yy2 ==
fImage->height) --yy2;
5467 asim_move_to(ctx, xx1, yy1);
5468 asim_line_to(ctx, xx2, yy2);
5481 Int_t clipx1 = 0, clipx2 = 0, clipy1 = 0, clipy2 = 0;
5494 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
5499 Int_t bx = 0, by = 0;
5508 auto ndots =
width * rows;
5515 if ((byy >= (
Int_t)
fImage->height) || (byy < 0))
continue;
5519 if ((bxx >= (
Int_t)
fImage->width) || (bxx < 0))
continue;
5521 auto idx =
Idx(bxx + yy);
5522 r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
5523 g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
5524 b += (
fImage->alt.argb32[idx] & 0x0000ff);
5534 col[0] = (
r << 16) + (
g << 8) +
b;
5536 Int_t col4r = (col[4] & 0xff0000) >> 16;
5537 Int_t col4g = (col[4] & 0x00ff00) >> 8;
5538 Int_t col4b = (col[4] & 0x0000ff);
5543 Int_t colxr = (col4r*
x +
r*xx) >> 2;
5544 Int_t colxg = (col4g*
x +
g*xx) >> 2;
5545 Int_t colxb = (col4b*
x +
b*xx) >> 2;
5546 col[
x] = (colxr << 16) + (colxg << 8) + colxb;
5560 d = ((
d + 10) * 5) >> 8;
5564 if (noClip || ((bxx < clipx2) && (bxx >= clipx1) &&
5565 (byy >= clipy2) && (byy < clipy1))) {
5566 auto idx =
Idx(bxx + yy);
5567 auto acolor = (ARGB32) col[
d];
5571 fImage->alt.argb32[idx] = acolor;
5612 const wchar_t *wcsTitle =
reinterpret_cast<const wchar_t *
>(
text->GetWcsTitle());
5626 ARGB32 color = ARGB32_White;
5661 static ASImageExportParams params;
5669 ret = ASImage2xpmRawBuff(img, (CARD8 **)buffer,
size,
nullptr);
5672 ret = ASImage2PNGBuff(img, (CARD8 **)buffer,
size, ¶ms);
5716 static ASImageImportParams params;
5720 params.filter = SCL_DO_ALL;
5721 params.gamma = SCREEN_GAMMA;
5722 params.gamma_table =
nullptr;
5723 params.compression = 0;
5724 params.format = ASA_ASImage;
5725 params.search_path =
nullptr;
5726 params.subimage = 0;
5731 char *ptr = buffer[0];
5732 while (isspace((
int)*ptr)) ++ptr;
5734 fImage = xpm_data2ASImage((
const char**)buffer, ¶ms);
5736 fImage = xpmRawBuff2ASImage((
const char*)*buffer, ¶ms);
5741 fImage = PNGBuff2ASimage((CARD8 *)*buffer, ¶ms);
5767 Warning(
"CreateThumbnail",
"No image");
5772 Warning(
"CreateThumbnail",
"Visual not initiated");
5776 static char *buf =
nullptr;
5778 ASImage *img =
nullptr;
5798 ASImage *rendered_im;
5799 ASImageLayer layers[2];
5800 init_image_layers(&(layers[0]), 2);
5802 layers[0].dst_x = 0;
5803 layers[0].dst_y = 0;
5804 layers[0].clip_width = img->width;
5805 layers[0].clip_height = img->height;
5806 layers[0].bevel =
nullptr;
5808 layers[1].dst_x = 0;
5809 layers[1].dst_y = 0;
5810 layers[1].clip_width = img->width;
5811 layers[1].clip_height = img->height;
5812 layers[1].merge_scanlines = blend_scanlines_name2func(
"tint");
5813 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, img->width, img->height,
5815 destroy_asimage(&img);
5819 ASImage *padimg =
nullptr;
5824 padimg = pad_asimage(
fgVisual, img, 0,
d, sz, sz, 0x00ffffff,
5828 padimg = pad_asimage(
fgVisual, img,
d, 0, sz, sz, 0x00ffffff,
5833 destroy_asimage(&img);
5838 ASImage2xpmRawBuff(padimg, (CARD8 **)ptr, &
size,
nullptr);
5841 destroy_asimage(&padimg);
5854 if (
b.IsReading()) {
5855 Version_t version =
b.ReadVersion(&R__s, &R__c);
5860 if ( version == 1 ) {
5861 Int_t fileVersion =
b.GetVersionOwner();
5862 if (fileVersion > 0 && fileVersion < 50000 ) {
5870 if ( fileVersion < 40200 ) {
5889 if (image_type != 0) {
5891 char *buffer =
new char[
size];
5892 b.ReadFastArray(buffer,
size);
5901 b.ReadFastArray(vec,
size);
5917 image_type =
fImage->alt.vector ? 0 : 1;
5920 if (image_type != 0) {
5921 char *buffer =
nullptr;
5924 b.WriteFastArray(buffer,
size);
5932 b.SetByteCount(R__c,
kTRUE);
5941 if (
fImage->alt.vector) {
5982 if ((start > 0) && (stop - start > 0)) {
5996 Int_t sz = thick*thick;
6000 ARGB32 color = ARGB32_White;
6001 parse_argb_color(col, &color);
6006 matrix =
new CARD32[sz];
6009 for (
int i = 0; i < sz; i++) {
6010 matrix[i] = (CARD32)color;
6014 brush.matrix = matrix;
6015 brush.width = thick;
6016 brush.height = thick;
6017 brush.center_y = brush.center_x = thick/2;
6020 asim_cube_bezier(ctx,
x1,
y1,
x2,
y2, x3, y3);
6033 const char *col,
Int_t thick)
6038 thick = !thick ? 1 : thick;
6039 Int_t sz = thick*thick;
6043 ARGB32 color = ARGB32_White;
6044 parse_argb_color(col, &color);
6049 matrix =
new CARD32[sz];
6052 for (
int i = 0; i < sz; i++) {
6053 matrix[i] = (CARD32)color;
6057 brush.matrix = matrix;
6058 brush.width = thick > 0 ? thick : 1;
6059 brush.height = thick > 0 ? thick : 1;
6060 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6063 asim_straight_ellips(ctx,
x,
y, rx, ry, thick < 0);
6081 thick = !thick ? 1 : thick;
6082 Int_t sz = thick*thick;
6086 ARGB32 color = ARGB32_White;
6087 parse_argb_color(col, &color);
6093 matrix =
new CARD32[sz];
6096 for (
int i = 0; i < sz; i++) {
6097 matrix[i] = (CARD32)color;
6101 brush.matrix = matrix;
6102 brush.height = brush.width = thick > 0 ? thick : 1;
6103 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6106 asim_circle(ctx,
x,
y,
r, thick < 0);
6120 const char *col,
Int_t thick)
6125 thick = !thick ? 1 : thick;
6126 Int_t sz = thick*thick;
6130 ARGB32 color = ARGB32_White;
6131 parse_argb_color(col, &color);
6136 matrix =
new CARD32[sz];
6139 for (
int i = 0; i < sz; i++) {
6140 matrix[i] = (CARD32)color;
6144 brush.matrix = matrix;
6145 brush.width = thick > 0 ? thick : 1;
6146 brush.height = thick > 0 ? thick : 1;
6147 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6150 asim_ellips(ctx,
x,
y, rx, ry,
angle, thick < 0);
6163 const char *col,
Int_t thick)
6168 thick = !thick ? 1 : thick;
6169 Int_t sz = thick*thick;
6173 ARGB32 color = ARGB32_White;
6174 parse_argb_color(col, &color);
6179 matrix =
new CARD32[sz];
6182 for (
int i = 0; i < sz; i++) {
6183 matrix[i] = (CARD32)color;
6187 brush.matrix = matrix;
6188 brush.width = thick > 0 ? thick : 1;
6189 brush.height = thick > 0 ? thick : 1;
6190 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6193 asim_ellips2(ctx,
x,
y, rx, ry,
angle, thick < 0);
6205 const char * ,
const char * )
6219 Warning(
"Gray",
"Image not initiated");
6224 Warning(
"Gray",
"Visual not initiated");
6231 ASImage *sav =
nullptr;
6248 if (
fImage->alt.argb32) {
6250 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
6252 for (i = 0; i <
fImage->height; i++) {
6253 for (j = 0; j <
fImage->width; j++) {
6256 r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
6257 g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
6258 b = (
fImage->alt.argb32[idx] & 0x0000ff);
6259 l = (57*
r + 181*
g + 18*
b)/256;
6267 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
6279 Warning(
"ToGray",
"Failed to start image output");
6285 CARD32 *aa = imdec->buffer.alpha;
6286 CARD32 *rr = imdec->buffer.red;
6287 CARD32 *gg = imdec->buffer.green;
6288 CARD32 *bb = imdec->buffer.blue;
6293 for (i = 0; i <
fImage->height; i++) {
6294 imdec->decode_image_scanline(imdec);
6295 result.flags = imdec->buffer.flags;
6296 result.back_color = imdec->buffer.back_color;
6298 for (j = 0; j <
fImage->width; j++) {
6299 l = (57*rr[j] + 181*gg[j]+ 18*bb[j])/256;
6305 imout->output_image_scanline(imout, &
result, 1);
6308 stop_image_decoding(&imdec);
6309 stop_image_output(&imout);
6349 Warning(
"FromWindow",
"Visual not initiated");
6356 static int x11 = -1;
6357 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
6367 fImage = bitmap2asimage(bits,
w,
h, 0,
nullptr);
6378 std::vector<UChar_t> xx(4 *
w);
6379 for (
UInt_t i = 0; i <
h / 2; ++i) {
6380 memcpy(xx.data(), buf + 4*
w*i, 4*
w);
6381 memcpy(buf + 4*
w*i, buf + 4*
w*(
h-i-1), 4*
w);
6382 memcpy(buf + 4*
w*(
h-i-1), xx.data(), 4*
w);
6396 fImage = bitmap2asimage(
const_cast<unsigned char *
>(buf),
width,
height, 0,
nullptr);
6420 gPad->Range(-left / (1.0 - left - right),
6421 -bottom / (1.0 - top - bottom),
6422 1 + right / (1.0 - left - right),
6423 1 + top / ( 1.0 - top - bottom));
6424 gPad->RangeAxis(0, 0, 1, 1);
6434 char *buf =
nullptr;
6440 str.ReplaceAll(
"static",
"const");
6444 str.ReplaceAll(
"asxpm", xpm.
Data());
6445 out <<
"\n" << str <<
"\n\n";
6450 out <<
"asimage = TImage::Create();\n";
6451 out <<
" asimage->SetImageBuffer( (char **)" << xpm <<
", TImage::kXpm);\n";
6453 out <<
" asimage->Draw();\n";
6466 static char buf[32];
6467 FILE *fp = fopen(
name,
"rb+");
6470 printf(
"file %s : failed to open\n",
name);
6474 if (!fread(buf, 1, 20, fp)) {
6479 char dpi1 = (set & 0xffff) >> 8;
6480 char dpi2 = set & 0xff;
6485 for (i = 0; i < 20; i++) {
6486 if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) && (buf[i+2] == 0x49) &&
6487 (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
6493 if (i == 20 || dpi+4 >= 20) {
6495 printf(
"file %s : wrong JPEG format\n",
name);
6502 buf[dpi + 1] = dpi1;
6503 buf[dpi + 2] = dpi2;
6506 buf[dpi + 3] = dpi1;
6507 buf[dpi + 4] = dpi2;
6510 fwrite(buf, 1, 20, fp);
Handle_t Pixmap_t
Pixmap handle.
const Mask_t kGCClipXOrigin
Handle_t Window_t
Window handle.
@ kGXorReverse
src OR NOT dst
@ kGXnand
NOT src OR NOT dst.
@ kGXandReverse
src AND NOT dst
@ kGXorInverted
NOT src OR dst.
@ kGXandInverted
NOT src AND dst.
@ kGXequiv
NOT src XOR dst.
@ kGXnor
NOT src AND NOT dst.
@ kGXcopyInverted
NOT src.
Handle_t GContext_t
Graphics context handle.
Handle_t Drawable_t
Drawable handle.
const Mask_t kGCClipYOrigin
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Boolean (0=false, 1=true) (bool)
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
int Int_t
Signed integer 4 bytes (int)
short Version_t
Class version identifier (short)
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char)
int Ssiz_t
String size (currently int)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
const char Option_t
Option string (const char)
static ARGB32 GetShadow(ARGB32 background)
Calculate shadow color.
static const UInt_t kBrushCacheSize
static CARD32 gBrushCache[kBrushCacheSize *kBrushCacheSize]
static unsigned long kAllPlanes
static ARGB32 GetAverage(ARGB32 foreground, ARGB32 background)
Get average.
static char * gIconPaths[7]
static int GetPolyYBounds(TPoint *pts, int n, int *by, int *ty)
Get poly bounds along Y.
static CARD8 MakeComponentHilite(int cmp)
Make component hilite.
static ARGB32 GetHilite(ARGB32 background)
Calculate highlite color.
static const UInt_t NUMPTSTOBUFFER
static ASFontManager * gFontManager
static void init_icon_paths()
Set icons paths.
#define _MEMSET_(dst, lng, val)
#define FillSpansInternal(npt, ppt, widths, color)
static ASDrawContext * create_draw_context_argb32(ASImage *im, ASDrawTool *brush)
Create draw context.
#define _alphaBlend(bot, top)
static void destroy_asdraw_context32(ASDrawContext *ctx)
Destroy asdraw context32.
#define EVALUATEEDGEEVENODD(pAET, pPrevAET, y)
static int InsertionSort(EdgeTableEntry *AET)
#define BRESINITPGON(dy, x1, x2, xStart, d, m, m1, incr1, incr2)
static void loadAET(EdgeTableEntry *AET, EdgeTableEntry *ETEs)
static void FreeStorage(ScanLineListBlock *pSLLBlock)
static void CreateETandAET(int count, TPoint *pts, EdgeTable *ET, EdgeTableEntry *AET, EdgeTableEntry *pETEs, ScanLineListBlock *pSLLBlock)
#define BRESINCRPGON(d, minval, m, m1, incr1, incr2)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void cmap
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t del
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pixel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize wid
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void foreground
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char FillPolygon
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char bitmap
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint angle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t win
Option_t Option_t TPoint xy
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t FillRectangle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pxm
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TRandom * gRandom
R__EXTERN TStyle * gStyle
R__EXTERN const char * gProgName
R__EXTERN TSystem * gSystem
R__EXTERN TVirtualPS * gVirtualPS
R__EXTERN Int_t(* gThreadXAR)(const char *xact, Int_t nb, void **ar, Int_t *iret)
void PaintBox(TVirtualPad &parent)
TASImageInteractive(TVirtualPad &parent, Int_t px, Int_t py)
void PerformMove(Int_t px, Int_t py)
void CropSpans(UInt_t npt, TPoint *ppt, UInt_t *widths) override
Crop spans.
void Gradient(UInt_t angle=0, const char *colors="#FFFFFF #000000", const char *offsets=nullptr, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Render multipoint gradient inside rectangle of size (width, height) at position (x,...
void Blur(Double_t hr=3, Double_t vr=3) override
Perform Gaussian blur of the image (useful for drop shadows).
void DrawFTGlyphs(TTFhandle &ttf, UInt_t color, Int_t x, Int_t y, TVirtualPad *clippad=nullptr, Int_t offx=0, Int_t offy=0)
Draw TTF glyphs .
Bool_t SetJpegDpi(const char *name, UInt_t dpi=72)
Set an image printing resolution in Dots Per Inch units.
void StartPaletteEditor() override
Start palette editor.
void Bevel(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0, const char *hi="#ffdddddd", const char *lo="#ff555555", UShort_t thick=1, Bool_t pressed=kFALSE) override
Bevel is used to create 3D effect while drawing buttons, or any other image that needs to be framed.
void DrawLineInternal(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Internal line drawing.
Int_t fPaintMode
! 1 - fast mode, 0 - low memory slow mode
static Bool_t fgBatch
global flag to signal if batch mode is active ie fgVisual->dpy was set to nullptr
UInt_t GetWidth() const override
Return width of original image not of the displayed image.
Double_t fMinValue
! min value in image
void DrawEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, Int_t angle, const char *col="#000000", Int_t thick=1) override
Draw an ellipse.
void Paint(Option_t *option="") override
Paint image.
void DrawHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t col, UInt_t thick)
Draw an horizontal line.
void SetPaletteEnabled(Bool_t on=kTRUE) override
Switch on/off the image palette.
Bool_t InitImage(const char *caller)
Static function to initialize the image.
static Bool_t fgInit
global flag to init afterimage only once
const char * GetTitle() const override
Title is used to keep 32x32 xpm image's thumbnail.
void HSV(UInt_t hue=0, UInt_t radius=360, Int_t H=0, Int_t S=0, Int_t V=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
This function will tile original image to specified size with offsets requested, and then it will go ...
void Tile(UInt_t width, UInt_t height) override
Tile the original image.
void WriteImage(const char *file, EImageFileTypes type=TImage::kUnknown) override
Write image to specified file.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Is the mouse in the image ?
Pixmap_t GetX11Pixmap(Window_t root_window) override
Returns image X11 pixmap.
char * GetObjectInfo(Int_t px, Int_t py) const override
Get image pixel coordinates and the pixel value at the mouse pointer.
const char * TypeFromMagicNumber(const char *file)
Guess the file type from the first byte of file.
void DrawLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, const char *col="#000000", UInt_t thick=1) override
Draw a line.
Double_t fMaxValue
! max value in image
void MapQuality(EImageQuality &quality, UInt_t &asquality, Bool_t toas=kTRUE)
Map quality to/from AfterImage quality.
void Zoom(UInt_t offX, UInt_t offY, UInt_t width, UInt_t height) override
The area of an image displayed in a pad is defined by this function.
UInt_t fZoomWidth
! width of zoomed image in image pixels
Bool_t fEditable
! kTRUE image can be resized, moved by resizing/moving gPad
Int_t fZoomUpdate
! kZoom - new zooming required, kZoomOps - other ops in action, kNoZoom - no zooming or ops
Bool_t IsValid() const override
TClass * IsA() const override
void DrawCubeBezier(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t x3, Int_t y3, const char *col="#000000", UInt_t thick=1) override
Draw a cubic bezier line.
UInt_t GetScaledHeight() const override
Return height of the displayed image not of the original image.
void DrawFillArea(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill a polygon (any type convex, non-convex).
void DrawVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t col, UInt_t thick)
Draw a vertical line.
UInt_t * GetRgbaArray() override
Return a pointer to an array[width x height] of RGBA32 values.
void FillRectangle(const char *col=nullptr, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
void DrawStraightEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, const char *col="#000000", Int_t thick=1) override
Draw a straight ellipse.
Double_t * GetVecArray() override
Return a pointer to internal array[width x height] of double values [0,1].
void DrawCircle(Int_t x, Int_t y, Int_t r, const char *col="#000000", Int_t thick=1) override
Draw a circle.
ASImage * fImage
! pointer to image structure of original image
void Gray(Bool_t on=kTRUE) override
Convert RGB image to Gray image and vice versa.
void DrawText(Int_t x=0, Int_t y=0, const char *text="", Int_t size=12, const char *color=nullptr, const char *font="fixed", EText3DType type=TImage::kPlain, const char *fore_file=nullptr, Float_t angle=0) override
Draw text of size (in pixels for TrueType fonts) at position (x, y) with color specified by hex strin...
UInt_t fZoomHeight
! hight of zoomed image in image pixels
void Pad(const char *color="#00FFFFFF", UInt_t left=0, UInt_t right=0, UInt_t top=0, UInt_t bottom=0) override
Enlarge image, padding it with specified color on each side in accordance with requested geometry.
static THashTable * fgPlugList
! hash table containing loaded plugins
UInt_t * GetArgbArray() override
Return a pointer to internal array[width x height] of ARGB32 values This array is directly accessible...
Bool_t SetImageBuffer(char **buffer, EImageFileTypes type=TImage::kPng) override
Create image from compressed buffer.
Double_t * Vectorize(UInt_t max_colors=256, UInt_t dither=4, Int_t opaque_threshold=1) override
Reduce color-depth of an image and fills vector of "scientific data" [0...1].
Int_t Idx(Int_t idx)
Return a valid index in fImage tables to avoid seg-fault by accessing out of indices out of array's r...
void FillPolygon(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill a convex polygon with background color or bitmap.
void SetDefaults()
Set default parameters.
void CopyArea(TImage *dst, Int_t xsrc, Int_t ysrc, UInt_t w, UInt_t h, Int_t xdst=0, Int_t ydst=0, Int_t gfunc=3, EColorChan chan=kAllChan) override
Copy source region to the destination image.
void DrawWideLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Draw wide line.
Pixmap_t GetMask() override
DEPRECATED! Method left for backward compatibility and will be removed in ROOT7! Returns image mask p...
UInt_t * GetScanline(UInt_t y) override
Return a pointer to scan-line.
void FillSpans(UInt_t npt, TPoint *ppt, UInt_t *widths, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill spans with specified color or/and stipple.
void DrawEllips2(Int_t x, Int_t y, Int_t rx, Int_t ry, Int_t angle, const char *col="#000000", Int_t thick=1) override
Draw an ellipse.
void FromGLBuffer(UChar_t *buf, UInt_t width, UInt_t height) override
Creates an image (screenshot) from a RGBA buffer provided by GL.
TObject * Clone(const char *newname="") const override
Clone image.
void Draw(Option_t *option="") override
Draw image.
void FromBitmap(const UChar_t *buf, UInt_t width, UInt_t height) override
Creates an image from a RGBA buffer.
void CropPolygon(UInt_t npt, TPoint *ppt) override
Crop a convex polygon.
static const ASVisual * GetVisual()
Return visual.
void DrawPolyLine(UInt_t nn, TPoint *xy, const char *col="#000000", UInt_t thick=1, TImage::ECoordMode mode=kCoordModeOrigin) override
Draw a polyline.
void PolyPoint(UInt_t npt, TPoint *ppt, const char *col="#000000", TImage::ECoordMode mode=kCoordModeOrigin) override
Draw a poly point.
static void Image2Drawable(ASImage *im, Drawable_t wid, Int_t x, Int_t y, Int_t xsrc=0, Int_t ysrc=0, UInt_t wsrc=0, UInt_t hsrc=0, Option_t *opt="")
Draw asimage on drawable.
void Merge(const TImage *im, const char *op="alphablend", Int_t x=0, Int_t y=0) override
Merge two images.
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, UInt_t *ic) override
Draw a cell array.
void FillRectangleInternal(UInt_t col, Int_t x, Int_t y, UInt_t width, UInt_t height)
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
~TASImage() override
Image destructor, clean up image and visual.
Bool_t GetMaskBits(UInt_t &width, UInt_t &height, std::vector< char > &bits) override
Returns image mask bits - only alpha channel of the image.
void FloodFill(Int_t x, Int_t y, const char *col, const char *min_col, const char *max_col=nullptr) override
Flood fill.
TASImage * fScaledImage
! temporary scaled and zoomed image produced from original image
Bool_t IsEditable() const override
UInt_t fZoomOffX
! X - offset for zooming in image pixels
void ReadImage(const char *file, EImageFileTypes type=TImage::kUnknown) override
Read specified image file.
void GetImageBuffer(char **buffer, int *size, EImageFileTypes type=TImage::kPng) override
Return in-memory buffer compressed according image type.
EImageFileTypes GetFileType(const char *ext)
Return file type depending on specified extension.
void Slice(UInt_t xStart, UInt_t xEnd, UInt_t yStart, UInt_t yEnd, UInt_t toWidth, UInt_t toHeight) override
Another method of enlarging images where corners remain unchanged, but middle part gets tiled.
static UInt_t AlphaBlend(UInt_t bot, UInt_t top)
Return alpha-blended value computed from bottom and top pixel values.
void SetImage(const Double_t *imageData, UInt_t width, UInt_t height, TImagePalette *palette=nullptr) override
Deletes the old image and creates a new image depending on the values of imageData.
void DrawTextTTF(Int_t x, Int_t y, const char *text, Int_t size, UInt_t color, const char *font_name, Float_t angle)
Draw text using TrueType fonts.
void PutPixel(Int_t x, Int_t y, const char *col="#000000") override
Draw a point at the specified position.
void Browse(TBrowser *) override
Browse image.
void DrawDashZTLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed line with thick pixel width.
void DrawTextOnPad(TText *text, Int_t x=0, Int_t y=0, TVirtualPad *pad=nullptr, Int_t offx=0, Int_t offy=0) override
Draw text at the pixel position (x,y) checking clip on pad.
void DestroyImage()
Destroy image.
static Bool_t InitVisual()
Static function to initialize the ASVisual.
UInt_t fZoomOffY
! Y - offset for zooming im image pixels
void UnZoom() override
Un-zoom the image to original size.
void Streamer(TBuffer &) override
Streamer for ROOT I/O.
TArrayL * GetPixels(Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Return 2D array of machine dependent pixel values.
void PaintImage(Drawable_t wid, Int_t x, Int_t y, Int_t xsrc=0, Int_t ysrc=0, UInt_t wsrc=0, UInt_t hsrc=0, Option_t *opt="") override
Draw image on the drawable wid (pixmap, window) at x,y position.
void DestroyScaledImage()
Destroy scaled image.
ASImage * fGrayImage
! gray image
void DrawDashVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed vertical line.
void SetTitle(const char *title="") override
Set a title for an image.
void MapFileTypes(EImageFileTypes &type, UInt_t &astype, Bool_t toas=kTRUE)
Map file type to/from AfterImage types.
void DrawRectangle(UInt_t x, UInt_t y, UInt_t w, UInt_t h, const char *col="#000000", UInt_t thick=1) override
Draw a rectangle.
void Append(const TImage *im, const char *option="+", const char *color="#00000000") override
Append image.
void DrawDashHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed horizontal line.
void DrawDashLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, const char *col="#000000", UInt_t thick=1) override
Draw a dashed line.
void SetPalette(const TImagePalette *palette) override
Set a new palette to an image.
void Scale(UInt_t width, UInt_t height) override
Scale the original image.
TASImage()
Default image constructor.
TASImage & operator=(const TASImage &img)
Image assignment operator.
void Mirror(Bool_t vert=kTRUE) override
Mirror image in place.
void DrawDashZLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col)
Draw a dashed line with one pixel width.
void DrawSegments(UInt_t nseg, Segment_t *seg, const char *col="#000000", UInt_t thick=1) override
Draw segments.
Pixmap_t GetPixmap() override
DEPRECATED.
void FromWindow(Drawable_t wid, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Create an image (screenshot) from specified window.
TArrayD * GetArray(UInt_t w=0, UInt_t h=0, TImagePalette *pal=gWebImagePalette) override
In case of vectorized image return an associated array of doubles otherwise this method creates and r...
void Flip(Int_t flip=180) override
Flip image in place.
Bool_t GetPolygonSpans(UInt_t npt, TPoint *ppt, UInt_t *nspans, TPoint **firstPoint, UInt_t **firstWidth)
The code is based on Xserver/mi/mipolycon.c "Copyright 1987, 1998 The Open Group".
void Crop(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Crop an image.
void EndPaint() override
EndPaint does internal RLE compression of image data.
void BeginPaint(Bool_t fast=kTRUE) override
BeginPaint initializes internal array[width x height] of ARGB32 pixel values.
static ASVisual * fgVisual
pointer to visual structure
UInt_t GetScaledWidth() const override
Return width of the displayed image not of the original image.
void GetZoomPosition(UInt_t &x, UInt_t &y, UInt_t &w, UInt_t &h) const
Return the zoom parameters.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
void FromX11Window(Window_t win, Int_t x, Int_t y, Int_t width, Int_t height) override
Create an image from the given X11 window Can only be used on platforms where X11 is supported.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute mouse events.
void FromPad(TVirtualPad *pad, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Create an image from the given pad, afterwards this image can be saved in any of the supported image ...
UInt_t GetHeight() const override
Return height of original image not of the displayed image.
void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, const char *col="#000000", UInt_t thick=1, Int_t mode=0) override
Draw a box.
Bool_t fIsGray
! kTRUE if image is gray
void CreateThumbnail()
Create image thumbnail.
Array of doubles (64 bits per element).
void AddAt(Double_t c, Int_t i)
Set the double c value at position i in the array.
const Double_t * GetArray() const
Array of longs (32 or 64 bits per element).
void AddAt(Long_t c, Int_t i)
Add long c at position i. Check for out of bounds.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetPalette(const TImagePalette *palette)
Set a new palette for the image.
Bool_t fConstRatio
keep aspect ratio of image on the screen
EImageQuality GetImageQuality() const
Bool_t GetConstRatio() const
virtual const TImagePalette & GetPalette() const
TImagePalette fPalette
color palette for value -> color conversion
virtual void Streamer(TBuffer &)
UInt_t GetImageCompression() const
Bool_t fPaletteEnabled
! kTRUE - palette is drawn on the image
virtual void SaveImageAttributes(std::ostream &out, const char *name, EImageQuality qualdef=kImgPoor, UInt_t comprdef=0, Bool_t constRatiodef=kTRUE)
Save image attributes as C++ statement(s) on output stream, but not the palette.
virtual void StartPaletteEditor()
Opens a GUI to edit the color palette.
virtual void ModifyOn(TVirtualPad &pad)
Change current line attributes on specified pad.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Using a TBrowser one can browse all ROOT objects.
Buffer base class used for serializing objects.
The color creation and management class.
static ULong_t RGB2Pixel(Int_t r, Int_t g, Int_t b)
Convert r,g,b to graphics system dependent pixel value.
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
const char * AsHexString() const
Return color as hexadecimal string.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
void Draw(Option_t *option="") override
Draw this frame with its current attributes.
virtual void PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Double_t &wmin, Double_t &wmax, Int_t &ndiv, Option_t *chopt="", Double_t gridlength=0, Bool_t drawGridOnly=kFALSE)
Control function to draw an axis.
THashTable implements a hash table to store TObject's.
void Add(TObject *obj) override
Add object to the hash table.
TObject * FindObject(const char *name) const override
Find object using its name.
Save canvas as an image (GIF, JPEG, PNG, XPM, TIFF etc.).
A class to define a conversion from pixel values to pixel color.
UShort_t * fColorRed
[fNumPoints] red color at each anchor point
Double_t * fPoints
[fNumPoints] value of each anchor point [0..1]
virtual Int_t FindColor(UShort_t r, UShort_t g, UShort_t b)
Returns an index of the closest color.
UShort_t * fColorGreen
[fNumPoints] green color at each anchor point
UShort_t * fColorBlue
[fNumPoints] blue color at each anchor point
UInt_t fNumPoints
number of anchor points
UShort_t * fColorAlpha
[fNumPoints] alpha at each anchor point
virtual unsigned char * ReadFile(const char *filename, UInt_t &w, UInt_t &h)=0
An abstract interface to image processing library.
void Streamer(TBuffer &) override
Stream an object of class TObject.
virtual UInt_t * GetArgbArray()
virtual UInt_t GetWidth() const
static TImage * Create()
Create an image.
TImage & operator=(const TImage &img)
virtual UInt_t GetHeight() const
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
virtual void SetName(const char *name)
Set the name of the TNamed.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Longptr_t ExecPlugin(int nargs)
Int_t LoadPlugin()
Load the plugin library for this handler.
static const TString & GetTTFFontDir()
Get the fonts directory in the installation. Static utility function.
static const TString & GetIconPath()
Get the icon path in the installation. Static utility function.
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
void ToLower()
Change string to lower-case.
Int_t Atoi() const
Return integer value of string.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Float_t GetScreenFactor() const
Float_t GetImageScaling() const
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
virtual const char * FindFile(const char *search, TString &file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
virtual const char * HomeDirectory(const char *userName=nullptr)
Return the user's home directory.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
Dynamic handle to work with freetype 2 library.
Bool_t SetTextSize(Float_t textsize)
Set current text size.
void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
UInt_t GetNumGlyphs() const
return number of glyphs
void SetTextFont(Font_t fontnumber)
Set specified font.
void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
void SetSmoothing(Bool_t state)
Bool_t GetGlyphData(UInt_t n, Int_t &offx, Int_t &offy, UChar_t *&buffer, UInt_t &width, UInt_t &rows, UInt_t &pitch)
Returns data for glyph bitmap Instead direct access to FT_BitmapGlyph one can obtain all relevant fie...
Bool_t ApplyAlignRotate(Int_t &px, Int_t &py, Int_t align, Int_t pad_width, Int_t pad_height)
Apply align and configured rotation matrix to text position px and py will be shifted to the place wh...
Base class for several text objects.
Int_t GetNoElements() const
Element * GetMatrixArray()
TVirtualPS is an abstract interface to Postscript, PDF, SVG.
virtual void * GetStream() const
virtual void Open(const char *filename, Int_t type=-111)=0
virtual Bool_t FillImageFromPad(TImage *image, TVirtualPad *pad) const
Fill TImage object by data from the pad Returns kFALSE if not supported or in case of failures.
small helper class to store/restore gPad context in TPad methods
Helper class to store interactive parameters for individual objects Should be used via MakeInteractiv...
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual Int_t YtoAbsPixel(Double_t y) const =0
virtual Double_t GetX2() const =0
virtual void UpdateAsync()=0
virtual Bool_t IsWeb() const
virtual Double_t AbsPixeltoX(Double_t px)=0
virtual Bool_t IsBatch() const =0
virtual Int_t XtoAbsPixel(Double_t x) const =0
virtual Double_t GetY1() const =0
virtual TVirtualPadPainter * GetPainter()=0
const char * GetName() const override=0
Returns name of object.
virtual void PaintBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Option_t *option="")=0
void Paint(Option_t *option="") override=0
This method must be overridden if a class wants to paint itself.
virtual Double_t GetY2() const =0
virtual Double_t AbsPixeltoY(Double_t py)=0
virtual Double_t GetX1() const =0
virtual void SetBorderMode(Short_t bordermode)
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Graphics context structure.
Pixmap_t fClipMask
bitmap clipping; other calls for rects
Int_t fClipXOrigin
origin for clipping
Mask_t fMask
bit mask specifying which fields are valid
Used for drawing line segments (maps to the X11 XSegments structure)
struct _EdgeTableEntry * next
struct _ScanLineListBlock * next
EdgeTableEntry * edgelist
struct _ScanLineList * next