Hi, do TCanvas::Paint() instead of TCanvas::Update(). To display it use: TCanvas::Flush(); (maybe you have to call TCanvas::FeedbackMode(kFALSE) before Paint()) Thomas. Valeriy Onuchin wrote: > Hi Paolo, > as far as I understood you would like to set your own procedure > when to display content of canvas. A solution would be creation > class MyCanvas derived from TCanvas with PaintModified() overloaded, e.g > > void MyCanvas::PaintModified() > { > if (!gReadyToShow) return; > else TCanvas::PaintModified(); > } > > and put MyCanvas objects into TRootEmbeddedCanvases instead of TCanvases > Calling TCanvas::Update will not display canvas untill gReadyToShow flag is set on. > > Regards. Valeriy > > > Hi Valeriy, > > no, I meant only to prepare the TRootEmbedded canvas in memory in the final > form as I see it on screen but without displaying it. > > Paolo > > On Monday 23 June 2003 10:12, you wrote: > >> Hi Paolo, >>not clear for me "fill completely the picture in memory ". >>Does it mean a picture of the whole of "Display Window"? >> >>Regards. Valeriy >> >> >>>Hi all, >>> >>>I would like to hear your opinion about the following ideas. >>> >>>In my program I built a Display Window which is essentially composed by a >>>matrix of TRootEmbeddedCanvas. In every Embedded Canvas is painted an >>>histogram. Now I would like to fill completely the picture in memory to >>>display it only when it is needed: the effect should be of a "ready to >>>see" picture appearing on the screen. I know that TRootEmbeddedCanvas >>>creates a TGCanvas in which a TCanvas is created, and that a TCanvas is >>>built using "double buffer" tecnique, but I can't figure out how I can >>>achieve the "ready to see" effect (perhaps using TPad::CopyPixmaps()?). >>> >>>Just for example I attach my present code. >>>Thanks, >>> >>>Paolo >>> >>> >>>/************************************************************************ >>>*** TC_ScrollingTabFrame.cpp - description ------------------- >>> begin : Thu May 8 2003 >>> copyright : (C) 2003 by Paolo ADRAGNA >>> email : paolo.adragna@pi.infn.it >>> >>>************************************************************************* >>>**/ >>> >>>/************************************************************************ >>>*** * >>> * * This program is free software; you can redistribute it and/or >>>modify * * it under the terms of the GNU General Public License as >>>published by * * the Free Software Foundation; either version 2 of the >>>License, or * * (at your option) any later version. >>> * * >>> * >>>************************************************************************* >>>**/ >>> >>>#include "TC_ScrollingTabFrame.h" >>>#include "TC_CanvasUpdateAsynch.h" >>> >>>ClassImp(TC_ScrollingTabFrame) >>> >>>TC_ScrollingTabFrame::TC_ScrollingTabFrame() : >>>TGCanvas(GetViewPort(),700,650) {} >>> >>>TC_ScrollingTabFrame::TC_ScrollingTabFrame(TGTab * tab, char *grp, char * >>>nam, Int_t id_, Int_t nhs, TH1 *hist[], char *options[], char >>>*Poptions[]) : TGCanvas(tab,550,650) >>>{ >>> >>> status = 0; >>> group = new TString(grp); >>> name = new TString(nam); >>> id = id_; >>> >>> // Make a new tab explicitly building it, instead of calling Add in >>>order to add a ScrollingTabFrame >>> tab->AddFrame(new TGTabElement(tab, new TGString(nam), 50, 20, >>>tab->GetDefaultGC().GetGC(), >>>tab->GetDefaultFontStruct()), >>> 0); >>> >>> fFrame = new TGCompositeFrame(GetViewPort(), 60, 20); >>> fFrame->SetLayoutManager(new TGMatrixLayout(fFrame,0,2,10)); >>> SetContainer(fFrame); >>> >>> TStyle *myStyle = (TStyle*) gROOT->FindObject("Plain1"); >>> if(myStyle) >>> { >>> myStyle->cd(); >>> } >>> else >>> { >>> printf("Warning. Style Plain1 not founded\n"); >>> } >>> >>> int i; >>> for (i=0;i<nhs;i++) >>> { >>> char *s = new char[30]; >>> sprintf(s,"%s_%i",nam,i); >>> TRootEmbeddedCanvas *fECanvas = new >>>TRootEmbeddedCanvas(s,fFrame,300,250); >>> ecanvas.push_back(fECanvas); >>> TCanvas *c = fECanvas->GetCanvas(); >>> if(strcmp(Poptions[i],"Logy") == 0) c->SetLogy(); >>> c->cd(); >>> c->AddExec("Popuppad","TC_ScrollingTabFrame::PopUpPad()"); >>> hist[i]->Draw(options[i]); >>> AddFrame(fECanvas); >>> } >>> >>>} >>> >>>TC_ScrollingTabFrame::~TC_ScrollingTabFrame() >>>{ >>> for(int i=0; i<(int)ecanvas.size(); i++) >>> { >>> delete ecanvas[i]; >>> } >>> delete fFrame; >>>} >>> >>>void TC_ScrollingTabFrame::PopUpPad() >>>{ >>> int event = gPad->GetEvent(); >>> if(event == 61) >>> { >>> TObject *select = gPad->GetSelected(); >>> if (!select) return; >>> // For a TH1 the selectd object is a TFrame, not the TH1 >>> // So we must select it >>> if (!select->InheritsFrom("TH1")) >>>{ >>> TList *primitives = gPad->GetListOfPrimitives(); >>> TListIter next(primitives); >>> TObject *to; >>> while ((to=next())) >>> { >>> if(to->InheritsFrom("TH1")) {select = to;} >>> } >>>} >>> if (select->InheritsFrom("TH1")) >>>{ >>> Int_t logy = gPad->GetLogy(); >>> TH1 *h = (TH1*)gROOT->FindObject(select->GetName()); >>> char *name = new char[100]; >>> sprintf(name,"padCanvas%s",h->GetName()); >>> TCanvas *canvas = new TCanvas(name,h->GetTitle(),600,400); >>> new TC_CanvasUpdateAsynch(canvas,(Long_t)2000); >>> sprintf(name,"padPad%s",h->GetName()); >>> TPad *p = new TPad(name,h->GetTitle(),0.05,0.05,0.95,0.95); >>> if(logy) p->SetLogy(); >>> p->Draw(); >>> p->cd(); >>> file://TStyle *myStyle = new TStyle("Plain2","Generic"); >>> file://myStyle->SetTitleFont(42); >>> if(select->InheritsFrom("TH2F")) >>> { >>> file://myStyle->SetOptStat(10); >>> TStyle *myStyle = (TStyle*) gROOT->FindObject("PlainPopup2"); >>> if(myStyle) >>>{ >>> myStyle->cd(); >>>} >>> else >>>{ >>> printf("Warning. Style PlainPopup2 not founded\n"); >>>} >>> h->Draw("lego2"); >>> } >>> else >>> { >>> file://myStyle->SetOptStat(111111); >>> TStyle *myStyle = (TStyle*) gROOT->FindObject("PlainPopup1"); >>> if(myStyle) >>>{ >>> myStyle->cd(); >>>} >>> else >>>{ >>> printf("Warning. Style PlainPopup1 not founded\n"); >>>} >>> h->Draw("hist"); >>> } >>> >>>} >>> } >>>} >>> >>>void TC_ScrollingTabFrame::SetVisibleFlag(bool flag) >>>{ >>> status = GetSelectedFlag(); >>> if (flag) { status = DW_SELECTED | DW_VISIBLE; } >>>} >>> >>>void TC_ScrollingTabFrame::SetSelectedFlag(bool flag) >>>{ >>> status = 0; >>> SetVisibleFlag(flag); >>>} >>> >>>Bool_t TC_ScrollingTabFrame::ProcessMessage(Long_t msg, Long_t parm1, >>>Long_t parm2) >>>{ >>> return TGCanvas::ProcessMessage(msg,parm1,parm2); >>>} >>> >>>void TC_ScrollingTabFrame::Update() >>>{ >>> >>> if((!GetVisibleFlag()) || (ecanvas.size()<=0) ) {return;} >>> >>> TStyle *myStyle = (TStyle*) gROOT->FindObject("Plain1"); >>> if(myStyle) >>> { >>> myStyle->cd(); >>> } >>> else >>> { >>> printf("Warning. Style Plain1 not founded\n"); >>> } >>> for(int i=0; i<(int)ecanvas.size(); i++) >>> { >>> TCanvas *c = ecanvas[i]->GetCanvas(); >>> c->Modified(); >>> c->Update(); >>> } >>>} > > > > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET