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