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