/// \file
/// \ingroup tutorial_legacy
/// Produce a picture of the ROOT environment.
///
/// \macro_image
/// \macro_code
///
/// \author Rene Brun

{
   gROOT->Reset();
   auto c1 = new TCanvas("c1","ROOT Environment Canvas",720,840);
   c1->Range(0,-0.25,19,29);
   TPaveLabel title(3,27.1,15,28.7,"ROOT Environment and Tools");
   title.SetFillColor(42);
   title.SetTextColor(5);
   title.SetTextFont(62);
   title.Draw();

   //
   TArrow ardash(2,15,2,3.5,0.015,"|>");
   ardash.SetLineStyle(kDashed);
   ardash.SetFillColor(1);
   ardash.Draw();
   TLine l1(2.5,4.5,15.5,4.5);
   l1.Draw();
   l1.DrawLine(4.5,15,4.5,11);
   l1.DrawLine(13,10,13,15.5);
   l1.DrawLine(14,10,13,10);
   l1.DrawLine(14,15.5,13,15.5);
   TArrow ar(9,23,9,21.6,0.015,"|>");
   ar.SetFillColor(1);
   //
   TPavesText UserChtml(0.5,0.5,4.5,3,5,"tr");
   UserChtml.AddText("Files with hyperlinks");
   TText *t1=UserChtml.AddText("*User.C.html");
   TText *t2=UserChtml.AddText("*User.mac.html");
   t1->SetTextColor(4);
   t2->SetTextColor(4);
   UserChtml.Draw();
   ar.DrawArrow(2.5,4.5,2.5,3.5,0.015,"|>");
   //
   TPavesText UserTree(7,0.5,11,3,5,"tr");
   UserTree.AddText("Dictionary");
   UserTree.AddText("Inheritance graphs");
   TText *t3=UserTree.AddText("*User_Tree.ps");
   t3->SetTextColor(4);
   UserTree.Draw();
   ar.DrawArrow(9,5.5,9,3.5,0.015,"|>");
   //
   TPavesText Userhtml(13.5,0.5,17.5,3,5,"tr");
   Userhtml.AddText("Class Description");
   Userhtml.AddText("with references");
   TText *t4=Userhtml.AddText("*User.html");
   t4->SetTextColor(4);
   Userhtml.Draw();
   ar.DrawArrow(15.5,4.5,15.5,3.5,0.015,"|>");
   //
   TPavesText Macros(0.5,8,3.5,11,5,"tr");
   Macros.AddText("Macros");
   Macros.AddText("Log files");
   TText *t5=Macros.AddText("*User.mac");
   TText *t5a=Macros.AddText("*User.log");
   t5->SetTextColor(4);
   t5a->SetTextColor(4);
   Macros.Draw();
   //
   TPavesText UserC(1,15,5,18,5,"tr");
   UserC.AddText("C++ application");
   UserC.AddText("source code");
   TText *t6=UserC.AddText("*User.C");
   t6->SetTextColor(4);
   UserC.Draw();
   ar.DrawArrow(4.5,11,5.8,11,0.015,"|>");
   //
   TPavesText Userh(6,23,12,26,5,"tr");
   Userh.AddText("C++ header files");
   TText *t7=Userh.AddText("*User.h");
   t7->SetTextColor(4);
   Userh.SetFillColor(11);
   Userh.Draw();
   ar.DrawArrow(9,23,9,21.6,0.015,"|>");
   //
   TPavesText UserUI(6.5,14,11.5,17,5,"tr");
   UserUI.AddText("C++ code for");
   UserUI.AddText("User Interface and I/O");
   TText *t8=UserUI.AddText("*UserUI.C");
   t8->SetTextColor(4);
   UserUI.Draw();
   ar.DrawArrow(9,18.5,9,17.3,0.015,"|>");
   ar.DrawArrow(9,14,9,12.6,0.015,"|>");
   //
   TPavesText Usersl(14,14,17.5,17,5,"tr");
   Usersl.AddText("User");
   Usersl.AddText("Libraries");
   TText *t9=Usersl.AddText("*User.sl");
   t9->SetTextColor(4);
   Usersl.Draw();
   ar.DrawArrow(13,11,12.1,11,0.015,"|>");
   //
   TPavesText Rootlib(14,8.5,17.5,11.5,5,"tr");
   Rootlib.AddText("Root Library");
   Rootlib.AddText("and Includes");
   TText *t10=Rootlib.AddText("Root.sl");
   TText *t11=Rootlib.AddText("Root/include");
   t10->SetTextColor(4);
   t11->SetTextColor(4);
   Rootlib.Draw();
   //
   TEllipse dict(9,20,3,1.5);
   dict.SetFillColor(43);
   dict.SetFillStyle(1001);
   dict.SetLineColor(1);
   dict.SetLineWidth(3);
   dict.Draw();
   TText gen(9,20.7,"rootcint");
   gen.SetTextAlign(22);
   gen.SetTextSize(0.025);
   gen.Draw();
   gen.DrawText(9,19.5,"ROOT compiler");
   ar.DrawArrow(9,18.5,9,17.3,0.015,"|>");
   //
   TEllipse compiler(9,11,3,1.5);
   compiler.SetFillColor(43);
   compiler.SetFillStyle(1001);
   compiler.SetLineColor(1);
   compiler.SetLineWidth(3);
   compiler.Draw();
   TText gen2(9,11.4,"C++ compiler");
   gen2.SetTextAlign(22);
   gen2.SetTextSize(0.025);
   gen2.Draw();
   gen2.DrawText(9,10.3,"and Linker");
   ar.DrawArrow(9,9.5,9,8.2,0.015,"|>");
   //
   TPaveText exe(6,5.5,12,8);
   exe.SetFillColor(41);
   exe.AddText("ROOT-based Application");
   exe.AddText("Interactive or Batch");
   TText *t12=exe.AddText("User.exe");
   t12->SetTextColor(2);
   exe.Draw();

   c1->Modified();
   c1->Print("rootenv.ps");
}
