diff --git a/core/base/inc/TCanvasImp.h b/core/base/inc/TCanvasImp.h index 8e624db5b5706..353ff4102e830 100644 --- a/core/base/inc/TCanvasImp.h +++ b/core/base/inc/TCanvasImp.h @@ -25,7 +25,7 @@ #include "Rtypes.h" class TCanvas; - +class TVirtualPadPainter; class TCanvasImp { friend class TCanvas; @@ -42,6 +42,9 @@ friend class TCanvas; virtual void Unlock() { } virtual Bool_t IsLocked() { return kFALSE; } + virtual Bool_t PerformUpdate() { return kFALSE; } + virtual TVirtualPadPainter *CreatePadPainter() { return 0; } + public: TCanvasImp(TCanvas *c=0) : fCanvas(c) { } TCanvasImp(TCanvas *c, const char *name, UInt_t width, UInt_t height); diff --git a/graf2d/gpad/src/TCanvas.cxx b/graf2d/gpad/src/TCanvas.cxx index 60fecc4f3452d..5c876eb88c102 100644 --- a/graf2d/gpad/src/TCanvas.cxx +++ b/graf2d/gpad/src/TCanvas.cxx @@ -2249,14 +2249,17 @@ void TCanvas::Update() fUpdating = kTRUE; - if (!IsBatch()) FeedbackMode(kFALSE); // Goto double buffer mode + if (!fCanvasImp->PerformUpdate()) { - if (!UseGL()) - PaintModified(); // Repaint all modified pad's + if (!IsBatch()) FeedbackMode(kFALSE); // Goto double buffer mode - Flush(); // Copy all pad pixmaps to the screen + if (!UseGL()) PaintModified(); // Repaint all modified pad's + + Flush(); // Copy all pad pixmaps to the screen + + SetCursor(kCross); + } - SetCursor(kCross); fUpdating = kFALSE; } @@ -2299,9 +2302,11 @@ void TCanvas::CreatePainter() { //Even for batch mode painter is still required, just to delegate //some calls to batch "virtual X". - if (!UseGL() || fBatch) - fPainter = new TPadPainter;//Do not need plugin manager for this! - else { + if (!UseGL() || fBatch) { + fPainter = 0; + if (fCanvasImp) fPainter = fCanvasImp->CreatePadPainter(); + if (!fPainter) fPainter = new TPadPainter; // Do not need plugin manager for this! + } else { fPainter = TVirtualPadPainter::PadPainter("gl"); if (!fPainter) { Error("CreatePainter", "GL Painter creation failed! Will use default!");