Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RVirtualCanvasPainter.hxx
Go to the documentation of this file.
1 /*************************************************************************
2  * Copyright (C) 1995-2017, Rene Brun and Fons Rademakers. *
3  * All rights reserved. *
4  * *
5  * For the licensing terms see $ROOTSYS/LICENSE. *
6  * For the list of contributors see $ROOTSYS/README/CREDITS. *
7  *************************************************************************/
8 
9 #ifndef ROOT7_RVirtualCanvasPainter
10 #define ROOT7_RVirtualCanvasPainter
11 
12 #include <memory>
13 #include <functional>
14 #include <string>
15 
16 namespace ROOT {
17 namespace Experimental {
18 
19 using CanvasCallback_t = std::function<void(bool)>;
20 
21 class RCanvas;
22 class RWebWindow;
23 
24 namespace Internal {
25 
26 /** \class ROOT::Experimental::Internal::RVirtualCanvasPainter
27 \ingroup GpadROOT7
28 \brief Abstract interface for painting a canvas.
29 \author Axel Naumann <axel@cern.ch>
30 \date 2017-05-31
31 \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback is welcome!
32 */
33 
34 class RVirtualCanvasPainter {
35 protected:
36  class Generator {
37  public:
38  /// Abstract interface to create a RVirtualCanvasPainter implementation.
39  virtual std::unique_ptr<RVirtualCanvasPainter> Create(const RCanvas &canv) const = 0;
40  /// Default destructor.
41  virtual ~Generator();
42  };
43 
44  /// generator getter
45  static std::unique_ptr<Generator> &GetGenerator();
46 
47 public:
48  /// Default destructor.
49  virtual ~RVirtualCanvasPainter();
50 
51  /// indicate that canvas changed, provides current version of the canvas
52  virtual void CanvasUpdated(uint64_t, bool, CanvasCallback_t) = 0;
53 
54  /// return true if canvas modified since last painting
55  virtual bool IsCanvasModified(uint64_t) const = 0;
56 
57  /// perform special action when drawing is ready
58  virtual void DoWhenReady(const std::string &, const std::string &, bool, CanvasCallback_t) = 0;
59 
60  virtual void NewDisplay(const std::string &where) = 0;
61 
62  virtual int NumDisplays() const = 0;
63 
64  virtual std::string GetWindowAddr() const = 0;
65 
66  /// run canvas functionality in caller thread, not needed when main thread is used
67  virtual void Run(double tm = 0.) = 0;
68 
69  virtual bool AddPanel(std::shared_ptr<RWebWindow>) { return false; }
70 
71  /// Loads the plugin that implements this class.
72  static std::unique_ptr<RVirtualCanvasPainter> Create(const RCanvas &canv);
73 };
74 } // namespace Internal
75 } // namespace Experimental
76 } // namespace ROOT
77 
78 #endif // ROOT7_RVirtualCanvasPainter