// Copyright (C) 2002-2012 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h #pragma once #include "IGUIFontBitmap.h" #include "irrString.h" #include "IReadFile.h" #include "irrArray.h" #include namespace irr { namespace video { class IVideoDriver; class IImage; } namespace gui { class IGUIEnvironment; class CGUIFont : public IGUIFontBitmap { public: //! constructor CGUIFont(IGUIEnvironment* env, const io::path& filename); //! destructor virtual ~CGUIFont(); //! loads a font from a texture file bool load(const io::path& filename); //! loads a font from a texture file bool load(io::IReadFile* file); //! draws an text and clips it to the specified rectangle if wanted virtual void draw(const core::stringw& text, const core::rect& position, video::SColor color, bool hcenter=false, bool vcenter=false, const core::rect* clip=0) override; //! returns the dimension of a text core::dimension2d getDimension(const wchar_t* text) const override; //! Calculates the index of the character in the text which is on a specific position. s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const override; //! Returns the type of this font EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; } //! set an Pixel Offset on Drawing ( scale position on width ) void setKerningWidth (s32 kerning) override; void setKerningHeight (s32 kerning) override; //! set an Pixel Offset on Drawing ( scale position on width ) s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override; s32 getKerningHeight() const override; //! gets the sprite bank IGUISpriteBank* getSpriteBank() const override; //! returns the sprite number from a given character u32 getSpriteNoFromChar(const wchar_t *c) const override; void setInvisibleCharacters( const wchar_t *s ) override; private: struct SFontArea { SFontArea() : underhang(0), overhang(0), width(0), spriteno(0) {} s32 underhang; s32 overhang; s32 width; u32 spriteno; }; //! load & prepare font from ITexture bool loadTexture(video::IImage * image, const io::path& name); void readPositions(video::IImage* texture, s32& lowerRightPositions); s32 getAreaFromCharacter (const wchar_t c) const; void setMaxHeight(); void pushTextureCreationFlags(bool(&flags)[3]); void popTextureCreationFlags(const bool(&flags)[3]); core::array Areas; std::map CharacterMap; video::IVideoDriver* Driver; IGUISpriteBank* SpriteBank; IGUIEnvironment* Environment; u32 WrongCharacter; s32 MaxHeight; s32 GlobalKerningWidth, GlobalKerningHeight; core::stringw Invisible; }; } // end namespace gui } // end namespace irr