]> code.delx.au - gnu-emacs/commitdiff
(merge_faces): Rename from merge_into_realized_face.
authorKim F. Storm <storm@cua.dk>
Mon, 10 Jan 2005 13:35:11 +0000 (13:35 +0000)
committerKim F. Storm <storm@cua.dk>
Mon, 10 Jan 2005 13:35:11 +0000 (13:35 +0000)
Callers changed.
Add support to merge with lisp face id too (if face_name is t).

src/xfaces.c

index c6dff0bae7f3802bad7dd2157260ebb9215f8422..7aa66735db6ae517480d9a0f266c6a778680de99 100644 (file)
@@ -7691,16 +7691,19 @@ face_at_string_position (w, string, pos, bufpos, region_beg,
 
    F is frame where faces are (to be) realized.
 
-   FACE_NAME is named face to merge, or if nil,
-   FACE_ID is face_id of realized face to merge.
+   FACE_NAME is named face to merge.
+
+   If FACE_NAME is nil, FACE_ID is face_id of realized face to merge.
+
+   If FACE_NAME is t, FACE_ID is lface_id of face to merge.
 
    BASE_FACE_ID is realized face to merge into.
 
-   Return new face.
+   Return new face id.
 */
 
 int
-merge_into_realized_face (f, face_name, face_id, base_face_id)
+merge_faces (f, face_name, face_id, base_face_id)
      struct frame *f;
      Lisp_Object face_name;
      int face_id, base_face_id;
@@ -7712,6 +7715,17 @@ merge_into_realized_face (f, face_name, face_id, base_face_id)
   if (!base_face)
     return base_face_id;
 
+  if (EQ (face_name, Qt))
+    {
+      if (face_id < 0 || face_id >= lface_id_to_name_size)
+       return base_face_id;
+      face_name = lface_id_to_name[face_id];
+      face_id = lookup_derived_face (f, face_name, 0, base_face_id);
+      if (face_id >= 0)
+       return face_id;
+      return base_face_id;
+    }
+
   /* Begin with attributes from the base face.  */
   bcopy (base_face->lface, attrs, sizeof attrs);
 
@@ -7723,6 +7737,8 @@ merge_into_realized_face (f, face_name, face_id, base_face_id)
   else
     {
       struct face *face;
+      if (face_id < 0)
+       return base_face_id;
       face = FACE_FROM_ID (f, face_id);
       if (!face)
        return base_face_id;