// @(#)root/gui:$Name: $:$Id: TGResourcePool.cxx,v 1.5 2005/06/18 09:58:57 brun Exp $
// Author: Fons Rademakers 19/5/2003
/*************************************************************************
* Copyright (C) 1995-2003, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
/**************************************************************************
This source is based on Xclass95, a Win95-looking GUI toolkit.
Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.
Xclass95 is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
**************************************************************************/
//////////////////////////////////////////////////////////////////////////
// //
// TGResourcePool //
// //
// This class implements a pool for the default GUI resource set, //
// like GC's, colors, fonts, etc.. //
// //
//////////////////////////////////////////////////////////////////////////
#ifdef HAVE_CONFIG
#include "config.h"
#endif
#include "TGResourcePool.h"
#include "TGClient.h"
#include "TGWindow.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TEnv.h"
#include "TVirtualX.h"
#include "TGGC.h"
#include "TGPicture.h"
#include "TGFont.h"
#include "TGMimeTypes.h"
const int gray_width = 8;
const int gray_height = 8;
static unsigned char gray_bits[] = {
0x55, 0xaa, 0x55, 0xaa,
0x55, 0xaa, 0x55, 0xaa
};
ClassImp(TGResourcePool)
//______________________________________________________________________________
TGResourcePool::TGResourcePool(TGClient *client)
{
// Create the global GUI resource pool manager.
fClient = client;
fDefaultColormap = gVirtualX->GetColormap();
// Get GUI defaults from [system].rootrc
char default_font[256];
char menu_font[256];
char menu_hi_font[256];
char doc_fixed_font[256];
char doc_prop_font[256];
char icon_font[256];
char status_font[256];
char backcolor[256];
char forecolor[256];
char selbackcolor[256];
char selforecolor[256];
char docbackcolor[256];
char docforecolor[256];
char tipbackcolor[256];
char tipforecolor[256];
char framebgpixmap[2048], docbgpixmap[2048];
char icon_path[2048], mime_file[256], line[2048];
strcpy(default_font, gEnv->GetValue("Gui.DefaultFont", "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-1"));
strcpy(menu_font, gEnv->GetValue("Gui.MenuFont", "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-1"));
strcpy(menu_hi_font, gEnv->GetValue("Gui.MenuHiFont", "-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1"));
strcpy(doc_fixed_font, gEnv->GetValue("Gui.DocFixedFont", "-adobe-courier-medium-r-*-*-12-*-*-*-*-*-iso8859-1"));
strcpy(doc_prop_font, gEnv->GetValue("Gui.DocPropFont", "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-1"));
strcpy(icon_font, gEnv->GetValue("Gui.IconFont", "-adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-iso8859-1"));
strcpy(status_font, gEnv->GetValue("Gui.StatusFont", "-adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-iso8859-1"));
strcpy(backcolor, gEnv->GetValue("Gui.BackgroundColor", "#c0c0c0"));
strcpy(forecolor, gEnv->GetValue("Gui.ForegroundColor", "black"));
strcpy(selbackcolor, gEnv->GetValue("Gui.SelectBackgroundColor", "#000080"));
strcpy(selforecolor, gEnv->GetValue("Gui.SelectForegroundColor", "white"));
strcpy(docbackcolor, gEnv->GetValue("Gui.DocumentBackgroundColor", "white"));
strcpy(docforecolor, gEnv->GetValue("Gui.DocumentForegroundColor", "black"));
strcpy(tipbackcolor, gEnv->GetValue("Gui.TooltipBackgroundColor", "LightYellow"));
strcpy(tipforecolor, gEnv->GetValue("Gui.TooltipForegroundColor", "black"));
strcpy(framebgpixmap, gEnv->GetValue("Gui.FrameBackgroundPixmap", ""));
strcpy(docbgpixmap, gEnv->GetValue("Gui.DocumentBackgroundPixmap", ""));
#ifndef GDK_WIN32
#ifndef R__VMS
# ifdef ROOTICONPATH
sprintf(icon_path, "%s/icons:%s:.:",
gSystem->Getenv("HOME"),
ROOTICONPATH);
# ifdef EXTRAICONPATH
strcat(icon_path, gEnv->GetValue("Gui.IconPath", EXTRAICONPATH));
# else
strcat(icon_path, gEnv->GetValue("Gui.IconPath", ""));
# endif
# else
sprintf(icon_path, "%s/icons:%s/icons:.:", gSystem->Getenv("HOME"),
gSystem->Getenv("ROOTSYS"));
strcat(icon_path, gEnv->GetValue("Gui.IconPath", ""));
# endif
sprintf(line, "%s/.root.mimes", gSystem->Getenv("HOME"));
#else
sprintf(line,"[%s.ICONS]",gSystem->Getenv("ROOTSYS"));
strcpy(icon_path, gEnv->GetValue("Gui.IconPath",line));
sprintf(line,"%sroot.mimes",gSystem->Getenv("HOME"));
#endif
strcpy(mime_file, gEnv->GetValue("Gui.MimeTypeFile", line));
char *mf = gSystem->ExpandPathName(mime_file);
if (mf) {
strcpy(mime_file, mf);
delete [] mf;
}
if (gSystem->AccessPathName(mime_file, kReadPermission))
#ifdef R__VMS
sprintf(mime_file,"[%s.ETC]root.mimes",gSystem->Getenv("ROOTSYS"));
#else
# ifdef ROOTETCDIR
sprintf(mime_file, "%s/root.mimes", ROOTETCDIR);
# else
sprintf(mime_file, "%s/etc/root.mimes", gSystem->Getenv("ROOTSYS"));
# endif
#endif
#else // GDK_WIN32
sprintf(icon_path, "%s\\icons:.:\\", gSystem->Getenv("ROOTSYS"));
strcat(icon_path, gEnv->GetValue("Gui.IconPath", ""));
sprintf(line, "%s\\root.mimes", gSystem->Getenv("HOME"));
strcpy(mime_file, gEnv->GetValue("Gui.MimeTypeFile", line));
if (gSystem->AccessPathName(mime_file, kReadPermission))
sprintf(mime_file, "%s\\etc\\root.mimes", gSystem->Getenv("ROOTSYS"));
#endif // GDK_WIN32
// Setup colors...
fClient->GetColorByName("white", fWhite); // white and black always exist
fClient->GetColorByName("black", fBlack);
if (!fClient->GetColorByName(backcolor, fBackColor))
fBackColor = fWhite;
if (!fClient->GetColorByName(forecolor, fForeColor))
fForeColor = fBlack;
fHilite = fClient->GetHilite(fBackColor);
fShadow = fClient->GetShadow(fBackColor);
if (!fClient->GetColorByName(selbackcolor, fSelBackColor))
fSelBackColor = fBlack;
if (!fClient->GetColorByName(selforecolor, fSelForeColor))
fSelForeColor = fWhite;
if (!fClient->GetColorByName(docbackcolor, fDocBackColor))
fDocBackColor = fWhite;
if (!fClient->GetColorByName(docforecolor, fDocForeColor))
fDocForeColor = fBlack;
if (!fClient->GetColorByName(tipbackcolor, fTipBackColor))
fTipBackColor = fWhite;
if (!fClient->GetColorByName(tipforecolor, fTipForeColor))
fTipForeColor = fBlack;
// Setup checkered pix/bit-maps...
fCheckered = gVirtualX->CreatePixmap(fClient->GetDefaultRoot()->GetId(),
(const char *)gray_bits,
gray_width, gray_height,
fBackColor, fWhite /*fHilite*/,
gVirtualX->GetDepth());
fCheckeredBitmap = gVirtualX->CreatePixmap(fClient->GetDefaultRoot()->GetId(),
(const char *)gray_bits,
gray_width, gray_height,
1, 0, 1);
// Create picture pool, GC pool, font pool, mime type list, etc.
// Create picture pool and pre-load some pictures...
fPicturePool = new TGPicturePool(fClient, icon_path);
fDefaultBackPicture = 0;
fDefaultDocBackPicture = 0;
if (strlen(framebgpixmap))
fDefaultBackPicture = fPicturePool->GetPicture(framebgpixmap);
if (strlen(docbgpixmap))
fDefaultDocBackPicture = fPicturePool->GetPicture(docbgpixmap);
// Create font pool and pre-load some fonts...
fFontPool = new TGFontPool(fClient);
fDefaultFont = fFontPool->GetFont(default_font);
fMenuFont = fFontPool->GetFont(menu_font);
fMenuHiFont = fFontPool->GetFont(menu_hi_font);
fDocFixedFont = fFontPool->GetFont(doc_fixed_font);
fDocPropFont = fFontPool->GetFont(doc_prop_font);
fIconFont = fFontPool->GetFont(icon_font);
fStatusFont = fFontPool->GetFont(status_font);
// Create GC pool and pre-load some GCs...
fGCPool = new TGGCPool(fClient);
GCValues_t gval;
gval.fMask = kGCForeground | kGCBackground | kGCFont |
kGCFillStyle | kGCGraphicsExposures;
gval.fGraphicsExposures = kFALSE;
gval.fFillStyle = kFillSolid;
gval.fFont = fDefaultFont->GetFontHandle();
gval.fBackground = fBackColor;
gval.fForeground = fBlack;
fBlackGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fWhite;
fWhiteGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fHilite;
fHiliteGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fShadow;
fShadowGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fBackColor;
fBckgndGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fForeColor;
fFrameGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fSelBackColor;
fSelbgndGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fSelForeColor;
gval.fBackground = fSelBackColor;
fSelGC = fGCPool->GetGC(&gval, kTRUE);
gval.fFont = fDocPropFont->GetFontHandle();
gval.fForeground = fDocForeColor;
gval.fBackground = fDocBackColor;
fDocGC = fGCPool->GetGC(&gval, kTRUE);
gval.fForeground = fDocBackColor;
fDocbgndGC = fGCPool->GetGC(&gval, kTRUE);
gval.fFont = fStatusFont->GetFontHandle();
gval.fForeground = fTipForeColor;
gval.fBackground = fTipBackColor;
fTipGC = fGCPool->GetGC(&gval, kTRUE);
gval.fMask = kGCForeground | kGCBackground | kGCFillStyle |
kGCLineWidth | kGCSubwindowMode |
kGCGraphicsExposures | kGCStipple;
gval.fForeground = fBlack;
gval.fBackground = fSelBackColor;
gval.fLineWidth = 0;
gval.fFillStyle = kFillStippled;
gval.fSubwindowMode = kIncludeInferiors;
gval.fGraphicsExposures = kFALSE;
gval.fStipple = fCheckeredBitmap;
fFocusGC = fGCPool->GetGC(&gval, kTRUE);
// Setup cursors...
fDefaultCursor = kNone;
fGrabCursor = gVirtualX->CreateCursor(kArrowRight);
fTextCursor = gVirtualX->CreateCursor(kCaret);
fWaitCursor = gVirtualX->CreateCursor(kWatch);
// Read in mime type...
fMimeTypeList = new TGMimeTypes(fClient, mime_file);
// Clipboard handle...
#ifndef GDK_WIN32
fClipboardAtom = gVirtualX->InternAtom("_ROOT_CLIPBOARD", kFALSE);
#else
fClipboardAtom = gVirtualX->InternAtom("CLIPBOARD", kFALSE);
#endif
}
//______________________________________________________________________________
TGResourcePool::~TGResourcePool()
{
// Cleanup the resource pool...
delete fPicturePool;
delete fFontPool;
delete fGCPool;
delete fMimeTypeList;
gVirtualX->DeletePixmap(fCheckered);
gVirtualX->DeletePixmap(fCheckeredBitmap);
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.