aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
authorEli Zaretskii2013-05-01 20:47:50 +0300
committerEli Zaretskii2013-05-01 20:47:50 +0300
commitb1cb82edff21abfefd68af18370dddfd8cc1fec0 (patch)
treefd8d8a1e1d99af024b52158a471457fc796238bc /src/font.c
parent10f81f3ac90f98160f611787e20dcad96bb500e9 (diff)
parent2640d52e4e7873e41b0f0f1144177f84c345917e (diff)
downloademacs-b1cb82edff21abfefd68af18370dddfd8cc1fec0.tar.gz
emacs-b1cb82edff21abfefd68af18370dddfd8cc1fec0.zip
Merge from trunk.
Diffstat (limited to 'src/font.c')
-rw-r--r--src/font.c21
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);