Mercurial > emacs
comparison src/font.c @ 96136:73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
font.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 20 Jun 2008 23:27:07 +0000 |
parents | 86e3f462b0c2 |
children | 5f7a1e1f15c4 |
comparison
equal
deleted
inserted
replaced
96135:65e4e649a274 | 96136:73e422173a87 |
---|---|
3731 The return value is a list of the form | 3731 The return value is a list of the form |
3732 | 3732 |
3733 \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) | 3733 \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) |
3734 | 3734 |
3735 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values | 3735 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values |
3736 compatible with `set-face-attribute'. | 3736 compatible with `set-face-attribute'. Some of these key-attribute pairs |
3737 may be omitted from the list if they are not specified by FONT. | |
3737 | 3738 |
3738 The optional argument FRAME specifies the frame that the face attributes | 3739 The optional argument FRAME specifies the frame that the face attributes |
3739 are to be displayed on. If omitted, the selected frame is used. */) | 3740 are to be displayed on. If omitted, the selected frame is used. */) |
3740 (font, frame) | 3741 (font, frame) |
3741 Lisp_Object font, frame; | 3742 Lisp_Object font, frame; |
3742 { | 3743 { |
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; |
3749 CHECK_LIVE_FRAME (frame); | 3751 CHECK_LIVE_FRAME (frame); |
3750 f = XFRAME (frame); | 3752 f = XFRAME (frame); |
3760 signal_error ("Invalid font name", name); | 3762 signal_error ("Invalid font name", name); |
3761 } | 3763 } |
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)) |
3768 | 3769 { |
3769 plist[2] = QCheight; | 3770 plist[n++] = QCfamily; |
3771 plist[n++] = SYMBOL_NAME (val); | |
3772 } | |
3773 | |
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)); |
3781 | 3786 } |
3782 plist[4] = QCweight; | 3787 |
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)) |
3785 | 3790 { |
3786 plist[6] = QCslant; | 3791 plist[n++] = QCweight; |
3792 plist[n++] = val; | |
3793 } | |
3794 | |
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)) |
3789 | 3797 { |
3790 plist[8] = QCwidth; | 3798 plist[n++] = QCslant; |
3799 plist[n++] = val; | |
3800 } | |
3801 | |
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)) |
3793 | 3804 { |
3794 return Flist (10, plist); | 3805 plist[n++] = QCwidth; |
3806 plist[n++] = val; | |
3807 } | |
3808 | |
3809 return Flist (n, plist); | |
3795 } | 3810 } |
3796 | 3811 |
3797 #endif | 3812 #endif |
3798 | 3813 |
3799 DEFUN ("font-put", Ffont_put, Sfont_put, 3, 3, 0, | 3814 DEFUN ("font-put", Ffont_put, Sfont_put, 3, 3, 0, |