Logo Search packages:      
Sourcecode: wine-unstable version File versions  Download package


 * 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
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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;

#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


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;

#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 );

/* 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, int max_extent, int *pfit,
                          int* partial_extents );
    void (*pGetTextMetricsW)( fontObject* pfo, LPTEXTMETRICW pTM );
} X11DRV_CP;

extern const X11DRV_CP X11DRV_cptable[X11DRV_CPTABLE_COUNT];

#endif /* __WINE_X11FONT_H */

Generated by  Doxygen 1.6.0   Back to index