(mface__realize): Handle the case of font->size < 0.
[m17n/m17n-lib.git] / src / m17n-gui.h
1 /* m17n-gui.h -- header file for the GUI API of the m17n library.
2    Copyright (C) 2003, 2004
3      National Institute of Advanced Industrial Science and Technology (AIST)
4      Registration Number H15PRO112
5
6    This file is part of the m17n library.
7
8    The m17n library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Lesser General Public License
10    as published by the Free Software Foundation; either version 2.1 of
11    the License, or (at your option) any later version.
12
13    The m17n library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with the m17n library; if not, write to the Free
20    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 #ifndef _M17N_GUI_H_
24 #define _M17N_GUI_H_
25
26 #ifndef _M17N_H_
27 #include <m17n.h>
28 #endif
29
30 #ifdef __cplusplus
31 extern "C"
32 {
33 #endif
34
35 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
36
37 extern void m17n_init_win (void);
38 #undef M17N_INIT
39 #define M17N_INIT() m17n_init_win ()
40
41 extern void m17n_fini_win (void);
42 #undef M17N_FINI
43 #define M17N_FINI() m17n_fini_win ()
44
45 #endif
46
47 /***en @defgroup m17nGUI GUI API */
48 /***ja @defgroup m17nGUI GUI API */
49 /*=*/
50
51 /*** @ingroup m17nGUI */
52 /***en @defgroup m17nFrame Frame */
53 /***ja @defgroup m17nFrame ¥Õ¥ì¡¼¥à */
54 /*=*/
55
56 /*** @ingroup m17nFrame */
57 /***en
58     @brief Type of frames.
59
60     The type #MFrame is for a @e frame object.  Each frame holds
61     various information about the corresponding physical display/input
62     device.
63
64     The internal structure of the type #MFrame is concealed from an
65     application program, and its contents depend on the window system
66     in use.  In the m17n-X library, it contains the information about
67     @e display and @e screen in the X Window System.  */
68
69 /***ja
70     @brief ¥Õ¥ì¡¼¥à¤Î·¿Àë¸À.
71
72     #MFrame ¤Ï¡¢@e ¥Õ¥ì¡¼¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£
73     ¸Ä¡¹¤Î¥Õ¥ì¡¼¥à¤Ï¡¢¤½¤ì¤¬Âбþ¤¹¤ëʪÍýŪ¤Êɽ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î³Æ¼ï¾ðÊó¤òÊÝ»ý¤¹¤ë¡£
74
75     #MFrame ·¿¤ÎÆâÉô¹½Â¤¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
76     ¤Þ¤¿¤½¤ÎÆâÍƤϻÈÍѤ¹¤ë¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£¤Þ¤¿ m17n-X 
77     ¥é¥¤¥Ö¥é¥ê¤Ë¤ª¤±¤ë¥Õ¥ì¡¼¥à¤Ï¡¢X ¥¦¥£¥ó¥É¥¦¤Î @e display ¤È @e screen 
78     ¤Ë´Ø¤¹¤ë¾ðÊó¤ò»ý¤Ä¡£      */
79
80 typedef struct MFrame MFrame;
81
82 /*=*/
83
84 extern MSymbol Mdevice;
85
86 extern MSymbol Mfont;
87 extern MSymbol Mfont_width;
88 extern MSymbol Mfont_ascent;
89 extern MSymbol Mfont_descent;
90 extern MFrame *mframe_default;
91
92 extern MSymbol Mdisplay;
93 extern MSymbol Mscreen;
94 extern MSymbol Mdrawable;
95 extern MSymbol Mwidget;
96 extern MSymbol Mdepth;
97 extern MSymbol Mcolormap;
98
99 extern MFrame *mframe (MPlist *plist);
100
101 extern void *mframe_get_prop (MFrame *frame, MSymbol key);
102
103 /* end of frame module */
104 /*=*/
105
106 /*** @ingroup m17nGUI  */
107 /***en @defgroup m17nFont Font */
108 /***ja @defgroup m17nFont ¥Õ¥©¥ó¥È */
109 /*=*/
110
111 /*** @ingroup m17nFont */
112 /***en
113     @brief Type of fonts.
114
115     The type #MFont is the structure defining fonts.  It contains
116     information about the following properties of a font: foundry,
117     family, weight, style, stretch, adstyle, registry, size, and
118     resolution.
119
120     This structure is used both for specifying a font in a fontset
121     and for storing information about available system fonts.
122
123     The internal structure is concealed from an application program.  */
124
125 /***ja
126     @brief ¥Õ¥©¥ó¥È¤Î·¿Àë¸À.
127
128     #MFont ·¿¤Ï¥Õ¥©¥ó¥È»ØÄêÍѤι½Â¤ÂΤǤ¢¤ê¡¢¥Õ¥©¥ó¥È¤Î¥×¥í¥Ñ¥Æ¥£¤Ç¤¢¤ë
129     foundry, family, weight, style, stretch, adstyle, registry,
130     size, resolution ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¡£
131
132     ¤³¤Î¹½Â¤ÂΤϥե©¥ó¥È¥»¥Ã¥ÈÆâ¤Î¥Õ¥©¥ó¥È¤ò»ØÄꤹ¤ëºÝ¤È¡¢»ÈÍѲÄǽ¤Ê¥·¥¹¥Æ¥à¥Õ¥©¥ó¥È¤Î¾ðÊó¤ò³ÊǼ¤¹¤ëºÝ¤ÎξÊý¤ËÍѤ¤¤é¤ì¤ë¡£
133
134     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
135
136 /***
137     @seealso
138     mfont (), mfont_from_name (), mfont_find ().  */
139
140 typedef struct MFont MFont;
141
142 /*=*/
143
144 extern MSymbol Mx, Mfreetype, Mxft;
145
146 extern MPlist *mfont_freetype_path;
147
148 extern MFont *mfont ();
149
150 extern MFont *mfont_copy (MFont *font);
151
152 extern MFont *mfont_parse_name (const char *name, MSymbol format);
153
154 extern char *mfont_unparse_name (MFont *font, MSymbol format);
155
156 /* These two are obsolete (from 1.1.0).  */
157 extern char *mfont_name (MFont *font);
158 extern MFont *mfont_from_name (const char *name);
159
160 extern MSymbol Mfoundry;
161 extern MSymbol Mfamily;
162 extern MSymbol Mweight;
163 extern MSymbol Mstyle;
164 extern MSymbol Mstretch;
165 extern MSymbol Madstyle;
166 extern MSymbol Mspacing;
167 extern MSymbol Mregistry;
168 extern MSymbol Msize;
169 extern MSymbol Mresolution;
170 extern MSymbol Mascent;
171 extern MSymbol Mdescent;
172 extern MSymbol Mmax_advance;
173 extern MSymbol Mfontfile;
174
175 extern MSymbol Mfontconfig;
176
177 extern void *mfont_get_prop (MFont *font, MSymbol key);
178
179 extern int mfont_put_prop (MFont *font, MSymbol key, void *val);
180
181 extern int mfont_set_encoding (MFont *font,
182                                MSymbol encoding_name, MSymbol repertory_name);
183
184
185 /*=*/
186
187 /***en
188     @brief Find a font.
189
190     The mfont_find () function returns a pointer to the available font
191     that matches best with the specification $SPEC in frame $FRAME.
192
193     $SCORE, if not NULL, must point to a place to store the score
194     value which indicates how well the found font matches $SPEC.  The
195     smaller score means a better match.
196
197     $LIMITED_SIZE, if nonzero, forces the font selector to find a
198     font not greater than the #Msize property of $SPEC.  */
199
200 /***ja
201     @brief ¥Õ¥©¥ó¥È¤òõ¤¹.
202
203     ´Ø¿ô mfont_find () ¤Ï¡¢¥Õ¥ì¡¼¥à $FRAME ¾å¤Ç¥Õ¥©¥ó¥ÈÄêµÁ $SPEC 
204     ¤Ë¤â¤Ã¤È¤â¹çÃפ¹¤ë»ÈÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£  
205
206     $SCORE ¤Ï NULL ¤Ç¤¢¤ë¤«¡¢¸«¤Ä¤«¤Ã¤¿¥Õ¥©¥ó¥È¤¬ $SPEC 
207     ¤Ë¤É¤ì¤Û¤É¹ç¤Ã¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥¹¥³¥¢¤òÊݸ¤¹¤ë¾ì½ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
208     ¥¹¥³¥¢¤¬¾®¤µ¤¤¤Û¤ÉÎɤ¯¹ç¤Ã¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
209
210     $LIMITED_SIZE ¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢$SPEC ¤Î¥×¥í¥Ñ¥Æ¥£ #Msize 
211     ¤è¤êÂ礭¤¯¤Ê¤¤¥Õ¥©¥ó¥È¤À¤±¤¬Ãµ¤µ¤ì¤ë¡£
212 */
213
214 extern MFont *mfont_find (MFrame *frame, MFont *spec,
215                           int *score, int limited_size);
216
217 extern MSymbol *mfont_selection_priority ();
218
219 extern int mfont_set_selection_priority (MSymbol *keys);
220
221 extern int mfont_resize_ratio (MFont *font);
222
223 extern MPlist *mfont_list (MFrame *frame, MFont *font, MSymbol language,
224                            int maxnum);
225
226 typedef struct MFontset MFontset;
227
228 extern int mfont_check (MFrame *frame, MFontset *fontset, MFont *font,
229                         MSymbol script, MSymbol language);
230
231 /* end of font module */
232 /*=*/
233
234 /*** @ingroup m17nGUI  */
235 /***en @defgroup m17nFontset Fontset */
236 /***ja @defgroup m17nFontset ¥Õ¥©¥ó¥È¥»¥Ã¥È */
237 /*=*/
238 /*** @addtogroup m17nFontset
239      @{   */
240 extern MFontset *mfontset (char *name);
241
242 extern MSymbol mfontset_name (MFontset *fontset);
243
244 extern MFontset *mfontset_copy (MFontset *fontset, char *name);
245
246 extern int mfontset_modify_entry (MFontset *fontset,
247                                   MSymbol language, MSymbol script,
248                                   MSymbol charset,
249                                   MFont *spec, MSymbol layouter_name,
250                                   int how);
251
252 extern MPlist *mfontset_lookup (MFontset *fontset, MSymbol script,
253                                 MSymbol language, MSymbol charset);
254 /*** @}   */
255 /* end of fontset module */
256 /*=*/
257
258 /*** @ingroup m17nGUI */
259 /***en @defgroup m17nFace Face */
260 /***ja @defgroup m17nFace ¥Õ¥§¡¼¥¹ */
261 /*=*/
262
263 /*** @ingroup m17nFace */
264 /***en
265     @brief Type of faces.
266
267     The type #MFace is the structure of face objects.  The internal
268     structure is concealed from an application program.  */
269
270 /***ja
271     @brief ¥Õ¥§¡¼¥¹¤Î·¿Àë¸À.
272
273     #MFace ·¿¤Ï¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¿¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£
274     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
275
276 typedef struct MFace MFace;
277 /*=*/
278
279 extern MSymbol Mforeground;
280 extern MSymbol Mbackground;
281 extern MSymbol Mvideomode;
282 extern MSymbol Mnormal;
283 extern MSymbol Mreverse;
284 extern MSymbol Mhline;
285 extern MSymbol Mbox;
286 extern MSymbol Mfontset;
287 extern MSymbol Mratio;
288 extern MSymbol Mhook_func;
289 extern MSymbol Mhook_arg;
290
291 /* Predefined faces.  */
292 extern MFace *mface_normal_video;
293 extern MFace *mface_reverse_video;
294 extern MFace *mface_underline;
295 extern MFace *mface_medium;
296 extern MFace *mface_bold;
297 extern MFace *mface_italic;
298 extern MFace *mface_bold_italic;
299 extern MFace *mface_xx_small;
300 extern MFace *mface_x_small;
301 extern MFace *mface_small;
302 extern MFace *mface_normalsize;
303 extern MFace *mface_large;
304 extern MFace *mface_x_large;
305 extern MFace *mface_xx_large;
306 extern MFace *mface_black;
307 extern MFace *mface_white;
308 extern MFace *mface_red;
309 extern MFace *mface_green;
310 extern MFace *mface_blue;
311 extern MFace *mface_cyan;
312 extern MFace *mface_yellow;
313 extern MFace *mface_magenta;
314
315 /* etc */
316 extern MSymbol Mface;
317
318 extern MFace *mface ();
319
320 extern int mface_equal (MFace *face1, MFace *face2);
321
322 extern MFace *mface_copy (MFace *face);
323
324 extern MFace *mface_merge (MFace *dst, MFace *src);
325
326 extern MFace *mface_from_font (MFont *font);
327
328 /*=*/
329
330 /*** @ingroup m17nFace */
331 /***en
332     @brief Type of horizontal line spec of face.
333
334     The type #MFaceHLineProp is to specify the detail of #Mhline
335     property of a face.  The value of the property must be a pointer
336     to an object of this type.  */
337 /***ja
338     @brief ¥Õ¥§¡¼¥¹¤Î¿åÊ¿Àþ»ØÄêÍÑ·¿Àë¸À.
339
340     #MFaceHLineProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhline 
341     ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
342       */
343
344 typedef struct
345 {
346   /***en Type of the horizontal line.  */
347   /***ja ¿åÊ¿Àþ¤Î¥¿¥¤¥×.  */
348   enum MFaceHLineType
349     {
350       MFACE_HLINE_BOTTOM,      
351       MFACE_HLINE_UNDER,
352       MFACE_HLINE_STRIKE_THROUGH,
353       MFACE_HLINE_OVER,
354       MFACE_HLINE_TOP
355     } type;
356
357   /***en Width of the line in pixels.  */
358   /***ja ÀþÉý¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë.  */
359   unsigned width;
360
361   /***en Color of the line.  If the value is Mnil, foreground color of
362       a merged face is used.  */
363   /***ja Àþ¤Î¿§.  Mnil ¤Ê¤é¤Ð¡¢Åý¹ç¤·¤¿¥Õ¥§¡¼¥¹¤ÎÁ°·Ê¿§¤¬»È¤ï¤ì¤ë¡£  */
364   
365   MSymbol color;
366 } MFaceHLineProp;
367 /*=*/
368
369 /*** @ingroup m17nFace */
370 /***en
371     @brief Type of box spec of face.
372
373     The type #MFaceBoxProp is to specify the detail of #Mbox property
374     of a face.  The value of the property must be a pointer to an
375     object of this type.  */
376 /***ja
377     @brief ¥Õ¥§¡¼¥¹¤Î°Ï¤ßÏÈ»ØÄêÍÑ·¿Àë¸À.
378
379     #MFaceBoxProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mbox ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£
380     ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
381       */
382
383 typedef struct
384 {
385   /***en Width of the box line in pixels.  */
386   /***ja ÀþÉý¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë.  */
387   unsigned width;
388
389   MSymbol color_top;
390   MSymbol color_bottom;
391   MSymbol color_left;
392   MSymbol color_right;
393
394   unsigned inner_hmargin;
395   unsigned inner_vmargin;
396   unsigned outer_hmargin;
397   unsigned outer_vmargin;
398
399 } MFaceBoxProp;
400 /*=*/
401
402 /*** @ingroup m17nFace */
403 /***en
404     @brief Type of hook function of face.
405
406     The type #MFaceHookFunc is to specify the #Mhook property of a
407     face.  The value of the property must be function of this
408     type.  */
409 /***ja
410     @brief ¥Õ¥§¡¼¥¹¤Î¥Õ¥Ã¥¯´Ø¿ô¤Î·¿Àë¸À.
411
412     #MFaceHookFunc ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhook ¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£
413     ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¤³¤Î·¿¤Î´Ø¿ô¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
414       */
415 typedef void (*MFaceHookFunc) (MFace *face, void *arg, void *info);
416 /*=*/
417
418 extern void *mface_get_prop (MFace *face, MSymbol key);
419
420 extern int mface_put_prop (MFace *face, MSymbol key, void *val);
421
422 extern void mface_update (MFrame *frame, MFace *face);
423
424 /* end of face module */
425 /*=*/
426
427 /*** @ingroup m17nGUI */
428 /***en @defgroup m17nDraw Drawing */
429 /***ja @defgroup m17nDraw É½¼¨ */
430 /*=*/
431
432 /*** @ingroup m17nDraw */
433 /***en
434     @brief Window system dependent type for a window.
435
436     The type #MDrawWindow is for a window; a rectangular area that
437     works in several ways like a miniature screen.
438
439     What it actually points depends on a window system.  A program
440     that uses the m17n-X library must coerce the type @c Drawable to
441     this type.  */
442 /***ja 
443     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢¥¦¥£¥ó¥É¥¦¤Î·¿Àë¸À.
444
445     #MDrawWindow ¤Ï¥¦¥£¥ó¥É¥¦¡¢¤¹¤Ê¤ï¤Á´ö¤Ä¤«¤ÎÅÀ¤Ç¥¹¥¯¥ê¡¼¥ó¤Î¥ß¥Ë¥Á¥å¥¢¤È¤·¤ÆƯ¤¯¶ë·ÁÎΰèÍѤη¿¤Ç¤¢¤ë¡£
446
447     ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X 
448     ¥é¥¤¥Ö¥é¥ê¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Drawable ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
449
450 typedef void *MDrawWindow;
451 /*=*/
452
453 /*** @ingroup m17nDraw */
454 /***en
455     @brief Window system dependent type for a region.
456
457     The type #MDrawRegion is for a region; an arbitrary set of pixels
458     on the screen (typically a rectangular area).
459
460     What it actually points depends on a window system.  A program
461     that uses the m17n-X library must coerce the type @c Region to
462     this type.  */
463 /***ja
464     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢Îΰè¤Î·¿Àë¸À.
465
466     #MDrawRegion ¤ÏÎΰ衢¤¹¤Ê¤ï¤Á¥¹¥¯¥ê¡¼¥ó¾å¤ÎǤ°Õ¤Î¥Ô¥¯¥»¥ë¤Î½¸¹ç¡Êŵ·¿Åª¤Ë¤Ï¶ë·ÁÎΰè¡ËÍѤη¿¤Ç¤¢¤ë¡£
467
468     ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X 
469     ¥é¥¤¥Ö¥é¥ê¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Region ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£  */
470
471 typedef void *MDrawRegion;
472 /*=*/
473
474 /*** @ingroup m17nDraw */
475 /***en
476     @brief Type of a text drawing control.
477
478     The type #MDrawControl is the structure that controls how to draw
479     an M-text.  */
480 /***ja
481     @brief ¥Æ¥­¥¹¥Èɽ¼¨À©¸æ¤Î·¿Àë¸À.
482
483     #MDrawControl ·¿¤Ï¡¢M-text ¤ò¤É¤¦É½¼¨¤¹¤ë¤«¤òÀ©¸æ¤¹¤ë¹½Â¤ÂΤǤ¢¤ë¡£
484       */
485
486
487 typedef struct
488 {
489   /***en If nonzero, draw an M-text as image, i.e. with background
490       filled with background colors of faces put on the M-text.
491       Otherwise, the background is not changed.  */
492   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ M-text ¤ò²èÁü¤È¤·¤Æ¡¢¤¹¤Ê¤ï¤ÁÇطʤò M-text 
493       ¤Î¥Õ¥§¡¼¥¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ëÇØ·Ê¿§¤ÇËä¤á¤Æɽ¼¨¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÇطʤÏÊѤï¤é¤Ê¤¤¡£  */
494   unsigned as_image : 1;
495
496   /***en If nonzero and the first glyph of each line has negative
497       lbearing, shift glyphs horizontally to right so that no pixel is
498       drawn to the left of the specified position.  */
499   /***ja 0 ¤Ç¤Ê¤¯¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤Î lbearing 
500       ¤¬Éé¤Ê¤é¤Ð¡¢¥°¥ê¥Õ¤ò¿åÊ¿¤Ë±¦¤Ë¤º¤é¤·¤Æ¡¢»ØÄꤷ¤¿°ÌÃÖ¤è¤êº¸¤Ë¥Ô¥¯¥»¥ë¤¬ÉÁ¤«¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£  */
501   unsigned align_head : 1;
502
503   /***en If nonzero, draw an M-text two-dimensionally, i.e., newlines
504       in M-text breaks lines and the following characters are drawn in
505       the next line.  If <format> is non-NULL, and the function
506       returns nonzero line width, a line longer than that width is
507       also broken.  */
508   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò£²¼¡¸µÅª¤Ë¡¢¤¹¤Ê¤ï¤Á M-text Ãæ¤Î 
509       newline ¤Ç²þ¹Ô¤·¡¢Â³¤¯Ê¸»ú¤Ï¼¡¤Î¹Ô¤Ëɽ¼¨¤¹¤ë¡£¤â¤· <format> ¤¬ 
510       NULL ¤Ç¤Ê¤¯¡¢¤½¤Î´Ø¿ô¤¬ 0 ¤Ç¤Ê¤¤¹ÔÉý¤òÊÖ¤»¤Ð¡¢¤½¤ÎÉý¤è¤êŤ¤¹Ô¤â²þ¹Ô¤µ¤ì¤ë¡£  */
511   unsigned two_dimensional : 1;
512
513   /***en If nonzero, draw an M-text to the right of a specified
514       position.  */
515   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò»ØÄꤷ¤¿°ÌÃ֤ᦤËɽ¼¨¤¹¤ë¡£  */
516   unsigned orientation_reversed : 1;
517
518   /***en If nonzero, reorder glyphs correctly for bidi text.  */ 
519   /***ja 0 ¤Ê¤±¤ì¤Ð¡¢bidi ¥Æ¥­¥¹¥ÈÍѤ˥°¥ê¥Õ¤òÀµ¤·¤¯À°Î󤹤롣  */
520   unsigned enable_bidi : 1;
521
522   /***en If nonzero, don't draw characters whose general category (in
523       Unicode) is Cf (Other, format).  */
524   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥æ¥Ë¥³¡¼¥É¤ËÃÖ¤±¤ë°ìÈÌ¥«¥Æ¥´¥ê¤¬ Cf (Other,
525       format) ¤Ç¤¢¤ëʸ»ú¤òɽ¼¨¤·¤Ê¤¤¡£  */
526   unsigned ignore_formatting_char : 1;
527
528   /***en If nonzero, draw glyphs suitable for a terminal.  Not yet
529       implemented.  */
530   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ã¼ËöÍѤΥ°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£Ì¤¼ÂÁõ¡£  */
531   unsigned fixed_width : 1;
532
533   /***en If nonzero, draw glyphs with anti-aliasing if a backend font
534       driver supports it.  */
535   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹¤Ç¥°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£
536       ¡Ê¥Ð¥Ã¥¯¥¨¥ó¥É¤Î¥Õ¥©¥ó¥È¥É¥é¥¤¥Ð¤¬¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹µ¡Ç½¤ò»ý¤Ä¾ì¹ç¤Î¤ß¡£¡Ë */
537   unsigned anti_alias : 1;
538
539   /***en If nonzero, disable the adjustment of glyph positions to
540       avoid horizontal overlapping at font boundary.  */
541   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Õ¥©¥ó¥È¶­³¦¤Ç¤Î¿åÊ¿Êý¸þ¤Î¥°¥ê¥Õ¤Î½Å¤Ê¤ê¤òÈò¤±¤ë¤¿¤á¤Î¥°¥ê¥Õ°ÌÃÖ¤ÎÄ´À°¤ò̵¸ú¤Ë¤¹¤ë¡£  */
542   unsigned disable_overlapping_adjustment : 1;
543
544   /***en If nonzero, the values are minimum line ascent and descent
545       pixels.  */
546   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
547   unsigned int min_line_ascent;
548   unsigned int min_line_descent;
549
550   /***en If nonzero, the values are maximum line ascent and descent
551       pixels.  */
552   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
553   unsigned int max_line_ascent;
554   unsigned int max_line_descent;
555
556   /***en If nonzero, the value specifies how many pixels each line can
557       occupy on the display.  The value zero means that there is no
558       limit.  It is ignored if <format> is non-NULL.  */
559   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϤ³¤Î¥Ç¥£¥¹¥×¥ì¥¤¾å¤Ç³Æ¹Ô¤¬Àê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ò¼¨¤¹¡£
560       0 ¤Ï¸ÂÄꤵ¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£<format> ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£   */
561   unsigned int max_line_width;
562
563   /***en If nonzero, the value specifies the distance between tab
564       stops in columns (the width of one column is the width of a
565       space in the default font of the frame).  The value zero means
566       8.  */
567   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϥ¿¥Ö¥¹¥È¥Ã¥×´Ö¤Îµ÷Î¥¤ò¥³¥é¥àñ°Ì
568       ¡Ê¥³¥é¥à¤Ï¥Õ¥ì¡¼¥à¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤Ë¤ª¤±¤ë¶õÇòʸ»ú¤ÎÉý¤Ç¤¢¤ë¡Ë¤Ç¼¨¤¹¡£ 
569       0 ¤Ï 8 ¤ò°ÕÌ£¤¹¤ë¡£ */
570   unsigned int tab_width;
571
572   /***en If non-NULL, the value is a function that calculates the
573       indentation and width limit of each line based on the line
574       number LINE and the coordinate Y.  The function store the
575       indentation and width limit at the place pointed by INDENT and
576       WIDTH respectively.
577
578       The indentation specifies how many pixels the first glyph of
579       each line is shifted to the right (if the member
580       <orientation_reversed> is zero) or to the left (otherwise).  If
581       the value is negative, each line is shifted to the reverse
582       direction.
583
584       The width limit specifies how many pixels each line can occupy
585       on the display.  The value 0 means that there is no limit.
586
587       LINE and Y are reset to 0 when a line is broken by a newline
588       character, and incremented each time when a long line is broken
589       because of the width limit.
590
591       This has an effect only when <two_dimensional> is nonzero.  */
592   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϴؿô¤Ç¤¢¤ê¡¢¤½¤Î´Ø¿ô¤Ï¹ÔÈÖ¹æ LINE ¤ÈºÂɸ Y 
593       ¤Ë´ð¤Å¤¤¤Æ³Æ¹Ô¤Î¥¤¥ó¥Ç¥ó¥È¤ÈºÇÂçÉý¤ò·×»»¤·¡¢¤½¤ì¤¾¤ì¤òINDENT ¤È
594       WIDTH ¤Ç»Ø¤µ¤ì¤ë¾ì½ê¤ËÊݸ¤¹¤ë¡£
595
596       ¥¤¥ó¥Ç¥ó¥È¤Ï¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤ò±¦¡Ê¥á¥ó¥Ð 
597       <orientation_reversed> ¤¬ 0 
598       ¤Î»þ¡Ë¤¢¤ë¤¤¤Ïº¸¡Ê¤½¤ì°Ê³°¤Î»þ¡Ë¤Ë²¿¥Ô¥¯¥»¥ë¤º¤é¤¹¤«¤ò»ØÄꤹ¤ë¡£Ãͤ¬Éé¤Ê¤é¤ÐµÕÊý¸þ¤Ë¤º¤é¤¹¡£
599
600       ºÇÂçÉý¤Ï¡¢³Æ¹Ô¤¬¥Ç¥£¥¹¥×¥ì¥¤¾å¤ÇÀê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ÎºÇÂçÃͤǤ¢¤ë¡£Ãͤ¬
601       0 ¤Î¾ì¹ç¤ÏÀ©¸Â¤ò¼õ¤±¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
602
603       LINE ¤È Y ¤Ï²þ¹Ôʸ»ú¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿ºÝ¤Ë¤Ï 0 
604       ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢Ä¹¤¤¹Ô¤¬ºÇÂçÉý¤ÎÀ©¸Â¤Ë¤è¤Ã¤Æ²þ¹Ô¤µ¤ì¤ë¤¿¤Ó¤Ë 1 Áý¤ä¤µ¤ì¤ë¡£
605
606       ¤³¤ì¤Ï <two_dimensional> ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£  */
607   void (*format) (int line, int y, int *indent, int *width);
608
609   /***en If non-NULL, the value is a function that calculates a line
610       breaking position when a line is too long to fit within the
611       width limit.  POS is the position of the character next to the
612       last one that fits within the limit.  FROM is the position of the
613       first character of the line, and TO is the position of the last
614       character displayed on the line if there were not width limit.
615       LINE and Y are the same as the arguments to <format>.
616
617       The function must return a character position to break the
618       line.
619
620       The function should not modify MT.
621
622       The mdraw_default_line_break () function is useful for such a
623       script that uses SPACE as a word separator.  */
624   /***ja NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤ¬ºÇÂçÉýÃæ¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¹Ô¤ò²þ¤á¤ë°ÌÃÖ¤ò·×»»¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¡£
625       POS ¤ÏºÇÂçÉý¤Ë¼ý¤Þ¤ëºÇ¸å¤Îʸ»ú¤Î¼¡¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£FROM
626       ¤Ï¹Ô¤ÎºÇ½é¤Îʸ»ú¤Î°ÌÃÖ¡¢TO 
627       ¤ÏºÇÂçÉý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤½¤Î¹Ô¤Ëɽ¼¨¤µ¤ì¤ëºÇ¸å¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£LINE 
628       ¤È Y ¤Ï <format> ¤Î°ú¿ô¤ÈƱÍͤǤ¢¤ë¡£
629
630       ¤³¤Î´Ø¿ô¤Ï¹Ô¤ò²þ¤á¤ëʸ»ú°ÌÃÖ¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤Þ¤¿ MT ¤òÊѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
631
632       ´Ø¿ô mdraw_default_line_break ()
633       ¤Ï¡¢¶õÇò¤ò¸ì¤Î¶èÀÚ¤ê¤È¤·¤ÆÍѤ¤¤ë¥¹¥¯¥ê¥×¥ÈÍѤȤ·¤ÆÍ­ÍѤǤ¢¤ë¡£  */
634   int (*line_break) (MText *mt, int pos, int from, int to, int line, int y);
635
636   int with_cursor;
637
638   /***en Specifies the character position to display a cursor.  If it
639       is greater than the maximum character position, the cursor is
640       displayed next to the last character of an M-text.  If the value
641       is negative, even if <cursor_width> is nonzero, cursor is not
642       displayed.  */
643   /***ja ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ëʸ»ú°ÌÃÖ¤ò¼¨¤¹¡£ºÇÂç¤Îʸ»ú°ÌÃÖ¤è¤êÂ礭¤±¤ì¤Ð¡¢¥«¡¼¥½¥ë¤Ï 
644       M-text ¤ÎºÇ¸å¤Îʸ»ú¤ÎÎÙ¤Ëɽ¼¨¤µ¤ì¤ë¡£Éé¤Ê¤é¤Ð¡¢
645       <cursor_width> ¤¬ 0 ¤Ç¤Ê¤¯¤Æ¤â¥«¡¼¥½¥ë¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£
646         */
647   int cursor_pos;
648
649   /***en If nonzero, display a cursor at the character position
650       <cursor_pos>.  If the value is positive, it is the pixel width
651       of the cursor.  If the value is negative, the cursor width is
652       the same as the underlining glyph(s).  */
653   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢<cursor_pos> ¤Ë¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£
654       Ãͤ¬Àµ¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤ÎÉý¤Ï¤½¤ÎÃÍ¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë¤Ç¤¢¤ë¡£
655       Éé¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤Î¤¢¤ë¥°¥ê¥Õ¤ÈƱ¤¸Éý¤Ç¤¢¤ë¡£  */
656   int cursor_width;
657
658   /***en If nonzero and <cursor_width> is also nonzero, display double
659       bar cursors; at the character position <cursor_pos> and at the
660       logically previous character.  Both cursors have one pixel width
661       with horizontal fringes at upper or lower positions.  */
662   /***ja If 0 ¤Ç¤Ê¤¯¡¢¤«¤Ä <cursor_width> ¤â 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ð¡¼¥«¡¼¥½¥ë¤òʸ»ú°ÌÃÖ
663       <cursor_pos> ¤ÈÏÀÍýŪ¤Ë¤½¤ì¤ÎÁ°¤Ë¤¢¤ëʸ»ú¤Î£²¥ö½ê¤Ëɽ¼¨¤¹¤ë¡£
664       ÁÐÊý¤È¤â£±¥Ô¥¯¥»¥ëÉý¤Ç¡¢¾å¤«²¼¤Ë¿åÊ¿¤Î¾þ¤ê¤¬¤Ä¤¯¡£*/
665   int cursor_bidi;
666
667   /***en If nonzero, on drawing partial text, pixels of surrounding
668       texts that intrude into the drawing area are also drawn.  For
669       instance, some CVC sequence of Thai text (C is consonant, V is
670       upper vowel) is drawn so that V is placed over the middle of two
671       Cs.  If this CVC sequence is already drawn and only the last C
672       is drawn again (for instance by updating cursor position), the
673       right half of V is erased if this member is zero.  By setting
674       this member to nonzero, even with such a drawing, we can keep
675       this CVC sequence correctly displayed.  */
676   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Æ¥­¥¹¥È¤Î°ìÉôʬ¤òɽ¼¨¤¹¤ëºÝ¤Ë¡¢Á°¸å¤Î¥Æ¥­¥¹¥È¤Î¤¦¤Á¤½¤Îɽ¼¨Îΰè¤Ë¿¯Æþ¤¹¤ëÉôʬ¤âɽ¼¨¤¹¤ë¡£
677       ¤¿¤È¤¨¤Ð¡¢¥¿¥¤¸ì¥Æ¥­¥¹¥È »Ò²»-Êì²»-»Ò²» 
678       ¤È¤¤¤¦¥·¡¼¥¯¥¨¥ó¥¹¤Î¤¤¤¯¤Ä¤«¤Ï¡¢Êì²»¤¬Æó¤Ä¤Î»Ò²»¤Î´Ö¤Ë¾å¤Ë¤Î¤ë¤è¤¦¤ËÉÁ¤«¤ì¤ë¡£
679       ¤³¤Î¤è¤¦¤Ê¥·¡¼¥¯¥¨¥ó¥¹¤¬¤¹¤Ç¤ËÉÁ¤«¤ì¤Æ¤ª¤ê¡¢ºÇ¸å¤Î»Ò²»¤À¤±¤òÉÁ¤­Ä¾¤¹¾ì¹ç
680       ¡Ê¤¿¤È¤¨¤Ð¡¢¥«¡¼¥½¥ë°ÌÃÖ¤ò¹¹¿·¤¹¤ëºÝ¤Ê¤É¡Ë¤³¤Î¥á¥ó¥Ð¤¬ 0 
681       ¤Ç¤¢¤ì¤Ð¡¢Êì²»¤Î±¦È¾Ê¬¤¬¾Ã¤µ¤ì¤Æ¤·¤Þ¤¦¡£¤³¤ì¤ò 0 °Ê³°¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤½¤Î¤è¤¦¤ÊºÝ¤Ë¤â
682       »Ò²»-Êì²»-»Ò²» ¤Î¥·¡¼¥¯¥¨¥ó¥¹¤òÀµ¤·¤¯É½¼¨¤·Â³¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
683   int partial_update;
684
685   /***en If nonzero, don't cache the result of any drawing information
686       of an M-text.  */
687   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤Îɽ¼¨¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥­¥ã¥Ã¥·¥å¤·¤Ê¤¤¡£
688        */
689   int disable_caching;
690
691   /* If non-NULL, limit the drawing effect to the specified region.  */
692   MDrawRegion clip_region;
693
694 } MDrawControl;
695
696 /*=*/
697
698 /*** @ingroup m17nDraw */
699 /***en
700     @brief Type of metric for glyphs and texts.
701
702     The type #MDrawMetric is for a metric of a glyph and a drawn text.
703     It is also used to represent a rectangle area of a graphic
704     device.  */
705 /***ja
706     @brief ¥°¥ê¥Õ¤È¥Æ¥­¥¹¥È¤ÎÀ£Ë¡¤Î·¿Àë¸À.
707
708     #MDrawMetric ¤Ï¥°¥ê¥Õ¤Èɽ¼¨¤µ¤ì¤¿¥Æ¥­¥¹¥È¤ÎÀ£Ë¡ÍѤη¿¤Ç¤¢¤ë¡£
709     ¤Þ¤¿¡¢É½¼¨¥Ç¥Ð¥¤¥¹¤Î¶ë·ÁÎΰè¤òɽ¤¹¤Î¤Ë¤âÍѤ¤¤é¤ì¤ë¡£ */
710
711 typedef struct {
712   int x, y;
713   unsigned int width, height;
714 } MDrawMetric;
715
716 /*=*/
717
718 /*** @ingroup m17nDraw */
719 /***en
720     @brief Type of information about a glyph.
721
722     The type #MDrawGlyphInfo is the structure that contains
723     information about a glyph.  It is used by mdraw_glyph_info ().  */
724 /***ja
725     @brief ¥°¥ê¥Õ¤Ë´Ø¤¹¤ë¾ðÊó¤Î·¿Àë¸À.
726
727     #MDrawGlyphInfo ·¿¤Ï¥°¥ê¥Õ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¹½Â¤ÂΤǤ¢¤ë¡£
728     mdraw_glyph_info () ¤Ï¤³¤ì¤òÍѤ¤¤ë¡£  */
729
730 typedef struct
731 {
732   /***en Character range corresponding to the glyph.  */
733   /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
734   int from, to;
735
736   /***en Character ranges corresponding to the line of the glyph.  */
737   /***ja  ¥°¥ê¥Õ¤ÎÎó¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
738   int line_from, line_to;
739
740   /***en X/Y coordinates of the glyph.  */
741   /***ja ¥°¥ê¥Õ¤Î X/Y ºÂɸ.  */
742   int x, y;
743
744   /***en Metric of the glyph.  */
745   /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡.  */
746   MDrawMetric metrics;
747
748   /***en Font used for the glyph.  Set to NULL if no font is found for
749       the glyph.  */
750   /***ja ¥°¥ê¥Õ¤Ë»È¤ï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£ */
751       
752   MFont *font;
753
754   /***en Character ranges corresponding to logically previous and next
755       glyphs.  Note that we do not need the members prev_to and
756       next_from because they must be the same as the members from and
757       to respectively.  */
758   /***ja ÏÀÍýŪ¤ÊÁ°¸å¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£¥á¥ó¥Ð prev_to ¤È
759       next_from ¤Ï¡¢¤½¤ì¤¾¤ì¥á¥ó¥Ð from ¤Èto 
760       ¤ÈƱ¤¸¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¤¿¤áÉÔÍפǤ¢¤ë¡£  */
761   int prev_from, next_to;
762
763   /***en Character ranges corresponding to visually left and right
764       glyphs. */
765   /***ja É½¼¨¾å¤Îº¸±¦¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£  */
766   int left_from, left_to;
767   int right_from, right_to;
768
769   /***en Logical width of the glyph.  Nominal distance to the next
770       glyph.  */
771   /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪÉý¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
772   int logical_width;
773 } MDrawGlyphInfo;
774
775 /*=*/
776
777 /*** @ingroup m17nDraw */
778 /***en
779     @brief Type of information about a glyph metric and font.
780
781     The type #MDrawGlyph is the structure that contains information
782     about a glyph metric and font.  It is used by the function
783     mdraw_glyph_list ().  */
784 /***ja
785     @brief ¥°¥ê¥Õ¤ÎÀ£Ë¡¤È¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤Î·¿Àë¸À.
786
787     #MDrawGlyph ·¿¤Ï¥°¥ê¥Õ¤ÎÀ£Ë¡¤È¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¹½Â¤ÂΤǤ¢¤ë¡£
788     mdraw_glyph_list () ¤Ï¤³¤ì¤òÍѤ¤¤ë¡£  */
789
790 typedef struct
791 {
792   /***en Character range corresponding to the glyph.  */
793   /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
794   int from, to;
795
796   /***en Font glyph code of the glyph.  */
797   /***ja ¥Õ¥©¥ó¥ÈÆâ¤Î¥°¥ê¥Õ¥³¡¼¥É¡£  */
798   int glyph_code;
799
800   /***en Logical width of the glyph.  Nominal distance to the next
801       glyph.  */
802   /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪÉý¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
803   int x_advance, y_advance;
804
805   /***en X/Y offset relative to the glyph position.  */
806   /***ja ¥°¥ê¥Õ¤Î°ÌÃÖ¤ËÂФ¹¤ë X/Y ¥ª¥Õ¥»¥Ã¥È.  */
807   int x_off, y_off;
808
809   /***en Metric of the glyph.  */
810   /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡.  */
811   int lbearing, rbearing, ascent, descent;
812
813   /***en Font used for the glyph.  Set to NULL if no font is found for
814       the glyph.  */
815   /***ja ¥°¥ê¥Õ¤Ë»È¤ï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£  */
816   MFont *font;
817
818   /***en Type of the font.  One of Mx, Mfreetype, Mxft.  */
819   /***ja ¥Õ¥©¥ó¥È¤Î¥¿¥¤¥×¡£Mx¡¢Mfreetype¡¢Mxft ¤Î¤¤¤º¤ì¤«¡£  */
820   MSymbol font_type;
821
822   /***en Pointer to the font structure.  The actual type is
823       (XFontStruct *) if <font_type> member is Mx, FT_Face if
824       <font_type> member is Mfreetype, and (XftFont *) if <font_type>
825       member is Mxft.  */
826   /***ja ¥Õ¥©¥ó¥È¤Î¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¡£¼ÂºÝ¤Î·¿¤Ï <font_type> ¥á¥ó¥Ð¤¬
827       Mx ¤Ê¤é (XFontStruct *)¡¢ Mfreetype ¤Ê¤é FT_Face¡¢Mxft 
828       ¤Ê¤é (XftFont *)¡£ */
829   void *fontp;
830
831 } MDrawGlyph;
832
833 /*=*/
834
835 /***en
836     @brief Type of textitems.
837
838     The type #MDrawTextItem is for @e textitem objects.
839     Each textitem contains an M-text and some other information to
840     control the drawing of the M-text.  */
841
842 /***ja
843     @brief textitem ¤Î·¿Àë¸À.
844
845     #MDrawTextItem ¤Ï @e ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£
846     ³Æ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Ï¡¢ 1 ¸Ä¤Î M-text ¤È¡¢¤½¤Îɽ¼¨¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤ë¡£
847
848     @latexonly \IPAlabel{MTextItem} @endlatexonly  */
849
850 typedef struct
851 {
852   /***en M-text. */
853   /***ja M-text. */
854   MText *mt;                      
855
856   /***en Optional change in the position (in the unit of pixel) along
857       the X-axis before the M-text is drawn.  */
858   /***ja M-text É½¼¨Á°¤Ë¹Ô¤Ê¤¦X¼´Êý¸þ¤Î°ÌÃÖÄ´À° (¥Ô¥¯¥»¥ëñ°Ì) */
859   int delta;                     
860
861   /***en Pointer to a face object.  Each property of the face, if not
862       Mnil, overrides the same property of face(s) specified as a text
863       property in <mt>.  */
864   /***ja ¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£¥Õ¥§¡¼¥¹¤Î³Æ¥×¥í¥Ñ¥Æ¥£¤Ï 
865       Mnil ¤Ç¤Ê¤±¤ì¤Ð <mt> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥§¡¼¥¹¤ÎƱ¤¸¥×¥í¥Ñ¥Æ¥£¤ËÍ¥À褹¤ë*/
866   MFace *face;
867
868   /***en Pointer to a draw control object.  The M-text <mt> is drawn
869       by mdraw_text_with_control () with this control object.  */
870   /***ja É½¼¨À©¸æ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£ mdraw_text_with_control () 
871       ¤Ï¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ M-text <mt> ¤òɽ¼¨¤¹¤ë¡£  */
872   MDrawControl *control;
873
874 } MDrawTextItem;
875
876 /*=*/
877
878 extern int mdraw_text (MFrame *frame, MDrawWindow win, int x, int y,
879                        MText *mt, int from, int to);
880
881 extern int mdraw_image_text (MFrame *frame, MDrawWindow win, int x, int y,
882                              MText *mt, int from, int to);
883
884 extern int mdraw_text_with_control (MFrame *frame, MDrawWindow win,
885                                     int x, int y, MText *mt, int from, int to,
886                                     MDrawControl *control);
887
888 extern int mdraw_coordinates_position (MFrame *frame,
889                                        MText *mt, int from, int to,
890                                        int x, int y, MDrawControl *control);
891
892 extern int mdraw_text_extents (MFrame *frame,
893                                MText *mt, int from, int to,
894                                MDrawControl *control,
895                                MDrawMetric *overall_ink_return,
896                                MDrawMetric *overall_logical_return,
897                                MDrawMetric *overall_line_return);
898
899 extern int mdraw_text_per_char_extents (MFrame *frame,
900                                         MText *mt, int from, int to,
901                                         MDrawControl *control,
902                                         MDrawMetric *ink_array_return,
903                                         MDrawMetric *logical_array_return,
904                                         int array_size,
905                                         int *num_chars_return,
906                                         MDrawMetric *overall_ink_return,
907                                         MDrawMetric *overall_logical_return);
908
909 extern int mdraw_glyph_info (MFrame *frame, MText *mt, int from, int pos,
910                              MDrawControl *control, MDrawGlyphInfo *info);
911
912 extern int mdraw_glyph_list (MFrame *frame, MText *mt, int from, int to,
913                              MDrawControl *control, MDrawGlyph *glyphs,
914                              int array_size, int *num_glyphs_return);
915
916 extern void mdraw_text_items (MFrame *frame, MDrawWindow win, int x, int y,
917                               MDrawTextItem *items, int nitems);
918
919 extern void mdraw_per_char_extents (MFrame *frame, MText *mt,
920                                     MDrawMetric *array_return,
921                                     MDrawMetric *overall_return);
922
923 extern int mdraw_default_line_break (MText *mt, int pos,
924                                      int from, int to, int line, int y);
925
926 extern void mdraw_clear_cache (MText *mt);
927
928 /* end of drawing module */
929 /*=*/
930
931 /*** @ingroup m17nGUI */
932 /***en @defgroup m17nInputMethodWin Input Method (GUI) */
933 /***ja @defgroup m17nInputMethodWin ÆþÎϥ᥽¥Ã¥É (GUI) */
934 /*=*/
935
936 extern MInputDriver minput_gui_driver;
937
938 /*=*/
939 /*** @ingroup m17nInputMethodWin */
940 /***en 
941     @brief Type of the argument to the function minput_create_ic ().
942
943     The type #MInputGUIArgIC is for the argument $ARG of the function
944     minput_create_ic () to create an input context of an internal
945     input method.  */
946
947 /***ja
948     @brief ´Ø¿ô minput_create_ic () ¤Î°ú¿ô¤Î·¿Àë¸À.
949
950     #MInputGUIArgIC ¤Ï¡¢´Ø¿ô minput_create_ic () 
951     ¤¬ÆâÉôÆþÎϥ᥽¥Ã¥É¤ÎÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ëºÝ¤Î¡¢°ú¿ô $ARG ÍѤη¿¤Ç¤¢¤ë¡£  */
952
953 typedef struct
954 {
955   /***en Frame of the client.  */
956   /***ja ¥¯¥é¥¤¥¢¥ó¥È¤Î¥Õ¥ì¡¼¥à  */
957   MFrame *frame;
958
959   /***en Window on which to display the preedit and status text.  */
960   /***ja preedit ¥Æ¥­¥¹¥È¤È status ¥Æ¥­¥¹¥È¤òɽ¼¨¤¹¤ë¥¦¥£¥ó¥É¥¦  */
961   MDrawWindow client;
962
963   /***en Window that the input context has a focus on.  */
964   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤¬¥Õ¥©¡¼¥«¥¹¤ò¤ª¤¤¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦  */
965   MDrawWindow focus;
966 } MInputGUIArgIC;
967
968 /*=*/
969
970 extern MSymbol minput_event_to_key (MFrame *frame, void *event);
971
972 /* end of input module */
973 /*=*/
974 /* end of window modules */
975 /*=*/
976
977 extern MFace *mdebug_dump_face (MFace *face, int indent);
978 extern MFont *mdebug_dump_font (MFont *font);
979 extern MFontset *mdebug_dump_fontset (MFontset *fontset, int indent);
980
981 #ifdef __cplusplus
982 }
983 #endif
984
985 #endif /* _M17N_GUI_H_ */
986
987 /*
988   Local Variables:
989   coding: euc-japan
990   End:
991 */