record that fact in flags of the face so that we don't try to free
these colors. */
-#ifndef MSDOS
-static
-#endif
unsigned long
load_color (struct frame *f, struct face *face, Lisp_Object name,
enum lface_attribute_index target_index)
static bool
face_attr_equal_p (Lisp_Object v1, Lisp_Object v2)
{
- /* Type can differ, e.g. when one attribute is unspecified, i.e. nil,
- and the other is specified. */
- if (XTYPE (v1) != XTYPE (v2))
- return 0;
-
- if (EQ (v1, v2))
- return 1;
-
- switch (XTYPE (v1))
- {
- case Lisp_String:
- if (SBYTES (v1) != SBYTES (v2))
- return 0;
-
- return memcmp (SDATA (v1), SDATA (v2), SBYTES (v1)) == 0;
-
- case_Lisp_Int:
- case Lisp_Symbol:
- return 0;
-
- default:
- return !NILP (Fequal (v1, v2));
- }
+ return !NILP (Fequal (v1, v2));
}
}
}
+#ifdef HAVE_WINDOW_SYSTEM
-/* Prepare face FACE for subsequent display on frame F. This
- allocated GCs if they haven't been allocated yet or have been freed
- by clearing the face cache. */
+/* Prepare face FACE for subsequent display on frame F. This must be called
+ before using X resources of FACE to allocate GCs if they haven't been
+ allocated yet or have been freed by clearing the face cache. */
void
prepare_face_for_display (struct frame *f, struct face *face)
{
-#ifdef HAVE_WINDOW_SYSTEM
eassert (FRAME_WINDOW_P (f));
if (face->gc == 0)
font_prepare_for_face (f, face);
unblock_input ();
}
-#endif /* HAVE_WINDOW_SYSTEM */
}
-\f
+#endif /* HAVE_WINDOW_SYSTEM */
+
/* Returns the `distance' between the colors X and Y. */
static int
realize_basic_faces (struct frame *f)
{
bool success_p = 0;
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
/* Block input here so that we won't be surprised by an X expose
event, for instance, without having the faces set up. */
success_p = 1;
}
- unbind_to (count, Qnil);
+ dynwind_end ();
unblock_input ();
return success_p;
}
face = xmalloc (sizeof *face);
*face = *base_face;
face->gc = 0;
- face->extra = NULL;
face->overstrike
= (! NILP (font_object)
&& FONT_WEIGHT_NAME_NUMERIC (face->lface[LFACE_WEIGHT_INDEX]) > 100
void
syms_of_xfaces (void)
{
+#include "xfaces.x"
+
DEFSYM (Qface, "face");
DEFSYM (Qface_no_inherit, "face-no-inherit");
DEFSYM (Qbitmap_spec_p, "bitmap-spec-p");
Vface_alternative_font_registry_alist = Qnil;
staticpro (&Vface_alternative_font_registry_alist);
- defsubr (&Sinternal_make_lisp_face);
- defsubr (&Sinternal_lisp_face_p);
- defsubr (&Sinternal_set_lisp_face_attribute);
-#ifdef HAVE_WINDOW_SYSTEM
- defsubr (&Sinternal_set_lisp_face_attribute_from_resource);
-#endif
- defsubr (&Scolor_gray_p);
- defsubr (&Scolor_supported_p);
-#ifndef HAVE_X_WINDOWS
- defsubr (&Sx_load_color_file);
-#endif
- defsubr (&Sface_attribute_relative_p);
- defsubr (&Smerge_face_attribute);
- defsubr (&Sinternal_get_lisp_face_attribute);
- defsubr (&Sinternal_lisp_face_attribute_values);
- defsubr (&Sinternal_lisp_face_equal_p);
- defsubr (&Sinternal_lisp_face_empty_p);
- defsubr (&Sinternal_copy_lisp_face);
- defsubr (&Sinternal_merge_in_global_face);
- defsubr (&Sface_font);
- defsubr (&Sframe_face_alist);
- defsubr (&Sdisplay_supports_face_attributes_p);
- defsubr (&Scolor_distance);
- defsubr (&Sinternal_set_font_selection_order);
- defsubr (&Sinternal_set_alternative_font_family_alist);
- defsubr (&Sinternal_set_alternative_font_registry_alist);
- defsubr (&Sface_attributes_as_vector);
-#ifdef GLYPH_DEBUG
- defsubr (&Sdump_face);
- defsubr (&Sshow_face_resources);
-#endif /* GLYPH_DEBUG */
- defsubr (&Sclear_face_cache);
- defsubr (&Stty_suppress_bold_inverse_default_colors);
-
-#if defined DEBUG_X_COLORS && defined HAVE_X_WINDOWS
- defsubr (&Sdump_colors);
-#endif
-
DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults,
doc: /* List of global face definitions (for internal use only.) */);
Vface_new_frame_defaults = Qnil;
\(or smaller) font we should use. For instance, if a face requests
a font of 10 point, we actually use a font of 10 * RESCALE-RATIO point. */);
Vface_font_rescale_alist = Qnil;
-
-#ifdef HAVE_WINDOW_SYSTEM
- defsubr (&Sbitmap_spec_p);
- defsubr (&Sx_list_fonts);
- defsubr (&Sinternal_face_x_get_resource);
- defsubr (&Sx_family_fonts);
-#endif
}