*** empty log message ***
[m17n/m17n-lib.git] / src / face.h
index 9ab1d16..31e326c 100644 (file)
@@ -1,5 +1,5 @@
 /* face.h -- header file for the face module.
-   Copyright (C) 2003, 2004
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -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.  */
 
 #ifndef _M17N_FACE_H_
@@ -27,7 +27,7 @@ enum MFaceProperty
   {
     /** The font related properties.  */
     /* The order of MFACE_FOUNDRY to MFACE_ADSTYLE must be the same as
-       enum MFontProperty.  */
+       MFONT_FOUNDRY to MFONT_ADSTYLE of enum MFontProperty.  */
     MFACE_FOUNDRY,
     MFACE_FAMILY,
     MFACE_WEIGHT,
@@ -46,39 +46,28 @@ enum MFaceProperty
     MFACE_BOX,
     MFACE_VIDEOMODE,
 
-    /** Extention by applications.  */
-    MFACE_HOOK_FUNC,
-    MFACE_HOOK_ARG,
-
-    /* In a realized face, this is already reflected in MFACE_SIZE,
-       thus is ignored.  */
+    /* In a realized face, this is ignored because it is already
+       reflected in MFACE_SIZE.  */
     MFACE_RATIO,
 
+    MFACE_HOOK_ARG,
+
     MFACE_PROPERTY_MAX
   };
 
 struct MFace
 {
   M17NObject control;
-  /* Initialized to 0, and incremented by one each the face is
-     modified.  */
-  unsigned tick;
+
+  /** Properties of the face.  */
   void *property[MFACE_PROPERTY_MAX];
-};
 
+  MFaceHookFunc hook;
+
+  /** List of frames affected by the face modification.  */
+  MPlist *frame_list;
+};
 
-enum face_gc
-  {
-    MFACE_GC_NORMAL,
-    MFACE_GC_INVERSE,
-    MFACE_GC_SCRATCH,
-    MFACE_GC_HLINE,
-    MFACE_GC_BOX_TOP,
-    MFACE_GC_BOX_BOTTOM,
-    MFACE_GC_BOX_LEFT,
-    MFACE_GC_BOX_RIGHT,
-    MFACE_GCS
-  };
 
 /** A realized face is registered in MFrame->face_list, thus it does
     not have to be a managed object.  */
@@ -91,13 +80,13 @@ struct MRealizedFace
   /** Properties of all stacked faces are merged into here.  */
   MFace face;
 
+  /** Font explicitly specified for the face (maybe NULL).  */
+  MFont *font;
+
   /** From what faces this is realized.  Keys are Mface and values are
      (MFace *).  */
   MPlist *base_face_list;
 
-  /* Initialized to the sum of ticks of the above faces.  */
-  unsigned tick;
-
   /* Realized font, one of <frame>->realized_font_list.  */
   MRealizedFont *rfont;
 
@@ -114,12 +103,12 @@ struct MRealizedFace
       properties. */
   MRealizedFace *ascii_rface;
 
-  /** Realized face for undisplayable chars (no font found) that has
-      the same face properties. */
-  MRealizedFace *nofont_rface;
+  /** List of realized faces that have the same face properties.  */
+  MPlist *non_ascii_list;
 
   int ascent, descent;
   int space_width;
+  int average_width;
 
   /** Pointer to a window system dependent object.  */
   void *info;
@@ -129,8 +118,7 @@ struct MRealizedFace
 extern MFace *mface__default;
 
 extern MRealizedFace *mface__realize (MFrame *frame, MFace **faces, int num,
-                                     MSymbol language, MSymbol charset,
-                                     int limitted_size);
+                                     int limitted_size, MFont *font);
 
 extern MGlyph *mface__for_chars (MSymbol script, MSymbol language,
                                 MSymbol charset, MGlyph *from_g, MGlyph *to_g,
@@ -138,4 +126,6 @@ extern MGlyph *mface__for_chars (MSymbol script, MSymbol language,
 
 extern void mface__free_realized (MRealizedFace *rface);
 
+extern void mface__update_frame_face (MFrame *frame);
+
 #endif /* _M17N_FACE_H_ */