first commit
This commit is contained in:
147
Minecraft.Client/Xbox/Font/XUI_FontData.h
Normal file
147
Minecraft.Client/Xbox/Font/XUI_FontData.h
Normal file
@@ -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);
|
||||
};
|
||||
Reference in New Issue
Block a user