#pragma once class IntBuffer; class Options; class Textures; class Font { private: int *charWidths; public: int fontTexture; Random *random; private: int colors[32]; // RGB colors for formatting Textures *textures; float xPos; float yPos; bool enforceUnicodeSheet; // use unicode sheet for ascii bool bidirectional; // use bidi to flip strings int m_cols; // Number of columns in font sheet int m_rows; // Number of rows in font sheet int m_charWidth; // Maximum character width int m_charHeight; // Maximum character height TEXTURE_NAME m_textureName; // Texture std::map m_charMap; public: Font(Options *options, const wstring& name, Textures* textures, bool enforceUnicode, TEXTURE_NAME textureName, int cols, int rows, int charWidth, int charHeight, unsigned short charMap[] = NULL); // 4J Stu - This dtor clashes with one in xui! We never delete these anyway so take it out for now. Can go back when we have got rid of XUI ~Font(); void renderFakeCB(IntBuffer *cb); // 4J added private: void renderCharacter(wchar_t c); // 4J added public: void drawShadow(const wstring& str, int x, int y, int color); void drawShadowWordWrap(const wstring &str, int x, int y, int w, int color, int h); // 4J Added h param void draw(const wstring &str, int x, int y, int color); /** * Reorders the string according to bidirectional levels. A bit expensive at * the moment. * * @param str * @return */ private: wstring reorderBidi(const wstring &str); void draw(const wstring &str, bool dropShadow); void draw(const wstring& str, int x, int y, int color, bool dropShadow); int MapCharacter(wchar_t c); // 4J added bool CharacterExists(wchar_t c); // 4J added public: int width(const wstring& str); wstring sanitize(const wstring& str); void drawWordWrap(const wstring &string, int x, int y, int w, int col, int h); // 4J Added h param private: void drawWordWrapInternal(const wstring &string, int x, int y, int w, int col, int h); // 4J Added h param public: void drawWordWrap(const wstring &string, int x, int y, int w, int col, bool darken, int h); // 4J Added h param private: void drawWordWrapInternal(const wstring& string, int x, int y, int w, int col, bool darken, int h); // 4J Added h param public: int wordWrapHeight(const wstring& string, int w); void setEnforceUnicodeSheet(bool enforceUnicodeSheet); void setBidirectional(bool bidirectional); // 4J-PB - check for invalid player name - Japanese local name bool AllCharactersValid(const wstring &str); };