diff options
Diffstat (limited to 'src/font.c')
| -rw-r--r-- | src/font.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/font.c b/src/font.c index 6247eeca948..ad601177b50 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -2819,7 +2819,7 @@ font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) | |||
| 2819 | struct font_driver_list *driver_list; | 2819 | struct font_driver_list *driver_list; |
| 2820 | Lisp_Object objlist, size, val, font_object; | 2820 | Lisp_Object objlist, size, val, font_object; |
| 2821 | struct font *font; | 2821 | struct font *font; |
| 2822 | int min_width, height; | 2822 | int min_width, height, psize; |
| 2823 | 2823 | ||
| 2824 | eassert (FONT_ENTITY_P (entity)); | 2824 | eassert (FONT_ENTITY_P (entity)); |
| 2825 | size = AREF (entity, FONT_SIZE_INDEX); | 2825 | size = AREF (entity, FONT_SIZE_INDEX); |
| @@ -2846,12 +2846,19 @@ font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) | |||
| 2846 | } | 2846 | } |
| 2847 | } | 2847 | } |
| 2848 | 2848 | ||
| 2849 | font_object = driver_list->driver->open (f, entity, pixel_size); | 2849 | /* We always open a font of manageable size; i.e non-zero average |
| 2850 | if (!NILP (font_object)) | 2850 | width and height. */ |
| 2851 | ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size)); | 2851 | for (psize = pixel_size; ; psize++) |
| 2852 | { | ||
| 2853 | font_object = driver_list->driver->open (f, entity, psize); | ||
| 2854 | if (NILP (font_object)) | ||
| 2855 | return Qnil; | ||
| 2856 | font = XFONT_OBJECT (font_object); | ||
| 2857 | if (font->average_width > 0 && font->height > 0) | ||
| 2858 | break; | ||
| 2859 | } | ||
| 2860 | ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size)); | ||
| 2852 | FONT_ADD_LOG ("open", entity, font_object); | 2861 | FONT_ADD_LOG ("open", entity, font_object); |
| 2853 | if (NILP (font_object)) | ||
| 2854 | return Qnil; | ||
| 2855 | ASET (entity, FONT_OBJLIST_INDEX, | 2862 | ASET (entity, FONT_OBJLIST_INDEX, |
| 2856 | Fcons (font_object, AREF (entity, FONT_OBJLIST_INDEX))); | 2863 | Fcons (font_object, AREF (entity, FONT_OBJLIST_INDEX))); |
| 2857 | 2864 | ||
| @@ -3118,6 +3125,8 @@ font_find_for_lface (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec, int c) | |||
| 3118 | double pt = XINT (attrs[LFACE_HEIGHT_INDEX]); | 3125 | double pt = XINT (attrs[LFACE_HEIGHT_INDEX]); |
| 3119 | 3126 | ||
| 3120 | pixel_size = POINT_TO_PIXEL (pt / 10, FRAME_RES_Y (f)); | 3127 | pixel_size = POINT_TO_PIXEL (pt / 10, FRAME_RES_Y (f)); |
| 3128 | if (pixel_size < 1) | ||
| 3129 | pixel_size = 1; | ||
| 3121 | } | 3130 | } |
| 3122 | ASET (work, FONT_SIZE_INDEX, Qnil); | 3131 | ASET (work, FONT_SIZE_INDEX, Qnil); |
| 3123 | foundry[0] = AREF (work, FONT_FOUNDRY_INDEX); | 3132 | foundry[0] = AREF (work, FONT_FOUNDRY_INDEX); |