aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2007-04-25 12:06:25 +0000
committerKenichi Handa2007-04-25 12:06:25 +0000
commit4582742d0b4d948836dd40aa833833d3c935d843 (patch)
treeb4fbcb37cfa6335fc31c4e45692a950f5176d90d /src
parent733fd013f650474c6104b6b4f05c1db52a068a9b (diff)
downloademacs-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.c57
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);