1 /* m17n-gui.h -- header file for the GUI API of the m17n library.
2    Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
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    Boston, MA 02110-1301 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   /* @{ */
400   /*** Colors of borders.  */
401   MSymbol color_top;
402   MSymbol color_bottom;
403   MSymbol color_left;
404   MSymbol color_right;
405   /* @} */
406 
407   /* @{ */
408   /*** Margins  */
409   unsigned inner_hmargin;
410   unsigned inner_vmargin;
411   unsigned outer_hmargin;
412   unsigned outer_vmargin;
413   /* @} */
414 
415 } MFaceBoxProp;
416 /*=*/
417 
418 /*** @ingroup m17nFace */
419 /***en
420     @brief Type of hook function of face.
421 
422     #MFaceHookFunc is a type of a hook function of a face.  */
423 /***ja
424     @brief �ե������Υեå��ؿ��η����.
425 
426     #MFaceHookFunc �ϥե������Υեå��ؿ��η��Ǥ��롣*/
427 typedef void (*MFaceHookFunc) (MFace *face, void *arg, void *info);
428 /*=*/
429 
430 extern void *mface_get_prop (MFace *face, MSymbol key);
431 
432 extern int mface_put_prop (MFace *face, MSymbol key, void *val);
433 
434 extern MFaceHookFunc mface_get_hook (MFace *face);
435 
436 extern int mface_put_hook (MFace *face, MFaceHookFunc func);
437 
438 extern void mface_update (MFrame *frame, MFace *face);
439 
440 /* end of face module */
441 /*=*/
442 
443 /*** @ingroup m17nGUI */
444 /***en @defgroup m17nDraw Drawing */
445 /***ja @defgroup m17nDraw ɽ�� */
446 /*=*/
447 
448 /*** @ingroup m17nDraw */
449 /***en
450     @brief Window system dependent type for a window.
451 
452     The type #MDrawWindow is for a window; a rectangular area that
453     works in several ways like a miniature screen.
454 
455     What it actually points depends on a window system.  A program
456     that uses the m17n-X library must coerce the type @c Drawable to
457     this type.  */
458 /***ja
459     @brief ������ɥ������ƥ�˰�¸���롢������ɥ��η����.
460 
461     #MDrawWindow �ϥ�����ɥ������ʤ�����Ĥ������ǥ����꡼��Υߥ˥��奢�Ȥ���Ư������ΰ��Ѥη��Ǥ��롣
462 
463     �ºݤ˲���ؤ����ϥ�����ɥ������ƥ�˰�¸���롣 m17n X
464     �饤�֥������Ѥ���ץ����� @c Drawable �����η����Ѵ����ʤ��ƤϤʤ�ʤ��� */
465 
466 typedef void *MDrawWindow;
467 /*=*/
468 
469 /*** @ingroup m17nDraw */
470 /***en
471     @brief Window system dependent type for a region.
472 
473     The type #MDrawRegion is for a region; an arbitrary set of pixels
474     on the screen (typically a rectangular area).
475 
476     What it actually points depends on a window system.  A program
477     that uses the m17n-X library must coerce the type @c Region to
478     this type.  */
479 /***ja
480     @brief ������ɥ������ƥ�˰�¸���롢�ΰ�η����.
481 
482     #MDrawRegion ���ΰ衢���ʤ�������꡼����Ǥ�դΥԥ�����ν����ŵ��Ū�ˤ϶���ΰ���Ѥη��Ǥ��롣
483 
484     �ºݤ˲���ؤ����ϥ�����ɥ������ƥ�˰�¸���롣 m17n X
485     �饤�֥������Ѥ���ץ����� @c Region �����η����Ѵ����ʤ��ƤϤʤ�ʤ���  */
486 
487 typedef void *MDrawRegion;
488 /*=*/
489 
490 /*** @ingroup m17nDraw */
491 /***en
492     @brief Type of a text drawing control.
493 
494     The type #MDrawControl is the structure that controls how to draw
495     an M-text.  */
496 /***ja
497     @brief �ƥ�����ɽ������η����.
498 
499     #MDrawControl ���ϡ�M-text ��ɤ�ɽ�����뤫�����椹�빽¤�ΤǤ��롣
500       */
501 
502 
503 typedef struct
504 {
505   /***en If nonzero, draw an M-text as image, i.e. with background
506       filled with background colors of faces put on the M-text.
507       Otherwise, the background is not changed.  */
508   /***ja 0 �Ǥʤ���С� M-text ������Ȥ��ơ����ʤ���طʤ� M-text
509       �Υե������ǻ��ꤵ��Ƥ����طʿ�������ɽ�����롣�����Ǥʤ�����طʤ��Ѥ��ʤ���  */
510   unsigned as_image : 1;
511 
512   /***en If nonzero and the first glyph of each line has negative
513       lbearing, shift glyphs horizontally to right so that no pixel is
514       drawn to the left of the specified position.  */
515   /***ja 0 �Ǥʤ����ƹԤκǽ�Υ���դ� lbearing
516       ����ʤ�С�����դ��ʿ�˱��ˤ��餷�ơ����ꤷ�����֤�꺸�˥ԥ����뤬������ʤ��褦�ˤ��롣  */
517   unsigned align_head : 1;
518 
519   /***en If nonzero, draw an M-text two-dimensionally, i.e., newlines
520       in M-text breaks lines and the following characters are drawn in
521       the next line.  If \<format\> is non-NULL, and the function
522       returns nonzero line width, a line longer than that width is
523       also broken.  */
524   /***ja 0 �Ǥʤ���С�M-text ������Ū�ˡ����ʤ�� M-text ���
525       newline �Dz��Ԥ���³��ʸ���ϼ��ιԤ�ɽ�����롣�⤷ \<format\> ��
526       NULL �Ǥʤ������δؿ��� 0 �Ǥʤ��������֤��С����������Ĺ���Ԥ���Ԥ���롣  */
527   unsigned two_dimensional : 1;
528 
529   /***en If nonzero, draw an M-text to the right of a specified
530       position.  */
531   /***ja 0 �Ǥʤ���С�M-text ����ꤷ�����֤α���ɽ�����롣  */
532   unsigned orientation_reversed : 1;
533 
534   /***en If nonzero, reorder glyphs correctly for bidi text.  */
535   /***ja 0 �ʤ���С�bidi �ƥ������Ѥ˥���դ������������롣  */
536   unsigned enable_bidi : 1;
537 
538   /***en If nonzero, don't draw characters whose general category (in
539       Unicode) is Cf (Other, format).  */
540   /***ja 0 �Ǥʤ���С���˥����ɤ��֤�����̥��ƥ��꤬ Cf (Other,
541       format) �Ǥ���ʸ����ɽ�����ʤ���  */
542   unsigned ignore_formatting_char : 1;
543 
544   /***en If nonzero, draw glyphs suitable for a terminal.  Not yet
545       implemented.  */
546   /***ja 0 �Ǥʤ���С�ü���ѤΥ���դ�ɽ�����롣̤������  */
547   unsigned fixed_width : 1;
548 
549   /***en If nonzero, draw glyphs with anti-aliasing if a backend font
550       driver supports it.  */
551   /***ja 0 �Ǥʤ���С�����������ꥢ���ǥ���դ�ɽ�����롣
552       �ʥХå�����ɤΥե���ȥɥ饤�Ф�����������ꥢ����ǽ����ľ��Τߡ��� */
553   unsigned anti_alias : 1;
554 
555   /***en If nonzero, disable the adjustment of glyph positions to
556       avoid horizontal overlapping at font boundary.  */
557   /***ja 0 �Ǥʤ���С��ե���ȶ����Ǥο�ʿ�����Υ���դνŤʤ�����뤿��Υ���հ��֤�Ĵ����̵���ˤ��롣  */
558   unsigned disable_overlapping_adjustment : 1;
559 
560   /***en If nonzero, the values are minimum line ascent pixels.  */
561   /***ja 0 �Ǥʤ���С��ͤϹԤ� ascent �κǾ��ͤ�����  */
562   unsigned int min_line_ascent;
563   /***en If nonzero, the values are minimum line descent pixels.  */
564   /***ja 0 �Ǥʤ���С��ͤϹԤ� descent �κǾ��ͤ�����  */
565   unsigned int min_line_descent;
566 
567   /***en If nonzero, the values are maximum line ascent pixels.  */
568   /***ja 0 �Ǥʤ���С��ͤϹԤ� ascent �κ����ͤ�����  */
569   unsigned int max_line_ascent;
570   /***en If nonzero, the values are maximum line descent pixels.  */
571   /***ja 0 �Ǥʤ���С��ͤϹԤ� descent �κ����ͤ�����  */
572   unsigned int max_line_descent;
573 
574   /***en If nonzero, the value specifies how many pixels each line can
575       occupy on the display.  The value zero means that there is no
576       limit.  It is ignored if \<format\> is non-NULL.  */
577   /***ja 0 �Ǥʤ���С��ͤϤ��Υǥ����ץ쥤��dzƹԤ����뤳�ȤΤǤ���ԥ������������
578       0 �ϸ��ꤵ��ʤ����Ȥ��̣���롣\<format\> �� NULL �Ǥʤ����̵�뤵��롣   */
579   unsigned int max_line_width;
580 
581   /***en If nonzero, the value specifies the distance between tab
582       stops in columns (the width of one column is the width of a
583       space in the default font of the frame).  The value zero means
584       8.  */
585   /***ja 0 �Ǥʤ���С��ͤϥ��֥��ȥå״֤ε�Υ�����ñ��
586       �ʥ����ϥե졼��Υǥե���ȥե���Ȥˤ��������ʸ�������Ǥ���ˤǼ�����
587       0 �� 8 ���̣���롣 */
588   unsigned int tab_width;
589 
590   /***en If non-NULL, the value is a function that calculates the
591       indentation and width limit of each line based on the line
592       number LINE and the coordinate Y.  The function store the
593       indentation and width limit at the place pointed by INDENT and
594       WIDTH respectively.
595 
596       The indentation specifies how many pixels the first glyph of
597       each line is shifted to the right (if the member
598       \<orientation_reversed\> is zero) or to the left (otherwise).  If
599       the value is negative, each line is shifted to the reverse
600       direction.
601 
602       The width limit specifies how many pixels each line can occupy
603       on the display.  The value 0 means that there is no limit.
604 
605       LINE and Y are reset to 0 when a line is broken by a newline
606       character, and incremented each time when a long line is broken
607       because of the width limit.
608 
609       This has an effect only when \<two_dimensional\> is nonzero.  */
610   /***ja 0 �Ǥʤ���С��ͤϴؿ��Ǥ��ꡢ���δؿ��Ϲ��ֹ� LINE �Ⱥ�ɸ Y
611       �˴�Ť��ƳƹԤΥ���ǥ�ȤȺ�������׻��������줾���INDENT ��
612       WIDTH �ǻؤ���������¸���롣
613 
614       ����ǥ�Ȥϡ��ƹԤκǽ�Υ���դ��ʥ���
615       \<orientation_reversed\> �� 0
616       �λ��ˤ��뤤�Ϻ��ʤ���ʳ��λ��ˤ˲��ԥ����뤺�餹������ꤹ�롣�ͤ���ʤ�е������ˤ��餹��
617 
618       �������ϡ��ƹԤ��ǥ����ץ쥤������뤳�ȤΤǤ���ԥ�������κ����ͤǤ��롣�ͤ�
619       0 �ξ������¤�����ʤ����Ȥ��̣���롣
620 
621       LINE �� Y �ϲ���ʸ���ˤ�äƹԤ����ޤä��ݤˤ� 0
622       �˥ꥻ�åȤ��졢Ĺ���Ԥ������������¤ˤ�äƲ��Ԥ���뤿�Ӥ� 1 ���䤵��롣
623 
624       ����� \<two_dimensional\> �� 0 �Ǥʤ����ˤΤ�ͭ���Ǥ��롣  */
625   void (*format) (int line, int y, int *indent, int *width);
626 
627   /***en If non-NULL, the value is a function that calculates a line
628       breaking position when a line is too long to fit within the
629       width limit.  POS is the position of the character next to the
630       last one that fits within the limit.  FROM is the position of the
631       first character of the line, and TO is the position of the last
632       character displayed on the line if there were not width limit.
633       LINE and Y are the same as the arguments to \<format\>.
634 
635       The function must return a character position to break the
636       line.
637 
638       The function should not modify MT.
639 
640       The mdraw_default_line_break () function is useful for such a
641       script that uses SPACE as a word separator.  */
642   /***ja NULL �Ǥʤ���С��ͤϹԤ���������˼��ޤ�ʤ����˹Ԥ�������֤�׻�����ؿ��Ǥ��롣
643       POS �Ϻ������˼��ޤ�Ǹ��ʸ���μ���ʸ���ΰ��֤Ǥ��롣FROM
644       �ϹԤκǽ��ʸ���ΰ��֡�TO
645       �Ϻ����������ꤵ��Ƥ��ʤ���Ф��ιԤ�ɽ�������Ǹ��ʸ���ΰ��֤Ǥ��롣LINE
646       �� Y �� \<format\> �ΰ�����Ʊ�ͤǤ��롣
647 
648       ���δؿ��ϹԤ�����ʸ�����֤��֤��ʤ��ƤϤʤ�ʤ����ޤ� MT ���ѹ����ƤϤʤ�ʤ���
649 
650       �ؿ� mdraw_default_line_break ()
651       �ϡ�������ζ��ڤ�Ȥ����Ѥ��륹����ץ��ѤȤ���ͭ�ѤǤ��롣  */
652   int (*line_break) (MText *mt, int pos, int from, int to, int line, int y);
653 
654   /***en If nonzero, show the cursor according to \<cursor_width\>.  */
655   /***ja ����Ǥʤ���� \<cursor_width\> �ˤ������äƥ��������ɽ�����롣 */
656   int with_cursor;
657 
658   /***en Specifies the character position to display a cursor.  If it
659       is greater than the maximum character position, the cursor is
660       displayed next to the last character of an M-text.  If the value
661       is negative, even if \<cursor_width\> is nonzero, cursor is not
662       displayed.  */
663   /***ja ���������ɽ������ʸ�����֤����������ʸ�����֤���礭����С����������
664       M-text �κǸ��ʸ�����٤�ɽ������롣��ʤ�С�
665       \<cursor_width\> �� 0 �Ǥʤ��Ƥ⥫�������ɽ������ʤ���
666         */
667   int cursor_pos;
668 
669   /***en If nonzero, display a cursor at the character position
670       \<cursor_pos\>.  If the value is positive, it is the pixel width
671       of the cursor.  If the value is negative, the cursor width is
672       the same as the underlining glyph(s).  */
673   /***ja 0 �Ǥʤ���С�\<cursor_pos\> �˥��������ɽ�����롣
674       �ͤ����ʤ�С�������������Ϥ����͡ʥԥ�����ñ�̡ˤǤ��롣
675       ��ʤ�С���������Τ��륰��դ�Ʊ�����Ǥ��롣  */
676   int cursor_width;
677 
678   /***en If nonzero and \<cursor_width\> is also nonzero, display double
679       bar cursors; at the character position \<cursor_pos\> and at the
680       logically previous character.  Both cursors have one pixel width
681       with horizontal fringes at upper or lower positions.  */
682   /***ja If 0 �Ǥʤ������� \<cursor_width\> �� 0 �Ǥʤ���С��С����������ʸ������
683       \<cursor_pos\> ������Ū�ˤ�������ˤ���ʸ���Σ������ɽ�����롣
684       �����Ȥ⣱�ԥ��������ǡ��夫���˿�ʿ�ξ��꤬�Ĥ���*/
685   int cursor_bidi;
686 
687   /***en If nonzero, on drawing partial text, pixels of surrounding
688       texts that intrude into the drawing area are also drawn.  For
689       instance, some CVC sequence of Thai text (C is consonant, V is
690       upper vowel) is drawn so that V is placed over the middle of two
691       Cs.  If this CVC sequence is already drawn and only the last C
692       is drawn again (for instance by updating cursor position), the
693       right half of V is erased if this member is zero.  By setting
694       this member to nonzero, even with such a drawing, we can keep
695       this CVC sequence correctly displayed.  */
696   /***ja 0 �Ǥʤ���С��ƥ����Ȥΰ���ʬ��ɽ������ݤˡ�����Υƥ����ȤΤ�������ɽ���ΰ�˿���������ʬ��ɽ�����롣
697       ���Ȥ��С�������ƥ����� �Ҳ�-�첻-�Ҳ�
698       �Ȥ��������������Τ����Ĥ��ϡ��첻����ĤλҲ��δ֤˾�ˤΤ�褦��������롣
699       ���Τ褦�ʥ��������������Ǥ�������Ƥ��ꡢ�Ǹ�λҲ�����������ľ�����
700       �ʤ��Ȥ��С�����������֤�������ݤʤɡˤ��Υ��Ф� 0
701       �Ǥ���С��첻�α�Ⱦʬ���ä���Ƥ��ޤ�������� 0 �ʳ��ˤ��뤳�Ȥˤ�äơ����Τ褦�ʺݤˤ�
702       �Ҳ�-�첻-�Ҳ� �Υ�����������������ɽ����³���뤳�Ȥ��Ǥ��롣  */
703   int partial_update;
704 
705   /***en If nonzero, don't cache the result of any drawing information
706       of an M-text.  */
707   /***ja 0 �Ǥʤ���С�M-text ��ɽ���˴ؤ���������å��夷�ʤ���
708        */
709   int disable_caching;
710 
711   /***en If non-NULL, limit the drawing effect to the specified region.  */
712   /***ja NULL �Ǥʤ����ɽ�����ꥢ����ꤵ�줿�ΰ�˸��ꤹ�롣 */
713   MDrawRegion clip_region;
714 
715 } MDrawControl;
716 
717 extern int mdraw_line_break_option;
718 
719 /*=*/
720 
721 /*** @ingroup m17nDraw */
722 /***en
723     @brief Type of metric for glyphs and texts.
724 
725     The type #MDrawMetric is for a metric of a glyph and a drawn text.
726     It is also used to represent a rectangle area of a graphic
727     device.  */
728 /***ja
729     @brief ����դȥƥ����Ȥ���ˡ�η����.
730 
731     #MDrawMetric �ϥ���դ�ɽ�����줿�ƥ����Ȥ���ˡ�Ѥη��Ǥ��롣
732     �ޤ���ɽ���ǥХ����ζ���ΰ��ɽ���Τˤ��Ѥ����롣 */
733 
734 typedef struct {
735   /*** X coordinates of a glyph or a text.  */
736   int x;
737   /*** Y coordinates of a glyph or a text.  */
738   int y;
739   /*** Pixel width of a glyph or a text.  */
740   unsigned int width;
741   /*** Pixel height of a glyph or a text.  */
742   unsigned int height;
743 } MDrawMetric;
744 
745 /*=*/
746 
747 /*** @ingroup m17nDraw */
748 /***en
749     @brief Type of information about a glyph.
750 
751     The type #MDrawGlyphInfo is the structure that contains
752     information about a glyph.  It is used by mdraw_glyph_info ().  */
753 /***ja
754     @brief ����դ˴ؤ������η����.
755 
756     #MDrawGlyphInfo ���ϥ���դ˴ؤ�������ޤ๽¤�ΤǤ��롣
757     mdraw_glyph_info () �Ϥ�����Ѥ��롣  */
758 
759 typedef struct
760 {
761   /***en Start position of character range corresponding to the glyph.  */
762   /***ja ����դ��б�����ʸ�����ϰϤγ��ϰ���.  */
763   int from;
764 
765   /***en End position of character range corresponding to the glyph.  */
766   /***ja ����դ��б�����ʸ�����ϰϤν�λ����.  */
767   int to;
768 
769   /***en Start position of character range corresponding to the line of the glyph.  */
770   /***ja ��ԤΥ���դ�����б�����ʸ�����ϰϤγ��ϰ���.  */
771   int line_from;
772   /***en End position of character range corresponding to the line of the glyph.  */
773   /***ja ��ԤΥ���դ�����б�����ʸ�����ϰϤν�λ����.  */
774   int line_to;
775 
776   /***en X coordinates of the glyph.  */
777   /***ja ����դ� X ��ɸ.  */
778   int x;
779   /***en Y coordinates of the glyph.  */
780   /***ja ����դ� Y ��ɸ.  */
781   int y;
782 
783   /***en Metric of the glyph.  */
784   /***ja ����դ���ˡ.  */
785   MDrawMetric metrics;
786 
787   /***en Font used for the glyph.  Set to NULL if no font is found for
788       the glyph.  */
789   /***ja ����դ˻Ȥ���ե���ȡ����Ĥ���ʤ���� NULL�� */
790 
791   MFont *font;
792 
793   /***en Character ranges corresponding to logically previous glyphs.
794       Note that we do not need the members prev_to because it must
795       be the same as the member \<from\>.  */
796   /***ja ����Ū�����Υ���դ��б�����ʸ�����ϰϡ����� prev_to �ϡ���
797       ��� from ��Ʊ���Ǥ���Ϥ��ʤΤ����פǤ��롣  */
798   int prev_from;
799   /***en Character ranges corresponding to logically next glyphs.
800       Note that we do not need the members next_from because it must
801       be the same as the member \<to\> respectively.  */
802   /***ja ����Ū�ʸ�Υ���դ��б�����ʸ�����ϰϡ����� next_from ��
803       ���� to ��Ʊ���Ǥ���Ϥ��ʤΤ����פǤ��롣  */
804   int next_to;
805 
806   /***en Start position of character ranges corresponding to visually
807       left glyphs. */
808   /***ja ɽ����κ��Υ���դ��б�����ʸ�����ϰϤγ��ϰ��֡�  */
809   int left_from;
810   /***en End position of character ranges corresponding to visually
811       left glyphs. */
812   /***ja ɽ����κ��Υ���դ��б�����ʸ�����ϰϤν�λ���֡�  */
813   int left_to;
814   /***en Start position of character ranges corresponding to visually
815       right glyphs. */
816   /***ja ɽ����α��Υ���դ��б�����ʸ�����ϰϤγ��ϰ��֡�  */
817   int right_from;
818   /***en End position of character ranges corresponding to visually
819       left glyphs. */
820   /***ja ɽ����α��Υ���դ��б�����ʸ�����ϰϤν�λ���֡�  */
821   int right_to;
822 
823   /***en Logical width of the glyph.  Nominal distance to the next
824       glyph.  */
825   /***ja ����դ�����Ū�������Υ���դȤ�̾�ܾ�ε�Υ��  */
826   int logical_width;
827 } MDrawGlyphInfo;
828 
829 /*=*/
830 
831 /*** @ingroup m17nDraw */
832 /***en
833     @brief Type of information about a glyph metric and font.
834 
835     The type #MDrawGlyph is the structure that contains information
836     about a glyph metric and font.  It is used by the function
837     mdraw_glyph_list ().  */
838 /***ja
839     @brief ����դ���ˡ�ȥե���Ȥ˴ؤ������η����.
840 
841     #MDrawGlyph ���ϥ���դ���ˡ�ȥե���Ȥ˴ؤ�������ޤ๽¤�ΤǤ��롣
842     mdraw_glyph_list () �Ϥ�����Ѥ��롣  */
843 
844 typedef struct
845 {
846   /* @{ */
847   /***en Character range corresponding to the glyph.  */
848   /***ja ����դ��б�����ʸ�����ϰ�.  */
849   int from, to;
850   /* @} */
851 
852   /***en Font glyph code of the glyph.  */
853   /***ja �ե������Υ���ե����ɡ�  */
854   int glyph_code;
855 
856   /***en Logical width of the glyph.  Nominal distance to the next
857       glyph.  */
858   /***ja ����դ�����Ū�������Υ���դȤ�̾�ܾ�ε�Υ��  */
859   int x_advance;
860   /***en Logical height of the glyph.  Nominal distance to the next
861       glyph.  */
862   /***ja ����դ�����Ū�⤵�����Υ���դȤ�̾�ܾ�ε�Υ��  */
863   int y_advance;
864 
865   /***en X offset relative to the glyph position.  */
866   /***ja ����դΰ��֤��Ф��� X ���ե��å�.  */
867   int x_off;
868   /***en Y offset relative to the glyph position.  */
869   /***ja ����դΰ��֤��Ф��� Y ���ե��å�.  */
870   int y_off;
871 
872   /***en Metric of the glyph (left-bearing).  */
873   /***ja ����դ���ˡ (left-bearing).  */
874   int lbearing;
875   /***en Metric of the glyph (right-bearing).  */
876   /***ja ����դ���ˡ (right-bearing).  */
877   int rbearing;
878   /***en Metric of the glyph (ascent).  */
879   /***ja ����դ���ˡ (ascent).  */
880   int ascent;
881   /***en Metric of the glyph (descent).  */
882   /***ja ����դ���ˡ (descent).  */
883   int descent;
884 
885   /***en Font used for the glyph.  Set to NULL if no font is found for
886       the glyph.  */
887   /***ja ����դ˻Ȥ���ե���ȡ����Ĥ���ʤ���� NULL��  */
888   MFont *font;
889 
890   /***en Type of the font.  One of Mx, Mfreetype, Mxft.  */
891   /***ja �ե���ȤΥ����ס�Mx��Mfreetype��Mxft �Τ����줫��  */
892   MSymbol font_type;
893 
894   /***en Pointer to the font structure.  The actual type is
895       (XFontStruct *) if \<font_type\> member is Mx, FT_Face if
896       \<font_type\> member is Mfreetype, and (XftFont *) if \<font_type\>
897       member is Mxft.  */
898   /***ja �ե���Ȥι�¤�ΤؤΥݥ������ºݤη��� \<font_type\> ���Ф�
899       Mx �ʤ� (XFontStruct *)�� Mfreetype �ʤ� FT_Face��Mxft
900       �ʤ� (XftFont *)�� */
901   void *fontp;
902 
903 } MDrawGlyph;
904 
905 /*=*/
906 
907 /***en
908     @brief Type of textitems.
909 
910     The type #MDrawTextItem is for @e textitem objects.
911     Each textitem contains an M-text and some other information to
912     control the drawing of the M-text.  */
913 
914 /***ja
915     @brief textitem �η����.
916 
917     #MDrawTextItem �� @e �ƥ����ȥ����ƥ� ���֥��������Ѥη��Ǥ��롣
918     �ƥƥ����ȥ����ƥ�ϡ� 1 �Ĥ� M-text �ȡ�����ɽ�������椹�뤿��ξ����ޤ�Ǥ��롣
919 
920     @latexonly \IPAlabel{MTextItem} @endlatexonly  */
921 
922 typedef struct
923 {
924   /***en M-text. */
925   /***ja M-text. */
926   MText *mt;
927 
928   /***en Optional change in the position (in the unit of pixel) along
929       the X-axis before the M-text is drawn.  */
930   /***ja M-text ɽ�����˹Ԥʤ�X�������ΰ���Ĵ�� (�ԥ�����ñ��) */
931   int delta;
932 
933   /***en Pointer to a face object.  Each property of the face, if not
934       Mnil, overrides the same property of face(s) specified as a text
935       property in \<mt\>.  */
936   /***ja �ե��������֥������ȤؤΥݥ������ե������γƥץ�ѥƥ���
937       Mnil �Ǥʤ���� \<mt\> �ǻ��ꤵ�줿�ե�������Ʊ���ץ�ѥƥ���ͥ�褹��*/
938   MFace *face;
939 
940   /***en Pointer to a draw control object.  The M-text \<mt\> is drawn
941       by mdraw_text_with_control () with this control object.  */
942   /***ja ɽ�����楪�֥������ȤؤΥݥ����� mdraw_text_with_control ()
943       �Ϥ��Υ��֥������Ȥ��Ѥ��� M-text \<mt\> ��ɽ�����롣  */
944   MDrawControl *control;
945 
946 } MDrawTextItem;
947 
948 /*=*/
949 
950 extern int mdraw_text (MFrame *frame, MDrawWindow win, int x, int y,
951 		       MText *mt, int from, int to);
952 
953 extern int mdraw_image_text (MFrame *frame, MDrawWindow win, int x, int y,
954 			     MText *mt, int from, int to);
955 
956 extern int mdraw_text_with_control (MFrame *frame, MDrawWindow win,
957 				    int x, int y, MText *mt, int from, int to,
958 				    MDrawControl *control);
959 
960 extern int mdraw_coordinates_position (MFrame *frame,
961 				       MText *mt, int from, int to,
962 				       int x, int y, MDrawControl *control);
963 
964 extern int mdraw_text_extents (MFrame *frame,
965 			       MText *mt, int from, int to,
966 			       MDrawControl *control,
967 			       MDrawMetric *overall_ink_return,
968 			       MDrawMetric *overall_logical_return,
969 			       MDrawMetric *overall_line_return);
970 
971 extern int mdraw_text_per_char_extents (MFrame *frame,
972 					MText *mt, int from, int to,
973 					MDrawControl *control,
974 					MDrawMetric *ink_array_return,
975 					MDrawMetric *logical_array_return,
976 					int array_size,
977 					int *num_chars_return,
978 					MDrawMetric *overall_ink_return,
979 					MDrawMetric *overall_logical_return);
980 
981 extern int mdraw_glyph_info (MFrame *frame, MText *mt, int from, int pos,
982 			     MDrawControl *control, MDrawGlyphInfo *info);
983 
984 extern int mdraw_glyph_list (MFrame *frame, MText *mt, int from, int to,
985 			     MDrawControl *control, MDrawGlyph *glyphs,
986 			     int array_size, int *num_glyphs_return);
987 
988 extern void mdraw_text_items (MFrame *frame, MDrawWindow win, int x, int y,
989 			      MDrawTextItem *items, int nitems);
990 
991 extern void mdraw_per_char_extents (MFrame *frame, MText *mt,
992 				    MDrawMetric *array_return,
993 				    MDrawMetric *overall_return);
994 
995 extern int mdraw_default_line_break (MText *mt, int pos,
996 				     int from, int to, int line, int y);
997 
998 extern void mdraw_clear_cache (MText *mt);
999 
1000 /* end of drawing module */
1001 /*=*/
1002 
1003 /*** @ingroup m17nGUI */
1004 /***en @defgroup m17nInputMethodWin Input Method (GUI) */
1005 /***ja @defgroup m17nInputMethodWin ���ϥ᥽�å� (GUI) */
1006 /*=*/
1007 
1008 extern MInputDriver minput_gui_driver;
1009 
1010 /*=*/
1011 /*** @ingroup m17nInputMethodWin */
1012 /***en
1013     @brief Type of the argument to the function minput_create_ic ().
1014 
1015     The type #MInputGUIArgIC is for the argument $ARG of the function
1016     minput_create_ic () to create an input context of an internal
1017     input method.  */
1018 
1019 /***ja
1020     @brief �ؿ� minput_create_ic () �ΰ����η����.
1021 
1022     #MInputGUIArgIC �ϡ��ؿ� minput_create_ic ()
1023     ���������ϥ᥽�åɤ����ϥ���ƥ����Ȥ���������ݤΡ����� $ARG �Ѥη��Ǥ��롣  */
1024 
1025 typedef struct
1026 {
1027   /***en Frame of the client.  */
1028   /***ja ���饤����ȤΥե졼��  */
1029   MFrame *frame;
1030 
1031   /***en Window on which to display the preedit and status text.  */
1032   /***ja preedit �ƥ����Ȥ� status �ƥ����Ȥ�ɽ�����륦����ɥ�  */
1033   MDrawWindow client;
1034 
1035   /***en Window that the input context has a focus on.  */
1036   /***ja ���ϥ���ƥ����Ȥ��ե������������Ƥ��륦����ɥ�  */
1037   MDrawWindow focus;
1038 } MInputGUIArgIC;
1039 
1040 /*=*/
1041 
1042 extern MSymbol minput_event_to_key (MFrame *frame, void *event);
1043 
1044 /* end of input module */
1045 /*=*/
1046 /* end of window modules */
1047 /*=*/
1048 
1049 extern MFace *mdebug_dump_face (MFace *face, int indent);
1050 extern MFont *mdebug_dump_font (MFont *font);
1051 extern MFontset *mdebug_dump_fontset (MFontset *fontset, int indent);
1052 
1053 M17N_END_HEADER
1054 
1055 #endif /* _M17N_GUI_H_ */
1056 
1057 /*
1058   Local Variables:
1059   coding: euc-japan
1060   End:
1061 */
1062