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