diff options
| author | Kenichi Handa | 2012-10-24 00:42:29 +0900 |
|---|---|---|
| committer | Kenichi Handa | 2012-10-24 00:42:29 +0900 |
| commit | 7e70a15287ee1ae5461d47e5a96d6c455aefaf57 (patch) | |
| tree | e57d62a1371a3fe3dce0aa0ef3ca2369f7d6fcd8 /src | |
| parent | 6ec83f926d5ff699901fb530162d7f1bdfa85808 (diff) | |
| download | emacs-7e70a15287ee1ae5461d47e5a96d6c455aefaf57.tar.gz emacs-7e70a15287ee1ae5461d47e5a96d6c455aefaf57.zip | |
Make face-font-rescale-alist work correctly for non-ASCII fonts.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 8 | ||||
| -rw-r--r-- | src/font.c | 46 |
2 files changed, 32 insertions, 22 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 5a1b4a5d8ee..fbf22c35e4c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,11 @@ | |||
| 1 | 2012-10-23 Kenichi Handa <handa@gnu.org> | ||
| 2 | |||
| 3 | The following change is to make face-font-rescale-alist work | ||
| 4 | correctly for non-ASCII fonts. | ||
| 5 | |||
| 6 | * font.c (font_open_entity): Don't handle Vface_font_rescale_alist. | ||
| 7 | (font_open_for_lface): Handle Vface_font_rescale_alist. | ||
| 8 | |||
| 1 | 2012-10-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp> (tiny change) | 9 | 2012-10-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp> (tiny change) |
| 2 | 10 | ||
| 3 | * font.c (Ffont_at): Fix previous change. | 11 | * font.c (Ffont_at): Fix previous change. |
diff --git a/src/font.c b/src/font.c index 7cb4149ac4e..bff2356d6ca 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -2816,14 +2816,11 @@ font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) | |||
| 2816 | Lisp_Object objlist, size, val, font_object; | 2816 | Lisp_Object objlist, size, val, font_object; |
| 2817 | struct font *font; | 2817 | struct font *font; |
| 2818 | int min_width, height; | 2818 | int min_width, height; |
| 2819 | int scaled_pixel_size = pixel_size; | ||
| 2820 | 2819 | ||
| 2821 | eassert (FONT_ENTITY_P (entity)); | 2820 | eassert (FONT_ENTITY_P (entity)); |
| 2822 | size = AREF (entity, FONT_SIZE_INDEX); | 2821 | size = AREF (entity, FONT_SIZE_INDEX); |
| 2823 | if (XINT (size) != 0) | 2822 | if (XINT (size) != 0) |
| 2824 | scaled_pixel_size = pixel_size = XINT (size); | 2823 | pixel_size = XINT (size); |
| 2825 | else if (CONSP (Vface_font_rescale_alist)) | ||
| 2826 | scaled_pixel_size = pixel_size * font_rescale_ratio (entity); | ||
| 2827 | 2824 | ||
| 2828 | val = AREF (entity, FONT_TYPE_INDEX); | 2825 | val = AREF (entity, FONT_TYPE_INDEX); |
| 2829 | for (driver_list = f->font_driver_list; | 2826 | for (driver_list = f->font_driver_list; |
| @@ -2845,7 +2842,7 @@ font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) | |||
| 2845 | } | 2842 | } |
| 2846 | } | 2843 | } |
| 2847 | 2844 | ||
| 2848 | font_object = driver_list->driver->open (f, entity, scaled_pixel_size); | 2845 | font_object = driver_list->driver->open (f, entity, pixel_size); |
| 2849 | if (!NILP (font_object)) | 2846 | if (!NILP (font_object)) |
| 2850 | ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size)); | 2847 | ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size)); |
| 2851 | FONT_ADD_LOG ("open", entity, font_object); | 2848 | FONT_ADD_LOG ("open", entity, font_object); |
| @@ -3230,31 +3227,36 @@ font_open_for_lface (FRAME_PTR f, Lisp_Object entity, Lisp_Object *attrs, Lisp_O | |||
| 3230 | if (INTEGERP (AREF (entity, FONT_SIZE_INDEX)) | 3227 | if (INTEGERP (AREF (entity, FONT_SIZE_INDEX)) |
| 3231 | && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) | 3228 | && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) |
| 3232 | size = XINT (AREF (entity, FONT_SIZE_INDEX)); | 3229 | size = XINT (AREF (entity, FONT_SIZE_INDEX)); |
| 3233 | else if (FONT_SPEC_P (spec) && ! NILP (AREF (spec, FONT_SIZE_INDEX))) | ||
| 3234 | size = font_pixel_size (f, spec); | ||
| 3235 | else | 3230 | else |
| 3236 | { | 3231 | { |
| 3237 | double pt; | 3232 | if (FONT_SPEC_P (spec) && ! NILP (AREF (spec, FONT_SIZE_INDEX))) |
| 3238 | if (INTEGERP (attrs[LFACE_HEIGHT_INDEX])) | 3233 | size = font_pixel_size (f, spec); |
| 3239 | pt = XINT (attrs[LFACE_HEIGHT_INDEX]); | ||
| 3240 | else | 3234 | else |
| 3241 | { | 3235 | { |
| 3242 | struct face *def = FACE_FROM_ID (f, DEFAULT_FACE_ID); | 3236 | double pt; |
| 3243 | Lisp_Object height = def->lface[LFACE_HEIGHT_INDEX]; | 3237 | if (INTEGERP (attrs[LFACE_HEIGHT_INDEX])) |
| 3244 | eassert (INTEGERP (height)); | 3238 | pt = XINT (attrs[LFACE_HEIGHT_INDEX]); |
| 3245 | pt = XINT (height); | 3239 | else |
| 3246 | } | 3240 | { |
| 3241 | struct face *def = FACE_FROM_ID (f, DEFAULT_FACE_ID); | ||
| 3242 | Lisp_Object height = def->lface[LFACE_HEIGHT_INDEX]; | ||
| 3243 | eassert (INTEGERP (height)); | ||
| 3244 | pt = XINT (height); | ||
| 3245 | } | ||
| 3247 | 3246 | ||
| 3248 | pt /= 10; | 3247 | pt /= 10; |
| 3249 | size = POINT_TO_PIXEL (pt, f->resy); | 3248 | size = POINT_TO_PIXEL (pt, f->resy); |
| 3250 | #ifdef HAVE_NS | 3249 | #ifdef HAVE_NS |
| 3251 | if (size == 0) | 3250 | if (size == 0) |
| 3252 | { | 3251 | { |
| 3253 | Lisp_Object ffsize = get_frame_param (f, Qfontsize); | 3252 | Lisp_Object ffsize = get_frame_param (f, Qfontsize); |
| 3254 | size = NUMBERP (ffsize) ? POINT_TO_PIXEL (XINT (ffsize), f->resy) : 0; | 3253 | size = NUMBERP (ffsize) ? POINT_TO_PIXEL (XINT (ffsize), f->resy) : 0; |
| 3255 | } | 3254 | } |
| 3256 | #endif | 3255 | #endif |
| 3256 | } | ||
| 3257 | size *= font_rescale_ratio (entity); | ||
| 3257 | } | 3258 | } |
| 3259 | |||
| 3258 | return font_open_entity (f, entity, size); | 3260 | return font_open_entity (f, entity, size); |
| 3259 | } | 3261 | } |
| 3260 | 3262 | ||