25 static std::mutex &GetHeldCanvasesMutex()
27 static std::mutex sMutex;
31 static std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> &GetHeldCanvases()
33 static std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> sCanvases;
40 const std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> ROOT::Experimental::RCanvas::GetCanvases()
42 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
44 return GetHeldCanvases();
50 bool ROOT::Experimental::RCanvas::IsModified()
const
52 return fPainter ? fPainter->IsCanvasModified(fModified) : fModified;
55 void ROOT::Experimental::RCanvas::Update(
bool async, CanvasCallback_t callback)
58 fPainter->CanvasUpdated(fModified, async, callback);
61 std::shared_ptr<ROOT::Experimental::RCanvas> ROOT::Experimental::RCanvas::Create(
const std::string &title)
63 auto pCanvas = std::make_shared<RCanvas>();
64 pCanvas->SetTitle(title);
66 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
67 GetHeldCanvases().emplace_back(pCanvas);
86 void ROOT::Experimental::RCanvas::Show(
const std::string &where)
89 bool isany = (fPainter->NumDisplays() > 0);
92 fPainter->NewDisplay(where);
101 fPainter = Internal::RVirtualCanvasPainter::Create(*
this);
104 fPainter->NewDisplay(where);
105 fPainter->CanvasUpdated(fModified,
true,
nullptr);
112 std::string ROOT::Experimental::RCanvas::GetWindowAddr()
const
115 return fPainter->GetWindowAddr();
124 void ROOT::Experimental::RCanvas::Hide()
127 delete fPainter.release();
136 void ROOT::Experimental::RCanvas::SaveAs(
const std::string &filename,
bool async, CanvasCallback_t callback)
139 fPainter = Internal::RVirtualCanvasPainter::Create(*
this);
147 if (filename.find(
".json") != std::string::npos) {
148 fPainter->DoWhenReady(
"JSON", filename, async, callback);
149 }
else if (filename.find(
".svg") != std::string::npos)
150 fPainter->DoWhenReady(
"SVG", filename, async, callback);
151 else if (filename.find(
".png") != std::string::npos)
152 fPainter->DoWhenReady(
"PNG", filename, async, callback);
153 else if ((filename.find(
".jpg") != std::string::npos) || (filename.find(
".jpeg") != std::string::npos))
154 fPainter->DoWhenReady(
"JPEG", filename, async, callback);
160 void ROOT::Experimental::RCanvas::Remove()
162 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
163 auto &held = GetHeldCanvases();
164 auto indx = held.size();
166 if (held[indx].
get() ==
this)
167 held.erase(held.begin() + indx);
211 void ROOT::Experimental::RCanvas::Run(
double tm)
216 std::this_thread::sleep_for(std::chrono::milliseconds(
int(tm*1000)));
225 void ROOT::Experimental::RCanvas::ResolveSharedPtrs()
227 Internal::RIOSharedVector_t vect;
231 for (
unsigned n = 0; n < vect.size(); ++n) {
232 if (vect[n]->HasShared() || !vect[n]->GetIOPtr())
continue;
234 auto shrd_ptr = vect[n]->MakeShared();
236 for (
auto n2 = n+1; n2 < vect.size(); ++n2) {
237 if (vect[n2]->GetIOPtr() == vect[n]->GetIOPtr()) {
238 if (vect[n2]->HasShared())
239 R__ERROR_HERE(
"Gpadv7") <<
"FATAL Shared pointer for same IO ptr already exists";
241 vect[n2]->SetShared(shrd_ptr);