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];
1085 Error(
"FromPad",
"pad cannot be 0");
1090 Warning(
"FromPad",
"Visual not initiated");
1099 if (
gROOT->IsBatch()) {
1107 if (itmp && itmp->
fImage) {
1116 if (itmp && itmp->
fImage && (itmp !=
this)) {
1118 if (itmp->
fImage->alt.argb32) {
1120 fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
1121 memcpy(
fImage->alt.argb32, itmp->
fImage->alt.argb32, sz*4);
1148 static int x11 = -1;
1149 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
1154 unsigned char *bits =
gVirtualX->GetColorBits(wd, 0, 0,
w,
h);
1159 fImage = bitmap2asimage(bits,
w,
h, 0,
nullptr);
1180 Error(
"Draw",
"no image set");
1208 gPad->Range(-left / (1.0 - left - right),
1209 -bottom / (1.0 - top - bottom),
1210 1 + right / (1.0 - left - right),
1211 1 + top / ( 1.0 - top - bottom));
1212 gPad->RangeAxis(0, 0, 1, 1);
1236 wsrc = wsrc ? wsrc : im->width;
1237 hsrc = hsrc ? hsrc : im->height;
1239 static int x11 =
gVirtualX->InheritsFrom(
"TGX11");
1246 UInt_t ww = wsrc - ow + (ow ? 8 : 0);
1250 std::vector<char> bits(ww*hh);
1252 ASImageDecoder *imdec = start_image_decoding(
fgVisual, im, SCL_DO_ALPHA,
1253 xsrc, ysrc, ww, 0,
nullptr);
1255 for (
UInt_t yy = 0; yy < hh; yy++) {
1256 imdec->decode_image_scanline(imdec);
1257 CARD32 *
a = imdec->buffer.alpha;
1259 for (
UInt_t xx = 0; xx < ww; xx++) {
1274 stop_image_decoding(&imdec);
1277 bits.data(), ww, hh);
1295 asimage2drawable(
fgVisual,
wid, im, (GC)
gc, xsrc, ysrc,
x,
y, wsrc, hsrc, 1);
1297 ASImage *img =
nullptr;
1298 unsigned char *bits = (
unsigned char *)im->alt.argb32;
1300 img = tile_asimage(
fgVisual, im, xsrc, ysrc, wsrc, hsrc,
1301 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
1303 bits = (
unsigned char *)img->alt.argb32;
1312 if (!
option.Contains(
"opaque")) {
1322 destroy_asimage(&img);
1349 xsrc, ysrc, wsrc, hsrc, opt);
1368 Error(
"Paint",
"no image set");
1373 Warning(
"Paint",
"Visual not initiated");
1377 Int_t tile_x = 0, tile_y = 0;
1378 CARD32 tile_tint = 0;
1387 if (sscanf(opt.
Data() + opt.
Index(
"t"),
"t%d,%d,%s", &tile_x, &tile_y,
1390 if (parse_argb_color(stint, (CARD32*)&tile_tint) == stint)
1393 Error(
"Paint",
"tile option error");
1401 if (!
fImage->alt.vector) {
1417 to_h = (
Int_t)(to_h * (1.0 -
gPad->GetBottomMargin() -
gPad->GetTopMargin() ) + 0.5);
1418 to_w = (
Int_t)(to_w * (1.0 -
gPad->GetLeftMargin() -
gPad->GetRightMargin() ) + 0.5);
1421 if ((to_w < 25 || to_h < 25) && !expand) {
1422 Error(
"Paint",
"pad too small to display an image");
1434 Int_t pal_Ax = to_w +
gPad->UtoAbsPixel(
gPad->GetLeftMargin()) +
1435 (
gPad->UtoAbsPixel(
gPad->GetRightMargin()) / 10);
1437 Int_t pal_x = to_w +
gPad->UtoPixel(
gPad->GetLeftMargin()) +
1438 (
gPad->UtoPixel(
gPad->GetRightMargin()) / 10);
1443 ASImage *grad_im =
nullptr;
1451 grad.type = GRADIENT_Top2Bottom;
1452 grad.color =
new ARGB32[grad.npoints];
1453 grad.offset =
new double[grad.npoints];
1456 Int_t oldPt = grad.npoints -
pt -1;
1457 grad.offset[
pt] = 1 - pal.
fPoints[oldPt];
1458 grad.color[
pt] = (((ARGB32)(pal.
fColorBlue[oldPt] & 0xff00)) >> 8) |
1460 (((ARGB32)(pal.
fColorRed[oldPt] & 0xff00)) << 8) |
1461 (((ARGB32)(pal.
fColorAlpha[oldPt] & 0xff00)) << 16);
1465 pal_h, SCL_DO_COLOR,
1468 delete [] grad.color;
1469 delete [] grad.offset;
1477 to_w, to_h, tile_tint, ASA_ASImage,
1512 destroy_asimage(&tmpImage);
1527 Error(
"Paint",
"image could not be rendered to display");
1531 int tox = expand ? 0 :
int(
gPad->UtoPixel(1.) *
gPad->GetLeftMargin());
1532 int toy = expand ? 0 :
int(
gPad->VtoPixel(0.) *
gPad->GetTopMargin());
1534 auto pp =
gPad->GetPainter();
1544 pp->DrawImage(&pimg, pal_x, pal_y, flags);
1555 axis.
PaintAxis(pal_Xpos,
gPad->PixeltoY(pal_Ay + pal_h - 1),
1556 pal_Xpos,
gPad->PixeltoY(pal_Ay),
1557 min, max, ndiv,
"+LU");
1564 pal_Xpos,
gPad->AbsPixeltoY(pal_Ay + 1),
1565 min, max, ndiv,
"+L");
1569 destroy_asimage(&grad_im);
1577 Int_t pxl, pyl, pxt, pyt;
1584 if (px1 < px2) {pxl = px1; pxt = px2;}
1585 else {pxl = px2; pxt = px1;}
1586 if (py1 < py2) {pyl = py1; pyt = py2;}
1587 else {pyl = py2; pyt = py1;}
1589 if ((px > pxl && px < pxt) && (py > pyl && py < pyt))
1640 auto &parent = *
gPad;
1643 parent.ExecuteEvent(
event, px, py);
1647 parent.SetCursor(
kCross);
1661 parent.Interactive(
this, inter);
1666 inter->PerformMove(px, py);
1667 inter->PaintBox(parent);
1673 Int_t imgX1 = 0, imgY1 = 0, imgW = 0, imgH = 0;
1677 if (inter && image) {
1678 inter->PerformMove(px, py);
1679 imgX1 = inter->zx1 - parent.XtoAbsPixel(0);
1680 imgY1 = image->height - 1 - inter->zy1 + parent.YtoAbsPixel(1);
1681 imgW = inter->zx2 - inter->zx1;
1682 imgH = inter->zy1 - inter->zy2;
1685 parent.Interactive();
1687 if ((imgW >= 5) && (imgH >= 5)) {
1694 imgW = (
Int_t)(imgW / xfact);
1695 imgH = (
Int_t)(imgH / yfact);
1697 Zoom(imgX1, imgY1, imgW + 1, imgH + 1);
1713 static char info[64];
1719 px -=
gPad->XtoAbsPixel(0);
1720 py -=
gPad->YtoAbsPixel(1);
1723 if (px < 0 || py < 0)
return info;
1727 if (px >= (
int)image->width || py >= (
int)image->height)
1730 py = image->height - 1 - py;
1737 if (
fImage->alt.vector) {
1738 snprintf(info,64,
"x: %d y: %d %.5g",
1741 snprintf(info,64,
"x: %d y: %d", px, py);
1757 Warning(
"SetPalette",
"Visual not initiated");
1762 Warning(
"SetPalette",
"Image not valid");
1772 ASVectorPalette asPalette;
1774 asPalette.channels[0] =
new CARD16 [asPalette.npoints];
1775 asPalette.channels[1] =
new CARD16 [asPalette.npoints];
1776 asPalette.channels[2] =
new CARD16 [asPalette.npoints];
1777 asPalette.channels[3] =
new CARD16 [asPalette.npoints];
1783 asPalette.points =
new double[asPalette.npoints];
1784 for (
Int_t point = 0; point <
Int_t(asPalette.npoints); point++)
1790 delete [] asPalette.points;
1791 for (
Int_t col = 0; col < 4; col++)
1792 delete [] asPalette.channels[col];
1809 Warning(
"Scale",
"Image not initiated");
1814 Warning(
"Scale",
"Visual not initiated");
1822 if (toWidth > 30000)
1824 if (toHeight > 30000)
1827 ASImage *img = scale_asimage(
fgVisual,
fImage, toWidth, toHeight,
1844 Warning(
"Slice",
"Image not initiated");
1849 Warning(
"Slice",
"Visual not initiated");
1857 if (toWidth > 30000)
1859 if (toHeight > 30000)
1863 yStart, yEnd, toWidth, toHeight,
1879 Warning(
"Tile",
"Image not initiated");
1884 Warning(
"Tile",
"Visual not initiated");
1892 if (toWidth > 30000)
1894 if (toHeight > 30000)
1897 ASImage *img = tile_asimage(
fgVisual,
fImage, 0, 0, toWidth, toHeight, 0,
1919 Warning(
"Zoom",
"Image not valid");
1941 Warning(
"UnZoom",
"Image not valid");
1968 Warning(
"Flip",
"Image not valid");
1972 Warning(
"Flip",
"Visual not initiated");
1976 if (
fImage->alt.vector) {
1977 Warning(
"Flip",
"flip does not work for data images");
1981 Int_t rflip = flip/90;
2015 Warning(
"Mirror",
"Image not valid");
2020 Warning(
"Mirror",
"Visual not initiated");
2024 if (
fImage->alt.vector) {
2025 Warning(
"Mirror",
"mirror does not work for data images");
2101 Display *disp = (Display*)
gVirtualX->GetDisplay();
2107 static ASVisual *vis_x =
nullptr;
2109 if (vis &&
cmap && !noX) {
2111 vis_x = create_asvisual_for_id(disp, screen, depth,
2112 XVisualIDFromVisual(vis),
cmap,
nullptr);
2118 static ASVisual *vis_batch =
nullptr;
2123 vis_batch = create_asvisual(
nullptr, 0, 0,
nullptr);
2124 vis_batch->dpy =
nullptr;
2139 Warning(caller,
"Visual not initiated");
2148 if (!
fImage->alt.argb32) {
2152 if (!
fImage->alt.argb32) {
2153 Warning(caller,
"Failed to get argb32 pixel array");
2165 Warning(
"StartPaletteEditor",
"Image not valid");
2168 if (!
fImage->alt.vector) {
2169 Warning(
"StartPaletteEditor",
"palette can be modified only for data images");
2184 Warning(
"GetPixmap",
"Visual not initiated");
2192 static int x11 = -1;
2193 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2197 img,
nullptr,
kTRUE);
2199 if (!
fImage->alt.argb32) {
2202 ret =
gVirtualX->CreatePixmapFromData((
unsigned char*)
fImage->alt.argb32,
2218 Warning(
"GetMask",
"Visual not initiated");
2225 Warning(
"GetMask",
"No image");
2230 UInt_t ow = img->width%8;
2231 UInt_t ww = img->width - ow + (ow ? 8 : 0);
2233 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALPHA,
2234 0, 0, ww, 0,
nullptr);
2238 std::vector<char> bits(ww * hh / 8);
2242 imdec->decode_image_scanline(imdec);
2243 CARD32 *
a = imdec->buffer.alpha;
2258 stop_image_decoding(&imdec);
2259 pxmap =
gVirtualX->CreateBitmap(
gVirtualX->GetDefaultRootWindow(), bits.data(), ww, hh);
2269 Warning(
"SetImage",
"Visual not initiated");
2282 static int x11 = -1;
2283 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2295 fImage = bitmap2asimage(bits,
w,
h, 0,
nullptr);
2300 fImage = bitmap2asimage(bits,
w,
h, 0, mask_bits);
2301 delete [] mask_bits;
2312 Warning(
"GetPixels",
"Wrong Image");
2317 ASImageDecoder *imdec;
2331 if ((
x >= (
int)img->width) || (
y >= (
int)img->height)) {
2335 if ((
int)(
x +
width) > (
int)img->width) {
2339 if ((
int)(
y +
height) > (
int)img->height) {
2343 if ((imdec = start_image_decoding(
nullptr,
fImage, SCL_DO_ALL, 0,
y,
2344 img->width,
height,
nullptr)) ==
nullptr) {
2345 Warning(
"GetPixels",
"Failed to create image decoder");
2354 imdec->decode_image_scanline(imdec);
2357 if ((
r == (
Int_t)imdec->buffer.red[i]) &&
2358 (
g == (
Int_t)imdec->buffer.green[i]) &&
2359 (
b == (
Int_t)imdec->buffer.blue[i])) {
2361 r = (
Int_t)imdec->buffer.red[i];
2362 g = (
Int_t)imdec->buffer.green[i];
2363 b = (
Int_t)imdec->buffer.blue[i];
2370 stop_image_decoding(&imdec);
2382 Warning(
"GetVecArray",
"Bad Image");
2385 if (
fImage->alt.vector) {
2386 return fImage->alt.vector;
2404 Warning(
"GetArray",
"Bad Image");
2410 if (
fImage->alt.vector) {
2415 ASImageDecoder *imdec;
2426 if ((imdec = start_image_decoding(
nullptr, img, SCL_DO_ALL, 0, 0,
2427 img->width, 0,
nullptr)) ==
nullptr) {
2428 Warning(
"GetArray",
"Failed to create image decoder");
2433 CARD32
r = 0,
g = 0,
b = 0;
2437 for (
UInt_t k = 0; k <
h; k++) {
2438 imdec->decode_image_scanline(imdec);
2440 for (
UInt_t i = 0; i <
w; ++i) {
2441 if ((
r == imdec->buffer.red[i]) &&
2442 (
g == imdec->buffer.green[i]) &&
2443 (
b == imdec->buffer.blue[i])) {
2445 r = imdec->buffer.red[i];
2446 g = imdec->buffer.green[i];
2447 b = imdec->buffer.blue[i];
2455 stop_image_decoding(&imdec);
2478 const char *color,
const char *font_name,
2482 ARGB32 text_color = ARGB32_Black;
2483 ASImage *fore_im =
nullptr;
2484 ASImage *text_im =
nullptr;
2495 if (fn.
Last(
'/') == 0)
2496 fn = fn(1, fn.
Length() - 1);
2508 parse_argb_color(color, &text_color);
2521 Warning(
"DrawText",
"cannot create Font Manager");
2530 Warning(
"DrawText",
"cannot find a font %s", font_name);
2542 text_im = draw_text(
text, font, (ASText3DType)
type, 0);
2547 ASImage *tmp = file2ASImage(fore_file, 0xFFFFFFFF, SCREEN_GAMMA, 0, 0);
2549 if ((tmp->width !=
width) || (tmp->height !=
height)) {
2553 destroy_asimage(&tmp);
2560 move_asimage_channel(fore_im, IC_ALPHA, text_im, IC_ALPHA);
2561 destroy_asimage(&text_im);
2569 ASImage *rendered_im;
2570 ASImageLayer layers[2];
2572 init_image_layers(&(layers[0]), 2);
2573 fore_im->back_color = text_color;
2574 layers[0].im = rimg;
2575 layers[0].dst_x = 0;
2576 layers[0].dst_y = 0;
2577 layers[0].clip_width = rimg->width;
2578 layers[0].clip_height = rimg->height;
2579 layers[0].bevel =
nullptr;
2580 layers[1].im = fore_im;
2581 layers[1].dst_x =
x;
2582 layers[1].dst_y =
y;
2583 layers[1].clip_width = fore_im->width;
2584 layers[1].clip_height = fore_im->height;
2586 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, rimg->width, rimg->height,
2589 destroy_asimage(&fore_im);
2622 Warning(
"Merge",
"Visual not initiated");
2626 ASImage *rendered_im;
2627 ASImageLayer layers[2];
2629 init_image_layers(&(layers[0]), 2);
2631 layers[0].dst_x = 0;
2632 layers[0].dst_y = 0;
2633 layers[0].clip_width =
fImage->width;
2634 layers[0].clip_height =
fImage->height;
2635 layers[0].bevel =
nullptr;
2636 layers[1].im = ((
TASImage*)im)->fImage;
2637 layers[1].dst_x =
x;
2638 layers[1].dst_y =
y;
2639 layers[1].clip_width = im->
GetWidth();
2640 layers[1].clip_height = im->
GetHeight();
2641 layers[1].merge_scanlines = blend_scanlines_name2func(op ? op :
"add");
2659 Warning(
"Blur",
"Visual not initiated");
2664 fImage = create_asimage(100, 100, 0);
2667 Warning(
"Blur",
"Failed to create image");
2674 ASImage *rendered_im = blur_asimage_gauss(
fgVisual,
fImage, hr > 0 ? hr : 3,
2675 vr > 0 ? vr : 3, SCL_DO_ALL,
2688 Warning(
"Clone",
"Image not initiated");
2695 Warning(
"Clone",
"Failed to create image");
2711 if (
fImage->alt.argb32) {
2713 im->
fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
2714 memcpy(im->
fImage->alt.argb32,
fImage->alt.argb32, sz *
sizeof(ARGB32));
2734 Warning(
"Vectorize",
"Visual not initiated");
2739 fImage = create_asimage(100, 100, 0);
2742 Warning(
"Vectorize",
"Failed to create image");
2753 dither = dither > 7 ? 7 : dither;
2755 res = colormap_asimage(
fImage, &
cmap, max_colors, dither, opaque_threshold);
2767 g = INDEX_SHIFT_GREEN(
cmap.entries[res[i]].green);
2768 b = INDEX_SHIFT_BLUE(
cmap.entries[res[i]].blue);
2769 r = INDEX_SHIFT_RED(
cmap.entries[res[i]].red);
2771 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2782 g = INDEX_SHIFT_GREEN(
cmap.entries[j].green);
2783 b = INDEX_SHIFT_BLUE(
cmap.entries[j].blue);
2784 r = INDEX_SHIFT_RED(
cmap.entries[j].red);
2785 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2787 v = (
v>>12) & 0x0FFF;
2799 fImage->alt.vector = vec;
2802 if (res) safefree(res);
2848 Warning(
"HSV",
"Visual not initiated");
2856 Warning(
"HSV",
"Failed to create image");
2868 ASImage *rendered_im =
nullptr;
2872 hue, radius, H, S, V, ASA_ASImage, 100,
2873 ASIMAGE_QUALITY_TOP);
2876 Warning(
"HSV",
"Failed to create rendered image");
2914 Warning(
"Gradient",
"Visual not initiated");
2918 ASImage *rendered_im =
nullptr;
2919 ASGradient gradient;
2921 int reverse = 0, npoints1 = 0, npoints2 = 0;
2928 if ((
angle > 2 * 180 * 15 / 16) || (
angle < 2 * 180 * 1 / 16)) {
2929 gradient.type = GRADIENT_Left2Right;
2930 }
else if (
angle < 2 * 180 * 3 / 16) {
2931 gradient.type = GRADIENT_TopLeft2BottomRight;
2932 }
else if (
angle < 2 * 180 * 5 / 16) {
2933 gradient.type = GRADIENT_Top2Bottom;
2934 }
else if (
angle < 2 * 180 * 7 / 16) {
2935 gradient.type = GRADIENT_BottomLeft2TopRight; reverse = 1;
2936 }
else if (
angle < 2 * 180 * 9 / 16) {
2937 gradient.type = GRADIENT_Left2Right; reverse = 1;
2938 }
else if (
angle < 2 * 180 * 11 / 16) {
2939 gradient.type = GRADIENT_TopLeft2BottomRight; reverse = 1;
2940 }
else if (
angle < 2 * 180 * 13 / 16) {
2941 gradient.type = GRADIENT_Top2Bottom; reverse = 1;
2943 gradient.type = GRADIENT_BottomLeft2TopRight;
2946 for (
p = (
char*)colors; isspace((
int)*
p);
p++) { }
2948 for (npoints1 = 0; *
p; npoints1++) {
2950 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2952 for ( ; isspace((
int)*
p);
p++) { }
2955 for (
p = (
char*)offsets; isspace((
int)*
p);
p++) { }
2957 for (npoints2 = 0; *
p; npoints2++) {
2959 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2961 for ( ; isspace((
int)*
p);
p++) { }
2966 if (offsets && (npoints1 > npoints2)) npoints1 = npoints2;
2975 gradient.color =
new ARGB32[npoints1];
2976 gradient.offset =
new double[npoints1];
2978 for (
p = (
char*)colors; isspace((
int)*
p);
p++) { }
2980 for (npoints1 = 0; *
p; ) {
2984 for ( ; *
p && !isspace((
int)*
p);
p++) { }
2986 for ( ; isspace((
int)*
p);
p++) { }
2988 col = str(pb - colors,
p - pb);
2990 if (parse_argb_color(col.
Data(), gradient.color + npoints1) != col) {
2993 Warning(
"Gradient",
"Failed to parse color [%s] - defaulting to black", pb);
2998 for (
p = (
char*)offsets; isspace((
int)*
p);
p++) { }
3000 for (npoints2 = 0; *
p; ) {
3004 for ( ; *
p && !isspace((
int)*
p);
p++) { }
3007 gradient.offset[npoints2] = strtod(pb, &pb);
3009 if (pb ==
p) npoints2++;
3011 for ( ; isspace((
int)*
p);
p++) { }
3014 for (npoints2 = 0; npoints2 < npoints1; npoints2++) {
3015 gradient.offset[npoints2] = (
double)npoints2 / (npoints1 - 1);
3018 gradient.npoints = npoints1;
3020 if (npoints2 && (gradient.npoints > npoints2)) {
3021 gradient.npoints = npoints2;
3024 for (i = 0; i < gradient.npoints/2; i++) {
3025 int i2 = gradient.npoints - 1 - i;
3026 ARGB32
c = gradient.color[i];
3027 double o = gradient.offset[i];
3028 gradient.color[i] = gradient.color[i2];
3029 gradient.color[i2] =
c;
3030 gradient.offset[i] = gradient.offset[i2];
3031 gradient.offset[i2] = o;
3033 for (i = 0; i < gradient.npoints; i++) {
3034 gradient.offset[i] = 1.0 - gradient.offset[i];
3040 delete [] gradient.color;
3041 delete [] gradient.offset;
3045 Warning(
"Gradient",
"Failed to create gradient image");
3054 ASImageLayer layers[2];
3056 init_image_layers(&(layers[0]), 2);
3058 layers[0].dst_x = 0;
3059 layers[0].dst_y = 0;
3060 layers[0].clip_width =
fImage->width;
3061 layers[0].clip_height =
fImage->height;
3062 layers[0].bevel =
nullptr;
3063 layers[1].im = rendered_im;
3064 layers[1].dst_x =
x;
3065 layers[1].dst_y =
y;
3066 layers[1].clip_width =
width;
3067 layers[1].clip_height =
height;
3068 layers[1].merge_scanlines = alphablend_scanlines;
3073 Warning(
"Gradient",
"Failed to create merged image");
3077 destroy_asimage(&rendered_im);
3092 cmp = (cmp * 12) / 10;
3094 return (cmp > 255) ? 255 : cmp;
3115 return (background >> 1) & 0x7F7F7F7F;
3126 a = ARGB32_ALPHA8(
foreground) + ARGB32_ALPHA8(background);
3128 r = ARGB32_RED8(
foreground) + ARGB32_RED8(background);
3130 g = ARGB32_GREEN8(
foreground) + ARGB32_GREEN8(background);
3132 b = ARGB32_BLUE8(
foreground) + ARGB32_BLUE8(background);
3135 return MAKE_ARGB32(
a,
r,
g,
b);
3151 const char *hi_color,
const char *lo_color,
UShort_t thick,
3155 Warning(
"Bevel",
"Visual not initiated");
3162 ARGB32
hi=ARGB32_White, lo=ARGB32_White;
3163 parse_argb_color(hi_color, &
hi);
3164 parse_argb_color(lo_color, &lo);
3167 bevel.lo_color =
hi;
3169 bevel.hi_color = lo;
3172 bevel.hi_color =
hi;
3174 bevel.lo_color = lo;
3179 int extra_hilite = 2;
3180 bevel.left_outline = bevel.top_outline = bevel.right_outline = bevel.bottom_outline = thick;
3181 bevel.left_inline = bevel.top_inline = bevel.right_inline = bevel.bottom_inline = extra_hilite + 1;
3183 if (bevel.top_outline > 1) {
3184 bevel.top_inline += bevel.top_outline - 1;
3187 if (bevel.left_outline > 1) {
3188 bevel.left_inline += bevel.left_outline - 1;
3191 if (bevel.right_outline > 1) {
3192 bevel.right_inline += bevel.right_outline - 1;
3195 if (bevel.bottom_outline > 1) {
3196 bevel.bottom_inline += bevel.bottom_outline - 1;
3200 ARGB32 fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ? bevel.hilo_color : (bevel.hilo_color | 0xff000000);
3206 Warning(
"Bevel",
"Failed to create image");
3218 ASImageLayer layers[2];
3219 init_image_layers(&(layers[0]), 2);
3222 layers[0].dst_x = 0;
3223 layers[0].dst_y = 0;
3224 layers[0].clip_width =
fImage->width;
3225 layers[0].clip_height =
fImage->height;
3226 layers[0].bevel =
nullptr;
3228 UInt_t w =
width - (bevel.left_outline + bevel.right_outline);
3229 UInt_t h =
height - (bevel.top_outline + bevel.bottom_outline);
3230 ASImage *bevel_im = create_asimage(
w,
h, 0);
3233 Warning(
"Bevel",
"Failed to create bevel image");
3237 layers[1].im = bevel_im;
3238 fill_asimage(
fgVisual, bevel_im, 0, 0,
w,
h, fill);
3240 layers[1].dst_x =
x;
3241 layers[1].dst_y =
y;
3242 layers[1].clip_width =
width;
3243 layers[1].clip_height =
height;
3244 layers[1].bevel = &bevel;
3245 layers[1].merge_scanlines = alphablend_scanlines;
3249 destroy_asimage(&bevel_im);
3252 Warning(
"Bevel",
"Failed to image");
3272 Warning(
"Pad",
"Visual not initiated");
3277 fImage = create_asimage(100, 100, 0);
3280 Warning(
"Pad",
"Failed to create image");
3287 ARGB32 color = ARGB32_White;
3288 parse_argb_color(col, &color);
3299 Warning(
"Pad",
"Failed to create output image");
3316 Warning(
"Crop",
"Visual not initiated");
3332 Warning(
"Crop",
"input size larger than image");
3335 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
3339 Warning(
"Crop",
"Failed to start image decoding");
3347 Warning(
"Crop",
"Failed to create image");
3351 ASImageOutput *imout = start_image_output(
fgVisual, img, ASA_ASImage,
3355 Warning(
"Crop",
"Failed to start image output");
3356 destroy_asimage(&img);
3357 if (imdec)
delete [] imdec;
3366 imdec->decode_image_scanline(imdec);
3367 imout->output_image_scanline(imout, &(imdec->buffer), 1);
3370 stop_image_decoding(&imdec);
3371 stop_image_output(&imout);
3395 Warning(
"Append",
"Visual not initiated");
3413 }
else if (opt ==
"/") {
3434 Warning(
"BeginPaint",
"Visual not initiated");
3449 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
3452 Warning(
"BeginPaint",
"Failed to create image");
3466 Warning(
"EndPaint",
"no image");
3470 if (!
fImage->alt.argb32)
return;
3473 0, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);
3476 Warning(
"EndPaint",
"Failed to create image");
3493 Warning(
"GetArgbArray",
"no image");
3498 if (!img)
return nullptr;
3500 if (!img->alt.argb32) {
3510 return (
UInt_t *)img->alt.argb32;
3521 Warning(
"GetRgbaArray",
"no image");
3526 if (!img)
return nullptr;
3528 if (!img->alt.argb32) {
3545 for (i = 0; i < img->height; i++) {
3546 for (j = 0; j < img->width; j++) {
3548 argb = img->alt.argb32[idx];
3550 rgb = argb & 0x00ffffff;
3551 rgba = (rgb << 8) +
a;
3566 Warning(
"GetScanline",
"no image");
3571 CARD32 *ret =
new CARD32[img->width];
3573 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALL,
3574 0,
y, img->width, 1,
nullptr);
3578 Warning(
"GetScanline",
"Failed to start image decoding");
3586 imdec->decode_image_scanline(imdec);
3587 memcpy(imdec->buffer.buffer, ret, img->width*
sizeof(CARD32));
3588 stop_image_decoding(&imdec);
3603#if defined(R__GNU) && defined(__i386__) && !defined(__sun)
3604#define _MEMSET_(dst, lng, val) __asm__("movl %0,%%eax \n"\
3605 "movl %1,%%edi \n" \
3606 "movl %2,%%ecx \n" \
3611 :"g" (val), "g" (dst), "g" (lng) \
3612 :"eax","edi","ecx" \
3616 #define _MEMSET_(dst, lng, val) do {\
3617 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0)
3621#define FillSpansInternal(npt, ppt, widths, color) do {\
3622 UInt_t yy = ppt[0].fY*fImage->width;\
3623 for (UInt_t i = 0; i < npt; i++) {\
3624 _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\
3625 yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\
3636 if (!
InitImage(
"FillRectangleInternal")) {
3640 ARGB32 color = (ARGB32)col;
3654 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
3662 if (!
fImage->alt.argb32) {
3667 ARGB32 *p0 =
fImage->alt.argb32 + yyy +
x;
3699 Warning(
"FillRectangle",
"Visual not initiated");
3703 ARGB32 color = ARGB32_White;
3706 parse_argb_color(col, &color);
3728 ARGB32 color = (ARGB32)col;
3731 if (!thick) thick = 1;
3739 thick += (
x - half);
3750 if (
x + w < fImage->
width) {
3767 ARGB32 color = (ARGB32)col;
3770 if (!thick) thick = 1;
3778 thick += (
y - half);
3801 const char *col,
UInt_t thick)
3803 ARGB32 color = ARGB32_White;
3804 parse_argb_color(col, &color);
3816 int x,
y, xend, yend;
3826 ARGB32 color = (ARGB32)col;
3831 if (!dx && !dy)
return;
3853 i2 = i1 - (dx << 1);
3870 q = (
y2 -
y1) * ydir;
3903 i2 = i1 - (dy << 1);
3920 q = (
x2 -
x1) * xdir;
3958 const char *col,
UInt_t thick)
3961 Warning(
"DrawRectangle",
"Visual not initiated");
3973 if (!
fImage->alt.argb32) {
3977 if (!
fImage->alt.argb32) {
3978 Warning(
"DrawRectangle",
"Failed to get argb32 pixel array");
3982 ARGB32 color = ARGB32_White;
3983 parse_argb_color(col, &color);
4003 ARGB32 color = ARGB32_White;
4014 parse_argb_color(col, &color);
4020 parse_argb_color(col, &color);
4054 ARGB32 color = (ARGB32)col;
4064 thick += (
y - half);
4067 thick = thick <= 0 ? 1 : thick;
4076 x2 =
x2 < tmp ? tmp :
x2;
4088 if (i >= pDash[iDash]) {
4092 if (iDash >= nDash) {
4111 ARGB32 color = (ARGB32)col;
4121 thick += (
x - half);
4124 thick = thick <= 0 ? 1 : thick;
4132 y2 =
y2 < tmp ? tmp :
y2;
4139 if (
x + w < fImage->
width) {
4147 if (i >= pDash[iDash]) {
4151 if (iDash >= nDash) {
4170 int x,
y, xend, yend;
4180 char *pDash =
new char[nDash];
4185 for (i = 0; i < (
int)nDash; i++) {
4191 i2 = i1 - (dx << 1);
4209 q = (
y2 -
y1) * ydir;
4214 if ((iDash%2) == 0) {
4226 if (i >= pDash[iDash]) {
4230 if (iDash >= nDash) {
4238 if ((iDash%2) == 0) {
4250 if (i >= pDash[iDash]) {
4254 if (iDash >= nDash) {
4263 for (i = 0; i < (
int)nDash; i++) {
4269 i2 = i1 - (dy << 1);
4287 q = (
x2 -
x1) * xdir;
4292 if ((iDash%2) == 0) {
4306 if (i >= pDash[iDash]) {
4310 if (iDash >= nDash) {
4318 if ((iDash%2) == 0) {
4332 if (i >= pDash[iDash]) {
4336 if (iDash >= nDash) {
4357 double x,
y, xend=0, yend=0, x0, y0;
4365 double *xDash =
new double[nDash];
4366 double *yDash =
new double[nDash];
4371 for (i = 0; i < (
int)nDash; i++) {
4372 xDash[i] = tDash[i] * ac;
4373 yDash[i] = tDash[i] * as;
4377 xDash[i] = xDash[i]/2;
4378 yDash[i] = yDash[i]/2;
4380 xDash[i] = xDash[i]*2;
4381 yDash[i] = yDash[i]*2;
4398 q = (
y2 -
y1) * ydir;
4405 while ((
x < xend) && (
y < yend)) {
4409 if ((iDash%2) == 0) {
4419 if (iDash >= nDash) {
4424 while ((
x < xend) && (
y > yend)) {
4428 if ((iDash%2) == 0) {
4438 if (iDash >= nDash) {
4457 q = (
x2 -
x1) * xdir;
4464 while ((
x < xend) && (
y < yend)) {
4468 if ((iDash%2) == 0) {
4478 if (iDash >= nDash) {
4483 while ((
x > xend) && (
y < yend)) {
4487 if ((iDash%2) == 0) {
4497 if (iDash >= nDash) {
4511 const char *pDash,
const char *col,
UInt_t thick)
4518 if ((nDash < 2) || !pDash || (nDash%2)) {
4519 Warning(
"DrawDashLine",
"Wrong input parameters n=%d %ld", nDash, (
Long_t)
sizeof(pDash)-1);
4523 ARGB32 color = ARGB32_White;
4524 parse_argb_color(col, &color);
4528 }
else if (
y1 ==
y2) {
4542 ARGB32 color = ARGB32_White;
4543 parse_argb_color(col, &color);
4550 for (
UInt_t i = 1; i < nn; i++) {
4571 parse_argb_color(col, &color);
4573 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4574 Warning(
"PutPixel",
"Out of range width=%d x=%d, height=%d y=%d",
4591 Warning(
"PolyPoint",
"No points specified");
4598 parse_argb_color(col, &color);
4604 for (i = 0; i < npt; i++) {
4605 ipt[i].
fX += ppt[i].
fX;
4606 ipt[i].
fY += ppt[i].
fY;
4611 for (i = 0; i < npt; i++) {
4612 x = ipt ? ipt[i].
fX : ppt[i].
fX;
4613 y = ipt ? ipt[i].
fY : ppt[i].
fY;
4615 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4631 if (!nseg || !seg) {
4632 Warning(
"DrawSegments",
"Invalid data nseg=%d seg=0x%zx", nseg, (
size_t)seg);
4638 for (
UInt_t i = 0; i < nseg; i++) {
4639 pt[0].fX = seg->
fX1;
4640 pt[1].fX = seg->
fX2;
4641 pt[0].fY = seg->
fY1;
4642 pt[1].fY = seg->
fY2;
4659 if (!npt || !ppt || !widths || (stipple && (!
w || !
h))) {
4660 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx col=%s widths=0x%zx stipple=0x%zx w=%d h=%d",
4661 npt, (
size_t)ppt, col, (
size_t)widths, (
size_t)stipple,
w,
h);
4666 parse_argb_color(col, &color);
4671 for (
UInt_t i = 0; i < npt; i++) {
4673 for (
UInt_t j = 0; j < widths[i]; j++) {
4674 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4685 if (stipple[ii >> 3] & (1 << (ii%8))) {
4702 if (!npt || !ppt || !widths || !tile) {
4703 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx widths=0x%zx tile=0x%zx",
4704 npt, (
size_t)ppt, (
size_t)widths, (
size_t)tile);
4716 for (
UInt_t i = 0; i < npt; i++) {
4719 for (
UInt_t j = 0; j < widths[i]; j++) {
4720 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4741 if (!npt || !ppt || !widths) {
4742 Warning(
"CropSpans",
"No points specified npt=%d ppt=0x%zx widths=0x%zx", npt, (
size_t)ppt, (
size_t)widths);
4747 int y1 = ppt[npt-1].
fY;
4755 for (
y = 0; (
int)
y < y0;
y++) {
4758 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4763 for (i = 0; i < npt; i++) {
4764 for (
x = 0; (
int)
x < ppt[i].fX;
x++) {
4766 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4768 for (
x = ppt[i].fX + widths[i] + 1;
x <
fImage->width;
x++) {
4770 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4778 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4812 Warning(
"CopyArea",
"Visual not initiated");
4817 Warning(
"CopyArea",
"no image");
4828 xsrc = xsrc < 0 ? 0 : xsrc;
4829 ysrc = ysrc < 0 ? 0 : ysrc;
4831 if ((xsrc >= (
int)
fImage->width) || (ysrc >= (
int)
fImage->height))
return;
4837 if (!
fImage->alt.argb32) {
4840 if (!out->alt.argb32) {
4845 if (
fImage->alt.argb32 && out->alt.argb32) {
4846 for (
y = 0;
y < (
int)
h;
y++) {
4847 for (
x = 0;
x < (
int)
w;
x++) {
4848 idx =
Idx(yy +
x + xsrc);
4849 if ((
x + xdst < 0) || (ydst +
y < 0) ||
4850 (
x + xdst >= (
int)out->width) || (
y + ydst >= (
int)out->height) )
continue;
4852 idx2 =
Idx((ydst +
y)*out->width +
x + xdst);
4856 out->alt.argb32[idx2] = 0;
4859 out->alt.argb32[idx2] &=
fImage->alt.argb32[idx];
4862 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] & (~out->alt.argb32[idx2]);
4865 out->alt.argb32[idx2] &= ~fImage->alt.argb32[idx];
4870 out->alt.argb32[idx2] ^=
fImage->alt.argb32[idx];
4873 out->alt.argb32[idx2] |=
fImage->alt.argb32[idx];
4876 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) & (~out->alt.argb32[idx2]);
4879 out->alt.argb32[idx2] ^= ~fImage->alt.argb32[idx];
4882 out->alt.argb32[idx2] = ~out->alt.argb32[idx2];
4885 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] | (~out->alt.argb32[idx2]);
4888 out->alt.argb32[idx2] = ~fImage->alt.argb32[idx];
4891 out->alt.argb32[idx2] |= ~fImage->alt.argb32[idx];
4894 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) | (~out->alt.argb32[idx2]);
4897 out->alt.argb32[idx2] = 0xFFFFFFFF;
4901 out->alt.argb32[idx2] =
fImage->alt.argb32[idx];
4925 int i, j, ix, iy,
w,
h;
4927 ARGB32 color = 0xFFFFFFFF;
4934 for (i = 0; i < nx; i++) {
4936 for (j = 0; j < ny; j++) {
4937 icol = (ARGB32)ic[i + (nx*j)];
4938 if (icol != color) {
4992 return (ptMin - ptsStart);
5008 int mr = 0, m1r = 0;
5009 int incr1l = 0, incr2l = 0;
5010 int incr1r = 0, incr2r = 0;
5015 int nextleft, nextright;
5018 TPoint *firstPoint =
nullptr;
5019 UInt_t *firstWidth =
nullptr;
5031 if ((npt < 3) || !ppt) {
5032 Warning(
"GetPolygonSpans",
"No points specified npt=%d ppt=0x%zx", npt, (
size_t)ppt);
5041 if ((npt < 3) || (dy < 0))
return kFALSE;
5043 ptsOut = firstPoint =
new TPoint[dy];
5047 nextleft = nextright = imin;
5048 y = ppt[nextleft].
fY;
5053 if (ppt[nextleft].fY ==
y) {
5059 if (nextleft >= (
int)npt) {
5066 ppt[left].fX, ppt[nextleft].fX,
5067 xl, dl, ml, m1l, incr1l, incr2l);
5071 if (ppt[nextright].fY ==
y) {
5077 if (nextright < 0) {
5084 ppt[right].fX, ppt[nextright].fX,
5085 xr, dr, mr, m1r, incr1r, incr2r);
5090 i =
TMath::Min(ppt[nextleft].fY, ppt[nextright].fY) -
y;
5094 delete [] firstWidth;
5095 delete [] firstPoint;
5104 *(
width++) = xr - xl;
5105 (ptsOut++)->fX = xl;
5107 *(
width++) = xl - xr;
5108 (ptsOut++)->fX = xr;
5116 }
while (
y !=
ymax);
5118 *nspans =
UInt_t(ptsOut - firstPoint);
5119 *outPoint = firstPoint;
5120 *outWidth = firstWidth;
5133 TPoint *firstPoint =
nullptr;
5134 UInt_t *firstWidth =
nullptr;
5137 ARGB32 color = ARGB32_White;
5138 parse_argb_color(col, &color);
5141 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5144 FillSpans(nspans, firstPoint, firstWidth, col, stipple,
w,
h);
5148 delete [] firstWidth;
5149 delete [] firstPoint;
5152 if (firstWidth)
delete [] firstWidth;
5153 if (firstPoint)
delete [] firstPoint;
5164 TPoint *firstPoint =
nullptr;
5165 UInt_t *firstWidth =
nullptr;
5170 FillSpans(nspans, firstPoint, firstWidth, tile);
5173 delete [] firstWidth;
5174 delete [] firstPoint;
5177 if (firstWidth)
delete [] firstWidth;
5178 if (firstPoint)
delete [] firstPoint;
5188 TPoint *firstPoint =
nullptr;
5189 UInt_t *firstWidth =
nullptr;
5194 CropSpans(nspans, firstPoint, firstWidth);
5197 delete [] firstWidth;
5198 delete [] firstPoint;
5201 if (firstWidth)
delete [] firstWidth;
5202 if (firstPoint)
delete [] firstPoint;
5218 if ((count < 3) || !ptsIn) {
5219 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)ptsIn);
5228 ARGB32 color = ARGB32_White;
5229 parse_argb_color(col, &color);
5247 static const UInt_t gEdgeTableEntryCacheSize = 200;
5248 static EdgeTableEntry gEdgeTableEntryCache[gEdgeTableEntryCacheSize];
5250 if (count < gEdgeTableEntryCacheSize) {
5261 ptsOut = firstPoint;
5283 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5286 FillSpans(nPts, firstPoint, firstWidth, col, stipple,
w,
h);
5288 ptsOut = firstPoint;
5299 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5302 FillSpans(nPts, firstPoint, firstWidth, col, stipple,
w,
h);
5306 if (
del)
delete [] pETEs;
5319 if ((count < 3) || !ptsIn) {
5320 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)ptsIn);
5349 ptsOut = firstPoint;
5371 FillSpans(nPts, firstPoint, firstWidth, tile);
5372 ptsOut = firstPoint;
5381 FillSpans(nPts, firstPoint, firstWidth, tile);
5392 ASDrawContext *ctx =
new ASDrawContext;
5394 ctx->canvas_width = im->width;
5395 ctx->canvas_height = im->height;
5396 ctx->canvas = im->alt.argb32;
5397 ctx->scratch_canvas =
nullptr;
5399 ctx->flags = ASDrawCTX_CanvasIsARGB;
5400 asim_set_custom_brush_colored( ctx, brush);
5410 if (ctx->scratch_canvas)
free(ctx->scratch_canvas);
5427 Int_t sz = thick*thick;
5434 matrix =
new CARD32[sz];
5437 for (
int i = 0; i < sz; i++) {
5438 matrix[i] = (CARD32)color;
5442 brush.matrix = matrix;
5443 brush.width = thick;
5444 brush.height = thick;
5445 brush.center_y = brush.center_x = thick/2;
5454 if (xx1 ==
fImage->width) --xx1;
5455 if (yy1 ==
fImage->height) --yy1;
5456 if (xx2 ==
fImage->width) --xx2;
5457 if (yy2 ==
fImage->height) --yy2;
5459 asim_move_to(ctx, xx1, yy1);
5460 asim_line_to(ctx, xx2, yy2);
5473 Int_t clipx1 = 0, clipx2 = 0, clipy1 = 0, clipy2 = 0;
5486 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
5491 Int_t bx = 0, by = 0;
5500 auto ndots =
width * rows;
5507 if ((byy >= (
Int_t)
fImage->height) || (byy < 0))
continue;
5511 if ((bxx >= (
Int_t)
fImage->width) || (bxx < 0))
continue;
5513 auto idx =
Idx(bxx + yy);
5514 r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
5515 g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
5516 b += (
fImage->alt.argb32[idx] & 0x0000ff);
5526 col[0] = (
r << 16) + (
g << 8) +
b;
5528 Int_t col4r = (col[4] & 0xff0000) >> 16;
5529 Int_t col4g = (col[4] & 0x00ff00) >> 8;
5530 Int_t col4b = (col[4] & 0x0000ff);
5535 Int_t colxr = (col4r*
x +
r*xx) >> 2;
5536 Int_t colxg = (col4g*
x +
g*xx) >> 2;
5537 Int_t colxb = (col4b*
x +
b*xx) >> 2;
5538 col[
x] = (colxr << 16) + (colxg << 8) + colxb;
5552 d = ((
d + 10) * 5) >> 8;
5556 if (noClip || ((bxx < clipx2) && (bxx >= clipx1) &&
5557 (byy >= clipy2) && (byy < clipy1))) {
5558 auto idx =
Idx(bxx + yy);
5559 auto acolor = (ARGB32) col[
d];
5563 fImage->alt.argb32[idx] = acolor;
5604 const wchar_t *wcsTitle =
reinterpret_cast<const wchar_t *
>(
text->GetWcsTitle());
5618 ARGB32 color = ARGB32_White;
5653 static ASImageExportParams params;
5661 ret = ASImage2xpmRawBuff(img, (CARD8 **)buffer,
size,
nullptr);
5664 ret = ASImage2PNGBuff(img, (CARD8 **)buffer,
size, ¶ms);
5708 static ASImageImportParams params;
5712 params.filter = SCL_DO_ALL;
5713 params.gamma = SCREEN_GAMMA;
5714 params.gamma_table =
nullptr;
5715 params.compression = 0;
5716 params.format = ASA_ASImage;
5717 params.search_path =
nullptr;
5718 params.subimage = 0;
5723 char *ptr = buffer[0];
5724 while (isspace((
int)*ptr)) ++ptr;
5726 fImage = xpm_data2ASImage((
const char**)buffer, ¶ms);
5728 fImage = xpmRawBuff2ASImage((
const char*)*buffer, ¶ms);
5733 fImage = PNGBuff2ASimage((CARD8 *)*buffer, ¶ms);
5759 Warning(
"CreateThumbnail",
"No image");
5764 Warning(
"CreateThumbnail",
"Visual not initiated");
5768 static char *buf =
nullptr;
5770 ASImage *img =
nullptr;
5790 ASImage *rendered_im;
5791 ASImageLayer layers[2];
5792 init_image_layers(&(layers[0]), 2);
5794 layers[0].dst_x = 0;
5795 layers[0].dst_y = 0;
5796 layers[0].clip_width = img->width;
5797 layers[0].clip_height = img->height;
5798 layers[0].bevel =
nullptr;
5800 layers[1].dst_x = 0;
5801 layers[1].dst_y = 0;
5802 layers[1].clip_width = img->width;
5803 layers[1].clip_height = img->height;
5804 layers[1].merge_scanlines = blend_scanlines_name2func(
"tint");
5805 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, img->width, img->height,
5807 destroy_asimage(&img);
5811 ASImage *padimg =
nullptr;
5816 padimg = pad_asimage(
fgVisual, img, 0,
d, sz, sz, 0x00ffffff,
5820 padimg = pad_asimage(
fgVisual, img,
d, 0, sz, sz, 0x00ffffff,
5825 destroy_asimage(&img);
5830 ASImage2xpmRawBuff(padimg, (CARD8 **)ptr, &
size,
nullptr);
5833 destroy_asimage(&padimg);
5846 if (
b.IsReading()) {
5847 Version_t version =
b.ReadVersion(&R__s, &R__c);
5852 if ( version == 1 ) {
5853 Int_t fileVersion =
b.GetVersionOwner();
5854 if (fileVersion > 0 && fileVersion < 50000 ) {
5862 if ( fileVersion < 40200 ) {
5881 if (image_type != 0) {
5883 char *buffer =
new char[
size];
5884 b.ReadFastArray(buffer,
size);
5893 b.ReadFastArray(vec,
size);
5909 image_type =
fImage->alt.vector ? 0 : 1;
5912 if (image_type != 0) {
5913 char *buffer =
nullptr;
5916 b.WriteFastArray(buffer,
size);
5924 b.SetByteCount(R__c,
kTRUE);
5933 if (
fImage->alt.vector) {
5974 if ((start > 0) && (stop - start > 0)) {
5988 Int_t sz = thick*thick;
5992 ARGB32 color = ARGB32_White;
5993 parse_argb_color(col, &color);
5998 matrix =
new CARD32[sz];
6001 for (
int i = 0; i < sz; i++) {
6002 matrix[i] = (CARD32)color;
6006 brush.matrix = matrix;
6007 brush.width = thick;
6008 brush.height = thick;
6009 brush.center_y = brush.center_x = thick/2;
6012 asim_cube_bezier(ctx,
x1,
y1,
x2,
y2, x3, y3);
6025 const char *col,
Int_t thick)
6030 thick = !thick ? 1 : thick;
6031 Int_t sz = thick*thick;
6035 ARGB32 color = ARGB32_White;
6036 parse_argb_color(col, &color);
6041 matrix =
new CARD32[sz];
6044 for (
int i = 0; i < sz; i++) {
6045 matrix[i] = (CARD32)color;
6049 brush.matrix = matrix;
6050 brush.width = thick > 0 ? thick : 1;
6051 brush.height = thick > 0 ? thick : 1;
6052 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6055 asim_straight_ellips(ctx,
x,
y, rx, ry, thick < 0);
6073 thick = !thick ? 1 : thick;
6074 Int_t sz = thick*thick;
6078 ARGB32 color = ARGB32_White;
6079 parse_argb_color(col, &color);
6085 matrix =
new CARD32[sz];
6088 for (
int i = 0; i < sz; i++) {
6089 matrix[i] = (CARD32)color;
6093 brush.matrix = matrix;
6094 brush.height = brush.width = thick > 0 ? thick : 1;
6095 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6098 asim_circle(ctx,
x,
y,
r, thick < 0);
6112 const char *col,
Int_t thick)
6117 thick = !thick ? 1 : thick;
6118 Int_t sz = thick*thick;
6122 ARGB32 color = ARGB32_White;
6123 parse_argb_color(col, &color);
6128 matrix =
new CARD32[sz];
6131 for (
int i = 0; i < sz; i++) {
6132 matrix[i] = (CARD32)color;
6136 brush.matrix = matrix;
6137 brush.width = thick > 0 ? thick : 1;
6138 brush.height = thick > 0 ? thick : 1;
6139 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6142 asim_ellips(ctx,
x,
y, rx, ry,
angle, thick < 0);
6155 const char *col,
Int_t thick)
6160 thick = !thick ? 1 : thick;
6161 Int_t sz = thick*thick;
6165 ARGB32 color = ARGB32_White;
6166 parse_argb_color(col, &color);
6171 matrix =
new CARD32[sz];
6174 for (
int i = 0; i < sz; i++) {
6175 matrix[i] = (CARD32)color;
6179 brush.matrix = matrix;
6180 brush.width = thick > 0 ? thick : 1;
6181 brush.height = thick > 0 ? thick : 1;
6182 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6185 asim_ellips2(ctx,
x,
y, rx, ry,
angle, thick < 0);
6197 const char * ,
const char * )
6211 Warning(
"Gray",
"Image not initiated");
6216 Warning(
"Gray",
"Visual not initiated");
6223 ASImage *sav =
nullptr;
6240 if (
fImage->alt.argb32) {
6242 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
6244 for (i = 0; i <
fImage->height; i++) {
6245 for (j = 0; j <
fImage->width; j++) {
6248 r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
6249 g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
6250 b = (
fImage->alt.argb32[idx] & 0x0000ff);
6251 l = (57*
r + 181*
g + 18*
b)/256;
6259 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
6271 Warning(
"ToGray",
"Failed to start image output");
6277 CARD32 *aa = imdec->buffer.alpha;
6278 CARD32 *rr = imdec->buffer.red;
6279 CARD32 *gg = imdec->buffer.green;
6280 CARD32 *bb = imdec->buffer.blue;
6285 for (i = 0; i <
fImage->height; i++) {
6286 imdec->decode_image_scanline(imdec);
6287 result.flags = imdec->buffer.flags;
6288 result.back_color = imdec->buffer.back_color;
6290 for (j = 0; j <
fImage->width; j++) {
6291 l = (57*rr[j] + 181*gg[j]+ 18*bb[j])/256;
6297 imout->output_image_scanline(imout, &
result, 1);
6300 stop_image_decoding(&imdec);
6301 stop_image_output(&imout);
6341 Warning(
"FromWindow",
"Visual not initiated");
6348 static int x11 = -1;
6349 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
6359 fImage = bitmap2asimage(bits,
w,
h, 0,
nullptr);
6373 for (
UInt_t i = 0; i <
h/2; ++i) {
6374 memcpy(xx, buf + 4*
w*i, 4*
w);
6375 memcpy(buf + 4*
w*i, buf + 4*
w*(
h-i-1), 4*
w);
6376 memcpy(buf + 4*
w*(
h-i-1), xx, 4*
w);
6380 fImage = bitmap2asimage(buf,
w,
h, 0,
nullptr);
6404 gPad->Range(-left / (1.0 - left - right),
6405 -bottom / (1.0 - top - bottom),
6406 1 + right / (1.0 - left - right),
6407 1 + top / ( 1.0 - top - bottom));
6408 gPad->RangeAxis(0, 0, 1, 1);
6418 char *buf =
nullptr;
6424 str.ReplaceAll(
"static",
"const");
6428 str.ReplaceAll(
"asxpm", xpm.
Data());
6429 out <<
"\n" << str <<
"\n\n";
6434 out <<
"asimage = TImage::Create();\n";
6435 out <<
" asimage->SetImageBuffer( (char **)" << xpm <<
", TImage::kXpm);\n";
6437 out <<
" asimage->Draw();\n";
6450 static char buf[32];
6451 FILE *fp = fopen(
name,
"rb+");
6454 printf(
"file %s : failed to open\n",
name);
6458 if (!fread(buf, 1, 20, fp)) {
6463 char dpi1 = (set & 0xffff) >> 8;
6464 char dpi2 = set & 0xff;
6469 for (i = 0; i < 20; i++) {
6470 if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) && (buf[i+2] == 0x49) &&
6471 (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
6477 if (i == 20 || dpi+4 >= 20) {
6479 printf(
"file %s : wrong JPEG format\n",
name);
6486 buf[dpi + 1] = dpi1;
6487 buf[dpi + 2] = dpi2;
6490 buf[dpi + 3] = dpi1;
6491 buf[dpi + 4] = dpi2;
6494 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 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
UInt_t GetScaledWidth() const
Return width of the displayed image not of the original 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 FromGLBuffer(UChar_t *buf, UInt_t w, UInt_t h) override
Creates an image (screenshot) from a RGBA buffer.
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 ?
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.
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
Returns image mask pixmap (alpha channel).
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.
TObject * Clone(const char *newname="") const override
Clone image.
void Draw(Option_t *option="") override
Draw image.
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.
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
Returns image pixmap.
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
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".
UInt_t GetScaledHeight() const
Return height of the displayed image not of the original image.
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
small helper class to store/restore gPad context in TPad methods
Helper class to store interactive parameters for individual objects Should be used via gPad->Interact...
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 Double_t AbsPixeltoX(Double_t px)=0
virtual Int_t XtoAbsPixel(Double_t x) const =0
virtual Double_t GetY1() const =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
virtual Int_t GetPixmapID() const =0
virtual Int_t VtoPixel(Double_t v) const =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 Int_t UtoPixel(Double_t u) const =0
virtual Int_t GetCanvasID() const =0
virtual Double_t AbsPixeltoY(Double_t py)=0
virtual TCanvas * GetCanvas() const =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