| /* | |
| * X11 physical font definitions | |
| * | |
| * Copyright 1997 Alex Korobka | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #ifndef __WINE_X11FONT_H | |
| #define __WINE_X11FONT_H | |
| #include "wine/wingdi16.h" | |
| #include "x11drv.h" | |
| #include "pshpack1.h" | |
| /* this is a part of the font resource header, should | |
| * make it easier to implement dynamic softfont loading */ | |
| typedef struct | |
| { | |
| INT16 dfType; | |
| INT16 dfPoints; | |
| INT16 dfVertRes; | |
| INT16 dfHorizRes; | |
| INT16 dfAscent; | |
| INT16 dfInternalLeading; | |
| INT16 dfExternalLeading; | |
| CHAR dfItalic; | |
| CHAR dfUnderline; | |
| CHAR dfStrikeOut; | |
| INT16 dfWeight; | |
| BYTE dfCharSet; | |
| INT16 dfPixWidth; | |
| INT16 dfPixHeight; | |
| CHAR dfPitchAndFamily; | |
| INT16 dfAvgWidth; | |
| INT16 dfMaxWidth; | |
| CHAR dfFirstChar; | |
| CHAR dfLastChar; | |
| CHAR dfDefaultChar; | |
| CHAR dfBreakChar; | |
| INT16 dfWidthBytes; | |
| LPCSTR dfDevice; | |
| LPCSTR dfFace; | |
| } IFONTINFO16, *LPIFONTINFO16; | |
| #include "poppack.h" | |
| /* internal flags */ | |
| #define FI_POLYWEIGHT 0x0001 | |
| #define FI_POLYSLANT 0x0002 | |
| #define FI_OBLIQUE 0x0004 | |
| #define FI_SCALABLE 0x0008 | |
| #define FI_FW_BOOK 0x0010 | |
| #define FI_FW_DEMI 0x0020 | |
| #define FI_VARIABLEPITCH 0x0040 | |
| #define FI_FIXEDPITCH 0x0080 | |
| #define FI_FIXEDEX 0x1000 | |
| #define FI_NORMAL 0x2000 | |
| #define FI_SUBSET 0x4000 | |
| #define FI_TRUETYPE 0x8000 | |
| /* code pages */ | |
| #define FI_ENC_ANSI 0 | |
| #define FI_ENC_ISO8859 1 | |
| #define FI_ENC_ISO646 2 | |
| #define FI_ENC_MICROSOFT 3 | |
| #define FI_ENC_KOI8 4 | |
| #define FI_ENC_ASCII 5 | |
| #define FI_ENC_VISCII 6 | |
| #define FI_ENC_TCVN 7 | |
| #define FI_ENC_TIS620 8 | |
| enum X11DRV_CPTABLE | |
| { | |
| X11DRV_CPTABLE_SBCS, | |
| X11DRV_CPTABLE_UNICODE, | |
| X11DRV_CPTABLE_CP932, | |
| X11DRV_CPTABLE_CP936, | |
| X11DRV_CPTABLE_CP949, | |
| X11DRV_CPTABLE_CP950, | |
| X11DRV_CPTABLE_SYMBOL, | |
| X11DRV_CPTABLE_COUNT | |
| }; | |
| typedef struct tagFontInfo | |
| { | |
| struct tagFontInfo* next; | |
| UINT16 fi_flags; | |
| UINT16 fi_encoding; | |
| UINT16 codepage; | |
| UINT16 cptable; | |
| WORD internal_charset; | |
| /* LFD parameters can be quite different from the actual metrics */ | |
| UINT16 lfd_height; | |
| UINT16 lfd_resolution; | |
| IFONTINFO16 df; | |
| } fontInfo; | |
| /* Font resource list for EnumFont() purposes */ | |
| #define FR_SOFTFONT 0x1000 /* - .FON or .FOT file */ | |
| #define FR_SOFTRESOURCE 0x2000 /* - resource handle */ | |
| #define FR_REMOVED 0x4000 /* delayed remove */ | |
| #define FR_NAMESET 0x8000 | |
| #define LFD_FIELDS 14 | |
| typedef struct | |
| { | |
| const char* foundry; | |
| const char* family; | |
| const char* weight; | |
| const char* slant; | |
| const char* set_width; | |
| const char* add_style; | |
| const char* pixel_size; | |
| const char* point_size; | |
| const char* resolution_x; | |
| const char* resolution_y; | |
| const char* spacing; | |
| const char* average_width; | |
| const char* charset_registry; | |
| const char* charset_encoding; | |
| } LFD; | |
| typedef struct tagFontResource | |
| { | |
| struct tagFontResource* next; | |
| UINT16 fr_flags; | |
| UINT16 fr_penalty; | |
| UINT16 fi_count; | |
| UINT16 fo_count; | |
| fontInfo* fi; | |
| LFD* resource; | |
| HANDLE hOwner; /* For FR_SOFTFONT/FR_SOFTRESOURCE fonts */ | |
| CHAR lfFaceName[LF_FACESIZE]; | |
| } fontResource; | |
| typedef struct { | |
| float a,b,c,d; /* pixelsize matrix, FIXME: switch to MAT2 format */ | |
| unsigned long RAW_ASCENT; | |
| unsigned long RAW_DESCENT; | |
| float pixelsize; | |
| float ascent; | |
| float descent; | |
| } XFONTTRANS; | |
| #define FO_RESOURCE_MASK 0x000F | |
| #define FO_SYSTEM 0x0001 /* resident in cache */ | |
| #define FO_SOFTFONT 0x0002 /* installed at runtime */ | |
| #define FO_SHARED 0x0004 /* MITSHM */ | |
| #define FO_REMOVED 0x0008 /* remove when count falls to 0 */ | |
| #define FO_MATCH_MASK 0x00F0 | |
| #define FO_MATCH_NORASTER 0x0010 | |
| #define FO_MATCH_PAF 0x0020 | |
| #define FO_MATCH_XYINDEP 0x0040 | |
| #define FO_SYNTH_MASK 0xFF00 | |
| #define FO_SYNTH_HEIGHT 0x2000 | |
| #define FO_SYNTH_WIDTH 0x4000 | |
| #define FO_SYNTH_ROTATE 0x8000 | |
| #define FO_SYNTH_BOLD 0x0100 | |
| #define FO_SYNTH_ITALIC 0x0200 | |
| #define FO_SYNTH_UNDERLINE 0x0400 | |
| #define FO_SYNTH_STRIKEOUT 0x0800 | |
| /* Realized screen font */ | |
| #define X11FONT_REFOBJS_MAX 4 | |
| typedef struct | |
| { | |
| XFontStruct* fs; /* text metrics */ | |
| fontResource* fr; /* font family */ | |
| fontInfo* fi; /* font instance info */ | |
| Pixmap* lpPixmap; /* optional character bitmasks for synth fonts */ | |
| X_PHYSFONT prefobjs[X11FONT_REFOBJS_MAX]; /* font objects for DBCS charsets */ | |
| XFONTTRANS *lpX11Trans; /* Info for X11R6 transform */ | |
| float rescale; /* Rescale for large fonts */ | |
| INT16 foInternalLeading; | |
| INT16 foAvgCharWidth; | |
| INT16 foMaxCharWidth; | |
| UINT16 fo_flags; | |
| /* font cache housekeeping */ | |
| UINT16 count; | |
| UINT16 lru; | |
| UINT16 lfchecksum; | |
| LOGFONT16 lf; | |
| } fontObject; | |
| typedef struct | |
| { | |
| fontResource* pfr; | |
| fontInfo* pfi; | |
| UINT16 height; | |
| UINT16 flags; | |
| LPLOGFONT16 plf; | |
| WORD internal_charset; | |
| } fontMatch; | |
| extern fontObject* XFONT_GetFontObject( X_PHYSFONT pFont ); | |
| extern XFontStruct* XFONT_GetFontStruct( X_PHYSFONT pFont ); | |
| extern LPIFONTINFO16 XFONT_GetFontInfo( X_PHYSFONT pFont ); | |
| /* internal charset(hibyte must be set) */ | |
| /* lobyte is DEFAULT_CHARSET(=0). */ | |
| #define X11FONT_JISX0201_CHARSET 0x100 | |
| #define X11FONT_JISX0212_CHARSET 0x200 | |
| typedef struct tagX11DRV_CP | |
| { | |
| WORD (*penum_subfont_charset)( UINT index ); | |
| XChar2b* (*punicode_to_char2b)( fontObject* pfo, | |
| LPCWSTR lpwstr, UINT count ); | |
| void (*pDrawString)( fontObject* pfo, Display* pdisp, Drawable d, GC gc, | |
| int x, int y, XChar2b* pstr, int count ); | |
| int (*pTextWidth)( fontObject* pfo, XChar2b* pstr, int count ); | |
| void (*pDrawText)( fontObject* pfo, Display* pdisp, Drawable d, GC gc, | |
| int x, int y, XTextItem16* pitems, int count ); | |
| void (*pTextExtents)( fontObject* pfo, XChar2b* pstr, int count, | |
| int* pdir, int* pascent, int* pdescent, | |
| int* pwidth ); | |
| void (*pGetTextMetricsW)( fontObject* pfo, LPTEXTMETRICW pTM ); | |
| } X11DRV_CP; | |
| extern const X11DRV_CP X11DRV_cptable[X11DRV_CPTABLE_COUNT]; | |
| #endif /* __WINE_X11FONT_H */ |