diff options
Diffstat (limited to 'src/font.c')
| -rw-r--r-- | src/font.c | 55 |
1 files changed, 18 insertions, 37 deletions
diff --git a/src/font.c b/src/font.c index 251d43ba8b2..7b9edcd3fb8 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -3539,53 +3539,34 @@ font_update_drivers (struct frame *f, Lisp_Object new_drivers) | |||
| 3539 | return active_drivers; | 3539 | return active_drivers; |
| 3540 | } | 3540 | } |
| 3541 | 3541 | ||
| 3542 | int | 3542 | #if defined (HAVE_XFT) || defined (HAVE_FREETYPE) |
| 3543 | font_put_frame_data (struct frame *f, struct font_driver *driver, void *data) | ||
| 3544 | { | ||
| 3545 | struct font_data_list *list, *prev; | ||
| 3546 | 3543 | ||
| 3547 | for (prev = NULL, list = f->font_data_list; list; | 3544 | void |
| 3548 | prev = list, list = list->next) | 3545 | font_put_frame_data (struct frame *f, Lisp_Object driver, void *data) |
| 3549 | if (list->driver == driver) | 3546 | { |
| 3550 | break; | 3547 | Lisp_Object val = assq_no_quit (driver, f->font_data); |
| 3551 | if (! data) | ||
| 3552 | { | ||
| 3553 | if (list) | ||
| 3554 | { | ||
| 3555 | if (prev) | ||
| 3556 | prev->next = list->next; | ||
| 3557 | else | ||
| 3558 | f->font_data_list = list->next; | ||
| 3559 | xfree (list); | ||
| 3560 | } | ||
| 3561 | return 0; | ||
| 3562 | } | ||
| 3563 | 3548 | ||
| 3564 | if (! list) | 3549 | if (!data) |
| 3550 | f->font_data = Fdelq (val, f->font_data); | ||
| 3551 | else | ||
| 3565 | { | 3552 | { |
| 3566 | list = xmalloc (sizeof *list); | 3553 | if (NILP (val)) |
| 3567 | list->driver = driver; | 3554 | f->font_data = Fcons (Fcons (driver, make_save_ptr (data)), |
| 3568 | list->next = f->font_data_list; | 3555 | f->font_data); |
| 3569 | f->font_data_list = list; | 3556 | else |
| 3557 | XSETCDR (val, make_save_ptr (data)); | ||
| 3570 | } | 3558 | } |
| 3571 | list->data = data; | ||
| 3572 | return 0; | ||
| 3573 | } | 3559 | } |
| 3574 | 3560 | ||
| 3575 | |||
| 3576 | void * | 3561 | void * |
| 3577 | font_get_frame_data (struct frame *f, struct font_driver *driver) | 3562 | font_get_frame_data (struct frame *f, Lisp_Object driver) |
| 3578 | { | 3563 | { |
| 3579 | struct font_data_list *list; | 3564 | Lisp_Object val = assq_no_quit (driver, f->font_data); |
| 3580 | 3565 | ||
| 3581 | for (list = f->font_data_list; list; list = list->next) | 3566 | return NILP (val) ? NULL : XSAVE_POINTER (XCDR (val), 0); |
| 3582 | if (list->driver == driver) | ||
| 3583 | break; | ||
| 3584 | if (! list) | ||
| 3585 | return NULL; | ||
| 3586 | return list->data; | ||
| 3587 | } | 3567 | } |
| 3588 | 3568 | ||
| 3569 | #endif /* HAVE_XFT || HAVE_FREETYPE */ | ||
| 3589 | 3570 | ||
| 3590 | /* Sets attributes on a font. Any properties that appear in ALIST and | 3571 | /* Sets attributes on a font. Any properties that appear in ALIST and |
| 3591 | BOOLEAN_PROPERTIES or NON_BOOLEAN_PROPERTIES are set on the font. | 3572 | BOOLEAN_PROPERTIES or NON_BOOLEAN_PROPERTIES are set on the font. |