20 namespace Experimental {
30 class RCanvas:
public RPadBase {
31 friend class RPadBase;
32 friend class RCanvasPainter;
38 std::array<RPadLength::Pixel, 2> fSize;
41 uint64_t fModified{0};
46 std::unique_ptr<Internal::RVirtualCanvasPainter> fPainter;
49 RCanvas(
const RCanvas &) =
delete;
52 RCanvas &operator=(
const RCanvas &) =
delete;
55 static std::shared_ptr<RCanvas> Create(
const std::string &title);
62 const RCanvas *GetCanvas()
const override {
return this; }
65 RCanvas *GetCanvas()
override {
return this; }
68 const std::array<RPadLength::Pixel, 2> &GetSize()
const {
return fSize; }
71 RCanvas &SetSize(
const std::array<RPadLength::Pixel, 2> &sz)
78 RCanvas &SetSize(
const RPadLength::Pixel &width,
const RPadLength::Pixel &height)
86 void Show(
const std::string &where =
"");
89 std::string GetWindowAddr()
const;
98 template <
class PANEL>
99 bool AddPanel(std::shared_ptr<PANEL> &panel)
101 if (!fPainter)
return false;
102 return fPainter->AddPanel(panel->GetWindow());
106 void Modified() { fModified++; }
109 bool IsModified()
const;
112 void Update(
bool async =
false, CanvasCallback_t callback =
nullptr);
115 void Run(
double tm = 0.);
118 void SaveAs(
const std::string &filename,
bool async =
false, CanvasCallback_t callback =
nullptr);
121 const std::string &GetTitle()
const {
return fTitle; }
124 RCanvas &SetTitle(
const std::string &title)
130 void ResolveSharedPtrs();
133 std::array<RPadLength::Normal, 2> PixelsToNormal(
const std::array<RPadLength::Pixel, 2> &pos)
const final
135 return {{pos[0] / fSize[0], pos[1] / fSize[1]}};
138 static const std::vector<std::shared_ptr<RCanvas>> GetCanvases();