* m17n-gui.h (M17N_INIT_X, M17N_INIT_GD): New macros.
[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 #define M17N_INIT_X() 1
36 #define M17N_INIT_GD() 1
37
38 extern int m17n_init_win (void);
39 #undef M17N_INIT
40 #define M17N_INIT() m17n_init_win ()
41
42 extern void m17n_fini_win (void);
43 #undef M17N_FINI
44 #define M17N_FINI() m17n_fini_win ()
45
46 /***en @defgroup m17nGUI GUI API */
47 /***ja @defgroup m17nGUI GUI API */
48 /*=*/
49
50 /*** @ingroup m17nGUI */
51 /***en @defgroup m17nFrame Frame */
52 /***ja @defgroup m17nFrame ¥Õ¥ì¡¼¥à */
53 /*=*/
54
55 /*** @ingroup m17nFrame */
56 /***en
57     @brief Type of frames.
58
59     The type #MFrame is for a @e frame object.  Each frame holds
60     various information about the corresponding physical display/input
61     device.
62
63     The internal structure of the type #MFrame is concealed from an
64     application program, and its contents depend on the window system
65     in use.  In the m17n-X library, it contains the information about
66     @e display and @e screen in the X Window System.  */
67
68 /***ja
69     @brief ¥Õ¥ì¡¼¥à¤Î·¿Àë¸À.
70
71     #MFrame ¤Ï¡¢@e ¥Õ¥ì¡¼¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£¸Ä¡¹¤Î¥Õ¥ì¡¼¥à¤Ï¡¢
72     ¤½¤ì¤¬Âбþ¤¹¤ëʪÍýŪ¤Êɽ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î³Æ¼ï¾ðÊó¤òÊÝ»ý¤¹¤ë¡£
73
74     #MFrame ·¿¤ÎÆâÉô¹½Â¤¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
75     ¤Þ¤¿¤½¤ÎÆâÍƤϻÈÍѤ¹¤ë¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£¤Þ¤¿m17n-X ¥é
76     ¥¤¥Ö¥é¥ê¤Ë¤ª¤±¤ë¥Õ¥ì¡¼¥à¤Ï¡¢X ¥¦¥£¥ó¥É¥¦¤Î @e display ¤È @e screen 
77     ¤Ë´Ø¤¹¤ë¾ðÊó¤ò»ý¤Ä¡£
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 MSymbol Mx;
100
101 extern MFrame *mframe (MPlist *plist);
102
103 extern void *mframe_get_prop (MFrame *frame, MSymbol key);
104
105 /* end of frame module */
106 /*=*/
107
108 /*** @ingroup m17nGUI  */
109 /***en @defgroup m17nFont Font */
110 /***ja @defgroup m17nFont ¥Õ¥©¥ó¥È */
111 /*=*/
112
113 /*** @ingroup m17nFont */
114 /***en
115     @brief Type of fonts.
116
117     The type #MFont is the structure defining fonts.  It contains
118     information about the following properties of a font: foundry,
119     family, weight, style, stretch, adstyle, registry, size, and
120     resolution.
121
122     This structure is used both for specifying a font in a fontset
123     and for storing information about available system fonts.
124
125     The internal structure is concealed from an application program.  */
126
127 /***ja
128     @brief ¥Õ¥©¥ó¥È¤Î·¿Àë¸À.
129
130     #MFont ·¿¤Ï¥Õ¥©¥ó¥È»ØÄêÍѤι½Â¤ÂΤǤ¢¤ê¡¢¥Õ¥©¥ó¥È¤Î¥×¥í¥Ñ¥Æ¥£¤Ç¤¢
131     ¤ë foundry, family, weight, style, stretch, adstyle, registry,
132     size, resolution ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¡£
133
134     ¤³¤Î¹½Â¤ÂΤϥե©¥ó¥È¥»¥Ã¥ÈÆâ¤Î¥Õ¥©¥ó¥È¤ò»ØÄꤹ¤ëºÝ¤È¡¢»ÈÍѲÄǽ¤Ê¥·
135     ¥¹¥Æ¥à¥Õ¥©¥ó¥È¤Î¾ðÊó¤ò³ÊǼ¤¹¤ëºÝ¤ÎξÊý¤ËÍѤ¤¤é¤ì¤ë¡£
136
137     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
138
139 /***
140     @seealso
141     mfont (), mfont_from_name (), mfont_find ().  */
142
143 typedef struct MFont MFont;
144
145 /*=*/
146
147 extern MSymbol Mfont;
148
149 extern MPlist *mfont_freetype_path;
150
151 extern MFont *mfont ();
152
153 extern MFont *mfont_copy (MFont *font);
154
155 extern MFont *mfont_parse_name (char *name, MSymbol format);
156
157 extern char *mfont_unparse_name (MFont *font, MSymbol format);
158
159 extern MFont *mfont_from_spec (char *family, char *weight, char *slant,
160                                char *swidth, char *adstyle, char *registry,
161                                unsigned short point, unsigned short res);
162
163 /* These two are obsolete (from 1.1.0).  */
164 extern char *mfont_name (MFont *font);
165 extern MFont *mfont_from_name (char *name);
166
167 extern MSymbol Mfoundry;
168 extern MSymbol Mfamily;
169 extern MSymbol Mweight;
170 extern MSymbol Mstyle;
171 extern MSymbol Mstretch;
172 extern MSymbol Madstyle;
173 extern MSymbol Mregistry;
174 extern MSymbol Msize;
175 extern MSymbol Mresolution;
176
177 extern MSymbol Mfontconfig;
178
179 extern void *mfont_get_prop (MFont *font, MSymbol key);
180
181 extern int mfont_put_prop (MFont *font, MSymbol key, void *val);
182
183 extern int mfont_set_encoding (MFont *font,
184                                MSymbol encoding_name, MSymbol repertory_name);
185
186
187 /*=*/
188
189 /***en
190     @brief Find a font.
191
192     The mfont_find () function returns a pointer to the available font
193     that matches best with the specification $SPEC in frame $FRAME.
194
195     $SCORE, if not NULL, must point to a place to store the score
196     value which indicates how well the found font matches $SPEC.  The
197     smaller score means a better match.
198
199     $LIMITED_SIZE, if nonzero, forces the font selector to find a
200     font not greater than the #Msize property of $SPEC.  */
201
202 /***ja
203     @brief ¥Õ¥©¥ó¥È¤òõ¤¹.
204
205     ´Ø¿ô mfont_find () ¤Ï¡¢¥Õ¥ì¡¼¥à $FRAME ¾å¤Ç¥Õ¥©¥ó¥ÈÄêµÁ $SPEC ¤Ë¤â¤Ã
206     ¤È¤â¹çÃפ¹¤ë»ÈÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£  
207
208     $SCORE ¤Ï NULL ¤Ç¤¢¤ë¤«¡¢¸«¤Ä¤«¤Ã¤¿¥Õ¥©¥ó¥È¤¬ $SPEC ¤Ë¤É¤ì¤Û¤É¹ç¤Ã
209     ¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥¹¥³¥¢¤òÊݸ¤¹¤ë¾ì½ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£¥¹¥³¥¢¤¬¾®¤µ
210     ¤¤¤Û¤ÉÎɤ¯¹ç¤Ã¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
211
212     $LIMITED_SIZE ¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢$SPEC ¤Î¥×¥í¥Ñ¥Æ¥£ #Msize ¤è¤êÂ礭
213     ¤¯¤Ê¤¤¥Õ¥©¥ó¥È¤À¤±¤¬Ãµ¤µ¤ì¤ë¡£
214 */
215
216 extern MFont *mfont_find (MFrame *frame, MFont *spec,
217                           int *score, int limited_size);
218
219 extern MSymbol *mfont_selection_priority ();
220
221 extern int mfont_set_selection_priority (MSymbol *keys);
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, the values are minimum line ascent and descent
539       pixels.  */
540   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇ¾®Ãͤò¼¨¤¹¡£  */
541   unsigned int min_line_ascent;
542   unsigned int min_line_descent;
543
544   /***en If nonzero, the values are maximum line ascent and descent
545       pixels.  */
546   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤΠascent ¤È descent ¤ÎºÇÂçÃͤò¼¨¤¹¡£  */
547   unsigned int max_line_ascent;
548   unsigned int max_line_descent;
549
550   /***en If nonzero, the value specifies how many pixels each line can
551       occupy on the display.  The value zero means that there is no
552       limit.  It is ignored if <format> is non-NULL.  */
553   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϤ³¤Î¥Ç¥£¥¹¥×¥ì¥¤¾å¤Ç³Æ¹Ô¤¬Àê¤á¤ë¤³¤È¤Î¤Ç¤­
554       ¤ë¥Ô¥¯¥»¥ë¿ô¤ò¼¨¤¹¡£ 0 ¤Ï¸ÂÄꤵ¤ì¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£<format> ¤¬
555       NULL ¤Ç¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£   */
556   unsigned int max_line_width;
557
558   /***en If nonzero, the value specifies the distance between tab
559       stops in columns (the width of one column is the width of a
560       space in the default font of the frame).  The value zero means
561       8.  */
562   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϥ¿¥Ö¥¹¥È¥Ã¥×´Ö¤Îµ÷Î¥¤ò¥³¥é¥àñ°Ì¡Ê¥³¥é¥à¤Ï
563       ¥Õ¥ì¡¼¥à¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤Ë¤ª¤±¤ë¶õÇòʸ»ú¤ÎÉý¤Ç¤¢¤ë¡Ë¤Ç¼¨¤¹¡£ 
564       0 ¤Ï 8 ¤ò°ÕÌ£¤¹¤ë¡£ */
565   unsigned int tab_width;
566
567   /***en If non-NULL, the value is a function that calculates the
568       indentation and width limit of each line based on the line
569       number LINE and the coordinate Y.  The function store the
570       indentation and width limit at the place pointed by INDENT and
571       WIDTH respectively.
572
573       The indentation specifies how many pixels the first glyph of
574       each line is shifted to the right (if the member
575       <orientation_reversed> is zero) or to the left (otherwise).  If
576       the value is negative, each line is shifted to the reverse
577       direction.
578
579       The width limit specifies how many pixels each line can occupy
580       on the display.  The value 0 means that there is no limit.
581
582       LINE and Y are reset to 0 when a line is broken by a newline
583       character, and incremented each time when a long line is broken
584       because of the width limit.
585
586       This has an effect only when <two_dimensional> is nonzero.  */
587   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢Ãͤϴؿô¤Ç¤¢¤ê¡¢¤½¤Î´Ø¿ô¤Ï¹ÔÈÖ¹æ LINE ¤ÈºÂɸ Y 
588       ¤Ë´ð¤Å¤¤¤Æ³Æ¹Ô¤Î¥¤¥ó¥Ç¥ó¥È¤ÈºÇÂçÉý¤ò·×»»¤·¡¢¤½¤ì¤¾¤ì¤òINDENT ¤È
589       WIDTH ¤Ç»Ø¤µ¤ì¤ë¾ì½ê¤ËÊݸ¤¹¤ë¡£
590
591       ¥¤¥ó¥Ç¥ó¥È¤Ï¡¢³Æ¹Ô¤ÎºÇ½é¤Î¥°¥ê¥Õ¤¬±¦¡Ê¥á¥ó¥Ð 
592       <orientation_reversed> ¤¬ 0 ¤Î»þ¡Ë¤¢¤ë¤¤¤Ïº¸¡Ê¤½¤ì°Ê³°¤Î»þ¡Ë¤Ë²¿
593       ¥Ô¥¯¥»¥ë¤º¤é¤¹¤ò»ØÄꤹ¤ë¡£Ãͤ¬Éé¤Ê¤é¤ÐµÕÊý¸þ¤Ë¤º¤é¤¹¡£
594
595       ºÇÂçÉý¤Ï¡¢³Æ¹Ô¤¬¥Ç¥£¥¹¥×¥ì¥¤¾å¤ÇÀê¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ô¥¯¥»¥ë¿ô¤ÎºÇ
596       ÂçÃͤǤ¢¤ë¡£Ãͤ¬ 0 ¤Î¾ì¹ç¤ÏÀ©¸Â¤ò¼õ¤±¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
597
598       LINE ¤È Y ¤Ï²þ¹Ôʸ»ú¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿ºÝ¤Ë¤Ï 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢
599       ºÇÂçÉý¤Ë¤è¤Ã¤Æ¹Ô¤¬²þ¤Þ¤Ã¤¿¾ì¹ç¤Ë¤Ï 1 ¤Å¤ÄÁý¤ä¤µ¤ì¤ë¡£
600
601       ¤³¤ì¤Ï <two_dimensional> ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£  */
602   void (*format) (int line, int y, int *indent, int *width);
603
604   /***en If non-NULL, the value is a function that calculates a line
605       breaking position when a line is too long to fit within the
606       width limit.  POS is the position of the character next to the
607       last one that fits within the limit.  FROM is the position of the
608       first character of the line, and TO is the position of the last
609       character displayed on the line if there were not width limit.
610       LINE and Y are the same as the arguments to <format>.
611
612       The function must return a character position to break the
613       line.
614
615       The function should not modify MT.
616
617       The mdraw_default_line_break () function is useful for such a
618       script that uses SPACE as a word separator.  */
619   /***ja NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ÃͤϹԤ¬ºÇÂçÉýÃæ¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¹Ô¤ò²þ¤á¤ë
620       °ÌÃÖ¤ò·×»»¤¹¤ë´Ø¿ô¤Ç¤¢¤ë¡£POS ¤ÏºÇÂçÉý¤Ë¼ý¤Þ¤ëºÇ¸å¤Îʸ»ú¤Î¼¡¤Îʸ
621       »ú¤Î°ÌÃ֤Ǥ¢¤ë¡£FROM ¤Ï¹Ô¤ÎºÇ½é¤Îʸ»ú¤Î°ÌÃÖ¡¢TO ¤ÏºÇÂçÉý¤¬»ØÄꤵ
622       ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤½¤Î¹Ô¤Ëɽ¼¨¤µ¤ì¤ëºÇ¸å¤Îʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¡£LINE ¤È 
623       Y ¤Ï <format> ¤Î°ú¿ô¤ÈƱ¤¸¤Ç¤¢¤ë¡£
624
625       ¤³¤Î´Ø¿ô¤Ï¹Ô¤ò²þ¤á¤ëʸ»ú°ÌÃÖ¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤Þ¤¿MT ¤ò
626       Êѹ¹¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
627
628       ´Ø¿ô mdraw_default_line_break () ¤Ï¡¢¶õÇò¤ò¸ì¤Î¶èÀÚ¤ê¤È¤·¤ÆÍѤ¤
629       ¤ë¥¹¥¯¥ê¥×¥ÈÍѤȤ·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
630   int (*line_break) (MText *mt, int pos, int from, int to, int line, int y);
631
632   int with_cursor;
633
634   /***en Specifies the character position to display a cursor.  If it
635       is greater than the maximum character position, the cursor is
636       displayed next to the last character of an M-text.  If the value
637       is negative, even if <cursor_width> is nonzero, cursor is not
638       displayed.  */
639   /***ja ¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ëʸ»ú°ÌÃÖ¤ò¼¨¤¹¡£ºÇÂç¤Îʸ»ú°ÌÃÖ¤è¤êÂ礭¤±¤ì
640       ¤Ð¡¢¥«¡¼¥½¥ë¤ÏM-text ¤ÎºÇ¸å¤Îʸ»ú¤ÎÎÙ¤Ëɽ¼¨¤µ¤ì¤ë¡£Éé¤Ê¤é¤Ð¡¢
641       <cursor_width> ¤¬ 0 ¤Ç¤Ê¤¯¤Æ¤â¥«¡¼¥½¥ë¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¡£
642         */
643   int cursor_pos;
644
645   /***en If nonzero, display a cursor at the character position
646       <cursor_pos>.  If the value is positive, it is the pixel width
647       of the cursor.  If the value is negative, the cursor width is
648       the same as the underlining glyph(s).  */
649   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢<cursor_pos> ¤Ë¥«¡¼¥½¥ë¤òɽ¼¨¤¹¤ë¡£Ãͤ¬Àµ¤Ê¤é¤Ð¡¢
650       ¥«¡¼¥½¥ë¤ÎÉý¤Ï¤½¤ÎÃÍ¡Ê¥Ô¥¯¥»¥ëñ°Ì¡Ë¤Ç¤¢¤ë¡£Éé¤Ê¤é¤Ð¡¢¥«¡¼¥½¥ë¤Î
651       ¤¢¤ë¥°¥ê¥Õ¤ÈƱ¤¸Éý¤Ç¤¢¤ë¡£  */
652   int cursor_width;
653
654   /***en If nonzero and <cursor_width> is also nonzero, display double
655       bar cursors; at the character position <cursor_pos> and at the
656       logically previous character.  Both cursors have one pixel width
657       with horizontal fringes at upper or lower positions.  */
658   /***ja If 0 ¤Ç¤Ê¤¯¡¢¤«¤Ä <cursor_width> ¤â 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ð¡¼¥«¡¼¥½
659       ¥ë¤òʸ»ú°ÌÃÖ<cursor_pos> ¤ÈÏÀÍýŪ¤Ë¤½¤ì¤ÎÁ°¤Ë¤¢¤ëʸ»ú¤Î£²¥ö½êɽ
660       ¼¨¤¹¤ë¡£ÁÐÊý¤È¤â£±¥Ô¥¯¥»¥ëÉý¤Ç¡¢¾å²¼¤Ë¿åÊ¿¤Î¾þ¤ê¤¬¤Ä¤¯¡£*/
661   int cursor_bidi;
662
663   /***en If nonzero, on drawing partial text, pixels of surrounding
664       texts that intrude into the drawing area are also drawn.  For
665       instance, some CVC sequence of Thai text (C is consonant, V is
666       upper vowel) is drawn so that V is placed over the middle of two
667       Cs.  If this CVC sequence is already drawn and only the last C
668       is drawn again (for instance by updating cursor position), the
669       right half of V is erased if this member is zero.  By setting
670       this member to nonzero, even with such a drawing, we can keep
671       this CVC sequence correctly displayed.  */
672   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Æ¥­¥¹¥È¤Î°ìÉôʬ¤òɽ¼¨¤¹¤ëºÝ¤Ë¡¢Á°¸å¤Î¥Æ¥­¥¹¥È
673       ¤Î¤¦¤Á¤½¤Îɽ¼¨Îΰè¤Ë¿¯Æþ¤¹¤ëÉôʬ¤âɽ¼¨¤¹¤ë¡£¤¿¤È¤¨¤Ð¡¢¥¿¥¤¸ìʸ½ñ
674       ¤Î»Ò²»-Êì²»-»Ò²»¤È¤¤¤¦¥·¡¼¥¯¥¨¥ó¥¹¤Î¤¤¤¯¤Ä¤«¤Ï¡¢Êì²»¤¬Æó¤Ä¤Î»Ò²»
675       ¤Î´Ö¤Ë¾å¤Ë¤Î¤ë¤è¤¦¤ËÉÁ¤«¤ì¤ë¡£¤³¤Î¤è¤¦¤Ê¥·¡¼¥¯¥¨¥ó¥¹¤¬¤¹¤Ç¤ËÉÁ¤«
676       ¤ì¤Æ¤ª¤ê¡¢ºÇ¸å¤Î»Ò²»¤À¤±¤òÉÁ¤­Ä¾¤¹¾ì¹ç¡Ê¤¿¤È¤¨¤Ð¡¢¥«¡¼¥½¥ë°ÌÃÖ¤ò
677       ¹¹¿·¤¹¤ëºÝ¤Ê¤É¡Ë¤³¤Î¥á¥ó¥Ð¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢Êì²»¤Î±¦È¾Ê¬¤¬¾Ã¤µ¤ì¤Æ
678       ¤·¤Þ¤¦¡£¤³¤ì¤ò 0 °Ê³°¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤½¤Î¤è¤¦¤ÊºÝ¤Ë¤â»Ò²»-Êì
679       ²»-»Ò²»¥·¡¼¥¯¥¨¥ó¥¹¤òÀµ¤·¤¯É½¼¨¤·Â³¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
680   int partial_update;
681
682   /***en If nonzero, don't cache the result of any drawing information
683       of an M-text.  */
684   /***ja 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢M-text ¤Îɽ¼¨¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥­¥ã¥Ã¥·¥å¤·¤Ê¤¤¡£
685        */
686   int disable_caching;
687
688   /* If non-NULL, limit the drawing effect to the specified region.  */
689   MDrawRegion clip_region;
690
691 } MDrawControl;
692
693 /*=*/
694
695 /*** @ingroup m17nDraw */
696 /***en
697     @brief Type of metric for gylphs and texts.
698
699     The type #MDrawMetric is for a metric of a glyph and a drawn text.
700     It is also used to represent a rectangle area of a graphic
701     device.  */
702 /***ja
703     @brief ¥°¥ê¥Õ¤È¥Æ¥­¥¹¥È¤ÎÀ£Ë¡¤Î·¿Àë¸À.
704
705     #MDrawMetric ¤Ï¥°¥ê¥Õ¤Èɽ¼¨¤µ¤ì¤¿¥Æ¥­¥¹¥È¤ÎÀ£Ë¡ÍѤη¿¤Ç¤¢¤ë¡£¤Þ¤¿¡¢
706     É½¼¨¥Ç¥Ð¥¤¥¹¤Î¶ë·ÁÎΰè¤òɽ¤¹¤Î¤Ë¤âÍѤ¤¤é¤ì¤ë¡£ */
707
708 typedef struct {
709   int x, y;
710   unsigned int width, height;
711 } MDrawMetric;
712
713 /*=*/
714
715 /*** @ingroup m17nDraw */
716 /***en
717     @brief Type of information about a glyph.
718
719     The type #MDrawGlyphInfo is the structure that contains
720     information about a glyph.  It is used by mdraw_glyph_info ().  */
721 /***ja
722     @brief ¥°¥ê¥Õ¤Ë´Ø¤¹¤ë¾ðÊó¤Î·¿Àë¸À.
723
724     #MDrawGlyphInfo ·¿¤Ï¥°¥ê¥Õ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤à¹½Â¤ÂΤǤ¢¤ë¡£
725     mdraw_glyph_info () ¤Ï¤³¤ì¤òÍѤ¤¤ë¡£  */
726
727 typedef struct
728 {
729   /***en Character range corresponding to the glyph.  */
730   /***ja ¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
731   int from, to;
732
733   /***en Character ranges corresponding to the line of the glyph.  */
734   /***ja  ¥°¥ê¥Õ¤ÎÎó¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï.  */
735   int line_from, line_to;
736
737   /***en X/Y coordinates of the glyph.  */
738   /***ja ¥°¥ê¥Õ¤Î X/Y ºÂɸ.  */
739   int x, y;
740
741   /***en Metric of the glyph.  */
742   /***ja ¥°¥ê¥Õ¤ÎÀ£Ë¡.  */
743   MDrawMetric this;
744
745   /***en Font used for the glyph.  Set to NULL if no font is found for
746       the glyph.  */
747   /***ja ¥°¥ê¥Õ¤Ë»È¤ï¤ì¤ë¥Õ¥©¥ó¥È¡£¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð NULL¡£
748       the glyph.  */
749   MFont *font;
750
751   /***en Character ranges corresponding to logically previous and next
752       glyphs.  Note that we do not need the members prev_to and
753       next_from because they must be the same as the members from and
754       to respectively.  */
755   /***ja ÏÀÍýŪ¤ÊÁ°¸å¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£¥á¥ó¥Ð prev_to ¤È
756       next_from ¤Ï¡¢¤½¤ì¤¾¤ì¥á¥ó¥Ð from ¤Èto ¤ÈƱ¤¸¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤
757       ¤¿¤áÉÔÍפǤ¢¤ë¤³¤È¤ËÃí°Õ¡£  */
758   int prev_from, next_to;
759
760   /***en Character ranges corresponding to visually left and right
761       glyphs. */
762   /***ja É½¼¨¾å¤Îº¸±¦¤Î¥°¥ê¥Õ¤ËÂбþ¤¹¤ëʸ»ú¤ÎÈÏ°Ï¡£  */
763   int left_from, left_to;
764   int right_from, right_to;
765
766   /***en Font glyph code of the glyph.  */
767   /***ja ¥Õ¥©¥ó¥ÈÆâ¤Î¥°¥ê¥Õ¥³¡¼¥É¡£  */
768   int glyph_code;
769
770   /***en Logical width of the glyph.  Nominal distance to the next
771       glyph.  */
772   /***ja ¥°¥ê¥Õ¤ÎÏÀÍýŪÉý¡£¼¡¤Î¥°¥ê¥Õ¤È¤Î̾Ìܾå¤Îµ÷Î¥¡£  */
773   int logical_width;
774
775 } MDrawGlyphInfo;
776
777 /*=*/
778
779 /***en
780     @brief Type of text items.
781
782     The type #MDrawTextItem is for @e textitem objects.
783     Each textitem contains an M-text and some other information to
784     control the drawing of the M-text.  */
785
786 /***ja
787     @brief textitem ¤Î·¿Àë¸À.
788
789     #MDrawTextItem ¤Ï @e ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à ¥ª¥Ö¥¸¥§¥¯¥ÈÍѤη¿¤Ç¤¢¤ë¡£³Æ
790     ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Ï¡¢1¸Ä¤Î M-text ¤È¡¢¤½¤Îɽ¼¨¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î³Æ¼ï
791     ¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤ë¡£
792
793     @latexonly \IPAlabel{MTextItem} @endlatexonly  */
794
795 typedef struct
796 {
797   /***en M-text. */
798   /***ja M-text. */
799   MText *mt;                      
800
801   /***en Optional change in the position (in the unit of pixel) along
802       the X-axis before the M-text is drawn.  */
803   /***ja M-text É½¼¨Á°¤Ë¹Ô¤Ê¤¦X¼´Êý¸þ¤Î°ÌÃÖÄ´À° (¥Ô¥¯¥»¥ëñ°Ì) */
804   int delta;                     
805
806   /***en Pointer to a face object.  Each property of the face, if not
807       Mnil, overrides the same property of face(s) specified as a text
808       property in <mt>.  */
809   /***ja ¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£¥Õ¥§¡¼¥¹¤Î³Æ¥×¥í¥Ñ¥Æ¥£¤Ï 
810       Mnil ¤Ç¤Ê¤±¤ì¤Ð <mt> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥§¡¼¥¹¤ÎƱ¤¸¥×¥í¥Ñ¥Æ¥£¤ËÍ¥Àè
811       ¤¹¤ë*/
812   MFace *face;
813
814   /***en Pointer to a draw control object.  The M-text <mt> is drawn
815       by mdraw_text_with_control () with this control object.  */
816   /***ja É½¼¨À©¸æ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡£ mdraw_text_with_control () 
817       ¤Ï¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ M-text <mt> ¤òɽ¼¨¤¹¤ë¡£  */
818   MDrawControl *control;
819
820 } MDrawTextItem;
821
822 /*=*/
823
824 extern int mdraw_text (MFrame *frame, MDrawWindow win, int x, int y,
825                        MText *mt, int from, int to);
826
827 extern int mdraw_image_text (MFrame *frame, MDrawWindow win, int x, int y,
828                              MText *mt, int from, int to);
829
830 extern int mdraw_text_with_control (MFrame *frame, MDrawWindow win,
831                                     int x, int y, MText *mt, int from, int to,
832                                     MDrawControl *control);
833
834 extern int mdraw_coordinates_position (MFrame *frame,
835                                        MText *mt, int from, int to,
836                                        int x, int y, MDrawControl *control);
837
838 extern int mdraw_text_extents (MFrame *frame,
839                                MText *mt, int from, int to,
840                                MDrawControl *control,
841                                MDrawMetric *overall_ink_return,
842                                MDrawMetric *overall_logical_return,
843                                MDrawMetric *overall_line_return);
844
845 extern int mdraw_text_per_char_extents (MFrame *frame,
846                                         MText *mt, int from, int to,
847                                         MDrawControl *control,
848                                         MDrawMetric *ink_array_return,
849                                         MDrawMetric *logical_array_return,
850                                         int array_size,
851                                         int *num_chars_return,
852                                         MDrawMetric *overall_ink_return,
853                                         MDrawMetric *overall_logical_return);
854
855 extern int mdraw_glyph_info (MFrame *frame, MText *mt, int from, int pos,
856                              MDrawControl *control, MDrawGlyphInfo *info);
857
858 extern int mdraw_glyph_list (MFrame *frame, MText *mt, int from, int to,
859                              MDrawControl *control, MDrawGlyphInfo *info,
860                              int array_size, int *num_glyphs_return);
861
862 extern void mdraw_text_items (MFrame *frame, MDrawWindow win, int x, int y,
863                               MDrawTextItem *items, int nitems);
864
865 extern void mdraw_per_char_extents (MFrame *frame, MText *mt,
866                                     MDrawMetric *array_return,
867                                     MDrawMetric *overall_return);
868
869 extern int mdraw_default_line_break (MText *mt, int pos,
870                                      int from, int to, int line, int y);
871
872 extern void mdraw_clear_cache (MText *mt);
873
874 /* end of drawing module */
875 /*=*/
876
877 /*** @ingroup m17nGUI */
878 /***en @defgroup m17nInputMethodWin Input Method (GUI) */
879 /***ja @defgroup m17nInputMethodWin ÆþÎϥ᥽¥Ã¥É (GUI) */
880 /*=*/
881
882 extern MInputDriver minput_gui_driver;
883
884 /*=*/
885 /*** @ingroup m17nInputMethodWin */
886 /***en 
887     @brief Type of the argument to the function minput_create_ic ().
888
889     The type #MInputGUIArgIC is for the argument $ARG of the function
890     minput_create_ic () to create an input context of an internal
891     input method.  */
892
893 /***ja
894     @brief ´Ø¿ô minput_create_ic () ¤Î°ú¿ô¤Î·¿Àë¸À.
895
896     #MInputGUIArgIC ¤Ï¡¢´Ø¿ô minput_create_ic () ¤¬ÆâÉôÆþÎϥ᥽¥Ã¥É¤Î
897     ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ëºÝ¤Î¡¢°ú¿ô $ARG ÍѤη¿¤Ç¤¢¤ë¡£  */
898
899 typedef struct
900 {
901   /***en Frame of the client.  */
902   /***ja ¥¯¥é¥¤¥¢¥ó¥È¤Î¥Õ¥ì¡¼¥à  */
903   MFrame *frame;
904
905   /***en Window on which to display the preedit and status text.  */
906   /***ja preedit ¥Æ¥­¥¹¥È¤È status ¥Æ¥­¥¹¥È¤òɽ¼¨¤¹¤ë¥¦¥£¥ó¥É¥¦  */
907   MDrawWindow client;
908
909   /***en Window that the input context has a focus on.  */
910   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤¬¥Õ¥©¡¼¥«¥¹¤ò¤ª¤¤¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦  */
911   MDrawWindow focus;
912 } MInputGUIArgIC;
913
914 /*=*/
915
916 extern MSymbol minput_event_to_key (MFrame *frame, void *event);
917
918 /* end of input module */
919 /*=*/
920 /* end of window modules */
921 /*=*/
922
923 extern MFace *mdebug_dump_face (MFace *face, int indent);
924 extern MFont *mdebug_dump_font (MFont *font);
925 extern MFontset *mdebug_dump_fontset (MFontset *fontset, int indent);
926
927 #ifdef __cplusplus
928 }
929 #endif
930
931 #endif /* _M17N_GUI_H_ */
932
933 /*
934   Local Variables:
935   coding: euc-japan
936   End:
937 */