// @(#)root/graf2d:$Id$ // Author: Timur Pocheptsov 19/03/2012 /************************************************************************* * Copyright (C) 1995-2012, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef ROOT_FontCache #define ROOT_FontCache #include #include #include #include #include #ifndef ROOT_XLFDParser #include "XLFDParser.h" #endif #ifndef ROOT_GuiTypes #include "GuiTypes.h" #endif ////////////////////////////////////////////////////////////////// // // // FontCache class: // // ROOT's GUI relies on TVirtualX to create and use fonts, // // fonts are referenced by integer identifiers. // // // ////////////////////////////////////////////////////////////////// namespace ROOT { namespace MacOSX { namespace Details { class FontCache { public: enum Details { nPadFonts = 15 }; FontCache(); FontStruct_t LoadFont(const X11::XLFDName &xlfd); void UnloadFont(FontStruct_t font); char **ListFonts(const X11::XLFDName &xlfd, int maxNames, int &count); void FreeFontNames(char **fontList); unsigned GetTextWidth(FontStruct_t font, const char *text, int nChars); void GetFontProperties(FontStruct_t font, int &maxAscent, int &maxDescent); //Select the existing font or create a new one and select it. CTFontRef SelectFont(Font_t fontIndex, Float_t fontSize); //Typographical bounds (whatever it means), //for the current selected font and text. void GetTextBounds(UInt_t &w, UInt_t &h, const char *text)const; // double GetAscent()const; double GetDescent()const; double GetLeading()const; private: //We have "two symbolic" fonts, both of them use the same symbol.ttf (index 11), //but the second one (index CTFontRef SelectSymbolFont(Float_t fontSize, unsigned fontIndex); typedef Util::CFStrongReference CTFontGuard_t; //These are fonts for GUI. Weird map, as I can see now. std::map fLoadedFonts; typedef std::map::iterator font_iterator; typedef std::map::const_iterator const_font_iterator; //Fonts for TPad's graphics. typedef std::map FontMap_t; typedef FontMap_t::iterator font_map_iterator; typedef FontMap_t::const_iterator const_font_map_iterator; FontMap_t fFonts[nPadFonts]; CTFontRef fSelectedFont; //FontList can be requested by TGCocoa::ListFonts, //the return value is char **, and later it's freed by //TGCocoa::FreeFontNames, again using char **. //In my case, I have to somehow map char ** to two //data sets - char ** itself + real strings, whose //addresses are in char **. //fList, after it's filled and returned by TGCocoa, //is immutable, so later I can find this FontList //comparing char ** and &fList[0]. struct FontList { std::vector fList; std::vector fStringData; }; std::list fFontLists;//list of "lists" of fonts :) FontList fDummyList; typedef std::map PSNameMap_t; PSNameMap_t fXLFDtoPostscriptNames; FontCache(const FontCache &rhs); FontCache &operator = (const FontCache &rhs); bool fSymbolFontRegistered; }; } } } #endif