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(); //TStyle *myStyle = new TStyle("Plain2","Generic"); //myStyle->SetTitleFont(42); if(select->InheritsFrom("TH2F")) { //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 { //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