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