mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
(Qforeground_color, Qbackground_color): Declare.
(compute_char_face, merge_face_list): Update from xterm.c.
This commit is contained in:
parent
ead2be985a
commit
8be05193e8
1 changed files with 67 additions and 69 deletions
136
src/w32faces.c
136
src/w32faces.c
|
|
@ -139,6 +139,9 @@ static int new_computed_face ( /* FRAME_PTR, struct face * */ );
|
|||
static int intern_computed_face ( /* FRAME_PTR, struct face * */ );
|
||||
static void ensure_face_ready ( /* FRAME_PTR, int id */ );
|
||||
void recompute_basic_faces ( /* FRAME_PTR f */ );
|
||||
static void merge_face_list ( /* FRAME_PTR, struct face *, Lisp_Object */ );
|
||||
|
||||
extern Lisp_Object Qforeground_color, Qbackground_color;
|
||||
|
||||
/* Allocating, copying, and comparing struct faces. */
|
||||
|
||||
|
|
@ -663,7 +666,6 @@ compute_glyph_face_1 (f, face_name, current_face)
|
|||
the time this function can take.
|
||||
|
||||
If MOUSE is nonzero, use the character's mouse-face, not its face. */
|
||||
|
||||
int
|
||||
compute_char_face (f, w, pos, region_beg, region_end, endptr, limit, mouse)
|
||||
struct frame *f;
|
||||
|
|
@ -746,82 +748,23 @@ compute_char_face (f, w, pos, region_beg, region_end, endptr, limit, mouse)
|
|||
|
||||
compute_base_face (f, &face);
|
||||
|
||||
if (CONSP (prop))
|
||||
{
|
||||
/* We have a list of faces, merge them in reverse order */
|
||||
Lisp_Object length = Flength (prop);
|
||||
int len = XINT (length);
|
||||
Lisp_Object *faces;
|
||||
|
||||
/* Put them into an array */
|
||||
faces = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
|
||||
for (j = 0; j < len; j++)
|
||||
{
|
||||
faces[j] = Fcar (prop);
|
||||
prop = Fcdr (prop);
|
||||
}
|
||||
/* So that we can merge them in the reverse order */
|
||||
for (j = len - 1; j >= 0; j--)
|
||||
{
|
||||
facecode = face_name_id_number (f, faces[j]);
|
||||
if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
|
||||
&& FRAME_PARAM_FACES (f) [facecode] != 0)
|
||||
merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
|
||||
}
|
||||
}
|
||||
else if (!NILP (prop))
|
||||
{
|
||||
facecode = face_name_id_number (f, prop);
|
||||
if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
|
||||
&& FRAME_PARAM_FACES (f) [facecode] != 0)
|
||||
merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
|
||||
}
|
||||
merge_face_list (f, &face, prop);
|
||||
|
||||
noverlays = sort_overlays (overlay_vec, noverlays, w);
|
||||
|
||||
/* Now merge the overlay data in that order. */
|
||||
for (i = 0; i < noverlays; i++)
|
||||
{
|
||||
Lisp_Object oend;
|
||||
int oendpos;
|
||||
|
||||
prop = Foverlay_get (overlay_vec[i], propname);
|
||||
if (CONSP (prop))
|
||||
{
|
||||
/* We have a list of faces, merge them in reverse order */
|
||||
Lisp_Object length = Flength (prop);
|
||||
int len = XINT (length);
|
||||
Lisp_Object *faces;
|
||||
int i;
|
||||
merge_face_list (f, &face, prop);
|
||||
|
||||
/* Put them into an array */
|
||||
faces = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
|
||||
for (j = 0; j < len; j++)
|
||||
{
|
||||
faces[j] = Fcar (prop);
|
||||
prop = Fcdr (prop);
|
||||
}
|
||||
/* So that we can merge them in the reverse order */
|
||||
for (j = len - 1; j >= 0; j--)
|
||||
{
|
||||
facecode = face_name_id_number (f, faces[j]);
|
||||
if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
|
||||
&& FRAME_PARAM_FACES (f) [facecode] != 0)
|
||||
merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
|
||||
}
|
||||
}
|
||||
else if (!NILP (prop))
|
||||
{
|
||||
Lisp_Object oend;
|
||||
int oendpos;
|
||||
|
||||
facecode = face_name_id_number (f, prop);
|
||||
if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
|
||||
&& FRAME_PARAM_FACES (f) [facecode] != 0)
|
||||
merge_faces (FRAME_PARAM_FACES (f)[facecode], &face);
|
||||
|
||||
oend = OVERLAY_END (overlay_vec[i]);
|
||||
oendpos = OVERLAY_POSITION (oend);
|
||||
if (oendpos < endpos)
|
||||
endpos = oendpos;
|
||||
}
|
||||
oend = OVERLAY_END (overlay_vec[i]);
|
||||
oendpos = OVERLAY_POSITION (oend);
|
||||
if (oendpos < endpos)
|
||||
endpos = oendpos;
|
||||
}
|
||||
|
||||
if (pos >= region_beg && pos < region_end)
|
||||
|
|
@ -836,6 +779,61 @@ compute_char_face (f, w, pos, region_beg, region_end, endptr, limit, mouse)
|
|||
|
||||
return intern_computed_face (f, &face);
|
||||
}
|
||||
|
||||
static void
|
||||
merge_face_list (f, face, prop)
|
||||
FRAME_PTR f;
|
||||
struct face *face;
|
||||
Lisp_Object prop;
|
||||
{
|
||||
Lisp_Object length;
|
||||
int len;
|
||||
Lisp_Object *faces;
|
||||
int j;
|
||||
|
||||
if (CONSP (prop)
|
||||
&& ! STRINGP (XCONS (prop)->cdr))
|
||||
{
|
||||
/* We have a list of faces, merge them in reverse order. */
|
||||
|
||||
length = Fsafe_length (prop);
|
||||
len = XFASTINT (length);
|
||||
|
||||
/* Put them into an array. */
|
||||
faces = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
|
||||
for (j = 0; j < len; j++)
|
||||
{
|
||||
faces[j] = Fcar (prop);
|
||||
prop = Fcdr (prop);
|
||||
}
|
||||
/* So that we can merge them in the reverse order. */
|
||||
}
|
||||
else
|
||||
{
|
||||
faces = (Lisp_Object *) alloca (sizeof (Lisp_Object));
|
||||
faces[0] = prop;
|
||||
len = 1;
|
||||
}
|
||||
|
||||
for (j = len - 1; j >= 0; j--)
|
||||
{
|
||||
if (CONSP (faces[j]))
|
||||
{
|
||||
if (EQ (XCONS (faces[j])->car, Qbackground_color))
|
||||
face->background = load_color (f, XCONS (faces[j])->cdr);
|
||||
if (EQ (XCONS (faces[j])->car, Qforeground_color))
|
||||
face->foreground = load_color (f, XCONS (faces[j])->cdr);
|
||||
}
|
||||
else
|
||||
{
|
||||
int facecode = face_name_id_number (f, faces[j]);
|
||||
if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
|
||||
&& FRAME_PARAM_FACES (f) [facecode] != 0)
|
||||
merge_faces (FRAME_PARAM_FACES (f) [facecode], face);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Recompute the GC's for the default and modeline faces.
|
||||
We call this after changing frame parameters on which those GC's
|
||||
|
|
|
|||
Loading…
Reference in a new issue