diff --git a/graf2d/gpad/v7/inc/ROOT/TPad.hxx b/graf2d/gpad/v7/inc/ROOT/TPad.hxx index 828134ce79c1065cefc32f01520762c74eff765e..f8d6fccaeb10a0b4be2cb0cfd30dc7ab4f6abd74 100644 --- a/graf2d/gpad/v7/inc/ROOT/TPad.hxx +++ b/graf2d/gpad/v7/inc/ROOT/TPad.hxx @@ -125,31 +125,7 @@ public: } }; - -/** \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(); } - - /// No options here. - void GetOptions() const {} -}; +class TPadDrawable; /** \class ROOT::Experimental::TPad Graphic container for `TDrawable`-s. @@ -166,11 +142,7 @@ private: public: - friend std::unique_ptr<TPadDrawable> GetDrawable(std::unique_ptr<TPad> &&pad, const TPadPos &pos) - { - return std::make_unique<TPadDrawable>(std::move(pad), pos); - } - + friend std::unique_ptr<TPadDrawable> GetDrawable(std::unique_ptr<TPad> &&pad, const TPadBase &parent); /// Create a child pad. TPad(const TPadBase &parent, const TPadExtent &size): fParent(&parent), fSize(size) {} @@ -217,6 +189,48 @@ public: } }; +/** \class TPadDrawingOpts + Drawing options for a TPad + */ + +class TPadDrawingOpts: public TDrawingOptsBase<TPadDrawingOpts> { + TPadPos fPos; ///< Offset with respect to parent TPad. +public: + TPadDrawingOpts(TPadBase& parent): TDrawingOptsBase<TPadDrawingOpts>(parent) {} + + /// Set the position of this pad with respect to the parent pad. + TPadDrawingOpts &At(const TPadPos& pos) { fPos = pos; return *this; } +}; + +/** \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 + TPadDrawingOpts fOpts; ///< The drawing options. + +public: + /// Move a sub-pad into this (i.e. parent's) list of drawables. + TPadDrawable(std::unique_ptr<TPad> &&pPad, TPadBase& parent); + + /// Paint the pad. + void Paint(Internal::TVirtualCanvasPainter & /*canv*/) final + { + // FIXME: and then what? Something with fPad.GetListOfPrimitives()? + } + + TPad *Get() const { return fPad.get(); } + + /// Drawing options. + TPadDrawingOpts& GetOptions() { return fOpts;} +}; + +inline std::unique_ptr<TPadDrawable> GetDrawable(std::unique_ptr<TPad> &&pad, TPadBase &parent) +{ + return std::make_unique<TPadDrawable>(std::move(pad), parent); +} + } // namespace Experimental } // namespace ROOT