X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fm17n-gui.c;h=fd3569dbec09fc0b05ef8d94fcc7a416877bb350;hb=b5b8aa7815757a933f7fc8174781e1df34303de6;hp=5ada74b551fa71625ba7651f8f8d14853e14ba0b;hpb=a4f5881b57ae3f94d128095f733cf37af61a3c5a;p=m17n%2Fm17n-lib.git diff --git a/src/m17n-gui.c b/src/m17n-gui.c index 5ada74b..fd3569d 100644 --- a/src/m17n-gui.c +++ b/src/m17n-gui.c @@ -17,7 +17,7 @@ You should have received a copy of the GNU Lesser General Public License along with the m17n library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 02111-1307, USA. */ /***en @@ -40,17 +40,16 @@ @addtogroup m17nGUI @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤Î GUI ¥µ¥Ý¡¼¥È. - ¤³¤Î¥»¥¯¥·¥ç¥ó¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Î¤â¤È¤Ç¤Î M-text ¤Îɽ¼¨¤ÈÆþÎÏ¤Ë - ¤«¤«¤ï¤ë m17n GUI API ¤òÄêµÁ¤¹¤ë¡£ + ¤³¤Î¥»¥¯¥·¥ç¥ó¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Î¤â¤È¤Ç¤Î M-text ¤Îɽ¼¨¤ÈÆþÎϤˤ«¤«¤ï¤ë + m17n GUI API ¤òÄêµÁ¤¹¤ë¡£ - ¤³¤³¤Ç¤Î¤¹¤Ù¤Æ¤ÎÄêµÁ¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤È¤ÏÆÈΩ¤Ç¤¢¤ë¡£¤·¤«¤·¡¢¼Â - ºÝ¤Î¥é¥¤¥Ö¥é¥ê¥Õ¥¡¥¤¥ë¤Ï¸ÄÊ̤Υ¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¾ì¹ç¤¬¤¢ - ¤ë¡£¤¿¤È¤¨¤Ð¥é¥¤¥Ö¥é¥ê¥Õ¥¡¥¤¥ë m17n-X.so ¤Ï¡¢m17n GUI API ¤Î X ¥¦¥£ - ¥ó¥É¥¦ÍѤμÂÁõÎã¤Ç¤¢¤ë¡£ + ¤³¤³¤Ç¤Î¤¹¤Ù¤Æ¤ÎÄêµÁ¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤È¤ÏÆÈΩ¤Ç¤¢¤ë¡£ + ¤·¤«¤·¡¢¼ÂºÝ¤Î¥é¥¤¥Ö¥é¥ê¥Õ¥¡¥¤¥ë¤Ï¸ÄÊ̤Υ¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¾ì¹ç¤¬¤¢¤ë¡£ + ¤¿¤È¤¨¤Ð¥é¥¤¥Ö¥é¥ê¥Õ¥¡¥¤¥ë m17n-X.so ¤Ï¡¢m17n GUI API ¤Î X + ¥¦¥£¥ó¥É¥¦ÍѤμÂÁõÎã¤Ç¤¢¤ë¡£ ¸½¼Â¤Ë¤Ï¡¢GUI API ¤Ï¼ç¤Ë¥Ä¡¼¥ë¥­¥Ã¥È¥é¥¤¥Ö¥é¥ê¸þ¤±¤Ç¤¢¤ë¤«¡¢¤Þ¤¿¤Ï - XOM ¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤Æ¤ª¤ê¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é - ¤ÎľÀܤÎÍøÍѤòǰƬ¤Ë¤ª¤¤¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¡£ + XOM ¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤Æ¤ª¤ê¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤ÎľÀܤÎÍøÍѤòǰƬ¤Ë¤ª¤¤¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¡£ */ /*=*/ @@ -79,8 +78,6 @@ #include "fontset.h" #include "face.h" -static int win_initialized; - #ifndef DLOPEN_SHLIB_EXT #define DLOPEN_SHLIB_EXT ".so" #endif @@ -91,12 +88,12 @@ typedef struct { /** Name of the dynamic library (e.g. "libm17n-X.so"). */ char *library; - /** Handle fo the dynamic library. */ + /** Handle of the dynamic library. */ void *handle; /** Function to call just after loading the library. */ int (*init) (); /** Function to call to open a frame on the graphic device. */ - void *(*open) (MFrame *frame, MPlist *param); + int (*open) (MFrame *frame, MPlist *param); /** Function to call just before unloading the library. */ int (*fini) (); } MDeviceLibraryInterface; @@ -106,7 +103,6 @@ typedef struct static MPlist *device_library_list; - /** Close MFrame and free it. */ static void @@ -116,7 +112,6 @@ free_frame (void *object) (*frame->driver->close) (frame); M17N_OBJECT_UNREF (frame->face); - free (frame->font); M17N_OBJECT_UNREF (frame->font_driver_list); free (object); } @@ -154,19 +149,19 @@ null_device_close (MFrame *frame) { } -void * +static void * null_device_get_prop (MFrame *frame, MSymbol key) { return NULL; } -void +static void null_device_realize_face (MRealizedFace *rface) { rface->info = NULL; } -void +static void null_device_free_realized_face (MRealizedFace *rface) { } @@ -201,20 +196,32 @@ null_device_fini () mface__free_realized ((MRealizedFace *) MPLIST_VAL (plist)); M17N_OBJECT_UNREF (null_device.realized_face_list); - MPLIST_DO (plist, null_device.realized_font_list) - mfont__free_realized ((MRealizedFont *) MPLIST_VAL (plist)); + if (MPLIST_VAL (null_device.realized_font_list)) + mfont__free_realized (MPLIST_VAL (null_device.realized_font_list)); M17N_OBJECT_UNREF (null_device.realized_font_list); return 0; } -static void * +static int null_device_open (MFrame *frame, MPlist *param) { + MFace *face; + + frame->device = NULL; frame->device_type = 0; + frame->dpi = (int) mplist_get (param, Mresolution); + if (frame->dpi == 0) + frame->dpi = 100; frame->driver = &null_driver; frame->font_driver_list = mplist (); mplist_add (frame->font_driver_list, Mfreetype, &mfont__ft_driver); - return &null_device; + frame->realized_font_list = null_device.realized_font_list; + frame->realized_face_list = null_device.realized_face_list; + frame->realized_fontset_list = null_device.realized_fontset_list; + face = mface_copy (mface__default); + mplist_push (param, Mface, face); + M17N_OBJECT_UNREF (face); + return 0; } static MDeviceLibraryInterface null_interface = @@ -224,33 +231,28 @@ static MDeviceLibraryInterface null_interface = /* Internal API */ -MSymbol Mfreetype; - -/*** @} */ -#endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */ - /* External API */ -MSymbol Mdevice; - void m17n_init_win (void) { int mdebug_mask = MDEBUG_INIT; - if (win_initialized++) + merror_code = MERROR_NONE; + if (m17n__gui_initialized++) return; m17n_init (); if (merror_code != MERROR_NONE) - return; + { + m17n__gui_initialized--; + return; + } MDEBUG_PUSH_TIME (); - Mx = msymbol ("x"); Mgd = msymbol ("gd"); - Mfreetype = msymbol ("freetype"); Mfont = msymbol ("font"); Mfont_width = msymbol ("font-width"); Mfont_ascent = msymbol ("font-ascent"); @@ -262,15 +264,12 @@ m17n_init_win (void) Mdrawable = msymbol ("drawable"); Mdepth = msymbol ("depth"); Mwidget = msymbol ("widget"); - - register_device_library (Mx, "libm17n-X"); - register_device_library (Mgd, "libm17n-gd"); + Mcolormap = msymbol ("colormap"); MDEBUG_PUSH_TIME (); if (mfont__init () < 0) goto err; MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize font module.")); - MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize win module.")); if (mfont__fontset_init () < 0) goto err; MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize fontset module.")); @@ -285,116 +284,130 @@ m17n_init_win (void) MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize input-win module.")); mframe_default = NULL; + register_device_library (Mx, "libm17n-X"); + register_device_library (Mgd, "libm17n-gd"); + return; + err: MDEBUG_POP_TIME (); MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize the m17n GUI module.")); MDEBUG_POP_TIME (); - return; } void m17n_fini_win (void) { int mdebug_mask = MDEBUG_FINI; + MPlist *plist; - if (win_initialized > 1) - win_initialized--; - else + if (m17n__gui_initialized == 0 + || --m17n__gui_initialized > 0) + return; + + MDEBUG_PUSH_TIME (); + MDEBUG_PUSH_TIME (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize device modules.")); + MPLIST_DO (plist, device_library_list) { - MPlist *plist; + MDeviceLibraryInterface *interface = MPLIST_VAL (plist); - win_initialized = 0; - MDEBUG_PUSH_TIME (); - MDEBUG_PUSH_TIME (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize device modules.")); - MPLIST_DO (plist, device_library_list) + if (interface->handle && interface->fini) { - MDeviceLibraryInterface *interface = MPLIST_VAL (plist); - - if (interface->handle && interface->fini) - { - (*interface->fini) (); - dlclose (interface->handle); - } - free (interface->library); - free (interface); + (*interface->fini) (); + dlclose (interface->handle); } - M17N_OBJECT_UNREF (device_library_list); + free (interface->library); + free (interface); + } #ifdef HAVE_FREETYPE - if (null_interface.handle) - (*null_interface.fini) (); -#endif /* not HAVE_FREETYPE */ - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize input-gui module.")); - minput__win_fini (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize draw module.")); - mdraw__fini (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize face module.")); - mface__fini (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize fontset module.")); - mfont__fontset_fini (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize font module.")); - mfont__fini (); - mframe_default = NULL; - MDEBUG_POP_TIME (); - MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the gui modules.")); - MDEBUG_POP_TIME (); + if (null_interface.handle) + { + (*null_interface.fini) (); + null_interface.handle = NULL; } +#endif /* not HAVE_FREETYPE */ + M17N_OBJECT_UNREF (device_library_list); + minput__win_fini (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize input-gui module.")); + mdraw__fini (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize draw module.")); + mface__fini (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize face module.")); + mfont__fontset_fini (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize fontset module.")); + mfont__fini (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize font module.")); + mframe_default = NULL; + MDEBUG_POP_TIME (); + MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the gui modules.")); + MDEBUG_POP_TIME (); m17n_fini (); } +/*** @} */ +#endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */ + /*** @addtogroup m17nFrame */ /***en - @brief A @e frame is an object corresponding to the physical device. + @brief A @e frame is an object corresponding to the graphic device. A @e frame is an object of the type #MFrame to hold various - information about each physical display/input device. Almost all - m17n GUI functions require a pointer to a frame as an - argument. */ - + information about each display/input device. Almost all m17n GUI + functions require a pointer to a frame as an argument. */ /***ja - @brief @e ¥Õ¥ì¡¼¥à ¤È¤ÏʪÍýŪ¥Ç¥Ð¥¤¥¹¤ËÂбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë. + @brief @e ¥Õ¥ì¡¼¥à ¤È¤Ï¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤ËÂбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë. - @e ¥Õ¥ì¡¼¥à ¤È¤Ï #MFrame ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎʪÍýŪ¤Êɽ - ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î¾ðÊó¤ò³ÊǼ¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î - m17n GUI API ¤Ï¡¢°ú¿ô¤È¤·¤Æ¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÍ׵᤹¤ë¡£ */ + @e ¥Õ¥ì¡¼¥à ¤È¤Ï #MFrame + ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ê¡¢¸Ä¡¹¤Îɽ¼¨¡¿ÆþÎϥǥХ¤¥¹¤Î¾ðÊó¤ò³ÊǼ¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£ + ¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î m17n GUI´Ø¿ô¤Ï¡¢°ú¿ô¤È¤·¤Æ¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÍ׵᤹¤ë¡£ */ /*** @{ */ /*=*/ /***en - @name Variables: Keys of frame property (common). */ + @name Variables: Keys of frame parameter + + These are the symbols to use in a parameter to create a frame. See + the function mframe () for details. + + #Mdevice, #Mdisplay, #Mscreen, #Mdrawable, #Mdepth, and #Mcolormap + are also keys of a frame property. */ + /***ja - @name ÊÑ¿ô¡§ ¥Õ¥ì¡¼¥à¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼ (¶¦ÄÌ). */ -/*** @{ */ + @name ÊÑ¿ô¡§ ¥Õ¥ì¡¼¥à¥Ñ¥é¥á¡¼¥¿ÍÑ¥­¡¼ + + ¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ëºÝ¤Î¥Ñ¥é¥á¡¼¥¿¤ËÍѤ¤¤ë¥·¥ó¥Ü¥ë¡£¾Ü¤·¤¯¤Ï´Ø¿ô + mframe () ¤ÎÀâÌÀ»²¾È¡£ + + #Mdevice¡¢ #Mdisplay¡¢ #Mscreen¡¢ #Mdrawable¡¢ #Mdepth¡¢#Mcolormap + ¤Ï¥Õ¥ì¡¼¥à¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤Ç¤â¤¢¤ë¡£ */ + /*=*/ -MSymbol Mfont; -MSymbol Mfont_width; -MSymbol Mfont_ascent; -MSymbol Mfont_descent; + +MSymbol Mdevice, Mdisplay, Mscreen, Mdrawable, Mdepth, Mcolormap, Mwidget; + +MSymbol Mgd; /*=*/ /***en - @name Variables: Keys of frame parameter (X specific). + @name Variables: Keys of frame property - These are the symbols to use as parameter keys for the function - mframe () (which see). They are also keys of a frame property - except for #Mwidget. */ + These are the symbols to use as an argument to the function + mframe_get_prop (). */ /***ja - @name ÊÑ¿ô¡§ ¥Õ¥ì¡¼¥à¥Ñ¥é¥á¡¼¥¿ÍÑ¥­¡¼ (X ¸ÇÍ­). - - ´Ø¿ô mframe () ¤Î¥Ñ¥é¥á¡¼¥¿¥­¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¥·¥ó¥Ü¥ë¡£( mframe - () ¤ÎÀâÌÀ»²¾È¡£) #Mwidget ¤ò½ü¤¤¤Æ¤Ï¥Õ¥ì¡¼¥à¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤Ç¤â¤¢ - ¤ë¡£ - */ + @name ÊÑ¿ô¡§ ¥Õ¥ì¡¼¥à¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼ + ´Ø¿ô mframe_get_prop () ¤Î°ú¿ô¤ËÍѤ¤¤é¤ì¤ë¥·¥ó¥Ü¥ë¡£ */ +/*** @{ */ /*=*/ - -MSymbol Mdisplay, Mscreen, Mdrawable, Mdepth, Mwidget, Mcolormap; - -MSymbol Mx, Mgd; +MSymbol Mfont; +MSymbol Mfont_width; +MSymbol Mfont_ascent; +MSymbol Mfont_descent; /*=*/ + /*** @} */ /*=*/ @@ -402,7 +415,7 @@ MSymbol Mx, Mgd; @brief Create a new frame. The mframe () function creates a new frame with parameters listed - in $PLIST which may be NULL. + in $PLIST which may be @c NULL. The recognized keys in $PLIST are window system dependent. @@ -410,19 +423,36 @@ MSymbol Mx, Mgd; - In addition, in the m17n-X library, the following keys are - recognized. They are to specify the root window and the depth of - drawables that can be used with the frame. + In addition, if the value of the key #Mdevice is #Mx, the + following keys are recognized. They are to specify the root + window and the depth of drawables that can be used with the frame. @return @@ -477,37 +520,54 @@ MSymbol Mx, Mgd; @brief ¿·¤·¤¤¥Õ¥ì¡¼¥à¤òºî¤ë. ´Ø¿ô mframe () ¤Ï $PLIST Ãæ¤Î¥Ñ¥é¥á¡¼¥¿¤ò»ý¤Ä¿·¤·¤¤¥Õ¥ì¡¼¥à¤òºî¤ë¡£ - $PLIST ¤ÏNULL ¤Ç¤âÎɤ¤¡£ + $PLIST ¤Ï @c NULL ¤Ç¤âÎɤ¤¡£ + + $PLIST ¤Ë¸½¤ï¤ì¤ë¥­¡¼¤Î¤¦¤Á¤É¤ì¤¬Ç§¼±¤µ¤ì¤ë¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£ - $PLIST ¤Ë¸½¤ï¤ì¤ë¥­¡¼¤Î¤¦¤Á¤É¤ì¤¬Ç§¼±¤µ¤ì¤ë¤«¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à - ¤Ë°Í¸¤¹¤ë¡£¤·¤«¤·°Ê²¼¤Î¥­¡¼¤Ï¾ï¤Ëǧ¼±¤µ¤ì¤ë¡£ + °Ê²¼¤Î¥­¡¼¤Ï¾ï¤Ëǧ¼±¤µ¤ì¤ë¡£ - ¤³¤ì¤Ë²Ã¤¨¤Æ¡¢m17n-X ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï°Ê²¼¤Î¥­¡¼¤âǧ¼±¤¹¤ë¡£¤³¤ì¤é¤Ï - ¥ë¡¼¥È¥¦¥£¥ó¥É¥¦¤È¡¢¥Õ¥ì¡¼¥à¤ÇÍøÍѤǤ­¤ë drawable ¤Î¿¼¤µ¤ò»ØÄꤹ¤ë¡£ + ¤³¤ì¤é¤Î¥­¡¼¤Ë²Ã¤¨¡¢#Mdevice ¤Î¥­¡¼¤¬ #Mx + ¤Ç¤¢¤ë¾ì¹ç¤Ë¸Â¤ê°Ê²¼¤Î¥­¡¼¤âǧ¼±¤µ¤ì¤ë¡£°Ê²¼¤Î¥­¡¼¤Ï¥ë¡¼¥È¥¦¥£¥ó¥É¥¦¤È¡¢¥Õ¥ì¡¼¥à¤ÇÍøÍѤǤ­¤ë + drawable ¤Î¿¼¤µ¤ò»ØÄꤹ¤ë¡£ @return - À®¸ù¤¹¤ì¤Ð mframe() ¤Ï¿·¤·¤¤¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤± - ¤ì¤Ð @c NULL ¤òÊÖ¤¹¡£ */ + À®¸ù¤¹¤ì¤Ð mframe() ¤Ï¿·¤·¤¤¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð + @c NULL ¤òÊÖ¤¹¡£ */ MFrame * mframe (MPlist *plist) @@ -573,7 +641,7 @@ mframe (MPlist *plist) if (! interface->handle) { (*interface->init) (); - interface->handle = Mt; + interface->handle = (void *) 1; } #else /* not HAVE_FREETYPE */ MERROR (MERROR_WIN, NULL); @@ -586,23 +654,26 @@ mframe (MPlist *plist) MERROR (MERROR_WIN, NULL); if (! interface->handle) { - interface->handle = dlopen (interface->library, RTLD_NOW); - if (! interface->handle) - MERROR (MERROR_WIN, NULL); - interface->init = dlsym (interface->handle, "device_init"); - interface->open = dlsym (interface->handle, "device_open"); - interface->fini = dlsym (interface->handle, "device_fini"); - if (! interface->init || ! interface->open || ! interface->fini + if (! (interface->handle = dlopen (interface->library, RTLD_NOW)) + || ! (interface->init + = (int (*) ()) dlsym (interface->handle, "device_init")) + || ! (interface->open + = (int (*) (MFrame *, MPlist *)) dlsym (interface->handle, + "device_open")) + || ! (interface->fini + = (int (*) ()) dlsym (interface->handle, "device_fini")) || (*interface->init) () < 0) { - dlclose (interface->handle); + fprintf (stderr, "%s\n", (char *) dlerror ()); + if (interface->handle) + dlclose (interface->handle); MERROR (MERROR_WIN, NULL); } } } M17N_OBJECT (frame, free_frame, MERROR_FRAME); - if (! (frame->device = (*interface->open) (frame, plist))) + if ((*interface->open) (frame, plist) < 0) { free (frame); MERROR (MERROR_WIN, NULL); @@ -616,7 +687,8 @@ mframe (MPlist *plist) if (MPLIST_KEY (pl) == Mface) mface_merge (frame->face, (MFace *) MPLIST_VAL (pl)); mface__update_frame_face (frame); - + frame->font + = frame->rface->rfont ? (MFont *) frame->rface->rfont : NULL; if (plist_created) M17N_OBJECT_UNREF (plist); return frame; @@ -667,8 +739,8 @@ mframe (MPlist *plist) /***ja @brief ¥Õ¥ì¡¼¥à¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÊÖ¤¹. - ´Ø¿ô mframe_get_prop () ¤Ï¥Õ¥ì¡¼¥à $FRAME ¤Î¥­¡¼ $KEY ¤ò»ý¤Ä¥×¥í¥Ñ - ¥Æ¥£¤ÎÃͤòÊÖ¤¹¡£Í­¸ú¤Ê¥­¡¼¤È¤½¤ÎÃͤϰʲ¼¤ÎÄ̤ꡣ + ´Ø¿ô mframe_get_prop () ¤Ï¥Õ¥ì¡¼¥à $FRAME ¤Î¥­¡¼ $KEY + ¤ò»ý¤Ä¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÊÖ¤¹¡£Í­¸ú¤Ê¥­¡¼¤È¤½¤ÎÃͤϰʲ¼¤ÎÄ̤ꡣ @verbatim @@ -710,9 +782,9 @@ mframe_get_prop (MFrame *frame, MSymbol key) if (key == Mface) return frame->face; if (key == Mfont) - return &frame->rface->rfont->font; + return frame->font; if (key == Mfont_width) - return (void *) (frame->space_width); + return (void *) (frame->average_width); if (key == Mfont_ascent) return (void *) (frame->ascent); if (key == Mfont_descent) @@ -731,9 +803,8 @@ mframe_get_prop (MFrame *frame, MSymbol key) /***ja @brief ¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥ì¡¼¥à. - ³°ÉôÊÑ¿ô #mframe_default ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»ý - ¤Ä¡£¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥ì¡¼¥à¤Ï¡¢ºÇ½é¤Ë mframe () ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤­¤Ë - ºî¤é¤ì¤ë¡£ */ + ³°ÉôÊÑ¿ô #mframe_default ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥ì¡¼¥à¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»ý¤Ä¡£ + ¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥ì¡¼¥à¤Ï¡¢ºÇ½é¤Ë mframe () ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤­¤Ëºî¤é¤ì¤ë¡£ */ MFrame *mframe_default;