适用范围:支持矢量字库的MStar平台
关键字: 矢量字库
说明:
主要以3391平台的code实例说明:假设UI中同时用到三种大小字体,其中small要用A字库,normal和large要用B字库。
方法是在现有一种矢量字体的基础上增加一种出来(看宏定义ENABLE_TWO_VECTOR_MVF):
#if ENABLE_TWO_VECTOR_MVF
#define BIN_ID_FONT_MSTAR_MVF_ATSC 0x01A2 //~164KB [url=]//@..\..\..\tv-ap\atsc\ui2\font\MStar_ATSC.mvf[/url]
#define BIN_ID_FONT_MSTAR_MVF_ATSC_NEW 0x01A3 //~100KB [url=]//@..\..\..\tv-ap\atsc\ui2\font\MStar_ATSC_New.mvf[/url]
#else
.............
.............
#if VECTOR_FONT_ENABLE
BinItem(BIN_ID_FONT_MSTAR_MVF_ATSC),
#if ENABLE_TWO_VECTOR_MVF
BinItem(BIN_ID_FONT_MSTAR_MVF_ATSC_NEW),
#endif
#if ENABLE_LANGUAGE_KOREA
BinItem(BIN_ID_FONT_KOREA_20),
#endif
#else
..................
.................
#define FONT_MSTAR_UNICODE_MVF BIN_ID_FONT_MSTAR_MVF_ATSC
#if ENABLE_TWO_VECTOR_MVF
#define FONT_MSTAR_UNICODE_MVF_NEW BIN_ID_FONT_MSTAR_MVF_ATSC_NEW
#endif
.................
.................
#if VECTOR_FONT_ENABLE
void MApp_LoadFont_SetVecFontInfo(LOADFONT_STRUCT* strfont, U8 u8Begin, U8 u8End)
{
msAPI_Font_MVF_LoadFont(strfont, u8Begin, u8End);
}
#if ENABLE_TWO_VECTOR_MVF
void MApp_LoadFont_SetVecFontInfo_New(LOADFONT_STRUCT* strfont, U8 u8Begin, U8 u8End)
{
msAPI_Font_MVF_LoadFont_New(strfont, u8Begin, u8End);
}
#endif
#endif
.......................
......................
#if ENABLE_TWO_VECTOR_MVF //A字库
LOADFONT_STRUCT font_info_new[] =
{
// small
{
.FontID = FONT_0,
.output_bpp = 2,
.output_size = 22,
.output_width = 11,
.output_height = 22,
.unicode_from = { 0x0020, 0},
.unicode_to = { 0xFFFF, 0},
},
};
#endif
LOADFONT_STRUCT font_info[] =//B字库
{
//large
{
.FontID = FONT_1,
.output_bpp = 2,
.output_size = 30,
.output_width = 30,
.output_height = 37,
.unicode_from = { 0x0020, 0},
.unicode_to = { 0xFFFF, 0},
},
//normal
{
.FontID = FONT_2,
.output_bpp = 2,
.output_size = 24,
.output_width = 24,
.output_height = 29,
.unicode_from = { 0x0020, 0},
.unicode_to = { 0xFFFF, 00},
},
};
.............
..............#if VECTOR_FONT_ENABLE
static void MApp_LoadFontInit_VEC(void)
{
U8 u8num = sizeof(font_info)/sizeof(LOADFONT_STRUCT) - 1;
MApp_LoadFont_SetVecFontInfo(font_info, 0, u8num);
}
#if ENABLE_TWO_VECTOR_MVF
static void MApp_LoadFontInit_VEC_NEW(void)
{
U8 u8num = sizeof(font_info_new)/sizeof(LOADFONT_STRUCT) - 1;
MApp_LoadFont_SetVecFontInfo_New(font_info_new, 0, u8num);
}
#endif
#endif
....................
......................
#if ENABLE_TWO_VECTOR_MVF
MApp_LoadFontInit_VEC_NEW();
#endif
MApp_LoadFontInit_VEC();
..............
..............
#if ENABLE_TWO_VECTOR_MVF
void msAPI_Font_MVF_LoadFont_New(LOADFONT_STRUCT* font_info, U8 u8Begin, U8 u8End)
{
U8 i;
if (msAPI_Font_MVF_LoadFlashFontToSDRAM(FONT_MSTAR_UNICODE_MVF_NEW))
{
for(i=u8Begin; i<=u8End; i++)
{
msAPI_Font_MVF_AddBitmapSize(
font_info.FontID, font_info.output_bpp,
font_info.output_size, font_info.output_width,
font_info.output_height, font_info.unicode_from,
font_info.unicode_to);
}
msAPI_Font_MVF_StartGenerateBitmaps(); //NOTE: non-blocking function!
}
msAPI_Font_MVF_EndGenerateBitmaps();
}
#endif
|