/* * 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 */