diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Xbox/Font/XUI_FontData.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Xbox/Font/XUI_FontData.h')
| -rw-r--r-- | Minecraft.Client/Xbox/Font/XUI_FontData.h | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/Minecraft.Client/Xbox/Font/XUI_FontData.h b/Minecraft.Client/Xbox/Font/XUI_FontData.h new file mode 100644 index 00000000..af18c7a6 --- /dev/null +++ b/Minecraft.Client/Xbox/Font/XUI_FontData.h @@ -0,0 +1,147 @@ +#pragma once +using namespace std; +#include <xuirender.h> + +#include "..\..\Common\UI\UIFontData.h" + +// 4J This class is partially based of the ATG font implementation +//-------------------------------------------------------------------------------------- +// Name: GLYPH_ATTR +// Desc: Structure to hold information about one glyph (font character image) +//-------------------------------------------------------------------------------------- +typedef struct GLYPH_ATTR +{ + WORD tu1, tv1, tu2, tv2; // Texture coordinates for the image + SHORT wOffset; // Pixel offset for glyph start + SHORT wWidth; // Pixel width of the glyph + SHORT wAdvance; // Pixels to advance after the glyph + WORD wMask; // Channel mask +} GLYPH_ATTR; + +// +// These two structures are mapped to data loaded from disk. +// DO NOT ALTER ANY ENTRIES OR YOU WILL BREAK +// COMPATIBILITY WITH THE FONT FILE +// + +// Font description + +#define ATGCALCFONTFILEHEADERSIZE(x) ( sizeof(DWORD) + (sizeof(FLOAT)*4) + sizeof(WORD) + (sizeof(WCHAR)*(x)) ) +#define ATGFONTFILEVERSION 5 + +typedef struct FontFileHeaderImage_t { + DWORD m_dwFileVersion; // Version of the font file (Must match FONTFILEVERSION) + FLOAT m_fFontHeight; // Height of the font strike in pixels + FLOAT m_fFontTopPadding; // Padding above the strike zone + FLOAT m_fFontBottomPadding; // Padding below the strike zone + FLOAT m_fFontYAdvance; // Number of pixels to move the cursor for a line feed + WORD m_cMaxGlyph; // Number of font characters (Should be an odd number to maintain DWORD Alignment) + WCHAR m_TranslatorTable[1]; // ASCII to Glyph lookup table, NOTE: It's m_cMaxGlyph+1 in size. + // Entry 0 maps to the "Unknown" glyph. +} FontFileHeaderImage_t; + +// Font strike array. Immediately follows the FontFileHeaderImage_t +// structure image + +typedef struct FontFileStrikesImage_t { + DWORD m_dwNumGlyphs; // Size of font strike array (First entry is the unknown glyph) + GLYPH_ATTR m_Glyphs[1]; // Array of font strike uv's etc... NOTE: It's m_dwNumGlyphs in size +} FontFileStrikesImage_t; + +typedef struct _CharMetrics +{ + // units are pixels at current font size + + float fMinX; // min x coordinate + float fMinY; // min y coordinate + float fMaxX; // max x coordinate + float fMaxY; // max y coordinate + float fAdvance; // advance value +} CharMetrics; + +class XUI_FontData +{ +public: + int getMaxGlyph(); + float getFontHeight(); + float getFontTopPadding(); + float getFontBottomPadding(); + float getFontYAdvance(); + float getFontMaxWidth(); + float getMaxDescent(); + float getMaxAscent(); + int getImageWidth(); + int getImageHeight(); + + typedef struct + { + friend class XUI_FontData; + + private: + unsigned short m_glyphId; + XUI_FontData *m_parent; + + public: + bool hasChar() { return true; } + float getMinX(); + float getMinY(); + float getMaxX(); + float getMaxY(); + float getAdvance(); + int getGlyphId(); + int tu1(); + int tu2(); + int tv1(); + int tv2(); // Texture coordinates for the image + short getOffset(); // Pixel offset for glyph start + short getWidth(); // Pixel width of the glyph + short getWAdvance(); // Pixels to advance after the glyph + WORD getMask(); // Channel mask, tv2; + } SChar; + + SChar getChar(const wchar_t strChar); + + // D3D rendering objects + D3DTexture* m_pFontTexture; + int m_iFontTexture; + +private: + unordered_map<wchar_t, unsigned short> m_TranslatorMap; + + CharMetrics *m_characterMetrics; + + // Translator table for supporting unicode ranges + DWORD m_cMaxGlyph; // Number of entries in the translator table + + // Glyph data for the font + DWORD m_dwNumGlyphs; // Number of valid glyphs + GLYPH_ATTR* m_Glyphs; // Array of glyphs + + DWORD m_dwNestedBeginCount; + + +protected: + CFontData *m_fontData; + +public: + // Accessor functions + inline D3DTexture* GetTexture() const + { + return m_pFontTexture; + } + +public: + XUI_FontData(); + ~XUI_FontData(); + + // Functions to create and destroy the internal objects + HRESULT Create( SFontData &sfontdata ); + //HRESULT Create( D3DTexture* pFontTexture, const VOID* pFontData ); + HRESULT Create( int iFontTexture, const VOID* pFontData ); + VOID Destroy(); + + //FLOAT GetCharAdvance( const WCHAR* strChar ); + //FLOAT GetCharWidth( const WCHAR* strChar ); + //void GetCharMetrics( const WCHAR* strChar, XUICharMetrics *xuiMetrics); + //unsigned short getGlyphId(wchar_t character); +};
\ No newline at end of file |
