From fc8af7521c9ca9907591eb2a239baaa3a61b079a Mon Sep 17 00:00:00 2001 From: Sergey Linev <S.Linev@gsi.de> Date: Wed, 9 Aug 2017 20:05:04 +0200 Subject: [PATCH] webgui: provide dictionary for drawable and pad Still some problem to store canvas with any sub-pads inside --- core/base/inc/LinkDef3.h | 4 +++ graf2d/gpad/inc/LinkDef.h | 4 +++ graf2d/gpad/v7/inc/ROOT/TPad.hxx | 44 ++++++++++++++++++-------------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/core/base/inc/LinkDef3.h b/core/base/inc/LinkDef3.h index b2ae35584ad..6bf92595e7d 100644 --- a/core/base/inc/LinkDef3.h +++ b/core/base/inc/LinkDef3.h @@ -268,4 +268,8 @@ #pragma link C++ class TParameter<Long_t>+; #pragma link C++ class TParameter<Long64_t>+; +#ifdef ROOT7_TDrawable +#pragma link C++ class ROOT::Experimental::TDrawable+; +#endif + #endif diff --git a/graf2d/gpad/inc/LinkDef.h b/graf2d/gpad/inc/LinkDef.h index 2fdbbe05970..569949431aa 100644 --- a/graf2d/gpad/inc/LinkDef.h +++ b/graf2d/gpad/inc/LinkDef.h @@ -48,8 +48,12 @@ #pragma link C++ class ROOT::Experimental::TMenuItems+; #pragma link C++ class ROOT::Experimental::Detail::TPadUserCoordBase+; #pragma link C++ class ROOT::Experimental::Detail::TPadLinearUserCoord+; +#pragma link C++ struct ROOT::Experimental::Internal::TPadHorizVert+; +#pragma link C++ class ROOT::Experimental::TPadExtent+; +#pragma link C++ class ROOT::Experimental::TPadPos+; #pragma link C++ class ROOT::Experimental::Internal::TPadBase+; #pragma link C++ class ROOT::Experimental::TPad+; +#pragma link C++ class ROOT::Experimental::TPadDrawable+; #pragma link C++ class ROOT::Experimental::TCanvas+; #pragma link C++ class ROOT::Experimental::TPadCoord::Pixel+; #pragma link C++ class ROOT::Experimental::TPadCoord::CoordSysBase<ROOT::Experimental::TPadCoord::Pixel>+; diff --git a/graf2d/gpad/v7/inc/ROOT/TPad.hxx b/graf2d/gpad/v7/inc/ROOT/TPad.hxx index 7e40c8ccc96..0dc0ffaa26d 100644 --- a/graf2d/gpad/v7/inc/ROOT/TPad.hxx +++ b/graf2d/gpad/v7/inc/ROOT/TPad.hxx @@ -147,6 +147,29 @@ public: }; } // namespace Internal + +/** \class TPadDrawable + Draw a TPad, by drawing its contained graphical elements at the pad offset in the parent pad.' + */ +class TPadDrawable: public TDrawable { +private: + const std::unique_ptr<TPad> fPad; ///< The pad to be painted + TPadPos fPos; ///< Offset with respect to parent TPad. + +public: + TPadDrawable() = default; + + TPadDrawable(std::unique_ptr<TPad> &&pPad, const TPadPos &pos): fPad(std::move(pPad)), fPos(pos) {} + + /// Paint the pad. + void Paint(Internal::TVirtualCanvasPainter & /*canv*/) final + { + // FIXME: and then what? Something with fPad.GetListOfPrimitives()? + } + + TPad *Get() const { return fPad.get(); } +}; + /** \class ROOT::Experimental::TPad Graphic container for `TDrawable`-s. */ @@ -159,32 +182,15 @@ private: /// Size of the pad in the parent's (!) coordinate system. TPadExtent fSize; - /** \class TPadDrawable - Draw a TPad, by drawing its contained graphical elements at the pad offset in the parent pad.' - */ - class TPadDrawable: public TDrawable { - private: - const std::unique_ptr<TPad> fPad; ///< The pad to be painted - TPadPos fPos; ///< Offset with respect to parent TPad. - - public: - TPadDrawable(std::unique_ptr<TPad> &&pPad, const TPadPos &pos): fPad(std::move(pPad)), fPos(pos) {} - /// Paint the pad. - void Paint(Internal::TVirtualCanvasPainter & /*canv*/) final - { - // FIXME: and then what? Something with fPad.GetListOfPrimitives()? - } - - TPad *Get() const { return fPad.get(); } - }; +public: friend std::unique_ptr<TPadDrawable> GetDrawable(std::unique_ptr<TPad> &&pad, const TPadPos &pos) { return std::make_unique<TPadDrawable>(std::move(pad), pos); } -public: + /// Create a child pad. TPad(const TPadBase &parent, const TPadExtent &size): fParent(&parent), fSize(size) {} -- GitLab