aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
authorPaul Eggert2016-12-01 21:47:12 -0800
committerPaul Eggert2016-12-01 21:48:30 -0800
commitebb96114d88af64cbb72f42052cb359ba8010aa2 (patch)
tree88795f2e9bc74b5c1a96c04c8cfe069b7d5f601f /src/font.c
parentdd4b913153a818dbd42cb395d2c36f216e09a8ec (diff)
downloademacs-ebb96114d88af64cbb72f42052cb359ba8010aa2.tar.gz
emacs-ebb96114d88af64cbb72f42052cb359ba8010aa2.zip
Make struct font_drivers read-only
This simplifies the code a bit, and makes the structs more shareable and less likely to become corrupt. * src/alloc.c (cleanup_vector): * src/font.c (valid_font_driver, font_prepare_cache) (font_finish_cache, font_get_cache, font_clear_cache) (register_font_driver, font_update_drivers): * src/font.h (struct font, struct font_driver_list) (valid_font_driver): struct font_drivers are now const. * src/font.c, src/ftcrfont.c, src/ftfont.c, src/nsfont.m, src/xfont.c: Omit no-longer-necessary decls. * src/ftcrfont.c (syms_of_ftcrfont): * src/ftxfont.c (syms_of_ftxfont): * src/xftfont.c (syms_of_xftfont): Omit no-longer-necessary initialization code. * src/ftcrfont.c (ftcrfont_driver): * src/ftfont.c (ftfont_driver): * src/ftxfont.c (ftxfont_driver): * src/macfont.m (macfont_driver): * src/nsfont.m (nsfont_driver): * src/xfont.c (xfont_driver): * src/xftfont.c (xftfont_driver): Use C99-style initializer for ease of maintenance, and make it const. * src/ftcrfont.c, src/ftxfont.c, src/xftfont.c: Refer to functions like ftfont_text_extents directly. * src/ftfont.c (ftfont_get_cache, ftfont_list, ftfont_list_family) (ftfont_has_char, ftfont_encode_char, ftfont_text_extents) (ftfont_get_bitmap, ftfont_anchor_point, ftfont_otf_capability) (ftfont_variation_glyphs, ftfont_filter_properties) (ftfont_combining_capability): * src/xfont.c (xfont_get_cache): Now extern, so that other modules’ struct font_drivers can use them directly. * src/macfont.m (macfont_descriptor_entity): * src/nsfont.m (nsfont_open): Use constant directly; this is clearer.
Diffstat (limited to 'src/font.c')
-rw-r--r--src/font.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/font.c b/src/font.c
index ce632335256..9fe7c26ea9c 100644
--- a/src/font.c
+++ b/src/font.c
@@ -132,7 +132,7 @@ static struct font_driver_list *font_driver_list;
132/* Used to catch bogus pointers in font objects. */ 132/* Used to catch bogus pointers in font objects. */
133 133
134bool 134bool
135valid_font_driver (struct font_driver *drv) 135valid_font_driver (struct font_driver const *drv)
136{ 136{
137 Lisp_Object tail, frame; 137 Lisp_Object tail, frame;
138 struct font_driver_list *fdl; 138 struct font_driver_list *fdl;
@@ -2543,14 +2543,11 @@ font_match_p (Lisp_Object spec, Lisp_Object font)
2543 is a number frames sharing this cache, and FONT-CACHE-DATA is a 2543 is a number frames sharing this cache, and FONT-CACHE-DATA is a
2544 cons (FONT-SPEC . [FONT-ENTITY ...]). */ 2544 cons (FONT-SPEC . [FONT-ENTITY ...]). */
2545 2545
2546static void font_prepare_cache (struct frame *, struct font_driver *);
2547static void font_finish_cache (struct frame *, struct font_driver *);
2548static Lisp_Object font_get_cache (struct frame *, struct font_driver *);
2549static void font_clear_cache (struct frame *, Lisp_Object, 2546static void font_clear_cache (struct frame *, Lisp_Object,
2550 struct font_driver *); 2547 struct font_driver const *);
2551 2548
2552static void 2549static void
2553font_prepare_cache (struct frame *f, struct font_driver *driver) 2550font_prepare_cache (struct frame *f, struct font_driver const *driver)
2554{ 2551{
2555 Lisp_Object cache, val; 2552 Lisp_Object cache, val;
2556 2553
@@ -2572,7 +2569,7 @@ font_prepare_cache (struct frame *f, struct font_driver *driver)
2572 2569
2573 2570
2574static void 2571static void
2575font_finish_cache (struct frame *f, struct font_driver *driver) 2572font_finish_cache (struct frame *f, struct font_driver const *driver)
2576{ 2573{
2577 Lisp_Object cache, val, tmp; 2574 Lisp_Object cache, val, tmp;
2578 2575
@@ -2593,7 +2590,7 @@ font_finish_cache (struct frame *f, struct font_driver *driver)
2593 2590
2594 2591
2595static Lisp_Object 2592static Lisp_Object
2596font_get_cache (struct frame *f, struct font_driver *driver) 2593font_get_cache (struct frame *f, struct font_driver const *driver)
2597{ 2594{
2598 Lisp_Object val = driver->get_cache (f); 2595 Lisp_Object val = driver->get_cache (f);
2599 Lisp_Object type = driver->type; 2596 Lisp_Object type = driver->type;
@@ -2608,7 +2605,8 @@ font_get_cache (struct frame *f, struct font_driver *driver)
2608 2605
2609 2606
2610static void 2607static void
2611font_clear_cache (struct frame *f, Lisp_Object cache, struct font_driver *driver) 2608font_clear_cache (struct frame *f, Lisp_Object cache,
2609 struct font_driver const *driver)
2612{ 2610{
2613 Lisp_Object tail, elt; 2611 Lisp_Object tail, elt;
2614 Lisp_Object entity; 2612 Lisp_Object entity;
@@ -3463,7 +3461,7 @@ font_open_by_name (struct frame *f, Lisp_Object name)
3463 (e.g. syms_of_xfont). */ 3461 (e.g. syms_of_xfont). */
3464 3462
3465void 3463void
3466register_font_driver (struct font_driver *driver, struct frame *f) 3464register_font_driver (struct font_driver const *driver, struct frame *f)
3467{ 3465{
3468 struct font_driver_list *root = f ? f->font_driver_list : font_driver_list; 3466 struct font_driver_list *root = f ? f->font_driver_list : font_driver_list;
3469 struct font_driver_list *prev, *list; 3467 struct font_driver_list *prev, *list;
@@ -3524,7 +3522,7 @@ font_update_drivers (struct frame *f, Lisp_Object new_drivers)
3524 drivers. */ 3522 drivers. */
3525 for (list = f->font_driver_list; list; list = list->next) 3523 for (list = f->font_driver_list; list; list = list->next)
3526 { 3524 {
3527 struct font_driver *driver = list->driver; 3525 struct font_driver const *driver = list->driver;
3528 if ((EQ (new_drivers, Qt) || ! NILP (Fmemq (driver->type, new_drivers))) 3526 if ((EQ (new_drivers, Qt) || ! NILP (Fmemq (driver->type, new_drivers)))
3529 != list->on) 3527 != list->on)
3530 { 3528 {
@@ -3587,7 +3585,7 @@ font_update_drivers (struct frame *f, Lisp_Object new_drivers)
3587 and then use it under w32 or ns. */ 3585 and then use it under w32 or ns. */
3588 for (list = f->font_driver_list; list; list = list->next) 3586 for (list = f->font_driver_list; list; list = list->next)
3589 { 3587 {
3590 struct font_driver *driver = list->driver; 3588 struct font_driver const *driver = list->driver;
3591 eassert (! list->on); 3589 eassert (! list->on);
3592 if (! driver->start_for_frame 3590 if (! driver->start_for_frame
3593 || driver->start_for_frame (f) == 0) 3591 || driver->start_for_frame (f) == 0)