Re: [ROOT] Painting...?

From: Valeriy Onuchin (Valeri.Onoutchine@cern.ch)
Date: Mon Jun 23 2003 - 15:53:12 MEST


 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