//C++ header - Open Scene Graph - Copyright (C) 1998-2001 Robert Osfield //Distributed under the terms of the GNU Library General Public License (LGPL) //as published by the Free Software Foundation. /* -------------------------------------------------------------------------- * * openscenegraph textLib / FTGL wrapper * * -------------------------------------------------------------------------- * * prog: max rheiner;mrn@paus.ch * date: 4/25/2001 (m/d/y) * * -------------------------------------------------------------------------- * * -------------------------------------------------------------------------- */ #ifndef OSGTEXT_FONT #define OSGTEXT_FONT 1 #include #include #include #include // http://homepages.paradise.net.nz/henryj/code/ class FTFont; namespace osgText { /** META_Font macro define the standard clone, isSameKindAs, * className and getType methods. * Use when subclassing from Object to make it more convinient to define * the standard pure virtual methods which are required for all Object * subclasses.*/ #define META_Font(library,name) \ virtual osg::Object* cloneType() const { return new name(); } \ virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new name (*this,copyop); } \ virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast(obj)!=NULL; } \ virtual const char* libraryName() const { return #library; } \ virtual const char* className() const { return #name; } \ class OSGTEXT_EXPORT Font : public osg::Object { public: Font(); Font(const Font& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): osg::Object(font,copyop), _init(false), _created(false), _font(0L), _fontName(font._fontName), _pointSize(font._pointSize), _res(font._res), _textureSize(font._textureSize) {} virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast(obj)!=NULL; } virtual const char* libraryName() const { return "osgText"; } virtual const char* className() const { return "Font"; } bool open(const char* font); bool open(const std::string& font); virtual bool create(osg::State& state,int pointSize, const unsigned int res = 72 ); virtual bool create(osg::State& state); virtual void output(osg::State& state,const char* text); virtual bool isOk(void) const { return _init; } virtual bool isCreated(void) const { return isOk() && _created; } virtual float getWidth(const char* text) const; virtual int getHeight() const; virtual int getDescender() const; virtual int getAscender() const; int getPointSize(void) const { return _pointSize; } int getTextureSize(void) const { return _textureSize; } const std::string& getFontName() const { return _fontName; } /// Transfer font settings to another Font object and invalidate this one. void copyAndInvalidate(Font &dest); FTFont* getFont(void) { return _font; } protected: virtual ~Font(); virtual void clear(); virtual FTFont* createFontObj(void)=0; bool init(const std::string& font); bool _init; bool _created; FTFont* _font; std::string _fontName; int _pointSize; int _res; int _textureSize; }; class OSGTEXT_EXPORT RasterFont:public Font { public: RasterFont():Font(){} RasterFont(const RasterFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): Font(font,copyop) {} RasterFont(const std::string& /*font*/):Font() {} virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast(obj)!=NULL; } virtual const char* libraryName() const { return "osgText"; } virtual const char* className() const { return "RasterFont"; } protected: }; class OSGTEXT_EXPORT VectorFont:public Font { public: VectorFont():Font(){} VectorFont(const VectorFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): Font(font,copyop) {} VectorFont(const std::string& /*font*/):Font(){} virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast(obj)!=NULL; } virtual const char* libraryName() const { return "osgText"; } virtual const char* className() const { return "VectorFont"; } protected: double _precision; }; class OSGTEXT_EXPORT BitmapFont:public RasterFont { public: BitmapFont() {} BitmapFont(const BitmapFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): RasterFont(font,copyop) {} BitmapFont(const std::string& font, int point_size); META_Font(osgText,BitmapFont); protected: virtual FTFont* createFontObj(void); }; class OSGTEXT_EXPORT PixmapFont:public RasterFont { public: PixmapFont() {} PixmapFont(const PixmapFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): RasterFont(font,copyop) {} PixmapFont(const std::string& font, int point_size); META_Font(osgText,PixmapFont); protected: virtual FTFont* createFontObj(void); }; class OSGTEXT_EXPORT TextureFont:public RasterFont { public: TextureFont() {} TextureFont(const TextureFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): RasterFont(font,copyop) {} TextureFont(const std::string& font, int point_size); TextureFont(const std::string& font, int point_size, int textureSize ); META_Font(osgText,TextureFont); protected: virtual FTFont* createFontObj(void); }; class OSGTEXT_EXPORT OutlineFont:public VectorFont { public: OutlineFont() {} OutlineFont(const OutlineFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): VectorFont(font,copyop) {} OutlineFont(const std::string& font, int point_size, double precision); META_Font(osgText,OutlineFont); protected: virtual FTFont* createFontObj(void); }; class OSGTEXT_EXPORT PolygonFont:public VectorFont { public: PolygonFont() {} PolygonFont(const PolygonFont& font,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): VectorFont(font,copyop) {} PolygonFont(const std::string& font, int point_size, double precision); PolygonFont(const char* font, int point_size, double precision); META_Font(osgText,PolygonFont); protected: virtual FTFont* createFontObj(void); }; } #endif // OSGTEXT_FONT