aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChong Yidong2008-06-20 23:27:07 +0000
committerChong Yidong2008-06-20 23:27:07 +0000
commit5989ba2f87b231d9421ec13fb9e0811767921aa5 (patch)
tree84d1b59efdd4e77e1c4d802c33d9b3ce5acf8d21 /src
parenteaf1f6e7feeddf0ffac635cc846d12802353cfcd (diff)
downloademacs-5989ba2f87b231d9421ec13fb9e0811767921aa5.tar.gz
emacs-5989ba2f87b231d9421ec13fb9e0811767921aa5.zip
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
font.
Diffstat (limited to 'src')
-rw-r--r--src/font.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/font.c b/src/font.c
index d49a19acac0..f10235249f6 100644
--- a/src/font.c
+++ b/src/font.c
@@ -3733,7 +3733,8 @@ The return value is a list of the form
3733\(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) 3733\(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH)
3734 3734
3735where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values 3735where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values
3736compatible with `set-face-attribute'. 3736compatible with `set-face-attribute'. Some of these key-attribute pairs
3737may be omitted from the list if they are not specified by FONT.
3737 3738
3738The optional argument FRAME specifies the frame that the face attributes 3739The optional argument FRAME specifies the frame that the face attributes
3739are to be displayed on. If omitted, the selected frame is used. */) 3740are to be displayed on. If omitted, the selected frame is used. */)
@@ -3743,6 +3744,7 @@ are to be displayed on. If omitted, the selected frame is used. */)
3743 struct frame *f; 3744 struct frame *f;
3744 Lisp_Object plist[10]; 3745 Lisp_Object plist[10];
3745 Lisp_Object val; 3746 Lisp_Object val;
3747 int n = 0;
3746 3748
3747 if (NILP (frame)) 3749 if (NILP (frame))
3748 frame = selected_frame; 3750 frame = selected_frame;
@@ -3762,36 +3764,49 @@ are to be displayed on. If omitted, the selected frame is used. */)
3762 else if (! FONTP (font)) 3764 else if (! FONTP (font))
3763 signal_error ("Invalid font object", font); 3765 signal_error ("Invalid font object", font);
3764 3766
3765 plist[0] = QCfamily;
3766 val = AREF (font, FONT_FAMILY_INDEX); 3767 val = AREF (font, FONT_FAMILY_INDEX);
3767 plist[1] = NILP (val) ? Qnil : SYMBOL_NAME (val); 3768 if (! NILP (val))
3769 {
3770 plist[n++] = QCfamily;
3771 plist[n++] = SYMBOL_NAME (val);
3772 }
3768 3773
3769 plist[2] = QCheight;
3770 val = AREF (font, FONT_SIZE_INDEX); 3774 val = AREF (font, FONT_SIZE_INDEX);
3771 if (INTEGERP (val)) 3775 if (INTEGERP (val))
3772 { 3776 {
3773 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX); 3777 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX);
3774 int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy; 3778 int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy;
3775 plist[3] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi)); 3779 plist[n++] = QCheight;
3780 plist[n++] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi));
3776 } 3781 }
3777 else if (FLOATP (val)) 3782 else if (FLOATP (val))
3778 plist[3] = make_number (10 * (int) XFLOAT_DATA (val)); 3783 {
3779 else 3784 plist[n++] = QCheight;
3780 plist[3] = Qnil; 3785 plist[n++] = make_number (10 * (int) XFLOAT_DATA (val));
3786 }
3781 3787
3782 plist[4] = QCweight;
3783 val = FONT_WEIGHT_FOR_FACE (font); 3788 val = FONT_WEIGHT_FOR_FACE (font);
3784 plist[5] = NILP (val) ? Qnormal : val; 3789 if (! NILP (val))
3790 {
3791 plist[n++] = QCweight;
3792 plist[n++] = val;
3793 }
3785 3794
3786 plist[6] = QCslant;
3787 val = FONT_SLANT_FOR_FACE (font); 3795 val = FONT_SLANT_FOR_FACE (font);
3788 plist[7] = NILP (val) ? Qnormal : val; 3796 if (! NILP (val))
3797 {
3798 plist[n++] = QCslant;
3799 plist[n++] = val;
3800 }
3789 3801
3790 plist[8] = QCwidth;
3791 val = FONT_WIDTH_FOR_FACE (font); 3802 val = FONT_WIDTH_FOR_FACE (font);
3792 plist[9] = NILP (val) ? Qnormal : val; 3803 if (! NILP (val))
3804 {
3805 plist[n++] = QCwidth;
3806 plist[n++] = val;
3807 }
3793 3808
3794 return Flist (10, plist); 3809 return Flist (n, plist);
3795} 3810}
3796 3811
3797#endif 3812#endif