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