*** 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 void 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 /* These two are obsolete (from 1.1.0).  */
155 extern char *mfont_name (MFont *font);
156 extern MFont *mfont_from_name (char *name);
157
158 extern MSymbol Mfoundry;
159 extern MSymbol Mfamily;
160 extern MSymbol Mweight;
161 extern MSymbol Mstyle;
162 extern MSymbol Mstretch;
163 extern MSymbol Madstyle;
164 extern MSymbol Mregistry;
165 extern MSymbol Msize;
166 extern MSymbol Mresolution;
167
168 extern MSymbol Mfontconfig;
169
170 extern void *mfont_get_prop (MFont *font, MSymbol key);
171
172 extern int mfont_put_prop (MFont *font, MSymbol key, void *val);
173
174 extern int mfont_set_encoding (MFont *font,
175                                MSymbol encoding_name, MSymbol repertory_name);
176
177
178 /*=*/
179
180 /***en
181     @brief Find a font.
182
183     The mfont_find () function returns a pointer to the available font
184     that matches best with the specification $SPEC in frame $FRAME.
185
186     $SCORE, if not NULL, must point to a place to store the score
187     value which indicates how well the found font matches $SPEC.  The
188     smaller score means a better match.
189
190     $LIMITED_SIZE, if nonzero, forces the font selector to find a
191     font not greater than the #Msize property of $SPEC.  */
192
193 /***ja
194     @brief ¥Õ¥©¥ó¥È¤òõ¤¹.
195
196     ´Ø¿ô mfont_find () ¤Ï¡¢¥Õ¥ì¡¼¥à $FRAME ¾å¤Ç¥Õ¥©¥ó¥ÈÄêµÁ $SPEC ¤Ë¤â¤Ã
197     ¤È¤â¹çÃפ¹¤ë»ÈÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£  
198
199     $SCORE ¤Ï NULL ¤Ç¤¢¤ë¤«¡¢¸«¤Ä¤«¤Ã¤¿¥Õ¥©¥ó¥È¤¬ $SPEC ¤Ë¤É¤ì¤Û¤É¹ç¤Ã
200     ¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥¹¥³¥¢¤òÊݸ¤¹¤ë¾ì½ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£¥¹¥³¥¢¤¬¾®¤µ
201     ¤¤¤Û¤ÉÎɤ¯¹ç¤Ã¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
202
203     $LIMITED_SIZE ¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢$SPEC ¤Î¥×¥í¥Ñ¥Æ¥£ #Msize ¤è¤êÂ礭
204     ¤¯¤Ê¤¤¥Õ¥©¥ó¥È¤À¤±¤¬Ãµ¤µ¤ì¤ë¡£
205 */
206
207 extern MFont *mfont_find (MFrame *frame, MFont *spec,
208                           int *score, int limited_size);
209
210 extern MSymbol *mfont_selection_priority ();
211
212 extern int mfont_set_selection_priority (MSymbol *keys);
213
214 extern int mfont_resize_ratio (MFont *font);
215
216 extern MPlist *mfont_list (MFrame *frame, MFont *font, MSymbol language,
217                            int maxnum);
218
219
220 /* end of font module */
221 /*=*/
222
223 /*** @ingroup m17nGUI  */
224 /***en @defgroup m17nFontset Fontset */
225 /***ja @defgroup m17nFontset ¥Õ¥©¥ó¥È¥»¥Ã¥È */
226 /*=*/
227
228 typedef struct MFontset MFontset;
229
230 extern MFontset *mfontset (char *name);
231
232 extern MSymbol mfontset_name (MFontset *fontset);
233
234 extern MFontset *mfontset_copy (MFontset *fontset, char *name);
235
236 extern int mfontset_modify_entry (MFontset *fontset,
237                                   MSymbol language, MSymbol script,
238                                   MSymbol charset,
239                                   MFont *spec, MSymbol layouter_name,
240                                   int how);
241
242 extern MPlist *mfontset_lookup (MFontset *fontset, MSymbol script,
243                                 MSymbol language, MSymbol charset);
244
245 /* end of fontset module */
246 /*=*/
247
248 /*** @ingroup m17nGUI */
249 /***en @defgroup m17nFace Face */
250 /***ja @defgroup m17nFace ¥Õ¥§¡¼¥¹ */
251 /*=*/
252
253 /*** @ingroup m17nFace */
254 /***en
255     @brief Type of faces.
256
257     The type #MFace is the structure of face objects.  The internal
258     structure is concealed from an application program.  */
259
260 /***ja
261     @brief ¥Õ¥§¡¼¥¹¤Î·¿Àë¸À.
262
263     #MFace ·¿¤Ï¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¿¤á¤Î¹½Â¤ÂΤǤ¢¤ë¡£ÆâÉô¹½Â¤¤Ï
264     ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
265
266 typedef struct MFace MFace;
267 /*=*/
268
269 extern MSymbol Mforeground;
270 extern MSymbol Mbackground;
271 extern MSymbol Mvideomode;
272 extern MSymbol Mnormal;
273 extern MSymbol Mreverse;
274 extern MSymbol Mhline;
275 extern MSymbol Mbox;
276 extern MSymbol Mfontset;
277 extern MSymbol Mratio;
278 extern MSymbol Mhook_func;
279 extern MSymbol Mhook_arg;
280
281 /* Predefined faces.  */
282 extern MFace *mface_normal_video;
283 extern MFace *mface_reverse_video;
284 extern MFace *mface_underline;
285 extern MFace *mface_medium;
286 extern MFace *mface_bold;
287 extern MFace *mface_italic;
288 extern MFace *mface_bold_italic;
289 extern MFace *mface_xx_small;
290 extern MFace *mface_x_small;
291 extern MFace *mface_small;
292 extern MFace *mface_normalsize;
293 extern MFace *mface_large;
294 extern MFace *mface_x_large;
295 extern MFace *mface_xx_large;
296 extern MFace *mface_black;
297 extern MFace *mface_white;
298 extern MFace *mface_red;
299 extern MFace *mface_green;
300 extern MFace *mface_blue;
301 extern MFace *mface_cyan;
302 extern MFace *mface_yellow;
303 extern MFace *mface_magenta;
304
305 /* etc */
306 extern MSymbol Mface;
307
308 extern MFace *mface ();
309
310 extern MFace *mface_copy (MFace *face);
311
312 extern MFace *mface_merge (MFace *dst, MFace *src);
313
314 extern MFace *mface_from_font (MFont *font);
315
316 /*=*/
317
318 /*** @ingroup m17nFace */
319 /***en
320     @brief Type of horizontal line spec of face.
321
322     The type #MFaceHLineProp is to specify the detail of #Mhline
323     property of a face.  The value of the property must be a pointer
324     to an object of this type.  */
325 /***ja
326     @brief ¥Õ¥§¡¼¥¹¤Î¿åÊ¿Àþ»ØÄêÍÑ·¿Àë¸À.
327
328     #MFaceHLineProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhline ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿
329     ¤Ç¤¢¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
330       */
331
332 typedef struct
333 {
334   /***en Type of the horizontal line.  */
335   /***ja ¿åÊ¿Àþ¤Î¥¿¥¤¥×.  */
336   enum MFaceHLineType
337     {
338       MFACE_HLINE_BOTTOM,      
339       MFACE_HLINE_UNDER,
340       MFACE_HLINE_STRIKE_THROUGH,
341       MFACE_HLINE_OVER,
342       MFACE_HLINE_TOP
343     } type;
344
345   /***en Width of the line in pixels.  */
346   /***ja ÀþÉý¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë.  */
347   unsigned width;
348
349   /***en Color of the line.  If the value is Mnil, foreground color of
350       a merged face is used.  */
351   /***ja Àþ¤Î¿§.  Mnil ¤Ê¤é¤Ð¡¢Åý¹ç¤·¤¿¥Õ¥§¡¼¥¹¤ÎÁ°·Ê¿§¤¬»È¤ï¤ì¤ë¡£  */
352   
353   MSymbol color;
354 } MFaceHLineProp;
355 /*=*/
356
357 /*** @ingroup m17nFace */
358 /***en
359     @brief Type of box spec of face.
360
361     The type #MFaceBoxProp is to specify the detail of #Mbox property
362     of a face.  The value of the property must be a pointer to an
363     object of this type.  */
364 /***ja
365     @brief ¥Õ¥§¡¼¥¹¤Î°Ï¤ßÏÈ»ØÄêÍÑ·¿Àë¸À.
366
367     #MFaceBoxProp ¤Ï¥Õ¥§¡¼¥¹¤Î #Mbox ¥×¥í¥Ñ¥Æ¥£¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë·¿¤Ç¤¢
368     ¤ë¡£¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ³¤Î·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
369       */
370
371 typedef struct
372 {
373   /***en Width of the box line in pixels.  */
374   /***ja ÀþÉý¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë.  */
375   unsigned width;
376
377   MSymbol color_top;
378   MSymbol color_bottom;
379   MSymbol color_left;
380   MSymbol color_right;
381
382   unsigned inner_hmargin;
383   unsigned inner_vmargin;
384   unsigned outer_hmargin;
385   unsigned outer_vmargin;
386
387 } MFaceBoxProp;
388 /*=*/
389
390 /*** @ingroup m17nFace */
391 /***en
392     @brief Type of hook function of face.
393
394     The type #MFaceHookFunc is to specify the #Mhook property of a
395     face.  The value of the property must be function of this
396     type.  */
397 /***ja
398     @brief ¥Õ¥§¡¼¥¹¤Î¥Õ¥Ã¥¯´Ø¿ô¤Î·¿Àë¸À.
399
400     #MFaceHookFunc ¤Ï¥Õ¥§¡¼¥¹¤Î #Mhook ¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë·¿¤Ç¤¢¤ë¡£
401     ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¤³¤Î·¿¤Î´Ø¿ô¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
402       */
403 typedef void (*MFaceHookFunc) (MFace *face, void *arg, void *info);
404 /*=*/
405
406 extern void *mface_get_prop (MFace *face, MSymbol key);
407
408 extern int mface_put_prop (MFace *face, MSymbol key, void *val);
409
410 extern void mface_update (MFrame *frame, MFace *face);
411
412 /* end of face module */
413 /*=*/
414
415 /*** @ingroup m17nGUI */
416 /***en @defgroup m17nDraw Drawing */
417 /***ja @defgroup m17nDraw É½¼¨ */
418 /*=*/
419
420 /*** @ingroup m17nDraw */
421 /***en
422     @brief Window system dependent type for a window.
423
424     The type #MDrawWindow is for a window; a rectangular area that
425     works in several ways like a miniature screen.
426
427     What it actually points depends on a window system.  A program
428     that uses the m17n-X library must coerce the type @c Drawable to
429     this type.  */
430 /***ja 
431     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢¥¦¥£¥ó¥É¥¦¤Î·¿Àë¸À.
432
433     #MDrawWindow ¤Ï¥¦¥£¥ó¥É¥¦¡¢¤¹¤Ê¤ï¤Á´ö¤Ä¤«¤ÎÅÀ¤Ç¥¹¥¯¥ê¡¼¥ó¤Î¥ß¥Ë¥Á¥å
434     ¥¢¤È¤·¤ÆƯ¤¯¶ë·ÁÎΰèÍѤη¿¤Ç¤¢¤ë¡£
435
436     ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X ¥é¥¤¥Ö¥é¥ê
437     ¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Drawable ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é
438     ¤Ê¤¤¡£ */
439
440 typedef void *MDrawWindow;
441 /*=*/
442
443 /*** @ingroup m17nDraw */
444 /***en
445     @brief Window system dependent type for a region.
446
447     The type #MDrawRegion is for a region; an arbitrary set of pixels
448     on the screen (typically a rectangular area).
449
450     What it actually points depends on a window system.  A program
451     that uses the m17n-X library must coerce the type @c Region to
452     this type.  */
453 /***ja
454     @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡¢Îΰè¤Î·¿Àë¸À.
455
456     #MDrawRegion ¤ÏÎΰ衢¤¹¤Ê¤ï¤Á¥¹¥¯¥ê¡¼¥ó¾å¤ÎǤ°Õ¤Î¥Ô¥¯¥»¥ë¤Î½¸¹ç
457    ¡Êŵ·¿Åª¤Ë¤Ï¶ë·ÁÎΰè¡ËÍѤη¿¤Ç¤¢¤ë¡£
458
459     ¼ÂºÝ¤Ë²¿¤ò»Ø¤¹¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ m17n X ¥é¥¤¥Ö¥é¥ê
460     ¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ï @c Region ·¿¤ò¤³¤Î·¿¤ËÊÑ´¹¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é
461     ¤Ê¤¤¡£  */
462
463 typedef void *MDrawRegion;
464 /*=*/
465
466 /*** @ingroup m17nDraw */
467 /***en
468     @brief Type of a text drawing control.
469
470     The type #MDrawControl is the structure that controls how to draw
471     an M-text.  */
472 /***ja
473     @brief ¥Æ¥­¥¹¥Èɽ¼¨À©¸æ¤Î·¿Àë¸À.
474
475     #MDrawControl ·¿¤Ï¡¢M-text ¤ò¤É¤¦É½¼¨¤¹¤ë¤«¤òÀ©¸æ¤¹¤ë¹½Â¤ÂΤǤ¢¤ë¡£
476       */
477
478
479 typedef struct
480 {
481   /***en If nonzero, draw an M-text as image, i.e. with background
482       filled with background colors of faces put on the M-text.
483       Otherwise, the background is not changed.  */
484   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ M-text ¤ò²èÁü¤È¤·¤Æ¡¢¤¹¤Ê¤ï¤ÁÇطʤò M-text ¤Î
485       ¥Õ¥§¡¼¥¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ëÇØ·Ê¿§¤ÇËä¤á¤Æɽ¼¨¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÇØ
486       ·Ê¤ÏÊѤï¤é¤Ê¤¤¡£  */
487   unsigned as_image : 1;
488
489   /***en If nonzero and the first glyph of each line has negative
490       lbearing, shift glyphs horizontally to right so that no pixel is
491       drawn to the left of the specified position.  */
492   /***ja 0 ¤Ç¤Ê¤¯¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤Îlbearing ¤¬Éé¤Ê¤é¤Ð¡¢¥°¥ê¥Õ¤ò¿å
493       Ê¿¤Ë±¦¤Ë¤º¤é¤·¤Æ¡¢»ØÄꤷ¤¿°ÌÃÖ¤è¤êº¸¤Ë¥Ô¥¯¥»¥ë¤¬ÉÁ¤«¤ì¤Ê¤¤¤è¤¦¤Ë
494       ¤¹¤ë¡£  */
495   unsigned align_head : 1;
496
497   /***en If nonzero, draw an M-text two-dimensionally, i.e., newlines
498       in M-text breaks lines and the following characters are drawn in
499       the next line.  If <format> is non-NULL, and the function
500       returns nonzero line width, a line longer than that width is
501       also broken.  */
502   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò£²¼¡¸µÅª¤Ë¡¢¤¹¤Ê¤ï¤ÁM-text Ãæ¤Î 
503       newline ¤Ç²þ¹Ô¤·¡¢Â³¤¯Ê¸»ú¤Ï¼¡¤®¤Î¹Ô¤Ëɽ¼¨¤¹¤ë¡£¤â¤· <format> ¤¬ 
504       NULL ¤Ç¤Ê¤¯¡¢¤½¤Î´Ø¿ô¤¬ 0 ¤Ç¤Ê¤¤¹ÔÉý¤òÊÖ¤»¤Ð¡¢¤½¤ÎÉý¤è¤êŤ¤¹Ô¤â
505       ²þ¹Ô¤µ¤ì¤ë¡£  */
506   unsigned two_dimensional : 1;
507
508   /***en If nonzero, draw an M-text to the right of a specified
509       position.  */
510   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤ò»ØÄꤷ¤¿°ÌÃ֤ᦤËɽ¼¨¤¹¤ë¡£  */
511   unsigned orientation_reversed : 1;
512
513   /***en If nonzero, reorder glyphs correctly for bidi text.  */ 
514   /***ja 0 ¤Ê¤±¤ì¤Ð¡¢bidi ¥Æ¥­¥¹¥ÈÍѤ˥°¥ê¥Õ¤òÀµ¤·¤¯À°Î󤹤롣  */
515   unsigned enable_bidi : 1;
516
517   /***en If nonzero, don't draw characters whose general category (in
518       Unicode) is Cf (Other, format).  */
519   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥æ¥Ë¥³¡¼¥É¤ËÃÖ¤±¤ë°ìÈÌ¥«¥Æ¥´¥ê¤¬ Cf (Other,
520       format) ¤Ç¤¢¤ëʸ»ú¤òɽ¼¨¤·¤Ê¤¤¡£  */
521   unsigned ignore_formatting_char : 1;
522
523   /***en If nonzero, draw glyphs suitable for a terminal.  Not yet
524       implemented.  */
525   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ã¼ËöÍѤΥ°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£¡Ê̤¼ÂÁõ¡£¡Ë  */
526   unsigned fixed_width : 1;
527
528   /***en If nonzero, draw glyphs with anti-aliasing if a backend font
529       driver supports it.  */
530   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹¤Ç¥°¥ê¥Õ¤òɽ¼¨¤¹¤ë¡£¡Ê¥Ð¥Ã¥¯¥¨
531       ¥ó¥É¤Î¥Õ¥©¥ó¥È¥É¥é¥¤¥Ð¤¬¥¢¥ó¥Á¥¨¡¼¥ê¥¢¥¹µ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¾ì
532       ¹ç¤Î¤ß¡£¡Ë */
533   unsigned anti_alias : 1;
534
535   /***en If nonzero, disable the adjustment of glyph positions to
536       avoid horizontal overlapping at font boundary.  */
537   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Õ¥©¥ó¥È¶­³¦¤Ç¤Î¿åÊ¿Êý¸þ¤Î¥°¥ê¥Õ¤Î½Å¤Ê¤ê¤òÈò¤±
538       ¤ë¤¿¤á¤Î¥°¥ê¥Õ°ÌÃÖ¤ÎÄ´À°¤ò̵¸ú¤Ë¤¹¤ë¡£  */
539   unsigned disable_overlapping_adjustment : 1;
540
541   /***en If nonzero, the values are minimum line ascent and descent
542       pixels.  */
543   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
544   unsigned int min_line_ascent;
545   unsigned int min_line_descent;
546
547   /***en If nonzero, the values are maximum line ascent and descent
548       pixels.  */
549   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
550   unsigned int max_line_ascent;
551   unsigned int max_line_descent;
552
553   /***en If nonzero, the value specifies how many pixels each line can
554       occupy on the display.  The value zero means that there is no
555       limit.  It is ignored if <format> is non-NULL.  */
556   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϤ³¤Î¥Ç¥£¥¹¥×¥ì¥¤¾å¤Ç³Æ¹Ô¤¬Àê¤á¤ë¤³¤È¤Î¤Ç¤­
557       ¤ë¥Ô¥¯¥»¥ë¿ô¤ò¼¨¤¹¡£ 0 ¤Ï¸ÂÄꤵ¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£<format> ¤¬
558       NULL ¤Ç¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£   */
559   unsigned int max_line_width;
560
561   /***en If nonzero, the value specifies the distance between tab
562       stops in columns (the width of one column is the width of a
563       space in the default font of the frame).  The value zero means
564       8.  */
565   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϥ¿¥Ö¥¹¥È¥Ã¥×´Ö¤Îµ÷Î¥¤ò¥³¥é¥àñ°Ì¡Ê¥³¥é¥à¤Ï
566       ¥Õ¥ì¡¼¥à¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤Ë¤ª¤±¤ë¶õÇòʸ»ú¤ÎÉý¤Ç¤¢¤ë¡Ë¤Ç¼¨¤¹¡£ 
567       0 ¤Ï 8 ¤ò°ÕÌ£¤¹¤ë¡£ */
568   unsigned int tab_width;
569
570   /***en If non-NULL, the value is a function that calculates the
571       indentation and width limit of each line based on the line
572       number LINE and the coordinate Y.  The function store the
573       indentation and width limit at the place pointed by INDENT and
574       WIDTH respectively.
575
576       The indentation specifies how many pixels the first glyph of
577       each line is shifted to the right (if the member
578       <orientation_reversed> is zero) or to the left (otherwise).  If
579       the value is negative, each line is shifted to the reverse
580       direction.
581
582       The width limit specifies how many pixels each line can occupy
583       on the display.  The value 0 means that there is no limit.
584
585       LINE and Y are reset to 0 when a line is broken by a newline
586       character, and incremented each time when a long line is broken
587       because of the width limit.
588
589       This has an effect only when <two_dimensional> is nonzero.  */
590   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϴؿô¤Ç¤¢¤ê¡¢¤½¤Î´Ø¿ô¤Ï¹ÔÈÖ¹æ LINE ¤ÈºÂɸ Y 
591       ¤Ë´ð¤Å¤¤¤Æ³Æ¹Ô¤Î¥¤¥ó¥Ç¥ó¥È¤ÈºÇÂçÉý¤ò·×»»¤·¡¢¤½¤ì¤¾¤ì¤òINDENT ¤È
592       WIDTH ¤Ç»Ø¤µ¤ì¤ë¾ì½ê¤ËÊݸ¤¹¤ë¡£
593
594       ¥¤¥ó¥Ç¥ó¥È¤Ï¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤¬±¦¡Ê¥á¥ó¥Ð 
595       <orientation_reversed> ¤¬ 0 ¤Î»þ¡Ë¤¢¤ë¤¤¤Ïº¸¡Ê¤½¤ì°Ê³°¤Î»þ¡Ë¤Ë²¿
596       ¥Ô¥¯¥»¥ë¤º¤é¤¹¤ò»ØÄꤹ¤ë¡£Ãͤ¬Éé¤Ê¤é¤ÐµÕÊý¸þ¤Ë¤º¤é¤¹¡£
597
598       ºÇÂçÉý¤Ï¡¢³Æ¹Ô¤¬¥Ç¥£¥¹¥×¥ì¥¤¾å¤ÇÀê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ÎºÇ
599       ÂçÃͤǤ¢¤ë¡£Ãͤ¬ 0 ¤Î¾ì¹ç¤ÏÀ©¸Â¤ò¼õ¤±¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
600
601       LINE ¤È Y ¤Ï²þ¹Ôʸ»ú¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿ºÝ¤Ë¤Ï 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢
602       ºÇÂçÉý¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿¾ì¹ç¤Ë¤Ï 1 ¤Å¤ÄÁý¤ä¤µ¤ì¤ë¡£
603
604       ¤³¤ì¤Ï <two_dimensional> ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£  */
605   void (*format) (int line, int y, int *indent, int *width);
606
607   /***en If non-NULL, the value is a function that calculates a line
608       breaking position when a line is too long to fit within the
609       width limit.  POS is the position of the character next to the
610       last one that fits within the limit.  FROM is the position of the
611       first character of the line, and TO is the position of the last
612       character displayed on the line if there were not width limit.
613       LINE and Y are the same as the arguments to <format>.
614
615       The function must return a character position to break the
616       line.
617
618       The function should not modify MT.
619
620       The mdraw_default_line_break () function is useful for such a
621       script that uses SPACE as a word separator.  */
622   /***ja NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤ¬ºÇÂçÉýÃæ¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¹Ô¤ò²þ¤á¤ë
623       °ÌÃÖ¤ò·×»»¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¡£POS ¤ÏºÇÂçÉý¤Ë¼ý¤Þ¤ëºÇ¸å¤Îʸ»ú¤Î¼¡¤Îʸ
624       »ú¤Î°ÌÃ֤Ǥ¢¤ë¡£FROM ¤Ï¹Ô¤ÎºÇ½é¤Îʸ»ú¤Î°ÌÃÖ¡¢TO ¤ÏºÇÂçÉý¤¬»ØÄꤵ
625       ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤½¤Î¹Ô¤Ëɽ¼¨¤µ¤ì¤ëºÇ¸å¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£LINE ¤È 
626       Y ¤Ï <format> ¤Î°ú¿ô¤ÈƱ¤¸¤Ç¤¢¤ë¡£
627
628       ¤³¤Î´Ø¿ô¤Ï¹Ô¤ò²þ¤á¤ëʸ»ú°ÌÃÖ¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤Þ¤¿MT ¤ò
629       Êѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
630
631       ´Ø¿ô mdraw_default_line_break () ¤Ï¡¢¶õÇò¤ò¸ì¤Î¶èÀÚ¤ê¤È¤·¤ÆÍѤ¤
632       ¤ë¥¹¥¯¥ê¥×¥ÈÍѤȤ·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
633   int (*line_break) (MText *mt, int pos, int from, int to, int line, int y);
634
635   int with_cursor;
636
637   /***en Specifies the character position to display a cursor.  If it
638       is greater than the maximum character position, the cursor is
639       displayed next to the last character of an M-text.  If the value
640       is negative, even if <cursor_width> is nonzero, cursor is not
641       displayed.  */
642   /***ja ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ëʸ»ú°ÌÃÖ¤ò¼¨¤¹¡£ºÇÂç¤Îʸ»ú°ÌÃÖ¤è¤êÂ礭¤±¤ì
643       ¤Ð¡¢¥«¡¼¥½¥ë¤ÏM-text ¤ÎºÇ¸å¤Îʸ»ú¤ÎÎÙ¤Ëɽ¼¨¤µ¤ì¤ë¡£Éé¤Ê¤é¤Ð¡¢
644       <cursor_width> ¤¬ 0 ¤Ç¤Ê¤¯¤Æ¤â¥«¡¼¥½¥ë¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£
645         */
646   int cursor_pos;
647
648   /***en If nonzero, display a cursor at the character position
649       <cursor_pos>.  If the value is positive, it is the pixel width
650       of the cursor.  If the value is negative, the cursor width is
651       the same as the underlining glyph(s).  */
652   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢<cursor_pos> ¤Ë¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£Ãͤ¬Àµ¤Ê¤é¤Ð¡¢
653       ¥«¡¼¥½¥ë¤ÎÉý¤Ï¤½¤ÎÃÍ¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë¤Ç¤¢¤ë¡£Éé¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤Î
654       ¤¢¤ë¥°¥ê¥Õ¤ÈƱ¤¸Éý¤Ç¤¢¤ë¡£  */
655   int cursor_width;
656
657   /***en If nonzero and <cursor_width> is also nonzero, display double
658       bar cursors; at the character position <cursor_pos> and at the
659       logically previous character.  Both cursors have one pixel width
660       with horizontal fringes at upper or lower positions.  */
661   /***ja If 0 ¤Ç¤Ê¤¯¡¢¤«¤Ä <cursor_width> ¤â 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ð¡¼¥«¡¼¥½
662       ¥ë¤òʸ»ú°ÌÃÖ<cursor_pos> ¤ÈÏÀÍýŪ¤Ë¤½¤ì¤ÎÁ°¤Ë¤¢¤ëʸ»ú¤Î£²¥ö½êɽ
663       ¼¨¤¹¤ë¡£ÁÐÊý¤È¤â£±¥Ô¥¯¥»¥ëÉý¤Ç¡¢¾å²¼¤Ë¿åÊ¿¤Î¾þ¤ê¤¬¤Ä¤¯¡£*/
664   int cursor_bidi;
665
666   /***en If nonzero, on drawing partial text, pixels of surrounding
667       texts that intrude into the drawing area are also drawn.  For
668       instance, some CVC sequence of Thai text (C is consonant, V is
669       upper vowel) is drawn so that V is placed over the middle of two
670       Cs.  If this CVC sequence is already drawn and only the last C
671       is drawn again (for instance by updating cursor position), the
672       right half of V is erased if this member is zero.  By setting
673       this member to nonzero, even with such a drawing, we can keep
674       this CVC sequence correctly displayed.  */
675   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Æ¥­¥¹¥È¤Î°ìÉôʬ¤òɽ¼¨¤¹¤ëºÝ¤Ë¡¢Á°¸å¤Î¥Æ¥­¥¹¥È
676       ¤Î¤¦¤Á¤½¤Îɽ¼¨Îΰè¤Ë¿¯Æþ¤¹¤ëÉôʬ¤âɽ¼¨¤¹¤ë¡£¤¿¤È¤¨¤Ð¡¢¥¿¥¤¸ìʸ½ñ
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 gylphs 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       the glyph.  */
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       the glyph.  */
817   MFont *font;
818
819   /***en Type of the font.  One of Mx, Mfreetype, Mxft.  */
820   /***ja ¥Õ¥©¥ó¥È¤Î¥¿¥¤¥×¡£Mx¡¢Mfreetype¡¢Mxft ¤Î¤¤¤º¤ì¤«¡£  */
821   MSymbol font_type;
822
823   /***en Pointer to the font structure.  The actual type is
824       (XFontStruct *) if <font_type> member is Mx, FT_Face if
825       <font_type> member is Mfreetype, and (XftFont *) if <font_type>
826       member is Mxft.  */
827   /***ja ¥Õ¥©¥ó¥È¤Î¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¡£¼ÂºÝ¤Î·¿¤Ï <font_type> ¥á¥ó¥Ð¤¬
828       Mx ¤Ê¤é (XFontStruct *)¡¢ Mfreetype ¤Ê¤é FT_Face¡¢Mxft ¤Ê¤é
829       (XftFont *)¡£ */
830   void *fontp;
831
832 } MDrawGlyph;
833
834 /*=*/
835
836 /***en
837     @brief Type of text items.
838
839     The type #MDrawTextItem is for @e textitem objects.
840     Each textitem contains an M-text and some other information to
841     control the drawing of the M-text.  */
842
843 /***ja
844     @brief textitem ¤Î·¿Àë¸À.
845
846     #MDrawTextItem ¤Ï @e ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£³Æ
847     ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Ï¡¢1¸Ä¤Î M-text ¤È¡¢¤½¤Îɽ¼¨¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î³Æ¼ï
848     ¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤ë¡£
849
850     @latexonly \IPAlabel{MTextItem} @endlatexonly  */
851
852 typedef struct
853 {
854   /***en M-text. */
855   /***ja M-text. */
856   MText *mt;                      
857
858   /***en Optional change in the position (in the unit of pixel) along
859       the X-axis before the M-text is drawn.  */
860   /***ja M-text É½¼¨Á°¤Ë¹Ô¤Ê¤¦X¼´Êý¸þ¤Î°ÌÃÖÄ´À° (¥Ô¥¯¥»¥ëñ°Ì) */
861   int delta;                     
862
863   /***en Pointer to a face object.  Each property of the face, if not
864       Mnil, overrides the same property of face(s) specified as a text
865       property in <mt>.  */
866   /***ja ¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£¥Õ¥§¡¼¥¹¤Î³Æ¥×¥í¥Ñ¥Æ¥£¤Ï 
867       Mnil ¤Ç¤Ê¤±¤ì¤Ð <mt> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥§¡¼¥¹¤ÎƱ¤¸¥×¥í¥Ñ¥Æ¥£¤ËÍ¥Àè
868       ¤¹¤ë*/
869   MFace *face;
870
871   /***en Pointer to a draw control object.  The M-text <mt> is drawn
872       by mdraw_text_with_control () with this control object.  */
873   /***ja É½¼¨À©¸æ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£ mdraw_text_with_control () 
874       ¤Ï¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ M-text <mt> ¤òɽ¼¨¤¹¤ë¡£  */
875   MDrawControl *control;
876
877 } MDrawTextItem;
878
879 /*=*/
880
881 extern int mdraw_text (MFrame *frame, MDrawWindow win, int x, int y,
882                        MText *mt, int from, int to);
883
884 extern int mdraw_image_text (MFrame *frame, MDrawWindow win, int x, int y,
885                              MText *mt, int from, int to);
886
887 extern int mdraw_text_with_control (MFrame *frame, MDrawWindow win,
888                                     int x, int y, MText *mt, int from, int to,
889                                     MDrawControl *control);
890
891 extern int mdraw_coordinates_position (MFrame *frame,
892                                        MText *mt, int from, int to,
893                                        int x, int y, MDrawControl *control);
894
895 extern int mdraw_text_extents (MFrame *frame,
896                                MText *mt, int from, int to,
897                                MDrawControl *control,
898                                MDrawMetric *overall_ink_return,
899                                MDrawMetric *overall_logical_return,
900                                MDrawMetric *overall_line_return);
901
902 extern int mdraw_text_per_char_extents (MFrame *frame,
903                                         MText *mt, int from, int to,
904                                         MDrawControl *control,
905                                         MDrawMetric *ink_array_return,
906                                         MDrawMetric *logical_array_return,
907                                         int array_size,
908                                         int *num_chars_return,
909                                         MDrawMetric *overall_ink_return,
910                                         MDrawMetric *overall_logical_return);
911
912 extern int mdraw_glyph_info (MFrame *frame, MText *mt, int from, int pos,
913                              MDrawControl *control, MDrawGlyphInfo *info);
914
915 extern int mdraw_glyph_list (MFrame *frame, MText *mt, int from, int to,
916                              MDrawControl *control, MDrawGlyph *glyphs,
917                              int array_size, int *num_glyphs_return);
918
919 extern void mdraw_text_items (MFrame *frame, MDrawWindow win, int x, int y,
920                               MDrawTextItem *items, int nitems);
921
922 extern void mdraw_per_char_extents (MFrame *frame, MText *mt,
923                                     MDrawMetric *array_return,
924                                     MDrawMetric *overall_return);
925
926 extern int mdraw_default_line_break (MText *mt, int pos,
927                                      int from, int to, int line, int y);
928
929 extern void mdraw_clear_cache (MText *mt);
930
931 /* end of drawing module */
932 /*=*/
933
934 /*** @ingroup m17nGUI */
935 /***en @defgroup m17nInputMethodWin Input Method (GUI) */
936 /***ja @defgroup m17nInputMethodWin ÆþÎϥ᥽¥Ã¥É (GUI) */
937 /*=*/
938
939 extern MInputDriver minput_gui_driver;
940
941 /*=*/
942 /*** @ingroup m17nInputMethodWin */
943 /***en 
944     @brief Type of the argument to the function minput_create_ic ().
945
946     The type #MInputGUIArgIC is for the argument $ARG of the function
947     minput_create_ic () to create an input context of an internal
948     input method.  */
949
950 /***ja
951     @brief ´Ø¿ô minput_create_ic () ¤Î°ú¿ô¤Î·¿Àë¸À.
952
953     #MInputGUIArgIC ¤Ï¡¢´Ø¿ô minput_create_ic () ¤¬ÆâÉôÆþÎϥ᥽¥Ã¥É¤Î
954     ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ëºÝ¤Î¡¢°ú¿ô $ARG ÍѤη¿¤Ç¤¢¤ë¡£  */
955
956 typedef struct
957 {
958   /***en Frame of the client.  */
959   /***ja ¥¯¥é¥¤¥¢¥ó¥È¤Î¥Õ¥ì¡¼¥à  */
960   MFrame *frame;
961
962   /***en Window on which to display the preedit and status text.  */
963   /***ja preedit ¥Æ¥­¥¹¥È¤È status ¥Æ¥­¥¹¥È¤òɽ¼¨¤¹¤ë¥¦¥£¥ó¥É¥¦  */
964   MDrawWindow client;
965
966   /***en Window that the input context has a focus on.  */
967   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤¬¥Õ¥©¡¼¥«¥¹¤ò¤ª¤¤¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦  */
968   MDrawWindow focus;
969 } MInputGUIArgIC;
970
971 /*=*/
972
973 extern MSymbol minput_event_to_key (MFrame *frame, void *event);
974
975 /* end of input module */
976 /*=*/
977 /* end of window modules */
978 /*=*/
979
980 extern MFace *mdebug_dump_face (MFace *face, int indent);
981 extern MFont *mdebug_dump_font (MFont *font);
982 extern MFontset *mdebug_dump_fontset (MFontset *fontset, int indent);
983
984 #ifdef __cplusplus
985 }
986 #endif
987
988 #endif /* _M17N_GUI_H_ */
989
990 /*
991   Local Variables:
992   coding: euc-japan
993   End:
994 */