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