aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2012-10-24 00:42:29 +0900
committerKenichi Handa2012-10-24 00:42:29 +0900
commit7e70a15287ee1ae5461d47e5a96d6c455aefaf57 (patch)
treee57d62a1371a3fe3dce0aa0ef3ca2369f7d6fcd8 /src
parent6ec83f926d5ff699901fb530162d7f1bdfa85808 (diff)
downloademacs-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/ChangeLog8
-rw-r--r--src/font.c46
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 @@
12012-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
12012-10-19 Kazuhiro Ito <kzhr@d1.dion.ne.jp> (tiny change) 92012-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