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);
88 auto pCanvas = std::make_shared<RCanvas>();
89 pCanvas->SetTitle(title);
91 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
92 GetHeldCanvases().emplace_back(pCanvas);
115 if (
gROOT->IsWebDisplayBatch())
121 bool isany = (fPainter->NumDisplays() > 0);
124 fPainter->NewDisplay(where);
136 fPainter->NewDisplay(where);
137 fPainter->CanvasUpdated(fModified,
true,
nullptr);
147 return fPainter->GetWindowAddr();
159 delete fPainter.release();
174 int width = GetWidth();
192 return fPainter->ProduceJSON();
200 std::lock_guard<std::mutex> grd(GetHeldCanvasesMutex());
201 auto &held = GetHeldCanvases();
202 auto indx = held.size();
204 if (held[indx].get() ==
this)
205 held.erase(held.begin() + indx);
254 std::this_thread::sleep_for(std::chrono::milliseconds(
int(tm*1000)));
269 for (
unsigned n = 0;
n < vect.size(); ++
n) {
270 if (vect[
n]->HasShared() || !vect[
n]->GetIOPtr())
continue;
272 auto shrd_ptr = vect[
n]->MakeShared();
274 for (
auto n2 =
n+1; n2 < vect.size(); ++n2) {
275 if (vect[n2]->GetIOPtr() == vect[
n]->GetIOPtr()) {
276 if (vect[n2]->HasShared())
279 vect[n2]->SetShared(shrd_ptr);
294 if (!GetContext().IsMainConn())
298 if (!canv)
return nullptr;
300 if ((ids.size() != names.size()) || (ids.size() != values.size())) {
307 for(
int indx = 0; indx < (
int) ids.size(); indx++) {
308 if (ids[indx] ==
"canvas") {
309 if (canv->GetAttrMap().Change(names[indx], values[indx].get())) {
311 canv->SetDrawableVersion(vers);
314 auto drawable = canv->FindPrimitiveByDisplayId(ids[indx]);
315 if (drawable && drawable->GetAttrMap().Change(names[indx], values[indx].get())) {
316 if (!vers) vers = canv->IncModified();
317 drawable->SetDrawableVersion(vers);
322 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)
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 height
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.
std::vector< RIOSharedBase * > RIOSharedVector_t
std::function< void(bool)> CanvasCallback_t
RLogChannel & GPadLog()
Log channel for GPad diagnostics.