Hi Thomas, > Hi, > > do TCanvas::Paint() instead of TCanvas::Update(). that's not enougth. In many cases TCanvas::Update is called indirectly, e.g. when you type "Return" in console, when using root browser etc. Regards. Valeriy > 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