📄 fontinfo.cpp
字号:
*pBuf = (_CHAR)0x84; } else if (0xB4 == uCh) { *pBuf = (_CHAR)0x93; } else { // /Convert chars that are not in iso-8859-7 to nbsp char: *pBuf = (_CHAR)0xA0; } } else if ((UINT8)(*pBuf) >= FIRST_UPPER_128_CHAR_INDEX) { // /Convert 0x80-0x9F chars that are not in iso-8859-5 to nbsp: *pBuf = (_CHAR)0xA0; } pBuf++; }; // /Caller should now be sure to handle the change in actual charset! }#endif /* end of #else (not Mac) */cleanup: return TRUE;}///////////////////////////////////////////////////////////////////////////////// This function returns the "width" in pixels of the character ch, given// the font face, font charset, font point size, and whether or not the// character is bold &/or italicized://// WARNING: the value returned may be an error (which is a negative number)// so you must check the return val before using it!//INT16 GetCharacterWidth(UINT16 ch, ULONG32 ulFontFaceIndex, ULONG32 ulFontPtSize, BOOL isBold, BOOL isItalicized, ULONG32 ulFontCharsetIndex){ if(ulFontCharsetIndex & HX_SBCS_CHARSET) { //CAUTION!: This HAS to be a double due to differences in the way // float calculations are done in release Vs. debug builds with the // Visual C++ compiler (at least version 5.0): double fontDerivativeScaleFactor = 1.0; if(ch<SBCS_FIRST_NON_CONTROL_CHAR) { return 0; } if(ch>=SBCS_NUM_CHARS) { switch(ulFontPtSize) { case 8: return UNKNOWN_TIMES_8PT_CHAR_WIDTH; case 10: return UNKNOWN_TIMES_10PT_CHAR_WIDTH; case 12: return UNKNOWN_TIMES_12PT_CHAR_WIDTH; case 14: return UNKNOWN_TIMES_14PT_CHAR_WIDTH; case 16: return UNKNOWN_TIMES_16PT_CHAR_WIDTH; case 20: return UNKNOWN_TIMES_20PT_CHAR_WIDTH; case 24: return UNKNOWN_TIMES_24PT_CHAR_WIDTH; case 36: return UNKNOWN_TIMES_36PT_CHAR_WIDTH; case 48: return UNKNOWN_TIMES_48PT_CHAR_WIDTH; } return UNKNOWN_TIMES_16PT_CHAR_WIDTH; } switch(ulFontFaceIndex) { case TIMES_FONT_FACE_INDX: fontDerivativeScaleFactor = 1.0; case BRUSH_SCRIPT_FONT_FACE_INDX: if(BRUSH_SCRIPT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.8319327731092; case COLONNA_MT_FONT_FACE_INDX: if(COLONNA_MT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1134; case COMIC_SANS_MS_FONT_FACE_INDX: if(COMIC_SANS_MS_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; ///XXXEH- need # here!! case GARAMOND_FONT_FACE_INDX: if(GARAMOND_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0462; case KINO_MT_FONT_FACE_INDX: if(KINO_MT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.8697; case MATURA_MT_SCRIPT_CAPITALS_FONT_FACE_INDX: if(MATURA_MT_SCRIPT_CAPITALS_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1849; case MS_DIALOG_FONT_FACE_INDX: if(MS_DIALOG_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; //XXXEH- need # here!! case MS_DIALOG_LIGHT_FONT_FACE_INDX: if(MS_DIALOG_LIGHT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; //XXXEH- need # here!! case MS_SYSTEMEX_FONT_FACE_INDX: if(MS_SYSTEMEX_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; //XXXEH- need # here!! case PLAYBILL_FONT_FACE_INDX: if(PLAYBILL_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.6513; case SMALL_FONTS_FONT_FACE_INDX: if(SMALL_FONTS_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1471; {do{ //XXXEH- this is here so break will go do default code. if(16 == ulFontPtSize) { if(isBold) { if(isItalicized) { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths16PointBoldItalics[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths16PointBold[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(isItalicized) { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths16PointItalics[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths16PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(20 == ulFontPtSize) { if(isBold) { if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths20PointBold[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths20PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(24 == ulFontPtSize) { if(isBold) { if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths24PointBold[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) timesFontWidths24PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } }}while(0); float foo = float(fontDerivativeScaleFactor * double(float(ulFontPtSize * UINT32((UINT16)timesFontWidths100PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))) / double(100.0)); if(foo > INT16(foo)) { foo++; } return (INT16(foo)); } case COURIERTT_FONT_FACE_INDX: fontDerivativeScaleFactor = 1.0; case FIXEDSYS_FONT_FACE_INDX: if(FIXEDSYS_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = .8062; case ALGERIAN_FONT_FACE_INDX: if(ALGERIAN_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.9213; { switch(ulFontPtSize) { case FONT_SIZE_MINUS2: { return INT16(float(fontDerivativeScaleFactor * double(.875 * (ulFontPtSize/2)))); } case FONT_SIZE_MINUS1: { break; } case FONT_SIZE_0: { if(isBold || isItalicized) { return INT16(float(fontDerivativeScaleFactor * double(.875 * (ulFontPtSize/2)))); } break; } case FONT_SIZE_PLUS1: { break; } case FONT_SIZE_PLUS2: { return INT16(float(fontDerivativeScaleFactor * double(1.125 * (ulFontPtSize/2)))); } case FONT_SIZE_PLUS3: { if(isItalicized && !isBold) { return INT16(float(fontDerivativeScaleFactor * double(1.125 * (ulFontPtSize/2)))); } return INT16(float(fontDerivativeScaleFactor * double(1.1 * (ulFontPtSize/2)))); } case FONT_SIZE_PLUS4: { if(isBold || isItalicized) { return INT16(float(fontDerivativeScaleFactor * double(1.05 * (ulFontPtSize/2)))); } return INT16(float(fontDerivativeScaleFactor * double(1.125 * (ulFontPtSize/2)))); } } return INT16(float(fontDerivativeScaleFactor * double(ulFontPtSize/2))); } case SYSTEM_FONT_FACE_INDX: fontDerivativeScaleFactor = 1.0; case TERMINAL_FONT_FACE_INDX: if(TERMINAL_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0717; { if(16 == ulFontPtSize) { return INT16(float(fontDerivativeScaleFactor * double((INT32)systemFontWidths16PointAll[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else if(36 == ulFontPtSize) { return INT16(float(fontDerivativeScaleFactor * double((INT32)systemFontWidths36PointAll[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else if(48 == ulFontPtSize) { return INT16(float(fontDerivativeScaleFactor * double((INT32)systemFontWidths48PointAll[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } //XXXEH- need lookup table! float foo; if(ulFontPtSize == 48 && 1.0 == fontDerivativeScaleFactor) { foo = float(UINT32((UINT16)systemFontWidths48PointAll[ ch - SBCS_FIRST_NON_CONTROL_CHAR])); } else { foo = float(fontDerivativeScaleFactor * double(float(ulFontPtSize * UINT32((UINT16)systemFontWidths48PointAll[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))) / double(48.0)); } if(foo > INT16(foo)) { foo++; } return (INT16(foo)); } case ARIAL_FONT_FACE_INDX: fontDerivativeScaleFactor = 1.0; case ARIAL_BLACK_FONT_FACE_INDX: if(ARIAL_BLACK_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.3; case ARIAL_NARROW_FONT_FACE_INDX: if(ARIAL_NARROW_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.855; case ARIAL_ROUNDED_MT_BOLD_FONT_FACE_INDX: if(ARIAL_ROUNDED_MT_BOLD_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1561; case BOOK_ANTIQUA_FONT_FACE_INDX: if(BOOK_ANTIQUA_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0297; case BOOKMAN_OLD_STYLE_FONT_FACE_INDX: if(BOOKMAN_OLD_STYLE_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1412; case BRAGGADOCIO_FONT_FACE_INDX: if(BRAGGADOCIO_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.5204; case BRITANNIC_BOLD_FONT_FACE_INDX: if(BRITANNIC_BOLD_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0335; case CENTURY_GOTHIC_FONT_FACE_INDX: if(CENTURY_GOTHIC_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1487; case CENTURY_SCHOOLBOOK_FONT_FACE_INDX: if(CENTURY_SCHOOLBOOK_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0595; case DESDEMONA_FONT_FACE_INDX: if(DESDEMONA_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; case FOOTLIGHT_MT_LIGHT_FONT_FACE_INDX: if(FOOTLIGHT_MT_LIGHT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; case HAETTENSCHWEILER_FONT_FACE_INDX: if(HAETTENSCHWEILER_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = .8; //0.7323; case HELVETICA_FONT_FACE_INDX: if(HELVETICA_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; case IMPACT_FONT_FACE_INDX: if(IMPACT_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.9294; case MODERN_FONT_FACE_INDX: if(MODERN_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; case MS_LINEDRAW_FONT_FACE_INDX: if(MS_LINEDRAW_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0; case MS_SANS_SERIF_FONT_FACE_INDX: if(MS_SANS_SERIF_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.0297; case MS_SERIF_FONT_FACE_INDX: if(MS_SERIF_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 0.9331; case VERDANA_FONT_FACE_INDX: if(VERDANA_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.1933; case WIDE_LATIN_FONT_FACE_INDX: if(WIDE_LATIN_FONT_FACE_INDX == ulFontFaceIndex) fontDerivativeScaleFactor = 1.9368; {do{ //XXXEH- this is here so break will go do default code. if(16 == ulFontPtSize) { if(isBold) { if(isItalicized) { return INT16(float(fontDerivativeScaleFactor * double((INT32) (INT32)arialFontWidths16PointBoldItalics[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) (INT32)arialFontWidths16PointBold[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(isItalicized) { return INT16(float(fontDerivativeScaleFactor * double((INT32) arialFontWidths16PointItalics[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) arialFontWidths16PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(20 == ulFontPtSize) { if(isBold) { if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) arialFontWidths20PointBold[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) arialFontWidths20PointRegular[ ch - SBCS_FIRST_NON_CONTROL_CHAR]))); } } else if(24 == ulFontPtSize) { if(isBold) { if(isItalicized) { break; //XXXEH- replace with table look-up. } else { return INT16(float(fontDerivativeScaleFactor * double((INT32) arialFontWidths24PointBold[
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -