1/* Definitions and header for handling BDF fonts on the Microsoft W32 API. 2 Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 3 2006, 2007 Free Software Foundation, Inc. 4 5This file is part of GNU Emacs. 6 7GNU Emacs is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 2, or (at your option) 10any later version. 11 12GNU Emacs is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with GNU Emacs; see the file COPYING. If not, write to 19the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20Boston, MA 02110-1301, USA. */ 21 22/* Based heavily on code by H. Miyashita for Meadow (a descendant of 23 MULE for W32). */ 24 25#ifndef EMACS_W32BDF_H 26#define EMACS_W32BDF_H 27 28#define BDF_FIRST_OFFSET_TABLE 0x200 29#define BDF_SECOND_OFFSET_TABLE 0x80 30#define BDF_SECOND_OFFSET(x) ((x) & 0x7f) 31#define BDF_FIRST_OFFSET(x) (((x) >> 8) | (((x) & 0x80) << 1)) 32#define BDF_CODEPOINT_MAX (BDF_FIRST_OFFSET_TABLE * BDF_SECOND_OFFSET_TABLE) 33#define BDF_CODEPOINT_RANGE_COVER_P(x) (((x) >= 0) && ((x) <= BDF_CODEPOINT_MAX)) 34 35#define BDF_FONT_CACHE_SIZE 3000 36#define BDF_FONT_CLEAR_SIZE 600 37 38/* 39 GLYPH METRIC (# ... character's reference point) 40 ^ 41 y | (urx, ury) 42 | ^ +----------------+ 43 a | b| |character | <- font bounding Box 44 x | b| | | 45 i | h| | #(bbox, bboy) | 46 s | v +----------------+ 47 | (llx, lly) 48 | <----------------> 49 | bbw 50 +-----------------------> 51 origin x axis 52 */ 53 54 55 56/* Structure of glyph information of one character. */ 57typedef struct 58{ 59 int dwidth; /* width in pixels */ 60 int bbw, bbh, bbox, bboy; /* bounding box in pixels */ 61} glyph_metric; 62 63typedef struct 64{ 65 glyph_metric metric; 66 int row_byte_size; /* size in bytes occupied by one row of the bitmap */ 67 int bitmap_size; /* size in bytes of the following slots */ 68 unsigned char *bitmap; /* */ 69} glyph_struct; 70 71typedef struct fchar *pfont_char; 72 73typedef struct 74{ 75 glyph_metric metric; 76 pfont_char psrc; 77 int row_byte_size; 78 int bitmap_size; 79 unsigned char *pbmp; 80} cache_bitmap; 81 82typedef struct fchar 83{ 84 unsigned char *offset; 85 cache_bitmap *pcbmp; 86} font_char; 87 88typedef struct 89{ 90 char *filename; 91 HANDLE hfile; 92 HANDLE hfilemap; 93 unsigned char *font; 94 unsigned char *seeked; 95 DWORD size; 96 font_char *chtbl[BDF_FIRST_OFFSET_TABLE]; 97 int llx, lly, urx, ury; /* Font bounding box */ 98 99 int yoffset; 100 int relative_compose; 101 int default_ascent; 102 103 unsigned char *registry; 104 unsigned char *encoding; 105 unsigned char *slant; 106/* unsigned char *width; */ 107 108 int width; 109 int height; 110 int pixsz; 111 int nchars; 112} bdffont; 113 114#define BDF_FILE_SIZE_MAX 256*1024*1024 /* 256Mb */ 115#define BDF_FONT_FILE(font) (((bdffont*)(font))->filename) 116#define MAKELENDSHORT(c1, c2) (unsigned short)((c1) | ((c2) << 8)) 117 118bdffont *w32_init_bdf_font (char *filename); 119void w32_free_bdf_font (bdffont *fontp); 120int w32_get_bdf_glyph (bdffont *fontp, int index, int size, 121 glyph_struct *glyph); 122int w32_BDF_TextOut (bdffont *fontp, HDC hdc, int left, 123 int top, unsigned char *text, int dim, 124 int bytelen, int fixed_pitch_size); 125int w32_BDF_to_x_font (char *file, char* xstr, int len); 126 127#endif /* EMACS_W32BDF_H */ 128 129/* arch-tag: 7499e9f2-197e-44cc-9274-373f00b51eec 130 (do not change this comment) */ 131