Mercurial > emacs
changeset 91382:ee9cba23cf9d
(get_lface_attributes): Function deleted.
(merge_named_face, lookup_named_face, lookup_derived_face)
(realize_named_face): Call lface_from_face_name directly, and use
the fact that merge_face_vectors does not alter its FROM argument.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 01 Feb 2008 22:34:19 +0000 |
parents | 1225d81ff93b |
children | b15ca364bcf8 |
files | src/xfaces.c |
diffstat | 1 files changed, 31 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xfaces.c Fri Feb 01 22:34:08 2008 +0000 +++ b/src/xfaces.c Fri Feb 01 22:34:19 2008 +0000 @@ -492,7 +492,6 @@ static int x_face_list_fonts P_ ((struct frame *, char *, struct font_name **, int, int)); static int font_scalable_p P_ ((struct font_name *)); -static int get_lface_attributes P_ ((struct frame *, Lisp_Object, Lisp_Object *, int)); static int load_pixmap P_ ((struct frame *, Lisp_Object, unsigned *, unsigned *)); static unsigned char *xstrlwr P_ ((unsigned char *)); static struct frame *frame_or_selected_frame P_ ((Lisp_Object, int)); @@ -3439,36 +3438,6 @@ } -/* Get face attributes of face FACE_NAME from frame-local faces on - frame F. Store the resulting attributes in ATTRS which must point - to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE. If SIGNAL_P - is non-zero, signal an error if FACE_NAME does not name a face. - Otherwise, value is zero if FACE_NAME is not a face. */ - -static INLINE int -get_lface_attributes (f, face_name, attrs, signal_p) - struct frame *f; - Lisp_Object face_name; - Lisp_Object *attrs; - int signal_p; -{ - Lisp_Object lface; - int success_p; - - lface = lface_from_face_name (f, face_name, signal_p); - if (!NILP (lface)) - { - bcopy (XVECTOR (lface)->contents, attrs, - LFACE_VECTOR_SIZE * sizeof *attrs); - success_p = 1; - } - else - success_p = 0; - - return success_p; -} - - /* Non-zero if all attributes in face attribute vector ATTRS are specified, i.e. are non-nil. */ @@ -3754,12 +3723,14 @@ /* Merge two Lisp face attribute vectors on frame F, FROM and TO, and store the resulting attributes in TO, which must be already be - completely specified and contain only absolute attributes. Every - specified attribute of FROM overrides the corresponding attribute of - TO; relative attributes in FROM are merged with the absolute value in - TO and replace it. NAMED_MERGE_POINTS is used internally to detect - loops in face inheritance; it should be 0 when called from other - places. */ + completely specified and contain only absolute attributes. The + contents of FROM are not altered. + + Every specified attribute of FROM overrides the corresponding + attribute of TO; relative attributes in FROM are merged with the + absolute value in TO and replace it. NAMED_MERGE_POINTS is used + internally to detect loops in face inheritance; it should be 0 when + called from other places. */ static INLINE void merge_face_vectors (f, from, to, named_merge_points) @@ -3823,17 +3794,15 @@ face_name, &named_merge_points)) { struct gcpro gcpro1; - Lisp_Object from[LFACE_VECTOR_SIZE]; - int ok = get_lface_attributes (f, face_name, from, 0); - - if (ok) - { - GCPRO1 (named_merge_point.face_name); - merge_face_vectors (f, from, to, named_merge_points); - UNGCPRO; - } - - return ok; + Lisp_Object lface = lface_from_face_name (f, face_name, 0); + if (NILP (lface)) + return 0; + + GCPRO1 (named_merge_point.face_name); + merge_face_vectors (f, XVECTOR (lface)->contents, to, + named_merge_points); + UNGCPRO; + return 1; } else return 0; @@ -3860,6 +3829,8 @@ (BACKGROUND-COLOR . COLOR) where COLOR is a color name. This is for compatibility with 20.2. + The contents of FACE_REF is not altered by this function. + Face specifications earlier in lists take precedence over later specifications. */ @@ -6117,8 +6088,7 @@ Lisp_Object symbol; int signal_p; { - Lisp_Object attrs[LFACE_VECTOR_SIZE]; - Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; + Lisp_Object lface, attrs[LFACE_VECTOR_SIZE]; struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); if (default_face == NULL) @@ -6130,11 +6100,12 @@ abort (); /* realize_basic_faces must have set it up */ } - if (!get_lface_attributes (f, symbol, symbol_attrs, signal_p)) + lface = lface_from_face_name (f, symbol, signal_p); + if (NILP (lface)) return -1; bcopy (default_face->lface, attrs, sizeof attrs); - merge_face_vectors (f, symbol_attrs, attrs, 0); + merge_face_vectors (f, XVECTOR (lface)->contents, attrs, 0); return lookup_face (f, attrs); } @@ -6265,16 +6236,16 @@ int face_id; int signal_p; { - Lisp_Object attrs[LFACE_VECTOR_SIZE]; + Lisp_Object lface, attrs[LFACE_VECTOR_SIZE]; Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; struct face *default_face = FACE_FROM_ID (f, face_id); if (!default_face) abort (); - get_lface_attributes (f, symbol, symbol_attrs, signal_p); + lface = lface_from_face_name (f, symbol, signal_p); bcopy (default_face->lface, attrs, sizeof attrs); - merge_face_vectors (f, symbol_attrs, attrs, 0); + merge_face_vectors (f, XVECTOR (lface)->contents, attrs, 0); return lookup_face (f, attrs); } @@ -7565,18 +7536,16 @@ Lisp_Object symbol; int id; { - struct face_cache *c = FRAME_FACE_CACHE (f); Lisp_Object lface = lface_from_face_name (f, symbol, 0); Lisp_Object attrs[LFACE_VECTOR_SIZE]; - Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; - struct face *new_face; + struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); /* The default face must exist and be fully specified. */ - get_lface_attributes (f, Qdefault, attrs, 1); + bcopy (default_face->lface, attrs, LFACE_VECTOR_SIZE * sizeof *attrs); check_lface_attrs (attrs); xassert (lface_fully_specified_p (attrs)); - /* If SYMBOL isn't know as a face, create it. */ + /* If SYMBOL isn't known as a face, create it. */ if (NILP (lface)) { Lisp_Object frame; @@ -7585,11 +7554,8 @@ } /* Merge SYMBOL's face with the default face. */ - get_lface_attributes (f, symbol, symbol_attrs, 1); - merge_face_vectors (f, symbol_attrs, attrs, 0); - - /* Realize the face. */ - new_face = realize_face (c, attrs, id); + merge_face_vectors (f, XVECTOR (lface)->contents, attrs, 0); + realize_face (FRAME_FACE_CACHE (f), attrs, id); }