61#  include FT_FREETYPE_H 
   87#include "RConfigure.h" 
   95#   include "Windows4root.h" 
   99#   define X_DISPLAY_MISSING 1 
  101#   include <afterbase.h> 
  103#   include <win32/config.h> 
  104#   include <win32/afterbase.h> 
  105#   define X_DISPLAY_MISSING 1 
  107#   include <afterimage.h> 
  132#if defined(__GNUC__) && __GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)) && !__INTEL_COMPILER 
  133#pragma GCC diagnostic ignored "-Wstrict-aliasing" 
  154#define _alphaBlend(bot, top) {\ 
  155   __argb32__ *T = (__argb32__*)(top);\ 
  156   __argb32__ *B = (__argb32__*)(bot);\ 
  161      B->a = ((B->a*aa)>>8) + T->a;\ 
  162      B->r = (B->r*aa + T->r*T->a)>>8;\ 
  163      B->g = (B->g*aa + T->g*T->a)>>8;\ 
  164      B->b = (B->b*aa + T->b*T->a)>>8;\ 
  231   fImage = create_asimage(w ? w : 20, 
h ? 
h : 20, 0);
 
  298      if (img.
fImage->alt.vector) {
 
  301         memcpy(
fImage->alt.vector, img.
fImage->alt.vector, size);
 
  319   if (
this != &img && img.
IsValid()) {
 
  328      if (img.
fImage->alt.vector) {
 
  331         memcpy(
fImage->alt.vector, img.
fImage->alt.vector, size);
 
  378   const char *delim = 
":";
 
  380   const char *delim = 
";";
 
  382   while (icon_path.
Tokenize(token, from, delim) && 
cnt < 6) {
 
  398   FILE *fp = fopen(
file, 
"rb");
 
  399   const char *ret = 
"";
 
  403   if (!fread(&magic, 1, 1, fp)) {
 
  411         if (!fread(&magic, 1, 1, fp)) {
 
  415         if (!fread(&magic, 1, 1, fp)) {
 
  420         ret = (magic == 1) ? 
"ico" : 
"cur";
 
  425         if (!fread(&magic, 1, 1, fp)) {
 
  430         if (magic == 0x21) ret = 
"ps";
 
  431         else if (magic == 0x50) ret = 
"pdf";
 
  481      Warning(
"Scale", 
"Visual not initiated");
 
  485   Bool_t xpm = filename && (filename[0] == 
'/' &&
 
  486                filename[1] == 
'*') && filename[2] == 
' ';
 
  498   set_output_threshold(0);
 
  500   static ASImageImportParams iparams;
 
  504   iparams.filter = SCL_DO_ALL;
 
  505   iparams.gamma = SCREEN_GAMMA;
 
  506   iparams.gamma_table = NULL;
 
  508   iparams.format = ASA_ASImage;
 
  510   iparams.subimage = 0;
 
  511   iparams.return_animation_delay = -1;
 
  515   if (filename) dot = strrchr(filename, 
'.');
 
  528      iparams.subimage = ext.
Atoi();
 
  530      ext = strrchr(fname.
Data(), 
'.') + 1;
 
  533   image = file2ASImage_extra(fname.
Data(), &iparams);
 
  545      unsigned char *bitmap = 0;
 
  551         if (!handler || ((handler->
LoadPlugin() == -1))) {
 
  570            image = bitmap2asimage(bitmap, w, 
h, 0, 0);
 
  650      Error(
"WriteImage", 
"no image loaded");
 
  655      Error(
"WriteImage", 
"no file name specified");
 
  660   if ((
s = strrchr(
file, 
'.'))) {
 
  664         Error(
"WriteImage", 
"cannot determine a valid file type");
 
  672      Error(
"WriteImage", 
"not a valid file type was specified");
 
  678   ASImageFileTypes atype = (ASImageFileTypes)mytype;
 
  686   static ASImageExportParams parms;
 
  691      parms.xpm.type = atype;
 
  692      parms.xpm.flags = EXPORT_ALPHA;
 
  693      parms.xpm.dither = 4;
 
  694      parms.xpm.opaque_threshold = 127;
 
  695      parms.xpm.max_colors = 512;
 
  698      ASImage2bmp(im, fname.
Data(), 0);
 
  701      ASImage2xcf(im, fname.
Data(), 0);
 
  704      parms.png.type = atype;
 
  705      parms.png.flags = EXPORT_ALPHA;
 
  709      parms.jpeg.type = atype;
 
  710      parms.jpeg.flags = 0;
 
  711      parms.jpeg.quality = aquality;
 
  714      parms.gif.type = atype;
 
  715      parms.gif.flags = EXPORT_ALPHA;
 
  716      parms.gif.dither = 0;
 
  717      parms.gif.opaque_threshold = 0;
 
  721      parms.gif.type = atype;
 
  722      parms.gif.flags = EXPORT_ALPHA | EXPORT_APPEND;
 
  723      parms.gif.dither = 0;
 
  724      parms.gif.opaque_threshold = 0;
 
  725      parms.gif.animate_repeats = 0;
 
  738         parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
 
  739         parms.gif.animate_repeats = 0;
 
  740      } 
else if(sufix==
"") {
 
  757         parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
 
  758         parms.gif.animate_repeats = atoi(
s);
 
  767         parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
 
  768         parms.gif.animate_repeats = 0;
 
  769      } 
else if(sLength>3 && sufix.
CountChar(
'+')==2 && 
TString(sufix(1,sLength-2)).Contains(
"++")) {
 
  775         delay = atoi(sDelay);
 
  776         parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
 
  777         parms.gif.animate_repeats = atoi(sRepeats);
 
  779         Error(
"WriteImage", 
"gif suffix %s not yet supported", 
s);
 
  783      parms.gif.animate_delay = delay;
 
  785      int i1 = fname.
Index(
"gif+");
 
  787         fname = fname(0, i1 + 3);
 
  790         Error(
"WriteImage", 
"unexpected gif extension structure %s", fname.
Data());
 
  796      parms.tiff.type = atype;
 
  797      parms.tiff.flags = EXPORT_ALPHA;
 
  798      parms.tiff.rows_per_strip = 0;
 
  799      parms.tiff.compression_type = aquality <= 50 ? TIFF_COMPRESSION_JPEG :
 
  800                                                     TIFF_COMPRESSION_NONE;
 
  801      parms.tiff.jpeg_quality = 100;
 
  802      parms.tiff.opaque_threshold = 0;
 
  805      Error(
"WriteImage", 
"file type %s not yet supported", 
s);
 
  809   if (!ASImage2file(im, 0, fname.
Data(), atype, &parms)) {
 
  810      Error(
"WriteImage", 
"error writing file %s", 
file);
 
  828   if (
s == 
"jpg" || 
s == 
"jpeg")
 
  844   if (
s.Contains(
"gif+"))
 
  867            astype = ASIT_Xpm; 
break;
 
  869            astype = ASIT_ZCompressedXpm; 
break;
 
  871            astype = ASIT_GZCompressedXpm; 
break;
 
  873            astype = ASIT_Png; 
break;
 
  875            astype = ASIT_Jpeg; 
break;
 
  877            astype = ASIT_Xcf; 
break;
 
  879            astype = ASIT_Ppm; 
break;
 
  881            astype = ASIT_Pnm; 
break;
 
  883            astype = ASIT_Bmp; 
break;
 
  885            astype = ASIT_Ico; 
break;
 
  887            astype = ASIT_Cur; 
break;
 
  889            astype = ASIT_Gif; 
break;
 
  891            astype = ASIT_Gif; 
break;
 
  893            astype = ASIT_Tiff; 
break;
 
  895            astype = ASIT_Xbm; 
break;
 
  897            astype = ASIT_Targa; 
break;
 
  899            astype = ASIT_XMLScript; 
break;
 
  901            astype = ASIT_Unknown;
 
  907         case ASIT_ZCompressedXpm:
 
  909         case ASIT_GZCompressedXpm:
 
  952            asquality = 25; 
break;
 
  954            asquality = 75; 
break;
 
  956            asquality = 50; 
break;
 
  958            asquality = 100; 
break;
 
  964      if (asquality > 0  && asquality <= 25)
 
  966      if (asquality > 26 && asquality <= 50)
 
  968      if (asquality > 51 && asquality <= 75)
 
  970      if (asquality > 76 && asquality <= 100)
 
  990      Warning(
"SetImage", 
"Visual not initiated");
 
 1008   ASVectorPalette asPalette;
 
 1012   for (col = 0; col < 4; col++)
 
 1013      asPalette.channels[col] = 
new UShort_t[asPalette.npoints];
 
 1020   asPalette.points = 
new Double_t[asPalette.npoints];
 
 1021   for (
Int_t point = 0; point < 
Int_t(asPalette.npoints); point++)
 
 1025                                       height, &asPalette, ASA_ASImage,
 
 1028   delete [] asPalette.points;
 
 1029   for (col = 0; col < 4; col++)
 
 1030      delete [] asPalette.channels[col];
 
 1074      Error(
"FromPad", 
"pad cannot be 0");
 
 1079      Warning(
"FromPad", 
"Visual not initiated");
 
 1089   if (
gROOT->IsBatch()) { 
 
 1097      if (itmp && itmp->
fImage) {
 
 1106      if (itmp && itmp->
fImage && (itmp != 
this)) {
 
 1108         if (itmp->
fImage->alt.argb32) {
 
 1110            fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
 
 1111            memcpy(
fImage->alt.argb32, itmp->
fImage->alt.argb32, sz*4);
 
 1138   static int x11 = -1;
 
 1139   if (x11 < 0) x11 = 
gVirtualX->InheritsFrom(
"TGX11");
 
 1144      unsigned char *bits = 
gVirtualX->GetColorBits(wd, 0, 0, w, 
h);
 
 1149      fImage = bitmap2asimage(bits, w, 
h, 0, 0);
 
 1170      Error(
"Draw", 
"no image set");
 
 1183      w = 
Int_t(w*cx) + 4;
 
 1188      rname = 
"new TCanvas(\"" + rname + 
Form(
"\", %d, %d);", w, 
h);
 
 1198      gPad->Range(-left / (1.0 - left - right),
 
 1199                  -bottom / (1.0 - top - bottom),
 
 1200                  1 + right / (1.0 - left - right),
 
 1201                  1 + top / ( 1.0 - top - bottom));
 
 1202      gPad->RangeAxis(0, 0, 1, 1);
 
 1225   wsrc = wsrc ? wsrc : im->width;
 
 1226   hsrc = hsrc ? hsrc : im->height;
 
 1228   static int x11 = -1;
 
 1229   if (x11 < 0) x11 = 
gVirtualX->InheritsFrom(
"TGX11");
 
 1236      UInt_t ww = wsrc - ow + (ow ? 8 : 0);
 
 1243      char *bits = 
new char[ww*hh]; 
 
 1245      ASImageDecoder *imdec = start_image_decoding(
fgVisual, im, SCL_DO_ALPHA,
 
 1246                                                   xsrc, ysrc, ww, 0, 0);
 
 1248         for (yy = 0; yy < hh; yy++) {
 
 1249            imdec->decode_image_scanline(imdec);
 
 1250            CARD32 *
a = imdec->buffer.alpha;
 
 1252            for (xx = 0; xx < ww; xx++) {
 
 1267      stop_image_decoding(&imdec);
 
 1270                                          (
const char *)bits, ww, hh);
 
 1288   if (x11 && (!
gPad || 
gPad->GetGLDevice() == -1)) { 
 
 1289      asimage2drawable(
fgVisual, wid, im, (GC)gc, xsrc, ysrc, 
x, 
y, wsrc, hsrc, 1);
 
 1292      unsigned char *bits = (
unsigned char *)im->alt.argb32;
 
 1294         img = tile_asimage(
fgVisual, im, xsrc, ysrc, wsrc, hsrc,
 
 1295                            0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
 
 1297            bits = (
unsigned char *)img->alt.argb32;
 
 1304         if (
gPad && 
gPad->GetGLDevice() != -1) {
 
 1306               painter->DrawPixels(bits, wsrc, hsrc, 
x, 
y, !option.
Contains(
"opaque"));
 
 1314               gVirtualX->CopyArea(pic, wid, gc, 0, 0, wsrc, hsrc, 
x, 
y);
 
 1321         destroy_asimage(&img);
 
 1345                  xsrc, ysrc, wsrc, hsrc, opt);
 
 1364      Error(
"Paint", 
"no image set");
 
 1369      Warning(
"Paint", 
"Visual not initiated");
 
 1373   Int_t   tile_x = 0, tile_y = 0;
 
 1374   CARD32  tile_tint = 0;
 
 1383      if (sscanf(opt.
Data() + opt.
Index(
"t"), 
"t%d,%d,%s", &tile_x, &tile_y,
 
 1386         if (parse_argb_color(stint, (CARD32*)&tile_tint) == stint)
 
 1389         Error(
"Paint", 
"tile option error");
 
 1397      if (!
fImage->alt.vector) {
 
 1410      to_h  = (
Int_t)(to_h * (1.0 - 
gPad->GetBottomMargin() - 
gPad->GetTopMargin() ) + 0.5);
 
 1411      to_w  = (
Int_t)(to_w * (1.0 - 
gPad->GetLeftMargin() - 
gPad->GetRightMargin() ) + 0.5);
 
 1414   if ((to_w < 25 || to_h < 25) && !expand) {
 
 1415      Error(
"Paint", 
"pad too small to display an image");
 
 1427   Int_t pal_Ax = to_w + 
gPad->UtoAbsPixel(
gPad->GetLeftMargin()) +
 
 1428                 (
gPad->UtoAbsPixel(
gPad->GetRightMargin()) / 10);
 
 1430   Int_t pal_x = to_w + 
gPad->UtoPixel(
gPad->GetLeftMargin()) +
 
 1431                 (
gPad->UtoPixel(
gPad->GetRightMargin()) / 10);
 
 1436   ASImage  *grad_im = 0;
 
 1444      grad.type    = GRADIENT_Top2Bottom;
 
 1445      grad.color   = 
new ARGB32[grad.npoints];
 
 1446      grad.offset  = 
new double[grad.npoints];
 
 1449         Int_t oldPt = grad.npoints - 
pt -1;
 
 1450         grad.offset[
pt] = 1 - pal.
fPoints[oldPt];
 
 1451         grad.color[
pt] = (((ARGB32)(pal.
fColorBlue[oldPt]  & 0xff00)) >>  8) |
 
 1453                          (((ARGB32)(pal.
fColorRed[oldPt]   & 0xff00)) <<  8) |
 
 1454                          (((ARGB32)(pal.
fColorAlpha[oldPt] & 0xff00)) << 16);
 
 1458                              pal_h, SCL_DO_COLOR,
 
 1461      delete [] grad.color;
 
 1462      delete [] grad.offset;
 
 1470                                          to_w, to_h, tile_tint, ASA_ASImage,
 
 1497               ASImage *tmpImage = 0;
 
 1508                  destroy_asimage(&tmpImage);
 
 1523      Error(
"Paint", 
"image could not be rendered to display");
 
 1527   int tox = expand  ? 0 : int(
gPad->UtoPixel(1.) * 
gPad->GetLeftMargin());
 
 1528   int toy = expand  ? 0 : int(
gPad->VtoPixel(0.) * 
gPad->GetTopMargin());
 
 1530   if (!
gROOT->IsBatch()) {
 
 1545         axis.
PaintAxis(pal_Xpos, 
gPad->PixeltoY(pal_Ay + pal_h - 1),
 
 1546                        pal_Xpos, 
gPad->PixeltoY(pal_Ay),
 
 1547                        min, max, ndiv, 
"+LU");
 
 1552                        pal_Xpos, 
gPad->AbsPixeltoY(pal_Ay + 1),
 
 1553                        min, max, ndiv, 
"+L");
 
 1563                     gPad->XtoAbsPixel(0), 
gPad->YtoAbsPixel(1));
 
 1568            dump->
Merge(&tgrad, 
"alphablend", pal_Ax, pal_Ay);
 
 1578                           pal_Xpos, 
gPad->AbsPixeltoY(pal_Ay + 1),
 
 1579                           min, max, ndiv, 
"+L");
 
 1583         Warning(
"Paint", 
"PDF not implemented yet");
 
 1586         Warning(
"Paint", 
"SVG not implemented yet");
 
 1594      if ((color = (
TColor*)
colors->FindObject(
"Image_PS")) == 0)
 
 1595         color = 
new TColor(
colors->GetEntries(), 1., 1., 1., 
"Image_PS");
 
 1606         x2 = 
x1+dx/image->width;
 
 1608         y2 = y1+dy/image->height;
 
 1611         x2 = 
x1+(dx*(1-
gPad->GetRightMargin()-
gPad->GetLeftMargin()))/image->width;
 
 1612         y1 = 
gPad->GetY2()-dy*
gPad->GetTopMargin();
 
 1613         y2 = y1+(dy*(1-
gPad->GetTopMargin()-
gPad->GetBottomMargin()))/image->height;
 
 1618      ASImageDecoder *imdec = start_image_decoding(
fgVisual, image, SCL_DO_ALL,
 
 1619                                                   0, 0, image->width, image->height, 0);
 
 1621      for (
Int_t yt = 0; yt < (
Int_t)image->height; yt++) {
 
 1622         imdec->decode_image_scanline(imdec);
 
 1623         for (
Int_t xt = 0; xt < (
Int_t)image->width; xt++)
 
 1625                                      imdec->buffer.green[xt],
 
 1626                                      imdec->buffer.blue[xt]);
 
 1628      stop_image_decoding(&imdec);
 
 1633         Double_t xconv = (
gPad->AbsPixeltoX(pal_Ax + pal_w) - 
gPad->AbsPixeltoX(pal_Ax)) / grad_im->width;
 
 1634         Double_t yconv = (
gPad->AbsPixeltoY(pal_Ay - pal_h) - 
gPad->AbsPixeltoY(pal_Ay)) / grad_im->height;
 
 1635         x1 = 
gPad->AbsPixeltoX(pal_Ax);
 
 1637         y2 = 
gPad->AbsPixeltoY(pal_Ay);
 
 1642         imdec = start_image_decoding(
fgVisual, grad_im, SCL_DO_ALL,
 
 1643                                      0, 0, grad_im->width, grad_im->height, 0);
 
 1645            for (
Int_t yt = 0; yt < (
Int_t)grad_im->height; yt++) {
 
 1646               imdec->decode_image_scanline(imdec);
 
 1647               for (
Int_t xt = 0; xt < (
Int_t)grad_im->width; xt++)
 
 1649                                            imdec->buffer.green[xt],
 
 1650                                            imdec->buffer.blue[xt]);
 
 1653         stop_image_decoding(&imdec);
 
 1664                        pal_Xpos, 
gPad->AbsPixeltoY(pal_Ay + 1),
 
 1665                        min, max, ndiv, 
"+L");
 
 1671      destroy_asimage(&grad_im);
 
 1680   Int_t pxl, pyl, pxt, pyt;
 
 1687   if (px1 < px2) {pxl = px1; pxt = px2;}
 
 1688   else           {pxl = px2; pxt = px1;}
 
 1689   if (py1 < py2) {pyl = py1; pyt = py2;}
 
 1690   else           {pyl = py2; pyt = py1;}
 
 1692   if ((px > pxl && px < pxt) && (py > pyl && py < pyt))
 
 1703   static TBox *ZoomBox;
 
 1708      gPad->ExecuteEvent(event, px, py);
 
 1714   static Int_t px1old, py1old, px2old, py2old;
 
 1715   static Int_t px1, py1, px2, py2, pxl, pyl, pxt, pyt;
 
 1726      if (imgX < 0)  px = px - imgX;
 
 1727      if (imgY < 0)  py = py - imgY;
 
 1732      if (imgX >= (
int)image->width)  px = px - imgX + image->width - 1;
 
 1733      if (imgY >= (
int)image->height) py = py - imgY + image->height - 1;
 
 1738            px1 = 
gPad->XtoAbsPixel(
gPad->GetX1());
 
 1739            py1 = 
gPad->YtoAbsPixel(
gPad->GetY1());
 
 1740            px2 = 
gPad->XtoAbsPixel(
gPad->GetX2());
 
 1741            py2 = 
gPad->YtoAbsPixel(
gPad->GetY2());
 
 1742            px1old = px; py1old = py;
 
 1764               ZoomBox = 
new TBox(pxl, pyl, pxt, pyt);
 
 1766               ZoomBox->
Draw(
"l*");
 
 1785            Int_t imgX1 = px1old - 
gPad->XtoAbsPixel(0);
 
 1786            Int_t imgY1 = py1old - 
gPad->YtoAbsPixel(1);
 
 1787            Int_t imgX2 = px  - 
gPad->XtoAbsPixel(0);
 
 1788            Int_t imgY2 = py  - 
gPad->YtoAbsPixel(1);
 
 1790            imgY1 = image->height - 1 - imgY1;
 
 1791            imgY2 = image->height - 1 - imgY2;
 
 1797            Zoom((imgX1 < imgX2) ? imgX1 : imgX2, (imgY1 < imgY2) ? imgY1 : imgY2,
 
 1816   static char info[64];
 
 1822   px -= 
gPad->XtoAbsPixel(0);
 
 1823   py -= 
gPad->YtoAbsPixel(1);
 
 1826   if (px < 0 || py < 0)  
return info;
 
 1830   if (px >= (
int)image->width || py >= (
int)image->height)
 
 1833   py = image->height - 1 - py;
 
 1840   if (
fImage->alt.vector) {
 
 1841      snprintf(info,64,
"x: %d  y: %d   %.5g",
 
 1844      snprintf(info,64,
"x: %d  y: %d", px, py);
 
 1860      Warning(
"SetPalette", 
"Visual not initiated");
 
 1865      Warning(
"SetPalette", 
"Image not valid");
 
 1869   if (
fImage->alt.vector == 0)
 
 1875   ASVectorPalette asPalette;
 
 1877   asPalette.channels[0] = 
new CARD16 [asPalette.npoints];
 
 1878   asPalette.channels[1] = 
new CARD16 [asPalette.npoints];
 
 1879   asPalette.channels[2] = 
new CARD16 [asPalette.npoints];
 
 1880   asPalette.channels[3] = 
new CARD16 [asPalette.npoints];
 
 1886   asPalette.points = 
new double[asPalette.npoints];
 
 1887   for (
Int_t point = 0; point < 
Int_t(asPalette.npoints); point++)
 
 1893   delete [] asPalette.points;
 
 1894   for (
Int_t col = 0; col < 4; col++)
 
 1895      delete [] asPalette.channels[col];
 
 1914      Warning(
"Scale", 
"Image not initiated");
 
 1919      Warning(
"Scale", 
"Visual not initiated");
 
 1927   if (toWidth > 30000)
 
 1929   if (toHeight > 30000)
 
 1932   ASImage *img = scale_asimage(
fgVisual, 
fImage, toWidth, toHeight,
 
 1949      Warning(
"Scale", 
"Image not initiated");
 
 1954      Warning(
"Scale", 
"Visual not initiated");
 
 1962   if (toWidth > 30000)
 
 1964   if (toHeight > 30000)
 
 1968                                yStart, yEnd, toWidth, toHeight,
 
 1984      Warning(
"Tile", 
"Image not initiated");
 
 1989      Warning(
"Tile", 
"Visual not initiated");
 
 1997   if (toWidth > 30000)
 
 1999   if (toHeight > 30000)
 
 2002   ASImage *img = tile_asimage(
fgVisual, 
fImage, 0, 0, toWidth, toHeight, 0,
 
 2024      Warning(
"Zoom", 
"Image not valid");
 
 2046      Warning(
"UnZoom", 
"Image not valid");
 
 2074      Warning(
"Flip", 
"Image not valid");
 
 2078      Warning(
"Flip", 
"Visual not initiated");
 
 2082   if (
fImage->alt.vector) {
 
 2083      Warning(
"Flip", 
"flip does not work for data images");
 
 2121      Warning(
"Mirror", 
"Image not valid");
 
 2126      Warning(
"Mirror", 
"Visual not initiated");
 
 2130   if (
fImage->alt.vector) {
 
 2131      Warning(
"Mirror", 
"mirror does not work for data images");
 
 2203   if (inbatch && !noX) {
 
 2215      fgVisual = create_asvisual(0, 0, 0, 0);
 
 2222   fgVisual = create_asvisual(0, 0, 0, 0);
 
 2225   disp = (Display*) 
gVirtualX->GetDisplay();
 
 2228   Visual *vis   = (Visual*) 
gVirtualX->GetVisual();
 
 2231   if (vis == 0 || cmap == 0) {
 
 2232      fgVisual = create_asvisual(0, 0, 0, 0);
 
 2234      fgVisual = create_asvisual_for_id(disp, screen, depth,
 
 2235                                        XVisualIDFromVisual(vis), cmap, 0);
 
 2239   fgVisual = create_asvisual(0, 0, 0, 0);
 
 2252      Warning(
"StartPaletteEditor", 
"Image not valid");
 
 2255   if (
fImage->alt.vector == 0) {
 
 2256      Warning(
"StartPaletteEditor", 
"palette can be modified only for data images");
 
 2271      Warning(
"GetPixmap", 
"Visual not initiated");
 
 2279   static int x11 = -1;
 
 2280   if (x11 < 0) x11 = 
gVirtualX->InheritsFrom(
"TGX11");
 
 2286      if (!
fImage->alt.argb32) {
 
 2289      ret = 
gVirtualX->CreatePixmapFromData((
unsigned char*)
fImage->alt.argb32,
 
 2305      Warning(
"GetMask", 
"Visual not initiated");
 
 2312      Warning(
"GetMask", 
"No image");
 
 2317   UInt_t ow = img->width%8;
 
 2318   UInt_t ww = img->width - ow + (ow ? 8 : 0);
 
 2325   char *bits = 
new char[ww*hh]; 
 
 2327   ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALPHA,
 
 2334   for (
y = 0; 
y < hh; 
y++) {
 
 2335      imdec->decode_image_scanline(imdec);
 
 2336      CARD32 *
a = imdec->buffer.alpha;
 
 2338      for (
x = 0; 
x < ww; 
x++) {
 
 2352   stop_image_decoding(&imdec);
 
 2353   pxmap = 
gVirtualX->CreateBitmap(
gVirtualX->GetDefaultRootWindow(), (
const char *)bits,
 
 2365      Warning(
"SetImage", 
"Visual not initiated");
 
 2379   static int x11 = -1;
 
 2380   if (x11 < 0) x11 = 
gVirtualX->InheritsFrom(
"TGX11");
 
 2385      unsigned char *bits = 
gVirtualX->GetColorBits(pxm, 0, 0, w, 
h);
 
 2392         fImage = bitmap2asimage(bits, w, 
h, 0, 0);
 
 2396      unsigned char *mask_bits = 
gVirtualX->GetColorBits(mask, 0, 0, w, 
h);
 
 2397      fImage = bitmap2asimage(bits, w, 
h, 0, mask_bits);
 
 2398      delete [] mask_bits;
 
 2409      Warning(
"GetPixels", 
"Wrong Image");
 
 2414   ASImageDecoder *imdec;
 
 2417   height = !height ? img->height : height;
 
 2428   if ((
x >= (
int)img->width) || (
y >= (
int)img->height)) {
 
 2432   if ((
int)(
x + 
width) > (
int)img->width) {
 
 2436   if ((
int)(
y + height) > (
int)img->height) {
 
 2437      height = img->height - 
y;
 
 2440   if ((imdec = start_image_decoding(0, 
fImage, SCL_DO_ALL, 0, 
y,
 
 2441                                     img->width, height, 0)) == 0) {
 
 2442      Warning(
"GetPixels", 
"Failed to create image decoder");
 
 2452   for (
UInt_t k = 0; k < height; k++) {
 
 2453      imdec->decode_image_scanline(imdec);
 
 2456         if ((
r == (
Int_t)imdec->buffer.red[i]) &&
 
 2457             (
g == (
Int_t)imdec->buffer.green[i]) &&
 
 2458             (
b == (
Int_t)imdec->buffer.blue[i])) {
 
 2460            r = (
Int_t)imdec->buffer.red[i];
 
 2461            g = (
Int_t)imdec->buffer.green[i];
 
 2462            b = (
Int_t)imdec->buffer.blue[i];
 
 2469   stop_image_decoding(&imdec);
 
 2481      Warning(
"GetVecArray", 
"Bad Image");
 
 2484   if (
fImage->alt.vector) {
 
 2485      return fImage->alt.vector;
 
 2503      Warning(
"GetArray", 
"Bad Image");
 
 2509   if (
fImage->alt.vector) {
 
 2514   ASImageDecoder *imdec;
 
 2516   w = w ? w : 
fImage->width;
 
 2525   if ((imdec = start_image_decoding(0, img, SCL_DO_ALL, 0, 0,
 
 2526                                     img->width, 0, 0)) == 0) {
 
 2527      Warning(
"GetArray", 
"Failed to create image decoder");
 
 2538   for (
UInt_t k = 0; k < 
h; k++) {
 
 2539      imdec->decode_image_scanline(imdec);
 
 2541      for (
UInt_t i = 0; i < w; ++i)  {
 
 2542         if ((
r == imdec->buffer.red[i]) &&
 
 2543             (
g == imdec->buffer.green[i]) &&
 
 2544             (
b == imdec->buffer.blue[i])) {
 
 2546            r = imdec->buffer.red[i];
 
 2547            g = imdec->buffer.green[i];
 
 2548            b = imdec->buffer.blue[i];
 
 2556   stop_image_decoding(&imdec);
 
 2579                        const char *color, 
const char *font_name,
 
 2583   ARGB32 text_color = ARGB32_Black;
 
 2584   ASImage *fore_im = 0;
 
 2585   ASImage *text_im = 0;
 
 2589      Warning(
"DrawText", 
"Visual not initiated");
 
 2597   if (fn.
Last(
'/') == 0) fn = fn(1, fn.
Length() - 1);
 
 2610      parse_argb_color(color, &text_color);
 
 2623      Warning(
"DrawText", 
"cannot create Font Manager");
 
 2630      font = get_asfont(
gFontManager, 
"fixed", 0, size, ASF_GuessWho);
 
 2632         Warning(
"DrawText", 
"cannot find a font %s", font_name);
 
 2637   get_text_size(
text, font, (ASText3DType)
type, &
width, &height);
 
 2644   text_im = draw_text(
text, font, (ASText3DType)
type, 0);
 
 2649      ASImage *tmp = file2ASImage(fore_file, 0xFFFFFFFF, SCREEN_GAMMA, 0, 0);
 
 2651         if ((tmp->width != 
width) || (tmp->height != height)) {
 
 2652            fore_im = tile_asimage(
fgVisual, tmp, 0, 0, 
width, height, 0,
 
 2655         destroy_asimage(&tmp);
 
 2662      move_asimage_channel(fore_im, IC_ALPHA, text_im, IC_ALPHA);
 
 2663      destroy_asimage(&text_im);
 
 2671      ASImage *rendered_im;
 
 2672      ASImageLayer layers[2];
 
 2674      init_image_layers(&(layers[0]), 2);
 
 2675      fore_im->back_color = text_color;
 
 2676      layers[0].im = rimg;
 
 2677      layers[0].dst_x = 0;
 
 2678      layers[0].dst_y = 0;
 
 2679      layers[0].clip_width = rimg->width;
 
 2680      layers[0].clip_height = rimg->height;
 
 2681      layers[0].bevel = 0;
 
 2682      layers[1].im = fore_im;
 
 2683      layers[1].dst_x = 
x;
 
 2684      layers[1].dst_y = 
y;
 
 2685      layers[1].clip_width = fore_im->width;
 
 2686      layers[1].clip_height = fore_im->height;
 
 2688      rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, rimg->width, rimg->height,
 
 2691      destroy_asimage(&fore_im);
 
 2724      Warning(
"Merge", 
"Visual not initiated");
 
 2728   ASImage *rendered_im;
 
 2729   ASImageLayer layers[2];
 
 2731   init_image_layers(&(layers[0]), 2);
 
 2733   layers[0].dst_x = 0;
 
 2734   layers[0].dst_y = 0;
 
 2735   layers[0].clip_width = 
fImage->width;
 
 2736   layers[0].clip_height = 
fImage->height;
 
 2737   layers[0].bevel = 0;
 
 2738   layers[1].im = ((
TASImage*)im)->fImage;
 
 2739   layers[1].dst_x = 
x;
 
 2740   layers[1].dst_y = 
y;
 
 2741   layers[1].clip_width  = im->
GetWidth();
 
 2742   layers[1].clip_height = im->
GetHeight();
 
 2743   layers[1].merge_scanlines = blend_scanlines_name2func(op ? op : 
"add");
 
 2761      Warning(
"Blur", 
"Visual not initiated");
 
 2766      fImage = create_asimage(100, 100, 0);
 
 2769         Warning(
"Blur", 
"Failed to create image");
 
 2776   ASImage *rendered_im = blur_asimage_gauss(
fgVisual, 
fImage, hr > 0 ? hr : 3,
 
 2777                                             vr > 0 ? vr : 3, SCL_DO_ALL,
 
 2790      Warning(
"Clone", 
"Image not initiated");
 
 2797      Warning(
"Clone", 
"Failed to create image");
 
 2813   if (
fImage->alt.argb32) {
 
 2815      im->
fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
 
 2816      memcpy(im->
fImage->alt.argb32, 
fImage->alt.argb32, sz * 
sizeof(ARGB32));
 
 2836      Warning(
"Vectorize", 
"Visual not initiated");
 
 2841      fImage = create_asimage(100, 100, 0);
 
 2844         Warning(
"Vectorize", 
"Failed to create image");
 
 2855   dither = dither > 7 ? 7 : dither;
 
 2857   res = colormap_asimage(
fImage, &cmap, max_colors, dither, opaque_threshold);
 
 2869            g = INDEX_SHIFT_GREEN(cmap.entries[res[i]].green);
 
 2870            b = INDEX_SHIFT_BLUE(cmap.entries[res[i]].blue);
 
 2871            r = INDEX_SHIFT_RED(cmap.entries[res[i]].red);
 
 2873         v = MAKE_INDEXED_COLOR24(
r,
g,
b);
 
 2883   for (
UInt_t j = 0; j < cmap.count; j++) {
 
 2884      g = INDEX_SHIFT_GREEN(cmap.entries[j].green);
 
 2885      b = INDEX_SHIFT_BLUE(cmap.entries[j].blue);
 
 2886      r = INDEX_SHIFT_RED(cmap.entries[j].red);
 
 2887      v = MAKE_INDEXED_COLOR24(
r,
g,
b);
 
 2889      v = (
v>>12) & 0x0FFF;
 
 2892      pal->
fColorRed[j] = cmap.entries[j].red << 8;
 
 2894      pal->
fColorBlue[j] = cmap.entries[j].blue << 8;
 
 2898   destroy_colormap(&cmap, 
kTRUE);
 
 2901   fImage->alt.vector = vec;
 
 2904   if (res) safefree(res);
 
 2950      Warning(
"HSV", 
"Visual not initiated");
 
 2958         Warning(
"HSV", 
"Failed to create image");
 
 2968   height = !height ? 
fImage->height : height;
 
 2970   ASImage *rendered_im = 0;
 
 2974                                       hue, radius, 
H, 
S, V, ASA_ASImage, 100,
 
 2975                                       ASIMAGE_QUALITY_TOP);
 
 2978      Warning(
"HSV", 
"Failed to create rendered image");
 
 3013      Warning(
"Gradient", 
"Visual not initiated");
 
 3017   ASImage *rendered_im = 0;
 
 3018   ASGradient gradient;
 
 3020   int reverse = 0, npoints1 = 0, npoints2 = 0;
 
 3027   if ((angle > 2 * 180 * 15 / 16) || (angle < 2 * 180 * 1 / 16)) {
 
 3028      gradient.type = GRADIENT_Left2Right;
 
 3029   } 
else if (angle < 2 * 180 * 3 / 16) {
 
 3030      gradient.type = GRADIENT_TopLeft2BottomRight;
 
 3031   } 
else if (angle < 2 * 180 * 5 / 16) {
 
 3032      gradient.type = GRADIENT_Top2Bottom;
 
 3033   } 
else if (angle < 2 * 180 * 7 / 16) {
 
 3034      gradient.type = GRADIENT_BottomLeft2TopRight; reverse = 1;
 
 3035   } 
else if (angle < 2 * 180 * 9 / 16) {
 
 3036      gradient.type = GRADIENT_Left2Right; reverse = 1;
 
 3037   } 
else if (angle < 2 * 180 * 11 / 16) {
 
 3038      gradient.type = GRADIENT_TopLeft2BottomRight; reverse = 1;
 
 3039   } 
else if (angle < 2 * 180 * 13 / 16) {
 
 3040      gradient.type = GRADIENT_Top2Bottom; reverse = 1;
 
 3042      gradient.type = GRADIENT_BottomLeft2TopRight;
 
 3045   for (p = (
char*)
colors; isspace((
int)*p); p++) { }
 
 3047   for (npoints1 = 0; *p; npoints1++) {
 
 3049         for ( ; *p && !isspace((
int)*p); p++) { }
 
 3051      for ( ; isspace((
int)*p); p++) { }
 
 3054      for (p = (
char*)offsets; isspace((
int)*p); p++) { }
 
 3056      for (npoints2 = 0; *p; npoints2++) {
 
 3058            for ( ; *p && !isspace((
int)*p); p++) { }
 
 3060         for ( ; isspace((
int)*p); p++) { }
 
 3065      if (offsets && (npoints1 > npoints2)) npoints1 = npoints2;
 
 3074      gradient.color = 
new ARGB32[npoints1];
 
 3075      gradient.offset = 
new double[npoints1];
 
 3077      for (p = (
char*)
colors; isspace((
int)*p); p++) { }
 
 3079      for (npoints1 = 0; *p; ) {
 
 3083            for ( ; *p && !isspace((
int)*p); p++) { }
 
 3085         for ( ; isspace((
int)*p); p++) { }
 
 3087         col = str(pb - 
colors, p - pb);
 
 3089         if (parse_argb_color(col.
Data(), gradient.color + npoints1) != col) {
 
 3092            Warning(
"Gradient", 
"Failed to parse color [%s] - defaulting to black", pb);
 
 3097         for (p = (
char*)offsets; isspace((
int)*p); p++) { }
 
 3099         for (npoints2 = 0; *p; ) {
 
 3103               for ( ; *p && !isspace((
int)*p); p++) { }
 
 3106            gradient.offset[npoints2] = strtod(pb, &pb);
 
 3108            if (pb == p) npoints2++;
 
 3110            for ( ; isspace((
int)*p); p++) { }
 
 3113         for (npoints2 = 0; npoints2 < npoints1; npoints2++) {
 
 3114            gradient.offset[npoints2] = (double)npoints2 / (npoints1 - 1);
 
 3117      gradient.npoints = npoints1;
 
 3119      if (npoints2 && (gradient.npoints > npoints2)) {
 
 3120         gradient.npoints = npoints2;
 
 3123         for (i = 0; i < gradient.npoints/2; i++) {
 
 3124            int i2 = gradient.npoints - 1 - i;
 
 3125            ARGB32 
c = gradient.color[i];
 
 3126            double o = gradient.offset[i];
 
 3127            gradient.color[i] = gradient.color[i2];
 
 3128            gradient.color[i2] = 
c;
 
 3129            gradient.offset[i] = gradient.offset[i2];
 
 3130            gradient.offset[i2] = o;
 
 3132         for (i = 0; i < gradient.npoints; i++) {
 
 3133            gradient.offset[i] = 1.0 - gradient.offset[i];
 
 3136      rendered_im = make_gradient(
fgVisual, &gradient, 
width, height, SCL_DO_ALL,
 
 3139      delete [] gradient.color;
 
 3140      delete [] gradient.offset;
 
 3144      Warning(
"Gradient", 
"Failed to create gradient image");
 
 3153   ASImageLayer layers[2];
 
 3155   init_image_layers(&(layers[0]), 2);
 
 3157   layers[0].dst_x = 0;
 
 3158   layers[0].dst_y = 0;
 
 3159   layers[0].clip_width = 
fImage->width;
 
 3160   layers[0].clip_height = 
fImage->height;
 
 3161   layers[0].bevel = 0;
 
 3162   layers[1].im = rendered_im;
 
 3163   layers[1].dst_x = 
x;
 
 3164   layers[1].dst_y = 
y;
 
 3165   layers[1].clip_width = 
width;
 
 3166   layers[1].clip_height = height;
 
 3167   layers[1].merge_scanlines = alphablend_scanlines;
 
 3172      Warning(
"Gradient", 
"Failed to create merged image");
 
 3176   destroy_asimage(&rendered_im);
 
 3191   cmp = (cmp * 12) / 10;
 
 3193   return (cmp > 255) ? 255 : cmp;
 
 3214   return (background >> 1) & 0x7F7F7F7F;
 
 3225   a = ARGB32_ALPHA8(foreground) + ARGB32_ALPHA8(background);
 
 3227   r = ARGB32_RED8(foreground) + ARGB32_RED8(background);
 
 3229   g = ARGB32_GREEN8(foreground) + ARGB32_GREEN8(background);
 
 3231   b = ARGB32_BLUE8(foreground) + ARGB32_BLUE8(background);
 
 3234   return MAKE_ARGB32(
a, 
r, 
g, 
b);
 
 3250                     const char *hi_color, 
const char *lo_color, 
UShort_t thick,
 
 3254      Warning(
"Bevel", 
"Visual not initiated");
 
 3261   ARGB32 
hi=ARGB32_White, lo=ARGB32_White;
 
 3262   parse_argb_color(hi_color, &
hi);
 
 3263   parse_argb_color(lo_color, &lo);
 
 3266      bevel.lo_color = 
hi;
 
 3268      bevel.hi_color = lo;
 
 3271      bevel.hi_color = 
hi;
 
 3273      bevel.lo_color = lo;
 
 3278   int extra_hilite = 2;
 
 3279   bevel.left_outline = bevel.top_outline = bevel.right_outline = bevel.bottom_outline = thick;
 
 3280   bevel.left_inline = bevel.top_inline = bevel.right_inline = bevel.bottom_inline = extra_hilite + 1;
 
 3282   if (bevel.top_outline > 1) {
 
 3283      bevel.top_inline += bevel.top_outline - 1;
 
 3286   if (bevel.left_outline > 1) {
 
 3287      bevel.left_inline += bevel.left_outline - 1;
 
 3290   if (bevel.right_outline > 1) {
 
 3291      bevel.right_inline += bevel.right_outline - 1;
 
 3294   if (bevel.bottom_outline > 1) {
 
 3295      bevel.bottom_inline += bevel.bottom_outline - 1;
 
 3299   ARGB32 
fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ? bevel.hilo_color : (bevel.hilo_color | 0xff000000);
 
 3305         Warning(
"Bevel", 
"Failed to create image");
 
 3315   height = !height ? 
fImage->height : height;
 
 3317   ASImageLayer layers[2];
 
 3318   init_image_layers(&(layers[0]), 2);
 
 3321   layers[0].dst_x = 0;
 
 3322   layers[0].dst_y = 0;
 
 3323   layers[0].clip_width = 
fImage->width;
 
 3324   layers[0].clip_height = 
fImage->height;
 
 3325   layers[0].bevel = 0;
 
 3327   UInt_t w = 
width - (bevel.left_outline + bevel.right_outline);
 
 3328   UInt_t h = height - (bevel.top_outline + bevel.bottom_outline);
 
 3329   ASImage *bevel_im = create_asimage(w, 
h, 0);
 
 3332      Warning(
"Bevel", 
"Failed to create bevel image");
 
 3336   layers[1].im = bevel_im;
 
 3339   layers[1].dst_x = 
x;
 
 3340   layers[1].dst_y = 
y;
 
 3341   layers[1].clip_width = 
width;
 
 3342   layers[1].clip_height = height;
 
 3343   layers[1].bevel = &bevel;
 
 3344   layers[1].merge_scanlines = alphablend_scanlines;
 
 3348   destroy_asimage(&bevel_im);
 
 3351      Warning(
"Bevel", 
"Failed to image");
 
 3371      Warning(
"Pad", 
"Visual not initiated");
 
 3376      fImage = create_asimage(100, 100, 0);
 
 3379         Warning(
"Pad", 
"Failed to create image");
 
 3388   ARGB32 color = ARGB32_White;
 
 3389   parse_argb_color(col, &color);
 
 3400      Warning(
"Pad", 
"Failed to create output image");
 
 3417      Warning(
"Crop", 
"Visual not initiated");
 
 3430   height = 
y + height > 
fImage->height ? 
fImage->height - 
y : height;
 
 3433      Warning(
"Crop", 
"input size larger than image");
 
 3436   ASImageDecoder *imdec = start_image_decoding(
fgVisual, 
fImage, SCL_DO_ALL,
 
 3440      Warning(
"Crop", 
"Failed to start image decoding");
 
 3444   ASImage *img = create_asimage(
width, height, 0);
 
 3448      Warning(
"Crop", 
"Failed to create image");
 
 3452   ASImageOutput *imout = start_image_output(
fgVisual, img, ASA_ASImage,
 
 3456      Warning(
"Crop", 
"Failed to start image output");
 
 3457      destroy_asimage(&img);
 
 3458      if (imdec) 
delete [] imdec;
 
 3466   for (
UInt_t i = 0; i < height; i++) {
 
 3467      imdec->decode_image_scanline(imdec);
 
 3468      imout->output_image_scanline(imout, &(imdec->buffer), 1);
 
 3471   stop_image_decoding(&imdec);
 
 3472   stop_image_output(&imout);
 
 3496      Warning(
"Append", 
"Visual not initiated");
 
 3514   } 
else if (opt == 
"/") {
 
 3516      Merge(im, 
"alphablend", 0, height);
 
 3535      Warning(
"BeginPaint", 
"Visual not initiated");
 
 3550                               0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
 
 3553      Warning(
"BeginPaint", 
"Failed to create image");
 
 3567      Warning(
"EndPaint", 
"no image");
 
 3571   if (!
fImage->alt.argb32) 
return;
 
 3574                               0, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);
 
 3577      Warning(
"EndPaint", 
"Failed to create image");
 
 3594      Warning(
"GetArgbArray", 
"no image");
 
 3601   if (!img->alt.argb32) {
 
 3611   return (
UInt_t *)img->alt.argb32;
 
 3622      Warning(
"GetRgbaArray", 
"no image");
 
 3629   if (!img->alt.argb32) {
 
 3647   for (i = 0; i < img->height; i++) {
 
 3648      for (j = 0; j < img->width; j++) {
 
 3650         argb = img->alt.argb32[idx];
 
 3652         rgb =  argb & 0x00ffffff;
 
 3653         rgba = (rgb <<  8) + 
a;
 
 3668      Warning(
"GetScanline", 
"no image");
 
 3673   CARD32 *ret = 
new CARD32[img->width];
 
 3675   ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALL,
 
 3676                                                0, 
y, img->width, 1, 0);
 
 3680      Warning(
"GetScanline", 
"Failed to start image decoding");
 
 3688   imdec->decode_image_scanline(imdec);
 
 3689   memcpy(imdec->buffer.buffer, ret, img->width*
sizeof(CARD32));
 
 3690   stop_image_decoding(&imdec);
 
 3705#if defined(R__GNU) && defined(__i386__) && !defined(__sun) 
 3706#define _MEMSET_(dst, lng, val)   __asm__("movl  %0,%%eax \n"\
 
 3707                                      "movl  %1,%%edi \n"              \
 
 3708                                      "movl  %2,%%ecx \n"              \
 
 3713                                      :"g" (val), "g" (dst), "g" (lng) \
 
 3714                                      :"eax","edi","ecx"               \
 
 3718 #define _MEMSET_(dst, lng, val) do {\ 
 3719 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0) 
 3723#define FillSpansInternal(npt, ppt, widths, color) do {\ 
 3724   UInt_t yy = ppt[0].fY*fImage->width;\ 
 3725   for (UInt_t i = 0; i < npt; i++) {\ 
 3726      _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\ 
 3727      yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\ 
 3739      Warning(
"FillRectangle", 
"Visual not initiated");
 
 3744      Warning(
"FillRectangle", 
"no image");
 
 3748   if (!
fImage->alt.argb32) {
 
 3752   if (!
fImage->alt.argb32) {
 
 3753      Warning(
"FillRectangle", 
"Failed to get pixel array");
 
 3757   ARGB32 color = (ARGB32)col;
 
 3760   if (height == 0) height = 1;
 
 3771   Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
 
 3777   height = 
y + height > 
fImage->height ? 
fImage->height - 
y : height;
 
 3779   if (!
fImage->alt.argb32) {
 
 3784         ARGB32 *p0 = 
fImage->alt.argb32 + yyy + 
x;
 
 3786         for (
UInt_t i = 0; i < height; i++) {
 
 3791         for (
UInt_t i = 
y; i < 
y + height; i++) {
 
 3816      Warning(
"Fill", 
"Visual not initiated");
 
 3820   ARGB32 color = ARGB32_White;
 
 3823      parse_argb_color(col, &color);
 
 3841   ARGB32 color = (ARGB32)col;
 
 3844   if (!thick)  thick = 1;
 
 3852         thick += (
x - half);
 
 3860   int yy = y1*
fImage->width;
 
 3862      for (
UInt_t w = 0; w < thick; w++) {
 
 3863         if (
x + w < fImage->
width) {
 
 3876   ARGB32 color = (ARGB32)col;
 
 3879   if (!thick)  thick = 1;
 
 3887         thick += (
y - half);
 
 3896   for (
UInt_t w = 0; w < thick; w++) {
 
 3898         if (
y + w < fImage->height) {
 
 3910                        const char *col, 
UInt_t thick)
 
 3912   ARGB32 color = ARGB32_White;
 
 3913   parse_argb_color(col, &color);
 
 3925   int x, 
y, xend, yend;
 
 3932      Warning(
"DrawLine", 
"Visual not initiated");
 
 3937      Warning(
"DrawLine", 
"no image");
 
 3941   if (!
fImage->alt.argb32) {
 
 3945   if (!
fImage->alt.argb32) {
 
 3946      Warning(
"DrawLine", 
"Failed to get pixel array");
 
 3950   ARGB32 color = (ARGB32)col;
 
 3955   if (!dx && !dy) 
return; 
 
 3959                    y2 > y1 ? y2 : y1, color, thick);
 
 3977      i2 = i1 - (dx << 1);
 
 3994      q = (y2 - y1) * ydir;
 
 4027      i2 = i1 - (dy << 1);
 
 4044      q = (
x2 - 
x1) * xdir;
 
 4082                             const char *col, 
UInt_t thick)
 
 4085      Warning(
"DrawRectangle", 
"Visual not initiated");
 
 4094      fImage = create_asimage(w, 
h, 0);
 
 4099   if (!
fImage->alt.argb32) {
 
 4103   if (!
fImage->alt.argb32) {
 
 4104      Warning(
"DrawRectangle", 
"Failed to get pixel array");
 
 4108   ARGB32 color = ARGB32_White;
 
 4109   parse_argb_color(col, &color);
 
 4129   ARGB32 color = ARGB32_White;
 
 4134      fImage = create_asimage(w, 
h, 0);
 
 4140      parse_argb_color(col, &color);
 
 4146      parse_argb_color(col, &color);
 
 4176   ARGB32 color = (ARGB32)col;
 
 4186         thick += (
y - half);
 
 4189   thick = thick <= 0 ? 1 : thick;
 
 4198   x2 = 
x2 < tmp ? tmp : 
x2;
 
 4201      for (
UInt_t w = 0; w < thick; w++) {
 
 4202         if (
y + w < fImage->height) {
 
 4210      if (i >= pDash[iDash]) {
 
 4214      if (iDash >= nDash) {
 
 4230   ARGB32 color = (ARGB32)col;
 
 4240         thick += (
x - half);
 
 4243   thick = thick <= 0 ? 1 : thick;
 
 4250   y1 = y2 < y1 ? y2 : y1;
 
 4251   y2 = y2 < tmp ? tmp : y2;
 
 4255   int yy = y1*
fImage->width;
 
 4257      for (
UInt_t w = 0; w < thick; w++) {
 
 4258         if (
x + w < fImage->
width) {
 
 4266      if (i >= pDash[iDash]) {
 
 4270      if (iDash >= nDash) {
 
 4286   int x, 
y, xend, yend;
 
 4296   char *pDash = 
new char[nDash];
 
 4301      for (i = 0; i < (int)nDash; i++) {
 
 4307      i2 = i1 - (dx << 1);
 
 4325      q = (y2 - y1) * ydir;
 
 4330            if ((iDash%2) == 0) {
 
 4342            if (i >= pDash[iDash]) {
 
 4346            if (iDash >= nDash) {
 
 4354            if ((iDash%2) == 0) {
 
 4366            if (i >= pDash[iDash]) {
 
 4370            if (iDash >= nDash) {
 
 4379      for (i = 0; i < (int)nDash; i++) {
 
 4385      i2 = i1 - (dy << 1);
 
 4403      q = (
x2 - 
x1) * xdir;
 
 4408            if ((iDash%2) == 0) {
 
 4422            if (i >= pDash[iDash]) {
 
 4426            if (iDash >= nDash) {
 
 4434            if ((iDash%2) == 0) {
 
 4448            if (i >= pDash[iDash]) {
 
 4452            if (iDash >= nDash) {
 
 4470   double x, 
y, xend=0, yend=0, x0, y0;
 
 4478   double *xDash = 
new double[nDash];
 
 4479   double *yDash = 
new double[nDash];
 
 4484   for (i = 0; i < (int)nDash; i++) {
 
 4485      xDash[i] = tDash[i] * ac;
 
 4486      yDash[i] = tDash[i] * 
as;
 
 4490         xDash[i] = xDash[i]/2;
 
 4491         yDash[i] = yDash[i]/2;
 
 4493         xDash[i] = xDash[i]*2;
 
 4494         yDash[i] = yDash[i]*2;
 
 4511      q = (y2 - y1) * ydir;
 
 4518         while ((
x < xend) && (
y < yend)) {
 
 4522            if ((iDash%2) == 0) {
 
 4532            if (iDash >= nDash) {
 
 4537         while ((
x < xend) && (
y > yend)) {
 
 4541            if ((iDash%2) == 0) {
 
 4551            if (iDash >= nDash) {
 
 4570      q = (
x2 - 
x1) * xdir;
 
 4577         while ((
x < xend) && (
y < yend)) {
 
 4581            if ((iDash%2) == 0) {
 
 4591            if (iDash >= nDash) {
 
 4596         while ((
x > xend) && (
y < yend)) {
 
 4600            if ((iDash%2) == 0) {
 
 4610            if (iDash >= nDash) {
 
 4624                            const char *pDash, 
const char *col, 
UInt_t thick)
 
 4628      Warning(
"DrawDashLine", 
"Visual not initiated");
 
 4633      Warning(
"DrawDashLine", 
"no image");
 
 4637   if (!
fImage->alt.argb32) {
 
 4641   if (!
fImage->alt.argb32) {
 
 4642      Warning(
"DrawDashLine", 
"Failed to get pixel array");
 
 4646   if ((nDash < 2) || !pDash || (nDash%2)) {
 
 4647      Warning(
"DrawDashLine", 
"Wrong input parameters n=%d %ld", nDash, (
Long_t)
sizeof(pDash)-1);
 
 4651   ARGB32 color = ARGB32_White;
 
 4652   parse_argb_color(col, &color);
 
 4656   } 
else if (y1 == y2) {
 
 4670   ARGB32 color = ARGB32_White;
 
 4671   parse_argb_color(col, &color);
 
 4678   for (
UInt_t i = 1; i < nn; i++) {
 
 4695      Warning(
"PutPixel", 
"Visual not initiated");
 
 4700      Warning(
"PutPixel", 
"no image");
 
 4704   if (!
fImage->alt.argb32) {
 
 4708   if (!
fImage->alt.argb32) {
 
 4709      Warning(
"PutPixel", 
"Failed to get pixel array");
 
 4714   parse_argb_color(col, &color);
 
 4716   if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
 
 4717      Warning(
"PutPixel", 
"Out of range width=%d x=%d, height=%d y=%d",
 
 4730      Warning(
"PolyPoint", 
"Visual not initiated");
 
 4735      Warning(
"PolyPoint", 
"no image");
 
 4739   if (!
fImage->alt.argb32) {
 
 4743   if (!
fImage->alt.argb32) {
 
 4744      Warning(
"PolyPoint", 
"Failed to get pixel array");
 
 4749      Warning(
"PolyPoint", 
"No points specified");
 
 4756   parse_argb_color(col, &color);
 
 4762      for (i = 0; i < npt; i++) {
 
 4763         ipt[i].
fX += ppt[i].
fX;
 
 4764         ipt[i].
fY += ppt[i].
fY;
 
 4769   for (i = 0; i < npt; i++) {
 
 4770      x = ipt ? ipt[i].
fX : ppt[i].
fX;
 
 4771      y = ipt ? ipt[i].
fY : ppt[i].
fY;
 
 4773      if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
 
 4789   if (!nseg || !seg) {
 
 4790      Warning(
"DrawSegments", 
"Invalid data nseg=%d seg=0x%lx", nseg, (
Long_t)seg);
 
 4796   for (
UInt_t i = 0; i < nseg; i++) {
 
 4797      pt[0].fX = seg->
fX1;
 
 4798      pt[1].fX = seg->
fX2;
 
 4799      pt[0].fY = seg->
fY1;
 
 4800      pt[1].fY = seg->
fY2;
 
 4814      Warning(
"FillSpans", 
"Visual not initiated");
 
 4819      Warning(
"FillSpans", 
"no image");
 
 4823   if (!
fImage->alt.argb32) {
 
 4827   if (!
fImage->alt.argb32) {
 
 4828      Warning(
"FillSpans", 
"Failed to get pixel array");
 
 4832   if (!npt || !ppt || !widths || (stipple && (!w || !
h))) {
 
 4833      Warning(
"FillSpans", 
"Invalid input data npt=%d ppt=0x%lx col=%s widths=0x%lx stipple=0x%lx w=%d h=%d",
 
 4839   parse_argb_color(col, &color);
 
 4844   for (
UInt_t i = 0; i < npt; i++) {
 
 4846      for (
UInt_t j = 0; j < widths[i]; j++) {
 
 4847         if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
 
 4858            if (stipple[ii >> 3] & (1 << (ii%8))) {
 
 4872      Warning(
"FillSpans", 
"Visual not initiated");
 
 4877      Warning(
"FillSpans", 
"no image");
 
 4881   if (!
fImage->alt.argb32) {
 
 4885   if (!
fImage->alt.argb32) {
 
 4886      Warning(
"FillSpans", 
"Failed to get pixel array");
 
 4890   if (!npt || !ppt || !widths || !tile) {
 
 4891      Warning(
"FillSpans", 
"Invalid input data npt=%d ppt=0x%lx widths=0x%lx tile=0x%lx",
 
 4905   for (
UInt_t i = 0; i < npt; i++) {
 
 4908      for (
UInt_t j = 0; j < widths[i]; j++) {
 
 4909         if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
 
 4928      Warning(
"CropSpans", 
"Visual not initiated");
 
 4933      Warning(
"CropSpans", 
"no image");
 
 4937   if (!
fImage->alt.argb32) {
 
 4941   if (!
fImage->alt.argb32) {
 
 4942      Warning(
"CropSpans", 
"Failed to get pixel array");
 
 4946   if (!npt || !ppt || !widths) {
 
 4947      Warning(
"CropSpans", 
"No points specified npt=%d ppt=0x%lx widths=0x%lx", npt, (
Long_t)ppt, (
Long_t)widths);
 
 4952   int y1 = ppt[npt-1].
fY;
 
 4960   for (
y = 0; (int)
y < y0; 
y++) {
 
 4963         if (idx < sz) 
fImage->alt.argb32[idx] = 0;
 
 4968   for (i = 0; i < npt; i++) {
 
 4969      for (
x = 0; (int)
x < ppt[i].fX; 
x++) {
 
 4971         if (idx < sz) 
fImage->alt.argb32[idx] = 0;
 
 4973      for (
x = ppt[i].fX + widths[i] + 1; 
x < 
fImage->width; 
x++) {
 
 4975         if (idx < sz) 
fImage->alt.argb32[idx] = 0;
 
 4983         if (idx < sz) 
fImage->alt.argb32[idx] = 0;
 
 5017      Warning(
"CopyArea", 
"Visual not initiated");
 
 5022      Warning(
"CopyArea", 
"no image");
 
 5027   ASImage *out = ((
TASImage*)dst)->GetImage();
 
 5033   xsrc = xsrc < 0 ? 0 : xsrc;
 
 5034   ysrc = ysrc < 0 ? 0 : ysrc;
 
 5036   if ((xsrc >= (
int)
fImage->width) || (ysrc >= (
int)
fImage->height)) 
return;
 
 5038   w = xsrc + w > 
fImage->width ? 
fImage->width - xsrc : w;
 
 5042   if (!
fImage->alt.argb32) {
 
 5045   if (!out->alt.argb32) {
 
 5047      out = ((
TASImage*)dst)->GetImage();
 
 5050   if (
fImage->alt.argb32 && out->alt.argb32) {
 
 5051      for (
y = 0; 
y < (int)
h; 
y++) {
 
 5052         for (
x = 0; 
x < (int)w; 
x++) {
 
 5053            idx = 
Idx(yy + 
x + xsrc);
 
 5054            if ((
x + xdst < 0) || (ydst + 
y < 0) ||
 
 5055                (
x + xdst >= (
int)out->width) || (
y + ydst >= (
int)out->height) ) 
continue;
 
 5057            idx2 = 
Idx((ydst + 
y)*out->width + 
x + xdst);
 
 5061                  out->alt.argb32[idx2] = 0;
 
 5064                  out->alt.argb32[idx2] &= 
fImage->alt.argb32[idx];
 
 5067                  out->alt.argb32[idx2] = 
fImage->alt.argb32[idx] & (~out->alt.argb32[idx2]);
 
 5070                  out->alt.argb32[idx2] &= ~fImage->alt.argb32[idx];
 
 5075                  out->alt.argb32[idx2] ^= 
fImage->alt.argb32[idx];
 
 5078                  out->alt.argb32[idx2] |= 
fImage->alt.argb32[idx];
 
 5081                  out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) & (~out->alt.argb32[idx2]);
 
 5084                  out->alt.argb32[idx2] ^= ~fImage->alt.argb32[idx];
 
 5087                  out->alt.argb32[idx2] = ~out->alt.argb32[idx2];
 
 5090                  out->alt.argb32[idx2] = 
fImage->alt.argb32[idx] | (~out->alt.argb32[idx2]);
 
 5093                  out->alt.argb32[idx2] = ~fImage->alt.argb32[idx];
 
 5096                  out->alt.argb32[idx2] |= ~fImage->alt.argb32[idx];
 
 5099                  out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) | (~out->alt.argb32[idx2]);
 
 5102                  out->alt.argb32[idx2] = 0xFFFFFFFF;
 
 5106                  out->alt.argb32[idx2] = 
fImage->alt.argb32[idx];
 
 5130   int i, j, ix, iy, w, 
h;
 
 5132   ARGB32 color = 0xFFFFFFFF;
 
 5139   for (i = 0; i < nx; i++) {
 
 5141      for (j = 0; j < ny; j++) {
 
 5142         icol = (ARGB32)ic[i + (nx*j)];
 
 5143         if (icol != color) {
 
 5197    return (ptMin - ptsStart);
 
 5213   int mr = 0, m1r = 0;          
 
 5214   int incr1l = 0, incr2l = 0;   
 
 5215   int incr1r = 0, incr2r = 0;   
 
 5220   int nextleft, nextright;      
 
 5233      Warning(
"GetPolygonSpans", 
"Visual not initiated");
 
 5238      Warning(
"GetPolygonSpans", 
"no image");
 
 5242   if (!
fImage->alt.argb32) {
 
 5246   if (!
fImage->alt.argb32) {
 
 5247      Warning(
"GetPolygonSpans", 
"Failed to get pixel array");
 
 5251   if ((npt < 3) || !ppt) {
 
 5252      Warning(
"GetPolygonSpans", 
"No points specified npt=%d ppt=0x%lx", npt, (
Long_t)ppt);
 
 5261   if ((npt < 3) || (dy < 0)) 
return kFALSE;
 
 5263   ptsOut = firstPoint = 
new TPoint[dy];
 
 5267   nextleft = nextright = imin;
 
 5268   y = ppt[nextleft].
fY;
 
 5273      if (ppt[nextleft].fY == 
y) {
 
 5279         if (nextleft >= (
int)npt) {
 
 5286                      ppt[left].fX, ppt[nextleft].fX,
 
 5287                      xl, dl, ml, m1l, incr1l, incr2l);
 
 5291      if (ppt[nextright].fY == 
y) {
 
 5297         if (nextright < 0) {
 
 5304                      ppt[right].fX, ppt[nextright].fX,
 
 5305                      xr, dr, mr, m1r, incr1r, incr2r);
 
 5310      i = 
TMath::Min(ppt[nextleft].fY, ppt[nextright].fY) - 
y;
 
 5314         delete [] firstWidth;
 
 5315         delete [] firstPoint;
 
 5324            *(
width++) = xr - xl;
 
 5325            (ptsOut++)->fX = xl;
 
 5327            *(
width++) = xl - xr;
 
 5328            (ptsOut++)->fX = xr;
 
 5336   }  
while (
y != 
ymax);
 
 5338   *nspans = 
UInt_t(ptsOut - firstPoint);
 
 5339   *outPoint = firstPoint;
 
 5340   *outWidth = firstWidth;
 
 5357   ARGB32 color = ARGB32_White;
 
 5358   parse_argb_color(col, &color);
 
 5361      if (!stipple && ((color & 0xff000000)==0xff000000)) { 
 
 5364         FillSpans(nspans, firstPoint, firstWidth, col, stipple, w, 
h);
 
 5368         delete [] firstWidth;
 
 5369         delete [] firstPoint;
 
 5372      if (firstWidth) 
delete [] firstWidth;
 
 5373      if (firstPoint) 
delete [] firstPoint;
 
 5390      FillSpans(nspans, firstPoint, firstWidth, tile);
 
 5393         delete [] firstWidth;
 
 5394         delete [] firstPoint;
 
 5397      if (firstWidth) 
delete [] firstWidth;
 
 5398      if (firstPoint) 
delete [] firstPoint;
 
 5414      CropSpans(nspans, firstPoint, firstWidth);
 
 5417         delete [] firstWidth;
 
 5418         delete [] firstPoint;
 
 5421         if (firstWidth) 
delete [] firstWidth;
 
 5422         if (firstPoint) 
delete [] firstPoint;
 
 5435      Warning(
"DrawFillArea", 
"Visual not initiated");
 
 5440      Warning(
"DrawFillArea", 
"no image");
 
 5444   if (!
fImage->alt.argb32) {
 
 5448   if (!
fImage->alt.argb32) {
 
 5449      Warning(
"DrawFillArea", 
"Failed to get pixel array");
 
 5453   if ((count < 3) || !ptsIn) {
 
 5454      Warning(
"DrawFillArea", 
"No points specified npt=%d ppt=0x%lx", count, (
Long_t)ptsIn);
 
 5463   ARGB32 color = ARGB32_White;
 
 5464   parse_argb_color(col, &color);
 
 5482   static const UInt_t gEdgeTableEntryCacheSize = 200;
 
 5483   static EdgeTableEntry gEdgeTableEntryCache[gEdgeTableEntryCacheSize];
 
 5485   if (count < gEdgeTableEntryCacheSize) {
 
 5493   ptsOut = firstPoint;
 
 5496   pSLL = ET.scanlines.next;
 
 5498   for (
y = ET.ymin; 
y < ET.ymax; 
y++) {
 
 5499      if (pSLL && 
y == pSLL->scanline) {
 
 5500         loadAET(&AET, pSLL->edgelist);
 
 5507         ptsOut->
fX = pAET->bres.minor_axis;
 
 5512         *
width++ = pAET->next->bres.minor_axis - pAET->bres.minor_axis;
 
 5515            if (!stipple && ((color & 0xff000000)==0xff000000)) { 
 
 5518               FillSpans(nPts, firstPoint, firstWidth, col, stipple, w, 
h);
 
 5520            ptsOut = firstPoint;
 
 5531      if (!stipple && ((color & 0xff000000)==0xff000000)) {  
 
 5534         FillSpans(nPts, firstPoint, firstWidth, col, stipple, w, 
h);
 
 5538   if (del) 
delete [] pETEs;
 
 5548      Warning(
"DrawFillArea", 
"Visual not initiated");
 
 5553      Warning(
"DrawFillArea", 
"no image");
 
 5557   if (!
fImage->alt.argb32) {
 
 5561   if (!
fImage->alt.argb32) {
 
 5562      Warning(
"DrawFillArea", 
"Failed to get pixel array");
 
 5566   if ((count < 3) || !ptsIn) {
 
 5567      Warning(
"DrawFillArea", 
"No points specified npt=%d ppt=0x%lx", count, (
Long_t)ptsIn);
 
 5593   ptsOut = firstPoint;
 
 5596   pSLL = ET.scanlines.next;
 
 5598   for (
y = ET.ymin; 
y < ET.ymax; 
y++) {
 
 5599      if (pSLL && 
y == pSLL->scanline) {
 
 5600         loadAET(&AET, pSLL->edgelist);
 
 5607         ptsOut->
fX = pAET->bres.minor_axis;
 
 5612         *
width++ = pAET->next->bres.minor_axis - pAET->bres.minor_axis;
 
 5615            FillSpans(nPts, firstPoint, firstWidth, tile);
 
 5616            ptsOut = firstPoint;
 
 5625   FillSpans(nPts, firstPoint, firstWidth, tile);
 
 5636   ASDrawContext *ctx = 
new ASDrawContext;
 
 5638   ctx->canvas_width = im->width;
 
 5639   ctx->canvas_height = im->height;
 
 5640   ctx->canvas = im->alt.argb32;
 
 5641   ctx->scratch_canvas = 0;
 
 5643   ctx->flags = ASDrawCTX_CanvasIsARGB;
 
 5644   asim_set_custom_brush_colored( ctx, brush);
 
 5654      if (ctx->scratch_canvas) 
free(ctx->scratch_canvas);
 
 5668   Int_t sz = thick*thick;
 
 5675      matrix = 
new CARD32[sz];
 
 5678   for (
int i = 0; i < sz; i++) {
 
 5679      matrix[i] = (CARD32)color;
 
 5683   brush.matrix = matrix;
 
 5684   brush.width = thick;
 
 5685   brush.height = thick;
 
 5686   brush.center_y = brush.center_x = thick/2;
 
 5695   if (xx1 == 
fImage->width)  --xx1;
 
 5696   if (yy1 == 
fImage->height) --yy1;
 
 5697   if (xx2 == 
fImage->width)  --xx2;
 
 5698   if (yy2 == 
fImage->height) --yy2;
 
 5700   asim_move_to(ctx, xx1, yy1);
 
 5701   asim_line_to(ctx, xx2, yy2);
 
 5716   Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
 
 5720   FT_Bitmap *source = (FT_Bitmap*)bitmap;
 
 5723   Int_t dots = 
Int_t(source->width * source->rows);
 
 5727   yy = y0 = by > 0 ? by * 
fImage->width : 0;
 
 5728   for (
y = 0; 
y < (int) source->rows; 
y++) {
 
 5730      if ((byy >= (
int)
fImage->height) || (byy <0)) 
continue;
 
 5732      for (
x = 0; 
x < (int) source->width; 
x++) {
 
 5734         if ((bxx >= (
int)
fImage->width) || (bxx < 0)) 
continue;
 
 5736         idx = 
Idx(bxx + yy);
 
 5737         r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
 
 5738         g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
 
 5739         b += (
fImage->alt.argb32[idx] & 0x0000ff);
 
 5749   col[0] = (
r << 16) + (
g << 8) + 
b;
 
 5751   Int_t col4r = (col[4] & 0xff0000) >> 16;
 
 5752   Int_t col4g = (col[4] & 0x00ff00) >> 8;
 
 5753   Int_t col4b = (col[4] & 0x0000ff);
 
 5756   for (
x = 3; 
x > 0; 
x--) {
 
 5758      Int_t colxr = (col4r*
x + 
r*xx) >> 2;
 
 5759      Int_t colxg = (col4g*
x + 
g*xx) >> 2;
 
 5760      Int_t colxb = (col4b*
x + 
b*xx) >> 2;
 
 5761      col[
x] = (colxr << 16) + (colxg << 8) + colxb;
 
 5767   Int_t clipx1=0, clipx2=0, clipy1=0, clipy2=0;
 
 5772      clipx1 = 
gPad->XtoAbsPixel(
gPad->GetX1())*is;
 
 5773      clipx2 = 
gPad->XtoAbsPixel(
gPad->GetX2())*is;
 
 5774      clipy1 = 
gPad->YtoAbsPixel(
gPad->GetY1())*is;
 
 5775      clipy2 = 
gPad->YtoAbsPixel(
gPad->GetY2())*is;
 
 5779   for (
y = 0; 
y < (int) source->rows; 
y++) {
 
 5782      for (
x = 0; 
x < (int) source->width; 
x++) {
 
 5786         d = ((
d + 10) * 5) >> 8;
 
 5790            if ( noClip || ((
x < (
int) source->width) &&
 
 5791                 (bxx <  (
int)clipx2) && (bxx >= (
int)clipx1) &&
 
 5792                 (byy >= (
int)clipy2) && (byy <  (
int)clipy1) )) {
 
 5793               idx    = 
Idx(bxx + yy);
 
 5794               acolor = (ARGB32)col[
d];
 
 5798                  fImage->alt.argb32[idx] = acolor;
 
 5817      Warning(
"DrawText", 
"Visual not initiated");
 
 5821   if (!
fImage->alt.argb32) {
 
 5846   const wchar_t *wcsTitle = 
reinterpret_cast<const wchar_t *
>(
text->
GetWcsTitle());
 
 5847   if (wcsTitle != NULL) {
 
 5857      col = 
gROOT->GetColor(1);
 
 5860   ARGB32 color = ARGB32_White;
 
 5914   if (align == 1 || align == 2 || align == 3) {
 
 5916   } 
else if (align == 4 || align == 5 || align == 6) {
 
 5923   if (align == 3 || align == 6 || align == 9) {
 
 5925   } 
else if (align == 2 || align == 5 || align == 8) {
 
 5932   ftal.x = (ftal.x >> 6);
 
 5933   ftal.y = (ftal.y >> 6);
 
 5938      if (FT_Glyph_To_Bitmap(&glyph->
fImage, ft_render_mode_normal, 0, 1 )) 
continue;
 
 5940      FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
 
 5941      FT_Bitmap *source = &bitmap->bitmap;
 
 5943      Int_t bx = 
x - ftal.x + bitmap->left;
 
 5944      Int_t by = 
y + ftal.y - bitmap->top;
 
 5972      if (FT_Glyph_To_Bitmap(&glyph->
fImage, ft_render_mode_normal, 0, 1 )) 
continue;
 
 5974      FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
 
 5975      FT_Bitmap *source = &bitmap->bitmap;
 
 5977      Int_t bx = 
x + bitmap->left;
 
 5978      Int_t by = 
y + 
h - bitmap->top;
 
 5990   static ASImageExportParams params;
 
 6000         ret = ASImage2xpmRawBuff(img, (CARD8 **)buffer, size, 0);
 
 6003         ret = ASImage2PNGBuff(img, (CARD8 **)buffer, size, ¶ms);
 
 6044   static ASImageImportParams params;
 
 6048   params.filter = SCL_DO_ALL;
 
 6050   params.gamma_table = 0;
 
 6051   params.compression = 0;
 
 6052   params.format = ASA_ASImage;
 
 6053   params.search_path = 0;
 
 6054   params.subimage = 0;
 
 6059         char *ptr = buffer[0];
 
 6060         while (isspace((
int)*ptr)) ++ptr;
 
 6062            fImage = xpm_data2ASImage((
const char**)buffer, ¶ms);
 
 6064            fImage = xpmRawBuff2ASImage((
const char*)*buffer, ¶ms);
 
 6069         fImage = PNGBuff2ASimage((CARD8 *)*buffer, ¶ms);
 
 6100   static char *buf = 0;
 
 6122   ASImage *rendered_im;
 
 6123   ASImageLayer layers[2];
 
 6124   init_image_layers(&(layers[0]), 2);
 
 6126   layers[0].dst_x = 0;
 
 6127   layers[0].dst_y = 0;
 
 6128   layers[0].clip_width = img->width;
 
 6129   layers[0].clip_height = img->height;
 
 6130   layers[0].bevel = 0;
 
 6132   layers[1].dst_x = 0;
 
 6133   layers[1].dst_y = 0;
 
 6134   layers[1].clip_width = img->width;
 
 6135   layers[1].clip_height = img->height;
 
 6136   layers[1].merge_scanlines = blend_scanlines_name2func(
"tint");
 
 6137   rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, img->width, img->height,
 
 6139   destroy_asimage(&img);
 
 6143   ASImage *padimg = 0;
 
 6148      padimg = pad_asimage(
fgVisual, img, 0, 
d, sz, sz, 0x00ffffff,
 
 6152      padimg = pad_asimage(
fgVisual, img, 
d, 0, sz, sz, 0x00ffffff,
 
 6157      destroy_asimage(&img);
 
 6162   ASImage2xpmRawBuff(padimg, (CARD8 **)ptr, &size, 0);
 
 6165   destroy_asimage(&padimg);
 
 6179   if (
b.IsReading()) {
 
 6180      Version_t version = 
b.ReadVersion(&R__s, &R__c);
 
 6185      if ( version == 1 ) {
 
 6186         Int_t fileVersion = 
b.GetVersionOwner();
 
 6187         if (fileVersion > 0 && fileVersion < 50000 ) {
 
 6188            TImage::Streamer(
b);
 
 6195            if ( fileVersion < 40200 ) {
 
 6206            b.CheckByteCount(R__s, R__c, TASImage::IsA());
 
 6211      TNamed::Streamer(
b);
 
 6214      if (image_type != 0) {     
 
 6216         buffer = 
new char[size];
 
 6217         b.ReadFastArray(buffer, size);
 
 6221         TAttImage::Streamer(
b);
 
 6226         b.ReadFastArray(vec, size);
 
 6230      b.CheckByteCount(R__s, R__c, TASImage::IsA());
 
 6235      R__c = 
b.WriteVersion(TASImage::IsA(), 
kTRUE);
 
 6240      TNamed::Streamer(
b);
 
 6242      image_type = 
fImage->alt.vector ? 0 : 1;
 
 6245      if (image_type != 0) {     
 
 6248         b.WriteFastArray(buffer, size);
 
 6251         TAttImage::Streamer(
b);
 
 6256      b.SetByteCount(R__c, 
kTRUE);
 
 6265   if (
fImage->alt.vector) {
 
 6307   if ((start > 0) && (stop - start > 0)) {
 
 6318   Int_t sz = thick*thick;
 
 6322   ARGB32 color = ARGB32_White;
 
 6323   parse_argb_color(col, &color);
 
 6328      matrix = 
new CARD32[sz];
 
 6331   for (
int i = 0; i < sz; i++) {
 
 6332      matrix[i] = (CARD32)color;
 
 6336   brush.matrix = matrix;
 
 6337   brush.width = thick;
 
 6338   brush.height = thick;
 
 6339   brush.center_y = brush.center_x = thick/2;
 
 6341   ASDrawContext *ctx = 0;
 
 6344   asim_cube_bezier(ctx, 
x1, y1, 
x2, y2, 
x3, y3);
 
 6357                                  const char *col, 
Int_t thick)
 
 6359   thick = !thick ? 1 : thick;
 
 6360   Int_t sz = thick*thick;
 
 6364   ARGB32 color = ARGB32_White;
 
 6365   parse_argb_color(col, &color);
 
 6370      matrix = 
new CARD32[sz];
 
 6373   for (
int i = 0; i < sz; i++) {
 
 6374      matrix[i] = (CARD32)color;
 
 6378   brush.matrix = matrix;
 
 6379   brush.width = thick > 0 ? thick : 1;
 
 6380   brush.height = thick > 0 ? thick : 1;
 
 6381   brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
 
 6384   asim_straight_ellips(ctx, 
x, 
y, rx, ry, thick < 0);
 
 6398   thick = !thick ? 1 : thick;
 
 6399   Int_t sz = thick*thick;
 
 6403   ARGB32 color = ARGB32_White;
 
 6404   parse_argb_color(col, &color);
 
 6410      matrix = 
new CARD32[sz];
 
 6413   for (
int i = 0; i < sz; i++) {
 
 6414      matrix[i] = (CARD32)color;
 
 6418   brush.matrix = matrix;
 
 6419   brush.height = brush.width = thick > 0 ? thick : 1;
 
 6420   brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
 
 6423   asim_circle(ctx, 
x,  
y, 
r, thick < 0);
 
 6437                           const char *col, 
Int_t thick)
 
 6439   thick = !thick ? 1 : thick;
 
 6440   Int_t sz = thick*thick;
 
 6444   ARGB32 color = ARGB32_White;
 
 6445   parse_argb_color(col, &color);
 
 6450      matrix = 
new CARD32[sz];
 
 6453   for (
int i = 0; i < sz; i++) {
 
 6454      matrix[i] = (CARD32)color;
 
 6458   brush.matrix = matrix;
 
 6459   brush.width = thick > 0 ? thick : 1;
 
 6460   brush.height = thick > 0 ? thick : 1;
 
 6461   brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
 
 6464   asim_ellips(ctx, 
x, 
y, rx, ry, angle, thick < 0);
 
 6477                           const char *col, 
Int_t thick)
 
 6479   thick = !thick ? 1 : thick;
 
 6480   Int_t sz = thick*thick;
 
 6484   ARGB32 color = ARGB32_White;
 
 6485   parse_argb_color(col, &color);
 
 6490      matrix = 
new CARD32[sz];
 
 6493   for (
int i = 0; i < sz; i++) {
 
 6494      matrix[i] = (CARD32)color;
 
 6498   brush.matrix = matrix;
 
 6499   brush.width = thick > 0 ? thick : 1;
 
 6500   brush.height = thick > 0 ? thick : 1;
 
 6501   brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
 
 6504   asim_ellips2(ctx, 
x, 
y, rx, ry, angle, thick < 0);
 
 6516                         const char * , 
const char * )
 
 6530      Warning(
"Gray", 
"Image not initiated");
 
 6535      Warning(
"Gray", 
"Visual not initiated");
 
 6560   if (
fImage->alt.argb32) {
 
 6562                                0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
 
 6564      for (i = 0; i < 
fImage->height; i++) {
 
 6565         for (j = 0; j < 
fImage->width; j++) {
 
 6568            r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
 
 6569            g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
 
 6570            b = (
fImage->alt.argb32[idx] & 0x0000ff);
 
 6571            l = (57*
r + 181*
g + 18*
b)/256;
 
 6579      ASImageDecoder *imdec = start_image_decoding(
fgVisual, 
fImage, SCL_DO_ALL,
 
 6591         Warning(
"ToGray", 
"Failed to start image output");
 
 6598      CARD32 *aa = imdec->buffer.alpha;
 
 6599      CARD32 *rr = imdec->buffer.red;
 
 6600      CARD32 *gg = imdec->buffer.green;
 
 6601      CARD32 *bb = imdec->buffer.blue;
 
 6606      for (i = 0; i < 
fImage->height; i++) {
 
 6607         imdec->decode_image_scanline(imdec);
 
 6608         result.flags = imdec->buffer.flags;
 
 6609         result.back_color = imdec->buffer.back_color;
 
 6611         for (j = 0; j < 
fImage->width; j++) {
 
 6612            l = (57*rr[j] + 181*gg[j]+ 18*bb[j])/256;
 
 6613            result.alpha[j] = aa[j];
 
 6615            result.green[j] = 
l;
 
 6618         imout->output_image_scanline(imout, &result, 1);
 
 6621      stop_image_decoding(&imdec);
 
 6622      stop_image_output(&imout);
 
 6662      Warning(
"FromWindow", 
"Visual not initiated");
 
 6670   static int x11 = -1;
 
 6671   if (x11 < 0) x11 = 
gVirtualX->InheritsFrom(
"TGX11");
 
 6676      unsigned char *bits = 
gVirtualX->GetColorBits(wid, 0, 0, w, 
h);
 
 6681      fImage = bitmap2asimage(bits, w, 
h, 0, 0);
 
 6696   for (
UInt_t i = 0; i < 
h/2; ++i) {
 
 6697      memcpy(xx, buf + 4*w*i, 4*w);
 
 6698      memcpy(buf + 4*w*i, buf + 4*w*(
h-i-1), 4*w);
 
 6699      memcpy(buf + 4*w*(
h-i-1), xx, 4*w);
 
 6703   fImage = bitmap2asimage(buf, w, 
h, 0, 0);
 
 6716   if (!
fImage->alt.vector && on) {
 
 6727      gPad->Range(-left / (1.0 - left - right),
 
 6728                  -bottom / (1.0 - top - bottom),
 
 6729                  1 + right / (1.0 - left - right),
 
 6730                  1 + top / ( 1.0 - top - bottom));
 
 6731      gPad->RangeAxis(0, 0, 1, 1);
 
 6757   name.ReplaceAll(
".", 
"_");
 
 6767   out << std::endl << str << std::endl << std::endl;
 
 6770   out << xpm << 
"_img = TImage::Create();" << std::endl;
 
 6771   out << 
"   " << xpm << 
"_img->SetImageBuffer( (char **)" << xpm << 
", TImage::kXpm);" << std::endl;
 
 6772   out << 
"   " << xpm << 
"_img->Draw();" << std::endl;
 
 6785   static char buf[32];
 
 6786   FILE *fp = fopen(
name, 
"rb+");
 
 6789      printf(
"file %s : failed to open\n", 
name);
 
 6793   if (!fread(buf, 1, 20, fp)) {
 
 6798   char dpi1 = (set & 0xffff) >> 8;
 
 6799   char dpi2 = set & 0xff;
 
 6804   for (i = 0; i < 20; i++) {
 
 6805      if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) &&  (buf[i+2] == 0x49) &&
 
 6806          (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
 
 6812   if (i == 20 || dpi+4 >= 20) { 
 
 6814      printf(
"file %s : wrong JPEG format\n", 
name);
 
 6821   buf[dpi + 1] = dpi1;
 
 6822   buf[dpi + 2] = dpi2;
 
 6825   buf[dpi + 3] = dpi1;
 
 6826   buf[dpi + 4] = dpi2;
 
 6829   fwrite(buf, 1, 20, fp);
 
const Mask_t kGCClipXOrigin
 
const Mask_t kGCClipYOrigin
 
static const double x2[5]
 
static const double x1[5]
 
static const double x3[11]
 
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.
 
struct _EdgeTableEntry EdgeTableEntry
 
struct _ScanLineListBlock ScanLineListBlock
 
struct _ScanLineList ScanLineList
 
#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)
 
include TDocParser_001 C image html pict1_TDocParser_001 png width
 
float type_of_call hi(const int &, const int &)
 
R__EXTERN TRandom * gRandom
 
char * Form(const char *fmt,...)
 
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 FillPolygon(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill a convex polygon with background color or bitmap.
 
Bool_t IsEditable() const
 
Bool_t SetJpegDpi(const char *name, UInt_t dpi=72)
Set an image printing resolution in Dots Per Inch units.
 
void DrawLineInternal(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Internal line drawing.
 
Pixmap_t GetPixmap()
Returns image pixmap.
 
Int_t fPaintMode
! 1 - fast mode, 0 - low memory slow mode
 
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)
Copy source region to the destination image.
 
Bool_t SetImageBuffer(char **buffer, EImageFileTypes type=TImage::kPng)
Create image from compressed buffer.
 
Double_t fMinValue
! min value in image
 
UInt_t GetScaledWidth() const
Return width of the displayed image not of the original image.
 
void Merge(const TImage *im, const char *op="alphablend", Int_t x=0, Int_t y=0)
Merge two images.
 
void DrawHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t col, UInt_t thick)
Draw an horizontal line.
 
void FillSpans(UInt_t npt, TPoint *ppt, UInt_t *widths, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill spans with specified color or/and stipple.
 
static Bool_t fgInit
global flag to init afterimage only once
 
const char * TypeFromMagicNumber(const char *file)
Guess the file type from the first byte of file.
 
Double_t fMaxValue
! max value in image
 
void Append(const TImage *im, const char *option="+", const char *color="#00000000")
Append image.
 
void DrawCircle(Int_t x, Int_t y, Int_t r, const char *col="#000000", Int_t thick=1)
Draw a circle.
 
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, UInt_t *ic)
Draw a cell array.
 
void MapQuality(EImageQuality &quality, UInt_t &asquality, Bool_t toas=kTRUE)
Map quality to/from AfterImage quality.
 
void Crop(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Crop an image.
 
void CropSpans(UInt_t npt, TPoint *ppt, UInt_t *widths)
Crop spans.
 
TArrayL * GetPixels(Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Return 2D array of machine dependent pixel values.
 
UInt_t * GetScanline(UInt_t y)
Return a pointer to scan-line.
 
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
 
void EndPaint()
EndPaint does internal RLE compression of image data.
 
void DrawVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t col, UInt_t thick)
Draw a vertical line.
 
UInt_t GetWidth() const
Return width of original image not of the displayed image.
 
void Gradient(UInt_t angle=0, const char *colors="#FFFFFF #000000", const char *offsets=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Render multipoint gradient inside rectangle of size (width, height) at position (x,...
 
void DrawStraightEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, const char *col="#000000", Int_t thick=1)
Draw a straight ellipse.
 
void DrawText(Int_t x=0, Int_t y=0, const char *text="", Int_t size=12, const char *color=0, const char *font="fixed", EText3DType type=TImage::kPlain, const char *fore_file=0, Float_t angle=0)
Draw text of size (in pixels for TrueType fonts) at position (x, y) with color specified by hex strin...
 
ASImage * fImage
! pointer to image structure of original image
 
UInt_t GetHeight() const
Return height of original image not of the displayed image.
 
UInt_t fZoomHeight
! hight of zoomed image in image pixels
 
static THashTable * fgPlugList
! hash table containing loaded plugins
 
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 DrawSegments(UInt_t nseg, Segment_t *seg, const char *col="#000000", UInt_t thick=1)
Draw segments.
 
void DrawPolyLine(UInt_t nn, TPoint *xy, const char *col="#000000", UInt_t thick=1, TImage::ECoordMode mode=kCoordModeOrigin)
Draw a polyline.
 
void SetDefaults()
Set default parameters.
 
void DrawWideLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Draw wide line.
 
void CropPolygon(UInt_t npt, TPoint *ppt)
Crop a convex polygon.
 
void StartPaletteEditor()
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)
Bevel is used to create 3D effect while drawing buttons, or any other image that needs to be framed.
 
void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
 
UInt_t * GetRgbaArray()
Return a pointer to an array[width x height] of RGBA32 values.
 
void PolyPoint(UInt_t npt, TPoint *ppt, const char *col="#000000", TImage::ECoordMode mode=kCoordModeOrigin)
Draw a poly point.
 
Pixmap_t GetMask()
Returns image mask pixmap (alpha channel).
 
static const ASVisual * GetVisual()
Return visual.
 
const char * GetTitle() const
Title is used to keep 32x32 xpm image's thumbnail.
 
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="")
Draw image on the drawable wid (pixmap, window) at x,y position.
 
void SetPaletteEnabled(Bool_t on=kTRUE)
Switch on/off the image palette.
 
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 Zoom(UInt_t offX, UInt_t offY, UInt_t width, UInt_t height)
The area of an image displayed in a pad is defined by this function.
 
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...
 
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)
Draw a dashed line.
 
void DrawGlyph(void *bitmap, UInt_t color, Int_t x, Int_t y)
Draw glyph bitmap.
 
TASImage * fScaledImage
! temporary scaled and zoomed image produced from original image
 
void FillRectangle(const char *col=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
 
void DrawLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, const char *col="#000000", UInt_t thick=1)
Draw a line.
 
UInt_t fZoomOffX
! X - offset for zooming in image pixels
 
void FromWindow(Drawable_t wid, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Create an image (screenshot) from specified window.
 
void DrawFillArea(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill a polygon (any type convex, non-convex).
 
void GetImageBuffer(char **buffer, int *size, EImageFileTypes type=TImage::kPng)
Return in-memory buffer compressed according image type.
 
Int_t DistancetoPrimitive(Int_t px, Int_t py)
Is the mouse in the image ?
 
EImageFileTypes GetFileType(const char *ext)
Return file type depending on specified extension.
 
void Browse(TBrowser *)
Browse image.
 
void Gray(Bool_t on=kTRUE)
Convert RGB image to Gray image and vice versa.
 
void Tile(UInt_t width, UInt_t height)
Tile the original image.
 
void Draw(Option_t *option="")
Draw image.
 
void WriteImage(const char *file, EImageFileTypes type=TImage::kUnknown)
Write image to specified file.
 
char * GetObjectInfo(Int_t px, Int_t py) const
Get image pixel coordinates and the pixel value at the mouse pointer.
 
static UInt_t AlphaBlend(UInt_t bot, UInt_t top)
Return alpha-blended value computed from bottom and top pixel values.
 
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 ReadImage(const char *file, EImageFileTypes type=TImage::kUnknown)
Read specified image file.
 
void BeginPaint(Bool_t fast=kTRUE)
BeginPaint initializes internal array[width x height] of ARGB32 pixel values.
 
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 DestroyImage()
Destroy 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)
Draw an ellipse.
 
static Bool_t InitVisual()
Static function to initialize the ASVisual.
 
void FloodFill(Int_t x, Int_t y, const char *col, const char *min_col, const char *max_col=0)
Flood fill.
 
UInt_t fZoomOffY
! Y - offset for zooming im image pixels
 
Double_t * Vectorize(UInt_t max_colors=256, UInt_t dither=4, Int_t opaque_threshold=1)
Reduce color-depth of an image and fills vector of "scientific data" [0...1].
 
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)
This function will tile original image to specified size with offsets requested, and then it will go ...
 
void Slice(UInt_t xStart, UInt_t xEnd, UInt_t yStart, UInt_t yEnd, UInt_t toWidth, UInt_t toHeight)
Another method of enlarging images where corners remain unchanged, but middle part gets tiled.
 
void Scale(UInt_t width, UInt_t height)
Scale the original image.
 
void Mirror(Bool_t vert=kTRUE)
Mirror image in place.
 
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)
Draw an ellipse.
 
TArrayD * GetArray(UInt_t w=0, UInt_t h=0, TImagePalette *pal=gWebImagePalette)
In case of vectorized image return an associated array of doubles otherwise this method creates and r...
 
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.
 
UInt_t * GetArgbArray()
Return a pointer to internal array[width x height] of ARGB32 values This array is directly accessible...
 
void MapFileTypes(EImageFileTypes &type, UInt_t &astype, Bool_t toas=kTRUE)
Map file type to/from AfterImage types.
 
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 PutPixel(Int_t x, Int_t y, const char *col="#000000")
Draw a point at the specified position.
 
void UnZoom()
Un-zoom the image to original size.
 
void SetPalette(const TImagePalette *palette)
Set a new palette to an image.
 
TASImage()
Default image constructor.
 
TASImage & operator=(const TASImage &img)
Image assignment operator.
 
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)
Draw a cubic bezier line.
 
Double_t * GetVecArray()
Return a pointer to internal array[width x height] of double values [0,1].
 
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 Paint(Option_t *option="")
Paint image.
 
void Flip(Int_t flip=180)
Flip image in place.
 
void FromGLBuffer(UChar_t *buf, UInt_t w, UInt_t h)
Creates an image (screenshot) from a RGBA buffer.
 
void FromPad(TVirtualPad *pad, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Create an image from the given pad, afterwards this image can be saved in any of the supported image ...
 
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 DrawRectangle(UInt_t x, UInt_t y, UInt_t w, UInt_t h, const char *col="#000000", UInt_t thick=1)
Draw a rectangle.
 
void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse events.
 
void Pad(const char *color="#00FFFFFF", UInt_t left=0, UInt_t right=0, UInt_t top=0, UInt_t bottom=0)
Enlarge image, padding it with specified color on each side in accordance with requested geometry.
 
static ASVisual * fgVisual
pointer to visual structure
 
virtual ~TASImage()
Image destructor, clean up image and visual.
 
void GetZoomPosition(UInt_t &x, UInt_t &y, UInt_t &w, UInt_t &h) const
Return the zoom parameters.
 
TObject * Clone(const char *newname) const
Clone image.
 
void Blur(Double_t hr=3, Double_t vr=3)
Perform Gaussian blur of the image (useful for drop shadows).
 
UInt_t GetScaledHeight() const
Return height of the displayed image not of the original image.
 
void SetImage(const Double_t *imageData, UInt_t width, UInt_t height, TImagePalette *palette=0)
Deletes the old image and creates a new image depending on the values of imageData.
 
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)
Draw a box.
 
void SetTitle(const char *title="")
Set a title for an image.
 
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 SetFillStyle(Style_t fstyle)
Set the fill area style.
 
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
 
UInt_t GetImageCompression() const
 
Bool_t fPaletteEnabled
! kTRUE - palette is drawn on the image
 
virtual void StartPaletteEditor()
Opens a GUI to edit the color palette.
 
virtual void SetLineColor(Color_t lcolor)
Set the line color.
 
virtual Float_t GetTextSize() const
Return the text size.
 
virtual Short_t GetTextAlign() const
Return the text alignment.
 
virtual Font_t GetTextFont() const
Return the text font.
 
virtual Color_t GetTextColor() const
Return the text color.
 
virtual Float_t GetTextAngle() const
Return the text angle.
 
virtual void SetY2(Double_t y2)
 
virtual void SetX1(Double_t x1)
 
virtual void Draw(Option_t *option="")
Draw this box with its current attributes.
 
virtual void SetX2(Double_t x2)
 
virtual void SetY1(Double_t y1)
 
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.
 
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.
 
virtual void Draw(Option_t *option="")
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)
Add object to the hash table.
 
TObject * FindObject(const char *name) const
Find object using its name.
 
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.
 
virtual UInt_t * GetArgbArray()
 
virtual UInt_t GetWidth() const
 
static TImage * Create()
Create an image.
 
TImage & operator=(const TImage &img)
 
virtual void Merge(const TImage *, const char *="alphablend", Int_t=0, Int_t=0)
 
virtual void BeginPaint(Bool_t=kTRUE)
 
virtual UInt_t GetHeight() const
 
virtual void SetName(const char *name)
Set the name of the TNamed.
 
virtual const char * GetTitle() const
Returns title of object.
 
virtual const char * GetName() const
Returns name of object.
 
Mother of all ROOT objects.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual void Delete(Option_t *option="")
Delete this object.
 
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.
 
Long_t ExecPlugin(int nargs, const T &... params)
 
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.
 
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 * HomeDirectory(const char *userName=0)
Return the user's home directory.
 
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 char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
 
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
 
TTF helper class containing glyphs description.
 
FT_Glyph fImage
glyph image
 
static Bool_t IsInitialized()
 
static void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
 
static void Init()
Initialise the TrueType fonts interface.
 
static void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
 
static void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
 
static void SetTextFont(Font_t fontnumber)
Set specified font.
 
static TTGlyph * GetGlyphs()
 
static Int_t GetNumGlyphs()
 
static const FT_BBox & GetBox()
 
static void SetTextSize(Float_t textsize)
Set current text size.
 
static FT_Matrix * GetRotMatrix()
 
Base class for several text objects.
 
const void * GetWcsTitle(void) const
Returns the text as UNICODE.
 
Int_t GetNoElements() const
 
Element * GetMatrixArray()
 
TVirtualPS is an abstract interface to Postscript, PDF, SVG.
 
virtual void CellArrayEnd()=0
 
virtual void CellArrayFill(Int_t r, Int_t g, Int_t b)=0
 
virtual void CellArrayBegin(Int_t W, Int_t H, Double_t x1, Double_t x2, Double_t y1, Double_t y2)=0
 
virtual void * GetStream() const
 
virtual void Open(const char *filename, Int_t type=-111)=0
 
To make it possible to use GL for 2D graphic in a TPad/TCanvas.
 
TVirtualPad is an abstract base class for the Pad and Canvas classes.
 
virtual void Paint(Option_t *option="")=0
This method must be overridden if a class wants to paint itself.
 
virtual Int_t GetPixmapID() const =0
 
virtual Int_t VtoPixel(Double_t v) const =0
 
virtual const char * GetName() const =0
Returns name of object.
 
virtual Int_t UtoPixel(Double_t u) const =0
 
virtual Int_t GetCanvasID() const =0
 
virtual TCanvas * GetCanvas() const =0
 
virtual void SetBorderMode(Short_t bordermode)
 
RooArgSet S(const RooAbsArg &v1)
 
static constexpr double s
 
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)
 
Double_t ATan2(Double_t y, Double_t x)
 
Short_t Min(Short_t a, Short_t b)
 
void flip(struct mesh *m, struct behavior *b, struct otri *flipedge)