From 31fb30ff38c68b8dbe17acdb10b992dbd3ca2131 Mon Sep 17 00:00:00 2001 From: Sergey Linev Date: Wed, 7 Jun 2017 13:09:31 +0200 Subject: [PATCH 1/4] Extend TCanvasImp interface - let create TVirtualPadPainter via the TCanvasImp. - handling of TCanvas::Update() can be perfromed in TCanvasImp --- core/base/inc/TCanvasImp.h | 5 ++++- graf2d/gpad/src/TCanvas.cxx | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) 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..1684beda27f0d 100644 --- a/graf2d/gpad/src/TCanvas.cxx +++ b/graf2d/gpad/src/TCanvas.cxx @@ -2249,14 +2249,18 @@ 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 +2303,10 @@ 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 = !fCanvasImp ? 0 : 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!"); From 8e081b3ddb7d54cee52f304178d8ec407ade3f8b Mon Sep 17 00:00:00 2001 From: Sergey Linev Date: Thu, 8 Jun 2017 18:17:20 +0200 Subject: [PATCH 2/4] Improve formating of TCanvas --- graf2d/gpad/src/TCanvas.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/graf2d/gpad/src/TCanvas.cxx b/graf2d/gpad/src/TCanvas.cxx index 1684beda27f0d..2e07b55d74663 100644 --- a/graf2d/gpad/src/TCanvas.cxx +++ b/graf2d/gpad/src/TCanvas.cxx @@ -2251,14 +2251,14 @@ void TCanvas::Update() if (!fCanvasImp->PerformUpdate()) { - if (!IsBatch()) FeedbackMode(kFALSE); // Goto double buffer mode + if (!IsBatch()) FeedbackMode(kFALSE); // Goto double buffer mode - if (!UseGL()) - PaintModified(); // Repaint all modified pad's + if (!UseGL()) PaintModified(); // Repaint all modified pad's - Flush(); // Copy all pad pixmaps to the screen + Flush(); // Copy all pad pixmaps to the screen SetCursor(kCross); + } fUpdating = kFALSE; @@ -2305,7 +2305,7 @@ void TCanvas::CreatePainter() //some calls to batch "virtual X". if (!UseGL() || fBatch) { fPainter = !fCanvasImp ? 0 : fCanvasImp->CreatePadPainter(); - if (!fPainter) fPainter = new TPadPainter;//Do not need plugin manager for this! + if (!fPainter) fPainter = new TPadPainter; // Do not need plugin manager for this! } else { fPainter = TVirtualPadPainter::PadPainter("gl"); if (!fPainter) { From 31c7f824004bd5d4f2b6d3c5c8b0f4f9765808ae Mon Sep 17 00:00:00 2001 From: Sergey Linev Date: Thu, 8 Jun 2017 18:23:53 +0200 Subject: [PATCH 3/4] Remove empty line I do not understand logic behind. Sorry. --- graf2d/gpad/src/TCanvas.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/graf2d/gpad/src/TCanvas.cxx b/graf2d/gpad/src/TCanvas.cxx index 2e07b55d74663..c7556236664d0 100644 --- a/graf2d/gpad/src/TCanvas.cxx +++ b/graf2d/gpad/src/TCanvas.cxx @@ -2258,7 +2258,6 @@ void TCanvas::Update() Flush(); // Copy all pad pixmaps to the screen SetCursor(kCross); - } fUpdating = kFALSE; From fac17835ce4b1470ead2ecdbf5db8a86586c22cd Mon Sep 17 00:00:00 2001 From: Sergey Linev Date: Mon, 26 Jun 2017 10:45:11 +0200 Subject: [PATCH 4/4] Make syntax more clear when creating pad painter --- graf2d/gpad/src/TCanvas.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/graf2d/gpad/src/TCanvas.cxx b/graf2d/gpad/src/TCanvas.cxx index c7556236664d0..5c876eb88c102 100644 --- a/graf2d/gpad/src/TCanvas.cxx +++ b/graf2d/gpad/src/TCanvas.cxx @@ -2303,7 +2303,8 @@ void TCanvas::CreatePainter() //Even for batch mode painter is still required, just to delegate //some calls to batch "virtual X". if (!UseGL() || fBatch) { - fPainter = !fCanvasImp ? 0 : fCanvasImp->CreatePadPainter(); + fPainter = 0; + if (fCanvasImp) fPainter = fCanvasImp->CreatePadPainter(); if (!fPainter) fPainter = new TPadPainter; // Do not need plugin manager for this! } else { fPainter = TVirtualPadPainter::PadPainter("gl");