#ifndef EMACS_FONT_H
#define EMACS_FONT_H
-#include "ccl.h"
-#include "frame.h"
+struct composition_it;
+struct face;
+struct glyph_string;
INLINE_HEADER_BEGIN
return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
}
+/* Like FONT_SPEC_P, but can be used in the garbage collector. */
+INLINE bool
+GC_FONT_SPEC_P (Lisp_Object x)
+{
+ return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
+}
+
/* True iff X is font-entity. */
INLINE bool
FONT_ENTITY_P (Lisp_Object x)
return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
}
+/* Like FONT_ENTITY_P, but can be used in the garbage collector. */
+INLINE bool
+GC_FONT_ENTITY_P (Lisp_Object x)
+{
+ return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
+}
+
/* True iff X is font-object. */
INLINE bool
FONT_OBJECT_P (Lisp_Object x)
return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
}
+/* Like FONT_OBJECT_P, but can be used in the garbage collector. */
+INLINE bool
+GC_FONT_OBJECT_P (Lisp_Object x)
+{
+ return FONTP (x) && (gc_asize (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
+}
+
/* Type checking functions for various font-related objects. */
INLINE void
return XUNTAG (p, Lisp_Vectorlike);
}
+INLINE struct font_spec *
+GC_XFONT_SPEC (Lisp_Object p)
+{
+ eassert (GC_FONT_SPEC_P (p));
+ return XUNTAG (p, Lisp_Vectorlike);
+}
+
INLINE struct font_entity *
XFONT_ENTITY (Lisp_Object p)
{
return XUNTAG (p, Lisp_Vectorlike);
}
+INLINE struct font_entity *
+GC_XFONT_ENTITY (Lisp_Object p)
+{
+ eassert (GC_FONT_ENTITY_P (p));
+ return XUNTAG (p, Lisp_Vectorlike);
+}
+
INLINE struct font *
XFONT_OBJECT (Lisp_Object p)
{
return XUNTAG (p, Lisp_Vectorlike);
}
+INLINE struct font *
+GC_XFONT_OBJECT (Lisp_Object p)
+{
+ eassert (GC_FONT_OBJECT_P (p));
+ return XUNTAG (p, Lisp_Vectorlike);
+}
+
#define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT))
INLINE struct font *
bool (*cached_font_ok) (struct frame *f,
Lisp_Object font_object,
Lisp_Object entity);
+
+ /* Optional
+
+ Return non-nil if the driver support rendering of combining
+ characters for FONT according to Unicode combining class. */
+ Lisp_Object (*combining_capability) (struct font *font);
};
extern void syms_of_nsfont (void);
extern void syms_of_macfont (void);
#endif /* HAVE_NS */
+#ifdef USE_CAIRO
+extern struct font_driver ftcrfont_driver;
+extern void syms_of_ftcrfont (void);
+#endif
#ifndef FONT_DEBUG
#define FONT_DEBUG