Re: [ROOT] Painting...?

From: Valeriy Onuchin (Valeri.Onoutchine@cern.ch)
Date: Mon Jun 23 2003 - 13:13:25 MEST


 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