X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/649937920b5023be5c0685d1537f5ea2bfb9899a..16e5e8e4ea4ad46157fcdeafb16f245124fba375:/src/font.h diff --git a/src/font.h b/src/font.h index 5a3e38a2a6..cf477290d0 100644 --- a/src/font.h +++ b/src/font.h @@ -1,5 +1,5 @@ /* font.h -- Interface definition for font handling. - Copyright (C) 2006-2015 Free Software Foundation, Inc. + Copyright (C) 2006-2016 Free Software Foundation, Inc. Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H13PRO009 @@ -8,8 +8,8 @@ This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,8 +22,9 @@ along with GNU Emacs. If not, see . */ #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 @@ -413,46 +414,133 @@ struct font_bitmap /* Predicates to check various font-related objects. */ /* True iff X is one of font-spec, font-entity, and font-object. */ -#define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT) +INLINE bool +FONTP (Lisp_Object x) +{ + return PSEUDOVECTORP (x, PVEC_FONT); +} + /* True iff X is font-spec. */ -#define FONT_SPEC_P(x) \ - (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX) +INLINE bool +FONT_SPEC_P (Lisp_Object x) +{ + 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. */ -#define FONT_ENTITY_P(x) \ - (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX) +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. */ -#define FONT_OBJECT_P(x) \ - (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX) - -/* Check macros for various font-related objects. */ - -#define CHECK_FONT(x) \ - do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false) -#define CHECK_FONT_SPEC(x) \ - do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \ - while (false) -#define CHECK_FONT_ENTITY(x) \ - do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \ - while (false) -#define CHECK_FONT_OBJECT(x) \ - do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \ - while (false) - -#define CHECK_FONT_GET_OBJECT(x, font) \ - do { \ - CHECK_FONT_OBJECT (x); \ - font = XFONT_OBJECT (x); \ - } while (false) +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 +CHECK_FONT (Lisp_Object x) +{ + CHECK_TYPE (FONTP (x), Qfont, x); +} + +INLINE void +CHECK_FONT_SPEC (Lisp_Object x) +{ + CHECK_TYPE (FONT_SPEC_P (x), Qfont_spec, x); +} + +INLINE void +CHECK_FONT_ENTITY (Lisp_Object x) +{ + CHECK_TYPE (FONT_ENTITY_P (x), Qfont_entity, x); +} + +INLINE void +CHECK_FONT_OBJECT (Lisp_Object x) +{ + CHECK_TYPE (FONT_OBJECT_P (x), Qfont_object, x); +} + +/* C pointer extraction functions for various font-related objects. */ + +INLINE struct font_spec * +XFONT_SPEC (Lisp_Object p) +{ + eassert (FONT_SPEC_P (p)); + 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) +{ + eassert (FONT_ENTITY_P (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) +{ + eassert (FONT_OBJECT_P (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 XFONT_SPEC(p) \ - (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike)) -#define XFONT_ENTITY(p) \ - (eassert (FONT_ENTITY_P (p)), \ - (struct font_entity *) XUNTAG (p, Lisp_Vectorlike)) -#define XFONT_OBJECT(p) \ - (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike)) #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) +INLINE struct font * +CHECK_FONT_GET_OBJECT (Lisp_Object x) +{ + CHECK_FONT_OBJECT (x); + return XFONT_OBJECT (x); +} + /* Number of pt per inch (from the TeXbook). */ #define PT_PER_INCH 72.27 @@ -669,6 +757,12 @@ struct font_driver 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); }; @@ -799,6 +893,10 @@ extern struct font_driver nsfont_driver; 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