RE: [ROOT] Window refresh using Win2K and GDK

From: Valeri Fine (fine@bnl.gov)
Date: Thu Jan 08 2004 - 18:37:16 MET


Hello Eric, 

With GDK you observe the "standard' ROOT behavior.

What you had seen with Win32 version was some "free" bonus ("side
effect") due extra thread eliminated within GDK. Even though this
behavior is still present with Qt-edition of ROOT and still provided
with Win32 flavor, I would not have advised to relay on "non"-standard
"side effect".
  I believe there was a good reason to do GDK. This way GDK can support
some nice ROOT features those were not available for Windows user due
occasional system crash.
There reason for those crashes was the call of the non-tread-safe pieces
of ROOT code from the concurrent Win32 threads. 
Eliminating one thread GDK author has reduced the probability of such
clashes.

I was going to do the same thing with Qt-edition (http://root.bnl.gov).
Now I'll try to think a little bit to find a way preserving "your" side
effect :-)

----
Best regards
                   Valeri


> -----Original Message-----
> From: ANCIANT E. [mailto:eric_anciant@sodern.fr]
> Sent: Thursday, January 08, 2004 11:36 AM
> To: 'Brandon Kohn'; ANCIANT E.; 'Valeri Fine'; 'Rene Brun';
> 'roottalk@root.cern.ch'
> Subject: RE: [ROOT] Window refresh using Win2K and GDK
> 
> I am using ( latest ) version : root_v3.10.02.win32gdk_Debug
> 
> In order to clarify my point, look the slightly modified example
below,
> with the app.Run() call at the end of the program,
> if I try to resize the window DURING the loop the canvas/pad doesn't
get
> resized,
> it will be only once the execution reaches app.Run()
> 
> This behaviour is new to me, since resizing the canvas DURING
execution (and
> without instanciating
> TApplication or running it) was possible with the old root 3.02 I had
been
> using (for a while.. )
> 
> I was just wondering if this is a desired ( recommanded ? ) behaviour
..
> seems that before the Update() method could detect that the OS-window
size
> changed, and not anymore
> 
> In fact, with the old 3.02 version I could pause execution from within
my
> program, save canvas under poscript files for example
> (the canvas menus were there) and then restart the execution by
hitting a
> keyboard key (all this with no TApplication instance)
> I am not sure of how I should do such a thing now, calling
> TApplication::Run() "freeze" the execution of my application;
> or is there a way to return from that call into the main execution
program ?
> In my test-example below for example how can I continue the execution
of the
> rest of the program if I uncomment the first
> app.Run() ?
> 
> Thanks for your patience ...
> 
> eric
> 
> 
>  -- QUOTE --
> 
> #include "TApplication.h"
> #include "TSystem.h"
> #include "TEnv.h"
> #include "TH1.h"
> #include "TCanvas.h"
> 
> #include <iostream>
> using namespace std;
> 
> //#include <iostream.h>
> 
> int main(int argc, char* argv[])
> {
> 	cout << " Using ROOTSYS " << gSystem->Getenv("ROOTSYS") << endl;
> 	cout << " Using DYNAMIC PATH "
> 		<< gEnv->GetValue("WinNT.*.Root.DynamicPath","NOT
DEFINED")
> << endl;
> 	cout << " Using MACRO PATH "
> 		<< gEnv->GetValue("WinNT.*.Root.MacroPath","NOT
DEFINED") <<
> endl;
> 
>     TApplication app("app",0,0);
> 	TCanvas can("toto","titi",300,300);
> 
> 	TH1F histo("histo","histo",10,-3,3);
> 	int i;
> //	app.Run();
> 	for (i=0;i<1000;i++ ) {
> 		histo.FillRandom("gaus",10);
> 		histo.Draw();
> 		gPad->Update();
> 	}
> 	app.Run();
> 
> 	cin >> i;
> 
> 	return 0;
> }
> 
> -------------------------- QUOTE COMPILATION :
> 
> --------------------Configuration: TestConsole - Win32
> Debug--------------------
> Compiling...
> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
> Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
> cl /G5 /MD /GR /I "p:\root_v3.10.02.win32gdk_Debug/include" /D "WIN32"
/D
> "_DEBUG" /D "_WIN32" /D "_MT" /D "VISUAL_CPLUSPLUS" /D "_WINDOWS"
> /Fo"Debug/" /Fd"Debug/" /FD /EHsc /c
>    "P:\APS_LOCAL\TESTROOT\TestConsole\TestConsole.cpp"
> TestConsole.cpp
> Linking...
> Microsoft (R) Incremental Linker Version 6.00.8168
> Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib
> shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib
> shell32.lib ole32.lib oleaut32.lib
> uuid.lib odbc32.lib odbccp32.lib gdk-1.3.lib glib-1.3.lib libCint.lib
> libCore.lib libEG.lib libEGPythia6.lib libfreetype.lib libFumili.lib
> libGeom.lib libGeomPainter.lib libGpad.lib libGraf.lib libGraf3d.lib
> libGui.lib libHbook.lib libHist.lib libHi
> stPainter.lib libHtml.lib libMatrix.lib libMinuit.lib libMLP.lib
> libPhysics.lib libPostscript.lib libProof.lib libProofGui.lib
libRFIO.lib
> libRGL.lib libRint.lib libTable.lib libTree.lib libTreePlayer.lib
> libTreeViewer.lib libVMC.lib libWin32gdk.lib
>  /pdb:none /debug /machine:IX86 "/out:Debug/TestConsole.exe"
> "/libpath:p:/root_v3.10.02.win32gdk_Debug/lib" -opt:ref
> /subsystem:console,4.0
> .\Debug\TestConsole.obj
> 
> TestConsole.exe - 0 error(s), 0 warning(s)
> 
> ------------------- QUOTE : Console ouput
> 
> Using ROOTSYS p:\root_v3.10.02.win32gdk_Debug
> Using DYNAMIC PATH
>
.;p:\root_v3.10.02.win32gdk_Debug/bin;C:\WINNT\system32;C:\WINNT;C:\WINN
T\Sy
>
stem32\Wbem;C:\DLL-PWB-OLD;C:\DLL-PWB-NEW;w:\oracle\ora81\bin;w:\oracle\
jre\
>
1.1.7\bin;W:\ORAWIN\BIN;p:\root_v3.10.02.win32gdk_Debug\bin;p:\vni\cnl50
\bin
>
;p:\rcs;p:\AnciantLocal\FTCCDSensor;p:\anciantlocal\simualgo\main\bin;p:
\bin
> ;p:\VS\VC98\bin;p:\Visual Studio\MSDev98\bin
> Using MACRO PATH .;p:\root_v3.10.02.win32gdk_Debug/macros
> Error in <TWinNTSystem::BaseName>: name = 0
> 
> > -----Message d'origine-----
> > De:	Brandon Kohn [SMTP:blk@maia-institute.org]
> > Date:	jeudi 8 janvier 2004 12:15
> > À:	ANCIANT E.; 'Valeri Fine'; 'Rene Brun'; 'roottalk@root.cern.ch'
> > Objet:	Re: [ROOT]
> >
> > Assuming that you are using the latest version of ROOT, the problem
with
> > resizing (really refreshing the canvas) is due to the fact that you
must
> > have the instance of the application running it's event loop. This
is done
> > using TApplication::Run(); Try placing this at the end of your test
> > program,
> > and see if you get resizing behavior then.
> >
> > Regards
> > Brandon
> > ----- Original Message -----
> > From: "ANCIANT E." <eric_anciant@sodern.fr>
> > To: "'Valeri Fine'" <fine@bnl.gov>; "'Brandon Kohn'"
> > <blk@maia-institute.org>; "'Rene Brun'" <Rene.Brun@cern.ch>;
> > "'roottalk@root.cern.ch'" <roottalk@pcroot.cern.ch>
> > Sent: Thursday, January 08, 2004 11:11 AM
> > Subject: RE: [ROOT]
> >
> >
> > > Thanks a lot for the quick help,
> > >
> > > indeed, instanciating one TApplication solve my "pop-up" problem
> > > no need to have it run ( which is not what I was looking for since
I use
> > > Root
> > > rather as a display facility .. )
> > >
> > > however now I got an Error message :
> > >
> > > Error in <TWinNTSystem::BaseName>: name = 0
> > >
> > > Besides, when I try to resize the window of my canvas (without the
> > > TApplication instance running),
> > > the content of the window (Canvas?, pads, histograms ..) don't get
> > resized.
> > >
> > > I don't know if it is linked to the error message.
> > >
> > > Or I guess I could wrap everything within the App and launch my
> > application
> > > through a button ?
> > >
> > > regards,
> > >
> > > eric
> > >
> > >
> > >
> > >
> > > > -----Message d'origine-----
> > > > De: Valeri Fine [SMTP:fine@bnl.gov]
> > > > Date: mercredi 7 janvier 2004 18:23
> > > > À: 'Brandon Kohn'; 'ANCIANT E.'; 'roottalk@root.cern.ch'
> > > > Objet: RE: [ROOT]
> > > >
> > > > I think the reason for your troubles is the "gdk" version.
> > > > Did you say you did use very "gdk" in past?
> > > >
> > > No, it is the first time I try GDK ( before I was using root 3.02
> > > with win32 )
> > > >
> > >



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET