diff options
| author | Kenichi Handa | 2007-04-25 12:06:25 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2007-04-25 12:06:25 +0000 |
| commit | 4582742d0b4d948836dd40aa833833d3c935d843 (patch) | |
| tree | b4fbcb37cfa6335fc31c4e45692a950f5176d90d /src | |
| parent | 733fd013f650474c6104b6b4f05c1db52a068a9b (diff) | |
| download | emacs-4582742d0b4d948836dd40aa833833d3c935d843.tar.gz emacs-4582742d0b4d948836dd40aa833833d3c935d843.zip | |
(fontset_find_font): Pay attention to font size
specified for a font.
Diffstat (limited to 'src')
| -rw-r--r-- | src/fontset.c | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/src/fontset.c b/src/fontset.c index 279ecb56c03..c6aac929b2a 100644 --- a/src/fontset.c +++ b/src/fontset.c | |||
| @@ -583,6 +583,8 @@ fontset_find_font (fontset, c, face, id, fallback) | |||
| 583 | if (! fallback | 583 | if (! fallback |
| 584 | && enable_font_backend | 584 | && enable_font_backend |
| 585 | && EQ (base_fontset, Vdefault_fontset)) | 585 | && EQ (base_fontset, Vdefault_fontset)) |
| 586 | /* Extra one element is for an automatically added | ||
| 587 | font-def specifying only a script. */ | ||
| 586 | vec = Fmake_vector (make_number (ASIZE (elt) + 4), Qnil); | 588 | vec = Fmake_vector (make_number (ASIZE (elt) + 4), Qnil); |
| 587 | else | 589 | else |
| 588 | #endif /* not USE_FONT_BACKEND */ | 590 | #endif /* not USE_FONT_BACKEND */ |
| @@ -680,44 +682,49 @@ fontset_find_font (fontset, c, face, id, fallback) | |||
| 680 | /* ELT == [ FACE-ID FONT-INDEX FONT-DEF FONT-ENTITY FONT-OBJECT ] */ | 682 | /* ELT == [ FACE-ID FONT-INDEX FONT-DEF FONT-ENTITY FONT-OBJECT ] */ |
| 681 | Lisp_Object font_entity = AREF (elt, 3); | 683 | Lisp_Object font_entity = AREF (elt, 3); |
| 682 | Lisp_Object font_object = AREF (elt, 4); | 684 | Lisp_Object font_object = AREF (elt, 4); |
| 685 | Lisp_Object font_spec = AREF (font_def, 0); | ||
| 683 | int has_char; | 686 | int has_char; |
| 684 | 687 | ||
| 685 | if (NILP (font_entity) && ! NILP (AREF (font_def, 0))) | 688 | if (NILP (font_entity)) |
| 686 | { | 689 | { |
| 687 | Lisp_Object tmp = AREF (font_def, 0); | 690 | if (! FONT_SPEC_P (font_spec)) |
| 688 | Lisp_Object spec = Ffont_spec (0, NULL); | ||
| 689 | |||
| 690 | if (STRINGP (tmp)) | ||
| 691 | font_merge_old_spec (tmp, Qnil, Qnil, spec); | ||
| 692 | else | ||
| 693 | { | 691 | { |
| 694 | Lisp_Object family = AREF (tmp, 0); | 692 | /* FONT_SPEC is FONT-NAME or (FAMILY . REGISTRY). */ |
| 695 | Lisp_Object registry = AREF (tmp, 5);; | 693 | font_spec = Ffont_spec (0, NULL); |
| 694 | if (STRINGP (AREF (font_def, 0))) | ||
| 695 | font_merge_old_spec (AREF (font_def, 0), Qnil, Qnil, | ||
| 696 | font_spec); | ||
| 697 | else | ||
| 698 | { | ||
| 699 | Lisp_Object family = AREF (AREF (font_def, 0), 0); | ||
| 700 | Lisp_Object registry = AREF (AREF (font_def, 0), 5);; | ||
| 696 | 701 | ||
| 697 | font_merge_old_spec (Qnil, family, registry, spec); | 702 | font_merge_old_spec (Qnil, family, registry, font_spec); |
| 703 | } | ||
| 704 | ASET (font_def, 0, font_spec); | ||
| 698 | } | 705 | } |
| 699 | font_entity = font_find_for_lface (f, face->lface, spec); | 706 | font_entity = font_find_for_lface (f, face->lface, font_spec); |
| 700 | ASET (elt, 3, font_entity); | 707 | ASET (elt, 3, font_entity); |
| 701 | } | 708 | if (NILP (font_entity)) |
| 702 | else if (FONT_SPEC_P (font_entity)) | 709 | { |
| 703 | { | 710 | ASET (elt, 1, make_number (-1)); |
| 704 | font_entity = font_find_for_lface (f, face->lface, font_entity); | 711 | continue; |
| 705 | ASET (elt, 3, font_entity); | 712 | } |
| 706 | } | 713 | font_object = Qnil; |
| 707 | if (NILP (font_entity)) | ||
| 708 | { | ||
| 709 | ASET (elt, 1, make_number (-1)); | ||
| 710 | continue; | ||
| 711 | } | 714 | } |
| 712 | has_char = font_has_char (f, font_entity, c); | 715 | has_char = font_has_char (f, font_entity, c); |
| 713 | if (has_char == 0) | 716 | if (has_char == 0) |
| 714 | continue; | 717 | continue; |
| 715 | if (NILP (font_object)) | 718 | if (NILP (font_object)) |
| 716 | font_object = font_open_for_lface (f, face->lface, font_entity); | ||
| 717 | if (NILP (font_object)) | ||
| 718 | { | 719 | { |
| 719 | ASET (elt, 1, make_number (-1)); | 720 | font_object = font_open_for_lface (f, font_entity, |
| 720 | continue; | 721 | face->lface, font_spec); |
| 722 | ASET (elt, 4, font_object); | ||
| 723 | if (NILP (font_object)) | ||
| 724 | { | ||
| 725 | ASET (elt, 1, make_number (-1)); | ||
| 726 | continue; | ||
| 727 | } | ||
| 721 | } | 728 | } |
| 722 | ASET (elt, 1, make_number (0)); | 729 | ASET (elt, 1, make_number (0)); |
| 723 | ASET (elt, 4, font_object); | 730 | ASET (elt, 4, font_object); |