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