120using namespace std::string_literals;
 
  188         return precision > 0 ? 
entry.fIndx*10 + precision : 
entry.fIndx;
 
  194   auto pos = fullname.
Last(
'.');
 
  196      fmt = fullname(pos+1, fullname.
Length() - pos);
 
  198      if ((
fmt != 
"ttf") && (
fmt != 
"woff2")) {
 
  199         ::Error(
"TWebCanvas::AddFont", 
"Unsupported font file extension %s", 
fmt.Data());
 
  207      ::Error(
"TWebCanvas::AddFont", 
"Not possible to read font file %s", fullname.
Data());
 
  211   std::ifstream 
is(fullname.
Data(), std::ios::in | std::ios::binary);
 
  214      is.seekg(0, std::ios::end);
 
  215      res.resize(
is.tellg());
 
  216      is.seekg(0, std::ios::beg);
 
  217      is.read((
char *)res.data(), res.length());
 
  223      ::Error(
"TWebCanvas::AddFont", 
"Fail to read font file %s", fullname.
Data());
 
 
  262   static const struct {
 
  263      const char *
name{
nullptr};
 
  273                            {
"TGraphPolargram", 
true},
 
  278                            {
"TBox", 
false, 
true},  
 
  280                            {
"TLine", 
false, 
true}, 
 
  281                            {
"TEllipse", 
true, 
true},  
 
  288                            {
"TPolyLine", 
true, 
true}, 
 
 
  346      if (
name[0] == 
'+') {
 
 
  369   TView *view = 
nullptr;
 
  376      pad->GetViewer3D(
"pad");
 
  398      pad->SetView(
nullptr);
 
 
  461   for (
Int_t i = 0; i < 
pal.GetSize(); i++)
 
 
  494   if (
paddata.IsSetObjectIds()) {
 
  523   TList *primitives = 
pad->GetListOfPrimitives();
 
  528   TIter iter(primitives);
 
  537         return opt.Contains(arg + 
"Z") || opt.Contains(arg + 
"HZ");
 
  570            frame = 
static_cast<TFrame *
>(obj);
 
  603         pad->SetRightMargin(0.12);
 
  605      frame = 
pad->GetFrame();
 
  615         title = 
new TPaveText(0, 0, 0, 0, 
"blNDC");
 
  626         primitives->
Add(title);
 
  638      auto p1 = opt.Index(
"["), 
p2 = opt.Index(
"]");
 
  670      f1->
Save(0, 0, 0, 0, 0, 0);
 
  694          stats->SetName(
"stats");
 
  697          stats->SetTextAlign(12);
 
  740   while ((obj = iter()) != 
nullptr) {
 
  748         TH1K *hist = 
static_cast<TH1K *
>(obj);
 
  755         hist->TAttLine::Copy(*
h1);
 
  756         hist->TAttFill::Copy(*
h1);
 
  757         hist->TAttMarker::Copy(*
h1);
 
  770         TH1 *hist = 
static_cast<TH1 *
>(obj);
 
  780            else if (
fobj->InheritsFrom(
"TPaletteAxis"))
 
  793                stats->SetParent(hist);
 
  799            std::stringstream exec;
 
  800            exec << 
"new TPaletteAxis(0,0,0,0, (TH1*)" << std::hex << std::showbase << (size_t)hist << 
");";
 
  844            if (title) 
hopt.Append(
";;use_pad_title");
 
  888            if (
fobj->InheritsFrom(
"TPaletteAxis"))
 
  897            std::stringstream exec;
 
  898            exec << 
"new TPaletteAxis(0,0,0,0,0,0);";
 
  909         auto f1 = 
static_cast<TF1 *
> (obj);
 
  915            f1opt.Append(
";force_saved");
 
  917            f1opt.Append(
";prefer_saved");
 
  922            f1opt.Append(
";webcanv_hist");
 
  935         auto func = 
gaxis->GetFunction();
 
  942         if (frame && (obj == frame)) {
 
 
 1015      if (conn.match(connid)) {
 
 1016         conn.fCtrl[key] = 
value;
 
 
 1033      if (conn.match(connid))
 
 1034         conn.fSend.emplace(
msg);
 
 
 1052      bool isConnData = !conn.fCtrl.empty() || !conn.fSend.empty() ||
 
 1053                        ((conn.fCheckedVersion < 
fCanvVersion) && (conn.fSendVersion == conn.fDrawVersion));
 
 1055      while ((conn.is_batch() && !connid) || (conn.match(connid) && 
fWindow && 
fWindow->CanSend(conn.fConnId, 
true))) {
 
 1060         if (!conn.fCtrl.empty()) {
 
 1063         } 
else if (!conn.fSend.empty()) {
 
 1064            std::swap(buf, conn.fSend.front());
 
 1066         } 
else if ((conn.fCheckedVersion < 
fCanvVersion) && (conn.fSendVersion == conn.fDrawVersion)) {
 
 1075            if (!conn.fSendVersion)
 
 1078            holder.SetHighlightConnect(
Canvas()->HasConnection(
"Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)"));
 
 1081               if (conn.is_batch()) {
 
 1089               if (conn.fLastSendHash && (conn.fLastSendHash == 
hash) && conn.fSendVersion) {
 
 1093                  buf.append(
json.Data());
 
 1094                  conn.fLastSendHash = 
hash;
 
 1109         if (!buf.empty() && !conn.is_batch()) {
 
 1110            fWindow->Send(conn.fConnId, buf);
 
 
 1143      fWindow->SetDefaultPage(
"file:rootui5sys/canv/canvas6.html");
 
 1147         [
this](
unsigned connid) {
 
 1152         [
this](
unsigned connid, 
const std::string &arg) {
 
 1157         [
this](
unsigned connid) {
 
 1160               if (
c.fConnId == connid) {
 
 1170   if ((
w > 0) && (
w < 50000) && (
h > 0) && (
h < 30000))
 
 
 1186   if (
gROOT->IsWebDisplayBatch())
 
 
 1210   if (!
pad || !obj) 
return;
 
 
 1283   if ((cw > 0) && (ch > 0)) {
 
 
 1329   auto arr = TBufferJSON::FromJSON<std::vector<TWebPadOptions>>(
msg);
 
 1339   for (
unsigned n = 0; 
n < 
arr->size(); ++
n) {
 
 1340      auto &
r = 
arr->at(
n);
 
 1351         if (
r.w.size() == 4) {
 
 1364      if ((
pad->GetTickx() != 
r.tickx) || (
pad->GetTicky() != 
r.ticky))
 
 1365         pad->SetTicks(
r.tickx, 
r.ticky);
 
 1366      if ((
pad->GetGridx() != (
r.gridx > 0)) || (
pad->GetGridy() != (
r.gridy > 0)))
 
 1367         pad->SetGrid(
r.gridx, 
r.gridy);
 
 1368      pad->fLogx = 
r.logx;
 
 1369      pad->fLogy = 
r.logy;
 
 1370      pad->fLogz = 
r.logz;
 
 1372      pad->SetLeftMargin(
r.mleft);
 
 1373      pad->SetRightMargin(
r.mright);
 
 1374      pad->SetTopMargin(
r.mtop);
 
 1375      pad->SetBottomMargin(
r.mbottom);
 
 1387         pad->fUxmin = 
r.ux1;
 
 1388         pad->fUxmax = 
r.ux2;
 
 1389         pad->fUymin = 
r.uy1;
 
 1390         pad->fUymax = 
r.uy2;
 
 1395      pad->fAbsXlowNDC = 
r.xlow;
 
 1396      pad->fAbsYlowNDC = 
r.ylow;
 
 1397      pad->fAbsWNDC = 
r.xup - 
r.xlow;
 
 1398      pad->fAbsHNDC = 
r.yup - 
r.ylow;
 
 1401         pad->fXlowNDC = 
r.xlow;
 
 1402         pad->fYlowNDC = 
r.ylow;
 
 1403         pad->fXUpNDC = 
r.xup;
 
 1404         pad->fYUpNDC = 
r.yup;
 
 1405         pad->fWNDC = 
r.xup - 
r.xlow;
 
 1406         pad->fHNDC = 
r.yup - 
r.ylow;
 
 1409         if (
mother->GetAbsWNDC() > 0. && 
mother->GetAbsHNDC() > 0.) {
 
 1414            pad->fWNDC = (
r.xup - 
r.xlow) / 
mother->GetAbsWNDC();
 
 1415            pad->fHNDC = (
r.yup - 
r.ylow) / 
mother->GetAbsHNDC();
 
 1436         pad->fPixeltoXk = 
r.px1;
 
 1446         pad->fPixeltoYk = 
r.py1;
 
 1480         } 
else if (
r.zy1 == 
r.zy2) {
 
 1495            if (
r.zz1 == 
r.zz2) {
 
 1521                  ::Error(
"SetMember", 
"Cannot find %s data member in %s", 
name, 
hist_holder->ClassName());
 
 1525            SetMember(
"fMinimum", 
hmin);
 
 1526            SetMember(
"fMaximum", 
hmax);
 
 1530         while (
auto fobj = next())
 
 1537      std::map<std::string, int> 
idmap;
 
 1539      for (
auto &item : 
r.primitives) {
 
 1540         auto iter = 
idmap.find(item.snapid);
 
 1543            idmap[item.snapid] = 1;
 
 1545            idcnt = ++iter->second;
 
 
 1572   auto execs = 
pad ? 
pad->GetListOfExecs() : 
nullptr;
 
 1586   while (
auto obj = next()) {
 
 1587      auto exec = 
dynamic_cast<TExec *
>(obj);
 
 
 1604   std::string buf = lines;
 
 1608   while (obj && !buf.empty()) {
 
 1609      std::string sub = buf;
 
 1610      auto pos = buf.find(
";;");
 
 1611      if (pos == std::string::npos) {
 
 1615         sub = buf.substr(0,pos);
 
 1616         buf = buf.substr(pos+2);
 
 1618      if (sub.empty()) 
continue;
 
 1620      std::stringstream exec;
 
 1621      exec << 
"((" << obj->
ClassName() << 
" *) " << std::hex << std::showbase << (size_t)obj << 
")->" << sub << 
";";
 
 1623         Info(
"ProcessLinesForObject", 
"Obj %s Execute %s", obj->
GetName(), exec.str().c_str());
 
 1624      gROOT->ProcessLine(exec.str().c_str());
 
 
 1657   const char *
cdata = arg.c_str();
 
 1659   if (arg == 
"KEEPALIVE") {
 
 1662   } 
else if (arg == 
"QUIT") {
 
 1667   } 
else if (arg.compare(0, 7, 
"READY6:") == 0) {
 
 1684   } 
else if (arg == 
"RELOAD") {
 
 1689   } 
else if (arg.compare(0, 5, 
"SAVE:") == 0) {
 
 1699         std::ofstream ofs(
filename.Data());
 
 1710         Info(
"ProcessData", 
"File %s has been created", 
filename.Data());
 
 1713   } 
else if (arg.compare(0, 8, 
"PRODUCE:") == 0) {
 
 1718   } 
else if (arg.compare(0, 9, 
"OPTIONS6:") == 0) {
 
 1724   } 
else if (arg.compare(0, 11, 
"STATUSBITS:") == 0) {
 
 1730   } 
else if (arg.compare(0, 10, 
"HIGHLIGHT:") == 0) {
 
 1732         auto arr = TBufferJSON::FromJSON<std::vector<std::string>>(arg.substr(10));
 
 1733         if (!
arr || (
arr->size() != 4)) {
 
 1734            Error(
"ProcessData", 
"Wrong arguments count %d in highlight message", (
int)(
arr ? 
arr->size() : -1));
 
 1738            int argx = std::stoi(
arr->at(2));
 
 1739            int argy = std::stoi(
arr->at(3));
 
 1750   } 
else if (arg == 
"FITPANEL"s) {
 
 1752      TH1 *hist = 
nullptr;
 
 1754      while (
auto obj = iter()) {
 
 1755         hist = 
dynamic_cast<TH1 *
>(obj);
 
 1759      TString cmd = 
TString::Format(
"auto panel = std::make_shared<ROOT::Experimental::RFitPanel>(\"FitPanel\");" 
 1760                                    "panel->AssignCanvas(\"%s\");" 
 1761                                    "panel->AssignHistogram((TH1 *)0x%zx);" 
 1763                                    "panel->ClearOnClose(panel);", 
Canvas()->GetName(), (
size_t) hist);
 
 1765      gROOT->ProcessLine(cmd.Data());
 
 1767   } 
else if (arg == 
"START_BROWSER"s) {
 
 1769      gROOT->ProcessLine(
"new TBrowser;");
 
 1776   } 
else if (arg.compare(0, 6, 
"EVENT:") == 0) {
 
 1777      auto arr = TBufferJSON::FromJSON<std::vector<std::string>>(arg.substr(6));
 
 1778      if (!
arr || (
arr->size() != 5)) {
 
 1779         Error(
"ProcessData", 
"Wrong arguments count %d in event message", (
int)(
arr ? 
arr->size() : -1));
 
 1782         std::string kind = 
arr->at(1);
 
 1785         int argx = std::stoi(
arr->at(2));
 
 1786         int argy = std::stoi(
arr->at(3));
 
 1800   } 
else if (arg.compare(0, 8, 
"GETMENU:") == 0) {
 
 1807      items.PopulateObjectMenu(obj, obj->
IsA());
 
 1808      std::string buf = 
"MENU:";
 
 1813   } 
else if (arg.compare(0, 8, 
"PRIMIT6:") == 0) {
 
 1817         auto opt = TBufferJSON::FromJSON<TWebObjectOptions>(arg.c_str() + 8);
 
 1828   } 
else if (arg.compare(0, 11, 
"PADCLICKED:") == 0) {
 
 1830      auto click = TBufferJSON::FromJSON<TWebPadClick>(arg.c_str() + 11);
 
 1838            const char *
mthd = 
btn->GetMethod();
 
 1853         if (!
click->objid.empty()) {
 
 1874   } 
else if (arg.compare(0, 8, 
"OBJEXEC:") == 0) {
 
 1876     auto buf = arg.substr(8);
 
 1877     auto pos = buf.find(
":");
 
 1880        auto sid = buf.substr(0, pos);
 
 1881        buf.erase(0, pos + 1);
 
 1888        if (obj && !buf.empty()) {
 
 1901   } 
else if (arg.compare(0, 12, 
"EXECANDSEND:") == 0) {
 
 1905      std::string buf = arg.substr(12);
 
 1909      auto pos = buf.find(
":");
 
 1913         reply = buf.substr(0, pos);
 
 1914         buf.erase(0, pos + 1);
 
 1915         pos = buf.find(
":");
 
 1917            auto sid = buf.substr(0, pos);
 
 1918            buf.erase(0, pos + 1);
 
 1923      if (obj && !buf.empty() && !
reply.empty()) {
 
 1924         std::stringstream exec;
 
 1925         exec << 
"((" << obj->
ClassName() << 
" *) " << std::hex << std::showbase << (size_t)obj
 
 1926              << 
")->" << buf << 
";";
 
 1928            Info(
"ProcessData", 
"Obj %s Exec %s", obj->
GetName(), exec.str().c_str());
 
 1930         auto res = 
gROOT->ProcessLine(exec.str().c_str());
 
 1933            std::string send = 
reply;
 
 1937            if (
reply[0] == 
'D')
 
 1942   } 
else if (arg.compare(0, 6, 
"CLEAR:") == 0) {
 
 1943      std::string snapid = arg.substr(6);
 
 1952         Error(
"ProcessData", 
"Not found pad with id %s to clear\n", snapid.c_str());
 
 1954   } 
else if (arg.compare(0, 7, 
"DIVIDE:") == 0) {
 
 1955      auto arr = TBufferJSON::FromJSON<std::vector<std::string>>(arg.substr(7));
 
 1956      if (
arr && 
arr->size() == 2) {
 
 1958         int nn = 0, 
n1 = 0, 
n2 = 0;
 
 1962         if (
p == std::string::npos)
 
 1965         if (
p != std::string::npos) {
 
 1972         if (
pad && ((nn > 1) || (
n1*
n2 > 1))) {
 
 1976               pad->DivideSquare(nn);
 
 1984   } 
else if (arg.compare(0, 8, 
"DRAWOPT:") == 0) {
 
 1985      auto arr = TBufferJSON::FromJSON<std::vector<std::string>>(arg.substr(8));
 
 1986      if (
arr && 
arr->size() == 2) {
 
 1992   } 
else if (arg.compare(0, 8, 
"RESIZED:") == 0) {
 
 1993      auto arr = TBufferJSON::FromJSON<std::vector<int>>(arg.substr(8));
 
 1994      if (
arr && 
arr->size() == 7) {
 
 2006   } 
else if (arg.compare(0, 7, 
"POPOBJ:") == 0) {
 
 2007      auto arr = TBufferJSON::FromJSON<std::vector<std::string>>(arg.substr(7));
 
 2008      if (
arr && 
arr->size() == 2) {
 
 2011         if (
pad && obj && (obj != 
pad->GetListOfPrimitives()->Last())) {
 
 2012            TIter next(
pad->GetListOfPrimitives());
 
 2013            while (
auto o = next())
 
 2016                  pad->GetListOfPrimitives()->Remove(obj);
 
 2017                  pad->GetListOfPrimitives()->AddLast(obj, opt.
Data());
 
 2023   } 
else if (arg == 
"INTERRUPT"s) {
 
 2024      gROOT->SetInterrupt();
 
 
 2043   entry._detected = 
true;
 
 2044   if (
pad->IsModified()) {
 
 2046      entry._modified = 
true;
 
 2049   TIter iter(
pad->GetListOfPrimitives());
 
 2050   while (
auto obj = iter()) {
 
 
 2065      entry.second._detected = 
false;
 
 2075      if (iter->second._modified)
 
 2077      if (!iter->second._detected)
 
 2087         if (
entry.second._modified)
 
 
 2161      Info(
"WaitWhenCanvasPainted", 
"version %ld", (
long)
ver);
 
 2165      if (!
fWindow->HasConnection(0, 
false)) {
 
 2167            Info(
"WaitWhenCanvasPainted", 
"no connections - abort");
 
 2173            Info(
"WaitWhenCanvasPainted", 
"ver %ld got painted", (
long)
ver);
 
 2183      Info(
"WaitWhenCanvasPainted", 
"timeout");
 
 
 2202      auto imp = std::make_unique<TWebCanvas>(
pad->GetCanvas(), 
pad->GetName(), 0, 0, 
pad->GetWw(), 
pad->GetWh(), 
kTRUE);
 
 
 2226      auto imp = std::make_unique<TWebCanvas>(
c, 
c->GetName(), 0, 0, 
c->GetWw(), 
c->GetWh(), 
kTRUE);
 
 
 2256      auto imp = std::make_unique<TWebCanvas>(
c, 
c->GetName(), 0, 0, 
c->GetWw(), 
c->GetWh(), 
kTRUE);
 
 
 2306   std::vector<std::string> 
jsons;
 
 2312   for (
unsigned n = 0; 
n < pads.size(); ++
n) {
 
 2326            w = (
Int_t) (
pad->GetAbsWNDC() * 
pad->GetCanvas()->GetWw());
 
 2327            h = (
Int_t) (
pad->GetAbsHNDC() * 
pad->GetCanvas()->GetWh());
 
 
 2359   if (item.
fcust.compare(
"exec") == 0) {
 
 2360      auto pos = item.
opt.find(
"(");
 
 2361      if (obj && (pos != std::string::npos) && obj->
IsA()->GetMethodAllAny(item.
opt.substr(0,pos).c_str())) {
 
 2362         std::stringstream exec;
 
 2363         exec << 
"((" << obj->
ClassName() << 
" *) " << std::hex << std::showbase
 
 2364                      << (size_t)obj << 
")->" << item.
opt << 
";";
 
 2366            Info(
"ProcessObjectOptions", 
"Obj %s Execute %s", obj->
GetName(), exec.str().c_str());
 
 2367         gROOT->ProcessLine(exec.str().c_str());
 
 2369         Error(
"ProcessObjectOptions", 
"Fail to execute %s for object %p %s", item.
opt.c_str(), obj, obj ? obj->
ClassName() : 
"---");
 
 2378      auto pos = item.
opt.find(
";;use_"); 
 
 2379      if (pos != std::string::npos) item.
opt.resize(pos);
 
 2382         Info(
"ProcessObjectOptions", 
"Set draw option %s for object %s %s", item.
opt.c_str(),
 
 2385      lnk->SetOption(item.
opt.c_str());
 
 2390   if (item.
fcust.compare(0,10,
"auto_exec:") == 0) {
 
 2392   } 
else if (item.
fcust.compare(
"frame") == 0) {
 
 2395         if (item.
fopt.size() >= 4) {
 
 2403   } 
else if (item.
fcust.compare(0,4,
"pave") == 0) {
 
 2410            pave->ConvertNDCtoPad();
 
 2418            pave->ConvertNDCtoPad();
 
 2432   } 
else if (item.
fcust.compare(0,9,
"func_fail") == 0) {
 
 
 2450   if (sid.empty() || (sid == 
"0"s))
 
 2457   long unsigned id = 0;
 
 2460      auto separ = sid.find(
"#");
 
 2462      if (
separ == std::string::npos) {
 
 2463         id = std::stoul(sid);
 
 2466         id = std::stoul(sid.substr(0, 
separ));
 
 2472   for (
auto lnk = 
pad->GetListOfPrimitives()->FirstLink(); 
lnk != 
nullptr; 
lnk = 
lnk->Next()) {
 
 2504         ::Error(
"getHistogram", 
"Cannot access fHistogram data member in %s", 
container->ClassName());
 
 2514         auto separ = kind.find(
"#");
 
 2515         if (
separ == std::string::npos) {
 
 2530         if (kind.compare(
"hist") == 0) {
 
 2534               obj = getHistogram(
gr);
 
 2536               obj = getHistogram(mg);
 
 2537            else if (
hs && (
hs->GetNhists() > 0))
 
 2538               obj = getHistogram(
hs);
 
 2542               obj = getHistogram(
f1);
 
 2544               obj = getHistogram(
gr2d);
 
 2547         } 
else if (kind.compare(
"x") == 0) {
 
 2549         } 
else if (kind.compare(
"y") == 0) {
 
 2551         } 
else if (kind.compare(
"z") == 0) {
 
 2553         } 
else if ((kind.compare(0,5,
"func_") == 0) || (kind.compare(0,5,
"indx_") == 0)) {
 
 2555            TList *col = 
nullptr;
 
 2563               col = 
scatter->GetGraph()->GetListOfFunctions();
 
 2566            else if (kind.compare(0,5,
"func_") == 0)
 
 2570         } 
else if (kind.compare(0,7,
"graphs_") == 0) {
 
 2572            obj = graphs ? graphs->
At(std::stoi(kind.substr(7))) : 
nullptr;
 
 2573         } 
else if (kind.compare(0,6,
"hists_") == 0) {
 
 2575            obj = 
hists ? 
hists->At(std::stoi(kind.substr(6))) : 
nullptr;
 
 2576         } 
else if (kind.compare(0,6,
"stack_") == 0) {
 
 2577            auto stack = 
hs ? 
hs->GetStack() : 
nullptr;
 
 2578            obj = stack ? stack->At(std::stoi(kind.substr(6))) : 
nullptr;
 
 2579         } 
else if (kind.compare(0,7,
"member_") == 0) {
 
 2580            auto member = kind.substr(7);
 
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
 
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
 
winID h TVirtualViewer3D TVirtualGLPainter p
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t hmin
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t hmax
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void funcs
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
 
R__EXTERN TStyle * gStyle
 
R__EXTERN TSystem * gSystem
 
R__EXTERN TVirtualPS * gVirtualPS
 
static std::vector< WebFont_t > gWebFonts
 
static const std::string sid_pad_histogram
 
const_iterator end() const
 
Holds different arguments for starting browser with RWebDisplayHandle::Display() method.
 
EBrowserKind GetBrowserKind() const
returns configured browser kind, see EBrowserKind for supported values
 
RWebDisplayArgs & SetWidgetKind(const std::string &kind)
set widget kind
 
RWebDisplayArgs & SetSize(int w, int h)
set preferable web window width and height
 
RWebDisplayArgs & SetPos(int x=-1, int y=-1)
set preferable web window x and y position, negative is default
 
@ kCEF
Chromium Embedded Framework - local display with CEF libs.
 
@ kQt5
Qt5 QWebEngine libraries - Chromium code packed in qt5.
 
@ kQt6
Qt6 QWebEngine libraries - Chromium code packed in qt6.
 
static bool ProduceImages(const std::string &fname, const std::vector< std::string > &jsons, const std::vector< int > &widths, const std::vector< int > &heights, const char *batch_file=nullptr)
Produce image file(s) using JSON data as source Invokes JSROOT drawing functionality in headless brow...
 
static bool ProduceImage(const std::string &fname, const std::string &json, int width=800, int height=600, const char *batch_file=nullptr)
Produce image file using JSON data as source Invokes JSROOT drawing functionality in headless browser...
 
static std::shared_ptr< RWebWindow > Create()
Create new RWebWindow Using default RWebWindowsManager.
 
static bool EmbedFileDialog(const std::shared_ptr< RWebWindow > &window, unsigned connid, const std::string &args)
Create dialog instance to use as embedded dialog inside provided widget Loads libROOTBrowserv7 and tr...
 
static bool IsFileDialogMessage(const std::string &msg)
Check if this could be the message send by client to start new file dialog If returns true,...
 
Array of integers (32 bits per element).
 
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
 
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
 
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
 
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
 
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
 
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates, that is,...
 
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis using bin numbers.
 
static TString Decode(const char *data)
Decode a base64 string date into a generic TString.
 
static TString Encode(const char *data)
Transform data into a null terminated base64 string.
 
virtual void SetY2(Double_t y2)
 
virtual void SetX1(Double_t x1)
 
virtual void SetX2(Double_t x2)
 
virtual void SetY1(Double_t y1)
 
static Int_t ExportToFile(const char *filename, const TObject *obj, const char *option=nullptr)
Convert object into JSON and store in text file Returns size of the produce file Used in TObject::Sav...
 
static TString ToJSON(const T *obj, Int_t compact=0, const char *member_name=nullptr)
 
@ kNoSpaces
no new lines plus remove all spaces around "," and ":" symbols
 
@ kMapAsObject
store std::map, std::unordered_map as JSON object
 
@ kSameSuppression
zero suppression plus compress many similar values together
 
ABC describing GUI independent main window (with menubar, scrollbars and a drawing area).
 
UInt_t fCw
Width of the canvas along X (pixels)
 
UInt_t GetWindowHeight() const
 
void SetClickSelectedPad(TPad *pad)
 
Int_t fWindowTopX
Top X position of window (in pixels)
 
Int_t fEventX
! Last X mouse position in canvas
 
TVirtualPadPainter * GetCanvasPainter()
Access and (probably) creation of pad painter.
 
UInt_t fWindowWidth
Width of window (including borders, etc.)
 
Int_t fEventY
! Last Y mouse position in canvas
 
UInt_t fWindowHeight
Height of window (including menubar, borders, etc.)
 
TObject * fSelected
! Currently selected object
 
UInt_t fCh
Height of the canvas along Y (pixels)
 
UInt_t GetWindowWidth() const
 
Int_t fWindowTopY
Top Y position of window (in pixels)
 
void SetClickSelected(TObject *obj)
 
virtual void Highlighted(TVirtualPad *pad, TObject *obj, Int_t x, Int_t y)
Emit Highlighted() signal.
 
Int_t fEvent
! Type of current or last handled event
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
The color creation and management class.
 
static const TArrayI & GetPalette()
Static function returning the current active palette.
 
static Bool_t DefinedColors(Int_t set_always_on=0)
Static method returning kTRUE if some new colors have been defined after initialisation or since the ...
 
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
 
TExec is a utility class that can be used to execute a C++ command when some event happens in a pad.
 
virtual void Exec(const char *command="")
Execute the command referenced by this object.
 
virtual TH1 * GetHistogram() const
Return a pointer to the histogram used to visualise the function Note that this histogram is managed ...
 
virtual Bool_t IsValid() const
Return kTRUE if the function is valid.
 
virtual void Save(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax)
Save values of function in array fSave.
 
TClass * IsA() const override
 
Graphics object made of three arrays X, Y and Z with the same number of points each.
 
A TGraph is an object made of two arrays X and Y with npoints each.
 
@ kNoStats
Don't draw stats box.
 
TList * GetListOfFunctions() const
 
virtual TH1F * GetHistogram() const
Returns a pointer to the histogram used to draw the axis Takes into account the two following cases.
 
1-D histogram with a double per channel (see TH1 documentation)
 
TH1K class supports the nearest K Neighbours method, widely used in cluster analysis.
 
Double_t GetBinContent(Int_t bin) const override
Return content of global bin number bin.
 
TH1 is the base class of all histogram classes in ROOT.
 
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
 
virtual Int_t GetDimension() const
 
@ kNoTitle
Don't draw the histogram title.
 
@ kIsZoomed
Bit set when zooming on Y axis.
 
virtual void SetMaximum(Double_t maximum=-1111)
 
virtual void SetMinimum(Double_t minimum=-1111)
 
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
 
virtual Double_t GetEntries() const
Return the current number of entries.
 
TList * GetListOfFunctions() const
 
void SetName(const char *name) override
Change the name of this histogram.
 
virtual Int_t BufferEmpty(Int_t action=0)
Fill histogram with all entries in the buffer.
 
The Histogram stack class.
 
Option_t * GetOption() const
 
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
 
void Add(TObject *obj) override
 
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
 
void AddFirst(TObject *obj) override
Add object at the beginning of the list.
 
A TMultiGraph is a collection of TGraph (or derived) objects.
 
TList * GetListOfGraphs() const
 
TList * GetListOfFunctions()
Return pointer to list of functions.
 
const char * GetName() const override
Returns name of object.
 
const char * GetTitle() const override
Returns title of object.
 
Wrapper around a TObject so it can be stored in a TList.
 
Mother of all ROOT objects.
 
virtual const char * GetName() const
Returns name of object.
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
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 const char * GetTitle() const
Returns title of object.
 
virtual TClass * IsA() const
 
virtual void Paint(Option_t *option="")
This method must be overridden if a class wants to paint itself.
 
The most important graphics class in the ROOT system.
 
void Modified(Bool_t flag=true) override
Mark pad modified Will be repainted when TCanvas::Update() will be called next time.
 
void Print(const char *filename="") const override
This method is equivalent to SaveAs("filename"). See TPad::SaveAs for details.
 
The histogram statistics painter class.
 
A Pave (see TPave) with text, lines or/and boxes inside.
 
virtual TText * AddText(Double_t x1, Double_t y1, const char *label)
Add a new Text line to this pavetext at given coordinates.
 
virtual TText * GetLine(Int_t number) const
Get Pointer to line number in this pavetext.
 
A TBox with a bordersize and a shadow option.
 
virtual void SetName(const char *name="")
 
virtual void SetBorderSize(Int_t bordersize=4)
Sets the border size of the TPave box and shadow.
 
A TScatter is able to draw four variables scatter plot on a single plot.
 
const char * Data() const
 
Ssiz_t Last(char c) const
Find last occurrence of a character c.
 
void ToUpper()
Change string to upper case.
 
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
Color_t GetStatTextColor() const
 
Int_t GetOptTitle() const
 
Float_t GetStatFontSize() const
 
Float_t GetPadRightMargin() const
 
Style_t GetTitleFont(Option_t *axis="X") const
Return title font.
 
Color_t GetTitleFillColor() const
 
Style_t GetTitleStyle() const
 
Color_t GetStatColor() const
 
Width_t GetTitleBorderSize() const
 
Width_t GetStatBorderSize() const
 
Color_t GetTitleTextColor() const
 
Style_t GetStatStyle() const
 
const char * GetFitFormat() const
 
const char * GetStatFormat() const
 
Style_t GetStatFont() const
 
Float_t GetTitleFontSize() const
 
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
 
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
 
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
 
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
 
static Long_t SelfId()
Static method returning the id for the current thread.
 
Handles synchronous and a-synchronous timer events.
 
virtual void TurnOn()
Add the timer to the system timer list.
 
void SetTime(Long_t milliSec)
 
static TView * CreateView(Int_t system=1, const Double_t *rmin=nullptr, const Double_t *rmax=nullptr)
Create a concrete default 3-d view via the plug-in manager.
 
virtual void SetAutoRange(Bool_t autorange=kTRUE)=0
 
TVirtualPS is an abstract interface to Postscript, PDF, SVG.
 
To make it possible to use GL for 2D graphic in a TPad/TCanvas.
 
small helper class to store/restore gPad context in TPad methods
 
TVirtualPad is an abstract base class for the Pad and Canvas classes.
 
Semi-Abstract base class defining a generic interface to the underlying, low level,...
 
void SetSlow(Bool_t slow=kTRUE)
 
TWebCanvasTimer(TWebCanvas &canv)
 
void Timeout() override
used to send control messages to clients
 
Basic TCanvasImp ABI implementation for Web-based Graphics Provides painting of main ROOT classes in ...
 
TVirtualPadPainter * CreatePadPainter() override
Creates web-based pad painter.
 
void ForceUpdate() override
Increment canvas version and force sending data to client - do not wait for reply.
 
void AddCustomClass(const std::string &clname, bool with_derived=false)
Assign custom class.
 
static TString CreatePadJSON(TPad *pad, Int_t json_compression=0, Bool_t batchmode=kFALSE)
Create JSON painting output for given pad Produce JSON can be used for offline drawing with JSROOT.
 
void SetCanvasSize(UInt_t w, UInt_t h) override
Set canvas size of web canvas.
 
UInt_t fColorsHash
! last hash of colors/palette
 
Int_t fTF1UseSave
! use save buffer for TF1/TF2, 0:off, 1:prefer, 2:force
 
void ShowCmd(const std::string &arg, Bool_t show)
Function used to send command to browser to toggle menu, toolbar, editors, ...
 
Long64_t fColorsVersion
! current colors/palette version, checked every time when new snapshot created
 
std::string fCustomScripts
! custom JavaScript code or URL on JavaScript files to load before start drawing
 
virtual Bool_t IsReadOnly() const
 
std::shared_ptr< ROOT::RWebWindow > fWindow
 
virtual Bool_t IsJSSupportedClass(TObject *obj, Bool_t many_primitives=kFALSE)
Returns kTRUE when object is fully supported on JSROOT side In ROOT7 Paint function will just return ...
 
void AddCtrlMsg(unsigned connid, const std::string &key, const std::string &value)
Add control message for specified connection Same control message can be overwritten many time before...
 
void SetCustomScripts(const std::string &src)
Configures custom script for canvas.
 
ObjectSelectSignal_t fObjSelectSignal
! signal emitted when new object selected in the pad
 
PadClickedSignal_t fPadClickedSignal
! signal emitted when simple mouse click performed on the pad
 
void SetLongerPolling(Bool_t on)
 
UInt_t fStyleHash
! last hash of gStyle
 
virtual Bool_t CanCreateObject(const std::string &)
 
void ShowWebWindow(const ROOT::RWebDisplayArgs &user_args="")
Show canvas in specified place.
 
Int_t fPrimitivesMerge
! number of PS primitives, which will be merged together
 
void Show() override
Show canvas in browser window.
 
Bool_t WaitWhenCanvasPainted(Long64_t ver)
Wait when specified version of canvas was painted and confirmed by browser.
 
std::vector< std::string > fCustomClasses
! list of custom classes, which can be delivered as is to client
 
Bool_t IsAsyncMode() const
 
UInt_t CalculateColorsHash()
Calculate hash function for all colors and palette.
 
Bool_t HasStatusBar() const override
Returns kTRUE if web canvas has status bar.
 
void Close() override
Close web canvas - not implemented.
 
static bool ProduceImages(std::vector< TPad * > pads, const char *filename, Int_t width=0, Int_t height=0)
Create images for several pads using batch (headless) capability of Chrome or Firefox browsers Suppor...
 
Bool_t HasMenuBar() const override
Returns kTRUE if web canvas has menu bar.
 
Int_t InitWindow() override
Initialize window for the web canvas At this place canvas is not yet register to the list of canvases...
 
void CheckPadModified(TPad *pad)
Returns true if any pad in the canvas were modified Reset modified flags, increment canvas version (i...
 
void RaiseWindow() override
Raise browser window.
 
static bool ProduceImage(TPad *pad, const char *filename, Int_t width=0, Int_t height=0)
Create image using batch (headless) capability of Chrome or Firefox browsers Supported png,...
 
void ActivateInEditor(TPad *pad, TObject *obj)
Activate object in editor in web browser.
 
std::vector< WebConn > fWebConn
! connections
 
PadSignal_t fActivePadChangedSignal
! signal emitted when active pad changed in the canvas
 
Bool_t GetLongerPolling() const
 
UInt_t fClientBits
! latest status bits from client like editor visible or not
 
std::function< void(TPadWebSnapshot *)> PadPaintingReady_t
Function called when pad painting produced.
 
Int_t fPaletteDelivery
! colors palette delivery 0:never, 1:once, 2:always, 3:per subpad
 
Bool_t fProcessingData
! flag used to prevent blocking methods when process data is invoked
 
Bool_t HasToolTips() const override
Returns kTRUE if tooltips are activated in web canvas.
 
std::vector< TPad * > fAllPads
! list of all pads recognized during streaming
 
friend class TWebCanvasTimer
 
TWebCanvasTimer * fTimer
! timer to submit control messages
 
Long64_t fCanvVersion
! actual canvas version, changed with every new Modified() call
 
bool IsCustomClass(const TClass *cl) const
Checks if class belongs to custom.
 
std::vector< int > fWindowGeometry
! last received window geometry
 
TPad * ProcessObjectOptions(TWebObjectOptions &item, TPad *pad, int idcnt=1)
Process data for single primitive Returns object pad if object was modified.
 
void CreateObjectSnapshot(TPadWebSnapshot &master, TPad *pad, TObject *obj, const char *opt, TWebPS *masterps=nullptr)
Creates representation of the object for painting in web browser.
 
void AddColorsPalette(TPadWebSnapshot &master)
Add special canvas objects with list of colors and color palette.
 
Long64_t fStyleVersion
! current gStyle object version, checked every time when new snapshot created
 
void AddSendQueue(unsigned connid, const std::string &msg)
Add message to send queue for specified connection If connid == 0, message will be add to all connect...
 
void SetWindowPosition(Int_t x, Int_t y) override
Set window position of web canvas.
 
UpdatedSignal_t fUpdatedSignal
! signal emitted when canvas updated or state is changed
 
Int_t fJsonComp
! compression factor for messages send to the client
 
Bool_t IsFirstConn(unsigned connid) const
 
~TWebCanvas() override
Destructor.
 
Bool_t fReadOnly
!< configured display
 
std::map< TPad *, PadStatus > fPadsStatus
! map of pads in canvas and their status flags
 
static Font_t AddFont(const char *name, const char *ttffile, Int_t precision=2)
Add font to static list of fonts upported by the canvas Name specifies name of the font,...
 
void AddCustomFonts(TPadWebSnapshot &master)
Add special canvas objects with custom fonts.
 
Bool_t CheckDataToSend(unsigned connid=0)
Check if any data should be send to client If connid != 0, only selected connection will be checked.
 
Bool_t PerformUpdate(Bool_t async) override
if canvas or any subpad was modified, scan all primitives in the TCanvas and subpads and convert them...
 
void AssignStatusBits(UInt_t bits)
Assign clients bits.
 
virtual Bool_t ProcessData(unsigned connid, const std::string &arg)
Handle data from web browser Returns kFALSE if message was not processed.
 
void ProcessLinesForObject(TObject *obj, const std::string &lines)
Execute one or several methods for selected object String can be separated by ";;" to let execute sev...
 
TWebCanvas(TCanvas *c, const char *name, Int_t x, Int_t y, UInt_t width, UInt_t height, Bool_t readonly=kTRUE)
Constructor.
 
static Int_t StoreCanvasJSON(TCanvas *c, const char *filename, const char *option="")
Create JSON painting output for given canvas and store into the file See TBufferJSON::ExportToFile() ...
 
void Iconify() override
Iconify browser window.
 
void SetWindowTitle(const char *newTitle) override
Set window title of web canvas.
 
UInt_t GetWindowGeometry(Int_t &x, Int_t &y, UInt_t &w, UInt_t &h) override
Returns window geometry including borders and menus.
 
static TCanvasImp * NewCanvas(TCanvas *c, const char *name, Int_t x, Int_t y, UInt_t width, UInt_t height)
Static method to create TWebCanvas instance Used by plugin manager.
 
static TString CreateCanvasJSON(TCanvas *c, Int_t json_compression=0, Bool_t batchmode=kFALSE)
Create JSON painting output for given canvas Produce JSON can be used for offline drawing with JSROOT...
 
Bool_t HasEditor() const override
Returns kTRUE if web canvas has graphical editor.
 
Int_t fStyleDelivery
! gStyle delivery to clients: 0:never, 1:once, 2:always
 
PadClickedSignal_t fPadDblClickedSignal
! signal emitted when simple mouse click performed on the pad
 
void ProcessExecs(TPad *pad, TExec *extra=nullptr)
Process TExec objects in the pad.
 
void CreatePadSnapshot(TPadWebSnapshot &paddata, TPad *pad, Long64_t version, PadPaintingReady_t func)
Create snapshot for pad and all primitives Callback function is used to create JSON in the middle of ...
 
Bool_t CheckCanvasModified(bool force_modified=false)
Check if any pad on the canvas was modified If yes, increment version of correspondent pad Returns tr...
 
virtual Bool_t DecodePadOptions(const std::string &, bool process_execs=false)
Decode all pad options, which includes ranges plus objects options.
 
Int_t GetPaletteDelivery() const
 
void SetWindowSize(UInt_t w, UInt_t h) override
Set window size of web canvas.
 
TObject * FindPrimitive(const std::string &id, int idcnt=1, TPad *pad=nullptr, TObjLink **objlnk=nullptr, TPad **objpad=nullptr)
Search of object with given id in list of primitives One could specify pad where search could be star...
 
Bool_t fFixedSize
! is canvas size fixed
 
Int_t GetStyleDelivery() const
 
Class used to transport drawing options from the client.
 
std::vector< double > fopt
custom float array
 
std::string fcust
custom string
 
std::string snapid
id of the object
 
std::string opt
drawing options
 
Bool_t IsEmptyPainting() const
 
TWebPainting * TakePainting()
 
TWebPainting * GetPainting()
 
Implement TVirtualPadPainter which abstracts painting operations.
 
Object used to store paint operations and deliver them to JSROOT.
 
@ kSVG
list of SVG primitives
 
@ kColors
list of ROOT colors + palette
 
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
 
WebFont_t(Int_t indx, const TString &name, const TString &fmt, const TString &data)