26static std::mutex &GetHeldCanvasesMutex()
28 static std::mutex sMutex;
32static std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> &GetHeldCanvases()
34 static std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> sCanvases;
46 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
48 return GetHeldCanvases();
57 std::vector<std::shared_ptr<ROOT::Experimental::RCanvas>> vect;
60 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
62 std::swap(vect, GetHeldCanvases());
71 return fPainter ? fPainter->IsCanvasModified(fModified) : fModified;
80 fPainter->CanvasUpdated(fModified, async, callback);
105 auto pCanvas = std::make_shared<RCanvas>();
106 pCanvas->SetTitle(title);
108 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
109 GetHeldCanvases().emplace_back(pCanvas);
117 gROOT->GetListOfClosedObjects()->Add(dummydir);
142 if (
gROOT->GetWebDisplay() ==
"jupyter")
return;
145 bool isany = (fPainter->NumDisplays() > 0);
148 fPainter->NewDisplay(where);
160 fPainter->NewDisplay(where);
161 fPainter->CanvasUpdated(fModified,
true,
nullptr);
171 return fPainter->GetWindowAddr();
183 delete fPainter.release();
198 int width = GetWidth();
199 int height = GetHeight();
201 return fPainter->ProduceBatchOutput(filename,
width > 1 ?
width : 800, height > 1 ? height : 600);
216 return fPainter->ProduceJSON();
224 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
225 auto &held = GetHeldCanvases();
226 auto indx = held.size();
228 if (held[indx].get() ==
this)
229 held.erase(held.begin() + indx);
278 std::this_thread::sleep_for(std::chrono::milliseconds(
int(tm*1000)));
293 for (
unsigned n = 0;
n < vect.size(); ++
n) {
294 if (vect[
n]->HasShared() || !vect[
n]->GetIOPtr())
continue;
296 auto shrd_ptr = vect[
n]->MakeShared();
298 for (
auto n2 =
n+1; n2 < vect.size(); ++n2) {
299 if (vect[n2]->GetIOPtr() == vect[
n]->GetIOPtr()) {
300 if (vect[n2]->HasShared())
303 vect[n2]->SetShared(shrd_ptr);
318 if (!GetContext().IsMainConn())
322 if (!canv)
return nullptr;
324 if ((ids.size() != names.size()) || (ids.size() != values.size())) {
331 for(
int indx = 0; indx < (
int) ids.size(); indx++) {
332 if (ids[indx] ==
"canvas") {
333 if (canv->GetAttrMap().Change(names[indx], values[indx].get())) {
335 canv->SetDrawableVersion(vers);
338 auto drawable = canv->FindPrimitiveByDisplayId(ids[indx]);
339 if (drawable && drawable->GetAttrMap().Change(names[indx], values[indx].get())) {
340 if (!vers) vers = canv->IncModified();
341 drawable->SetDrawableVersion(vers);
346 fNeedUpdate = (vers > 0) &&
update;
#define R__LOG_ERROR(...)
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
include TDocParser_001 C image html pict1_TDocParser_001 png width
virtual ~RCanvasCleanup()
static RCanvasCleanup * gInstance
static std::unique_ptr< RVirtualCanvasPainter > Create(RCanvas &canv)
Loads the plugin that implements this class.
static const std::vector< std::shared_ptr< RCanvas > > GetCanvases()
Returns list of created canvases.
static void ReleaseHeldCanvases()
Release list of held canvases pointers If no other shared pointers exists on the canvas,...
bool SaveAs(const std::string &filename)
Save canvas in image file.
bool IsModified() const
Returns true is canvas was modified since last painting.
void Show(const std::string &where="")
Display the canvas.
std::string GetWindowAddr() const
Returns window name used to display canvas.
void Remove()
Remove canvas from global canvas lists, will be destroyed when shared_ptr will be removed.
void ResolveSharedPtrs()
To resolve problem with storing of shared pointers Call this method when reading canvas from the file...
void Run(double tm=0.)
Run canvas functionality for given time (in seconds)
std::string CreateJSON()
Provide JSON which can be used for offline display.
static std::shared_ptr< RCanvas > Create(const std::string &title)
Create new canvas instance.
void Update(bool async=false, CanvasCallback_t callback=nullptr)
update drawing
void Hide()
Hide all canvas displays.
std::unique_ptr< RDrawableReply > Process() override
Apply attributes changes to the drawable Return mask with actions which were really applied.
TDirectory::TContext keeps track and restore the current directory.
Describe directory structure in memory.
virtual TList * GetList() const
virtual void Add(TObject *obj)
Mother of all ROOT objects.
std::vector< RIOSharedBase * > RIOSharedVector_t
std::function< void(bool)> CanvasCallback_t
RLogChannel & GPadLog()
Log channel for GPad diagnostics.